<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7243019</id><updated>2012-01-29T09:12:05.931+01:00</updated><category term='Windows Mobile'/><category term='Visual Studio'/><category term='SQL Server Compact Edition'/><category term='Codecamp'/><category term='Windows Mobile 6'/><category term='CATdotNET.org'/><category term='Exchange'/><category term='Visual Studio 2005'/><category term='desarrolloMobile.NET'/><category term='Service Pack'/><category term='Office Mobile 2007'/><category term='MarketPlace'/><category term='PowerToys'/><category term='Excepciones'/><category term='IDE'/><category term='Compact WCF'/><category term='Huron'/><category term='Origami'/><category term='NDoc'/><category term='General'/><category term='Documentación'/><category term='.NET Compact Framework'/><category term='Eventos'/><category term='dotNetManía'/><category term='Comunidad'/><category term='Android'/><category term='Visual C#'/><category term='SandCastle'/><category term='Windows Vista'/><category term='Local Server Framework'/><category term='Emuladores'/><category term='MVP'/><category term='MS Bluetooth Stack'/><category term='Smart Client Guidance'/><category term='API'/><category term='Interoperabilidad'/><category term='Widgets'/><category term='Tagged'/><category term='SDK'/><category term='Remote Logger'/><category term='Orcas'/><category term='MEDC'/><category term='Device Center'/><category term='WCF'/><category term='Sync Framework'/><category term='MPX'/><category term='User Interfaces'/><category term='GPS'/><category term='ActiveSync'/><category term='Bluetooth'/><category term='Opinión'/><category term='Seguridad'/><category term='FaultException'/><category term='Enlaces'/><category term='CodePlex'/><title type='text'>josemiguel.torres</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default?start-index=101&amp;max-results=100'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>154</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7243019.post-8090321669383876278</id><published>2010-11-04T07:00:00.001+01:00</published><updated>2010-11-04T07:01:37.530+01:00</updated><title type='text'>Trasladado...</title><content type='html'>Me he trasladado a: &lt;a href="http://josemigueltorres.net"&gt;http://josemigueltorres.net&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos!!!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8090321669383876278?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://josemigueltorres.net/boresight' title='Trasladado...'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8090321669383876278/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8090321669383876278' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8090321669383876278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8090321669383876278'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2010/11/trasladado.html' title='Trasladado...'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-4276455947805040379</id><published>2009-11-14T23:00:00.001+01:00</published><updated>2009-11-14T23:00:21.147+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Actualizando HTC Dream de Movistar a Cupcake (Android 1.5)</title><content type='html'>&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 class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-4276455947805040379?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/4276455947805040379/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=4276455947805040379' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4276455947805040379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4276455947805040379'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/11/actualizando-htc-dream-de-movistar.html' title='Actualizando HTC Dream de Movistar a Cupcake (Android 1.5)'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3105130480858766634</id><published>2009-11-04T23:20:00.001+01:00</published><updated>2009-11-04T23:20:42.499+01:00</updated><title type='text'>SQL Server –&gt; Sync &lt;- SQL Azure = Proyecto Huron muestra sus cartas!</title><content type='html'>&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" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917427/500x343.aspx" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917429/500x343.aspx" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917428/365x375.aspx" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3105130480858766634?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3105130480858766634/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3105130480858766634' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3105130480858766634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3105130480858766634'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/11/sql-server-sync-sql-azure-proyecto.html' title='SQL Server –&amp;gt; Sync &amp;lt;- SQL Azure = Proyecto Huron muestra sus cartas!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-5538471369432512131</id><published>2009-10-30T00:12:00.002+01:00</published><updated>2009-10-30T00:15:49.165+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><title type='text'>GroupBy con LINQ to Objects</title><content type='html'>&lt;p align="justify"&gt;El agrupamiento de un conjunto de datos mediante LINQ, ya sea mediante la extensión de &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/9eekhta0%28VS.80%29.aspx" target="_blank"&gt;IEnumerable&lt;/a&gt;&lt;/strong&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ísticas las cuales me gustaría comentar aquí.&lt;/p&gt;  &lt;p align="justify"&gt;Para explicar un poco las posibilidades del agrupamiento mediante la extensión &lt;strong&gt;GroupBy&lt;/strong&gt; voy a exponer un ejemplo con LINQ to Objects y para ello, primero, definiremos una clase sencilla que represente la entidad &lt;em&gt;Cliente&lt;/em&gt;. &lt;/p&gt;  &lt;div&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Cliente&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; IdProvincia { get; set; }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; Tipo { get; set; }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; Nombre { get; set; }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;decimal&lt;/span&gt; VolumenNegocio { get; set; }&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;override&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;           {&lt;br /&gt;               &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"\t\t-&amp;gt; Cliente: {0} - Provincia:{1} - Tipo: {2} - Vol.:{3}e\n"&lt;/span&gt;,&lt;br /&gt;                                    Nombre, IdProvincia, Tipo,VolumenNegocio);&lt;br /&gt;           }&lt;br /&gt;       }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;Como se puede observar no es más que una clase con 4 propiedades implícitas y el método ToString() sobrescrito para poder mostrar por la consola la información de un objeto iterado del tipo &lt;em&gt;Cliente&lt;/em&gt;.&lt;/p&gt;Vamos a generar una lista de clientes mediante una lista genérica de la siguiente forma:&lt;br /&gt;&lt;div&gt;&lt;br /&gt; &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//inicializamos lista de clientes&lt;/span&gt;&lt;br /&gt;var list = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; List&amp;lt;Cliente&amp;gt;&lt;br /&gt;              {&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente1"&lt;/span&gt;, Tipo = 10, VolumenNegocio = 100.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente2"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 20.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente3"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 230.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente4"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 500.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente5"&lt;/span&gt;, Tipo = 30, VolumenNegocio = 10.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente6"&lt;/span&gt;, Tipo = 10, VolumenNegocio = 750.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente7"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 340.00m},&lt;br /&gt;                  &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente8"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 170.00m}&lt;br /&gt;              };&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;La intención es agrupar esta lista de clientes por la provincia, a la cual pertenecen, a través de la propiedad &lt;em&gt;IdProvincia&lt;/em&gt; del tipo &lt;strong&gt;int&lt;/strong&gt;. Para ello, en primer lugar, echaremos un vistazo a la extensión &lt;strong&gt;GroupBy&lt;/strong&gt; que incorpora la clase &lt;strong&gt;System.Linq.Enumerable&lt;/strong&gt;. Dicha extensión presenta las siguientes sobrecargas:&lt;br /&gt;&lt;div&gt;&lt;br /&gt; &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&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;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;En todas ellas existen un denominador común, el parámetro &lt;strong&gt;keySelector&lt;/strong&gt; del tipo &lt;strong&gt;&lt;em&gt;Func&amp;lt;TSource, TElement&amp;gt;&lt;/em&gt;&lt;/strong&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;strong&gt;IEnumerable&amp;lt;TSource&amp;gt;&lt;/strong&gt; si se especifica el parámetro &lt;strong&gt;resultSelector&lt;/strong&gt; (tipo &lt;strong&gt;Func&amp;lt;TSource, TKey&amp;gt;&lt;/strong&gt;) o bien un objeto del tipo &lt;strong&gt;IEnumerable&amp;lt;IGroupingKey&amp;lt;TKey, TElement&amp;gt;&amp;gt;&lt;/strong&gt; para todos los demás. Vamos  centrarnos en éste último por ahora.&lt;/p&gt;&lt;h2&gt;Manejando resultados &lt;strong&gt;IEnumerable&amp;lt;IGroupingKey&amp;lt;TKey, TElement&amp;gt;&amp;gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p align="justify"&gt;Si el agrupamiento se realiza sobre una lista de elementos iterativos o “&lt;em&gt;IEnumerables&lt;/em&gt;” es obvio que el resultado, otra lista de subelementos agrupados por una clave del tipo TKey, sea otra lista de elementos iterativos de ahí que el tipo resultante sea IEnumerable&amp;lt;T&amp;gt;. La singularidad esta en el tipo genérico en la iteración del valor retornado el cual es del tipo &lt;strong&gt;IGroupingKey&amp;lt;TKey,TElement&amp;gt;&lt;/strong&gt; y vamos a ver el porqué. Lo que LINQ hará ante un GroupBy es realizar un recorrido completo por la lista y seleccionará todos los elementos del tipo TElement de una misma clave (TKey). Por consiguiente el resultado será una lista del agrupamiento de elementos definidos por la interfaz IGroupingKey&amp;lt;TKey,TElement&amp;gt;, en la que almacenará la clave y el conjunto de elemento agrupados por el valor de dicha clave, respetivamente en cada tipo gené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;em&gt;Cliente.IdProvincia&lt;/em&gt;.  Para ello definiremos una variable del tipo &lt;strong&gt;IEnumerable&amp;lt;IGroupingKey&amp;lt;int,Cliente&amp;gt;&lt;/strong&gt; pues el tipo de datos de agrupamiento es del tipo &lt;strong&gt;int&lt;/strong&gt; (propiedad &lt;em&gt;IdProvincia&lt;/em&gt;) y el elemento a agrupar es del tipo &lt;strong&gt;&lt;em&gt;Cliente&lt;/em&gt;&lt;/strong&gt;, por tanto:&lt;/p&gt;&lt;div&gt;&lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;IEnumerable&amp;lt;IGrouping&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, Cliente&amp;gt;&amp;gt; groupByProv =&lt;br /&gt;   from cliente &lt;span style="color: rgb(0, 0, 255);"&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; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&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; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provincia {0}, {1} clientes"&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://lh6.ggpht.com/_i0a6wx1FjwE/SuohV654jtI/AAAAAAAAAII/IxGm87wmvIc/s1600-h/image%5B8%5D.png"&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh5.ggpht.com/_i0a6wx1FjwE/SuohWLqO-kI/AAAAAAAAAIM/7bW0R_twbrY/image_thumb%5B2%5D.png?imgmax=800" width="244" border="0" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="justify"&gt;La variable implícita cProv posee tanto la clave utilizada (&lt;em&gt;IdProvinicia&lt;/em&gt;) como la iteración de los clientes agrupados por dicha propiedad, de forma que podría ser recorrida de igual forma.&lt;/p&gt;&lt;div&gt;&lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provincia {0}, {1} clientes"&lt;/span&gt;, cProv.Key, cProv.Count()));&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;(var cliente &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; cProv)&lt;br /&gt;       Console.WriteLine(cliente.ToString());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Y es resultado:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_i0a6wx1FjwE/SuohW03pTiI/AAAAAAAAAIQ/mXXYUkzZwG8/s1600-h/image%5B11%5D.png"&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh3.ggpht.com/_i0a6wx1FjwE/SuohXVG_6cI/AAAAAAAAAIU/_Nfbh8tJx9w/image_thumb%5B3%5D.png?imgmax=800" width="244" border="0" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p align="justify"&gt;Sin embargo podríamos rizar aún más el rizo y agrupar, de nuevo, cada una de las agrupaciones por el tipo de cliente. De esta forma tendríamos una primera agrupación según la &lt;em&gt;IdProvincia&lt;/em&gt; del cliente y por cada uno, una agrupació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; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color: rgb(0, 128, 0);"&gt;//cProv es del tipo IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;     Console.WriteLine(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provincia {0} "&lt;/span&gt;, cProv.Key));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt;     IEnumerable&amp;lt;IGrouping&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;, Cliente&amp;gt;&amp;gt; groupByTipo = cProv.GroupBy(cliente =&amp;gt; cliente.Tipo);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cTipo &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByTipo)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   9:&lt;/span&gt;         Console.WriteLine(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"\tTipo {0} \n"&lt;/span&gt;, cTipo.Key));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  11:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cliente &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; cTipo)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  12:&lt;/span&gt;             Console.WriteLine(cliente.ToString());&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;Lo que hemos hecho en el ejemplo anterior es aprovechar la iteración del primer agrupamiento para volver a generar un extensión GroupBy pero en esta ocasión con la propiedad &lt;em&gt;Cliente.Tipo&lt;/em&gt; (&lt;strong&gt;int&lt;/strong&gt;) como &lt;strong&gt;TKey&lt;/strong&gt;. El resultado:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_i0a6wx1FjwE/SuohX9nqIjI/AAAAAAAAAIY/bk3GJcpPV00/s1600-h/image%5B14%5D.png"&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh4.ggpht.com/_i0a6wx1FjwE/SuohYawEjNI/AAAAAAAAAIc/doIFjDKwFW0/image_thumb%5B4%5D.png?imgmax=800" width="244" border="0" height="235" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;h2&gt;Manejando resultados &lt;strong&gt;IEnumerable&amp;lt;TSource&amp;gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p align="justify"&gt;Como comenté anteriormente, GroupBy puede devolver una iteración de tipo &lt;strong&gt;IEnumerable&amp;lt;TSource&amp;gt;&lt;/strong&gt; indicando en la sobrecarga el parámetro &lt;strong&gt;resultSelector&lt;/strong&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úmero total de clientes, el valor máximo, mínimo y medio de la propiedad &lt;em&gt;Cliente.VolumenNegocio&lt;/em&gt; (&lt;strong&gt;decimal&lt;/strong&gt;) de modo que nos ofrecerá información, por cada provincia, de los valores máximo, mí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; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; System.Linq.Enumerable.GroupBy&amp;lt;TSource, TKey, TResult&amp;gt;(&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt;    &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt; System.Collections.Generic.IEnumerable&amp;lt;TSource&amp;gt;, &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;    System.Func&amp;lt;TSource,TKey&amp;gt;, &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&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;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La implementación será:&lt;/div&gt;&lt;div&gt;&lt;br /&gt; &lt;div   style="border-style: none; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; var groupByInfo = list.GroupBy(&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt;     cliente =&amp;gt; cliente.IdProvincia, &lt;span style="color: rgb(0, 128, 0);"&gt;//seguimos con el agrupamiento por provinicia&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;     (provincia, clientes) =&amp;gt; &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;//retornamos un tipo anónimo&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt;             &lt;span style="color: rgb(0, 128, 0);"&gt;//con info sobre el agrupamiento&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;             Key = provincia,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;             Count = clientes.Count(),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt;             Min = clientes.Min(c =&amp;gt; c.VolumenNegocio),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   9:&lt;/span&gt;             Max = clientes.Max(c =&amp;gt; c.VolumenNegocio),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  10:&lt;/span&gt;             Avg = clientes.Average(c =&amp;gt; c.VolumenNegocio)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  11:&lt;/span&gt;         });&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;El primer lugar, el tipo de la iteración de retorno es del &lt;strong&gt;tipo anónimo&lt;/strong&gt; y es por ello que nos basamos en una variable implícitamente tipada (&lt;strong&gt;var&lt;/strong&gt;). El primer parámetro (línea 2) es del tipo &lt;strong&gt;keySelector&lt;/strong&gt; que vimos anteriormente y como dije es común en todas las sobrecargas pues es el valor clave de agrupamiento. Seguidamente el segundo parámetro (líneas 3-11), del tipo &lt;strong&gt;Func&amp;lt;int,IEnumerable&amp;lt;Cliente&amp;gt;,anonymous type&amp;gt;&lt;/strong&gt; es donde se proyectará 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; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var res &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByInfo)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt;     Console.WriteLine(&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provinicia:{0}\n\tCount:{1}\n\tMin Volumen:{2}\n\tMax Volumen:{3}\n\tAvg:{4}"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre face="consolas,'Courier New',courier,monospace" size="8pt" style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;                       , res.Key, res.Count, res.Min, res.Max, res.Avg));&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;En total 3 iteraciones con sus respectivas “estadísticas”:&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_i0a6wx1FjwE/SuohYxNBSaI/AAAAAAAAAIg/ndCm-yAkUJA/s1600-h/image%5B20%5D.png"&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh6.ggpht.com/_i0a6wx1FjwE/SuohZbdaYxI/AAAAAAAAAIk/he71Lx-QNUE/image_thumb%5B6%5D.png?imgmax=800" width="244" border="0" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;El código completo:&lt;/p&gt;&lt;div   style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; height: 288px; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&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,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;namespace&lt;/span&gt; LINQGroupingBy&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Program&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Main(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: rgb(0, 128, 0);"&gt;//Ejemplo para LINQ to Objects&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 128, 0);"&gt;//inicializamos lista de clientes&lt;/span&gt;&lt;br /&gt;           var list = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; List&amp;lt;Cliente&amp;gt;&lt;br /&gt;                          {&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente1"&lt;/span&gt;, Tipo = 10, VolumenNegocio = 100.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente2"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 20.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente3"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 230.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente4"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 500.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente5"&lt;/span&gt;, Tipo = 30, VolumenNegocio = 10.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente6"&lt;/span&gt;, Tipo = 10, VolumenNegocio = 750.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente7"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 340.00m},&lt;br /&gt;                              &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color: rgb(0, 96, 128);"&gt;"Cliente8"&lt;/span&gt;, Tipo = 20, VolumenNegocio = 170.00m}&lt;br /&gt;                          };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 128, 0);"&gt;//tambien se puede expresar como:&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 128, 0);"&gt;//IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt; groupByProv = &lt;/span&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 128, 0);"&gt;//    from cliente in list group cliente by cliente.IdProvincia;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provincia {0}, {1} clientes"&lt;/span&gt;, cProv.Key, cProv.Count()));&lt;br /&gt;&lt;br /&gt;               &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;(var cliente &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provincia {0} "&lt;/span&gt;, cProv.Key));&lt;br /&gt;&lt;br /&gt;               IEnumerable&amp;lt;IGrouping&amp;lt;&lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cTipo &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByTipo)&lt;br /&gt;               {&lt;br /&gt;                   Console.WriteLine(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"\tTipo {0} \n"&lt;/span&gt;, cTipo.Key));&lt;br /&gt;&lt;br /&gt;                   &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var cliente &lt;span style="color: rgb(0, 0, 255);"&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: rgb(0, 128, 0);"&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: rgb(0, 128, 0);"&gt;//seguimos con el agrupamiento por provinicia&lt;/span&gt;&lt;br /&gt;               (provincia, clientes) =&amp;gt; &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;//retornamos un tipo anónimo&lt;/span&gt;&lt;br /&gt;                   {&lt;br /&gt;                       &lt;span style="color: rgb(0, 128, 0);"&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: rgb(0, 128, 0);"&gt;//mostramos los resultados&lt;/span&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt; (var res &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; groupByInfo)&lt;br /&gt;               Console.WriteLine(&lt;br /&gt;                   &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"Provinicia:{0}\n\tCount:{1}\n\tMin Volumen:{2}\n\tMax Volumen:{3}\n\tAvg:{4}"&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: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Cliente&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; IdProvincia { get; set; }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; Tipo { get; set; }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; Nombre { get; set; }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;decimal&lt;/span&gt; VolumenNegocio { get; set; }&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;override&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;           {&lt;br /&gt;               &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(0, 96, 128);"&gt;"\t\t-&amp;gt; Cliente: {0} - Provincia:{1} - Tipo: {2} - Vol.:{3}e\n"&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;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-5538471369432512131?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/5538471369432512131/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=5538471369432512131' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5538471369432512131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5538471369432512131'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/10/groupby-con-linq-to-objects.html' title='GroupBy con LINQ to Objects'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_i0a6wx1FjwE/SuohWLqO-kI/AAAAAAAAAIM/7bW0R_twbrY/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3268062986515610033</id><published>2009-10-25T22:20:00.001+01:00</published><updated>2009-10-25T22:20:22.633+01:00</updated><title type='text'>Un nuevo Bluetooth sólo consumirá una pila de reloj en todo un año</title><content type='html'>&lt;a href=http://www.gizmodo.es/2009/10/19/un-nuevo-bluetooth-solo-consumira-una-pila-de-reloj-en-todo-un-ano.html&gt;Un nuevo Bluetooth sólo consumirá una pila de reloj en todo un año&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Posted using &lt;a href="http://sharethis.com"&gt;ShareThis&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3268062986515610033?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3268062986515610033/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3268062986515610033' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3268062986515610033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3268062986515610033'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/10/un-nuevo-bluetooth-solo-consumira-una.html' title='Un nuevo Bluetooth sólo consumirá una pila de reloj en todo un año'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-843878150333571234</id><published>2009-10-14T23:27:00.002+02:00</published><updated>2009-10-14T23:31:33.777+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MarketPlace'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Mas detalles sobre Marketplace Fase 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.wmexperts.com/sites/wmexperts.com/files/articleimages/Phil%20Nickinson/2009/04/WindowsMarketplace.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 157px; height: 136px;" src="http://www.wmexperts.com/sites/wmexperts.com/files/articleimages/Phil%20Nickinson/2009/04/WindowsMarketplace.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;img src="file:///C:/Users/JOSEMI%7E1/AppData/Local/Temp/moz-screenshot-7.png" alt="" /&gt;En la segunda fase planificada para Noviembre/Diciembre de este mismo año, &lt;span style="font-weight: bold;"&gt;Marketplace &lt;/span&gt;lanzará un entorno para PC. De esta forma podremos se internacionalizará la compra de aplicaciones entre clientes/desarrolladores de diferentes países mediante una nueva caraterística denominada "&lt;a href="http://www.modaco.com/content/windows-mobile-news/294147/windows-marketplace-for-mobile-for-pc-wm6-0/"&gt;geo selector&lt;/a&gt;". Además estaran disponibles centenares de aplicaciones de pago y gratuitas e incluirá soporte para dispositivos con &lt;span style="font-weight: bold;"&gt;Windows Mobile 6 / 6.1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.modaco.com/content/windows-mobile-news/294147/windows-marketplace-for-mobile-for-pc-wm6-0/"&gt;Fuente: modaco.com&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-843878150333571234?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/843878150333571234/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=843878150333571234' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/843878150333571234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/843878150333571234'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/10/mas-detalles-sobre-marketplace-fase-2.html' title='Mas detalles sobre Marketplace Fase 2'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-7105406708142025387</id><published>2009-10-10T18:36:00.001+02:00</published><updated>2009-10-10T18:36:41.656+02:00</updated><title type='text'>Listado de recursos de desarrollo para Windows Mobile 6.5</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;A continuación detallo un conjunto de recursos para Windows Mobile 6.X/6.5:&lt;/p&gt;  &lt;table class="MsoTableLightShadingAccent1" 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" cellspacing="0" cellpadding="0" width="763" border="1"&gt;&lt;thead&gt;     &lt;tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes; page-break-inside: avoid"&gt;       &lt;td 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Titulo&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Tipo&lt;/span&gt;&amp;#160; &lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Descripción&lt;/span&gt;&amp;#160;&lt;/b&gt;&amp;#160;&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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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;/td&gt;        &lt;td 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo&lt;/span&gt; &lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo&lt;/span&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;/span&gt; &lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" 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;"&gt;Como sacar el máximo provecho a las nuevas caracterí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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo&lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" 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;"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo&lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" 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;"&gt;Desarrollo de aplicaciones basadas en los Servicios Basados en Localizació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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" 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;"&gt;Aprende a utilizar las API’s de la plataforma &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Windows Mobile® para aumentar la experiencia de usuario.&lt;/span&gt;&lt;span lang="EN-US" 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;"&gt; &lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 5; page-break-inside: avoid"&gt;       &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo &lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Este artículo habla acerca de Microsoft® Win32® API y las APIs de Microsoft .NET Compact Framework (NETCF) para Windows Mobile® 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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Como empezar en el desarrollo de aplicaciones para Windows Mobile® utilizando las mismas herramientas que entornos Desktop con Microsoft® Visual Studio® 2008, y específicamente para Microsoft .NET Compact Framework 3.5. Tambié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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo &lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Comparación en la inserción y manipulación de filas utilizando Microsoft® SQL Server® Compact Edition 3.5 SP1, con un especial enfoque para el usuario acerca de có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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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;/td&gt;        &lt;td 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Una de las características más importantes de Microsoft® SQL Server® Compact Edition 3.5 SP1 es el soporte a Microsoft Synchronization Services for ADO.NET. Esta tecnología de sincronización permite la sincronización de diferentes orí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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 – 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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Artículo &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Case de estudio documentado de portación de aplicación iPhone a dispositivo Windows Mobile 6.5. &lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 10; page-break-inside: avoid"&gt;       &lt;td 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Blog post &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Detalles acerca de los pasos necesarios para la certificación de una aplicació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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Blog post &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" 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;"&gt;El Games API (GAPI) está 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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Codigo&lt;/span&gt; &lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Documentación&lt;/span&gt; &lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" 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;"&gt;Documentació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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Descarga&lt;/span&gt; &lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm; height: 59.8pt" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm; height: 59.8pt" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Descarga&lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm; height: 59.8pt" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Windows Mobile 6.5 Developer Tool Kit (documentación, emuladores,…).&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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;DVD &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 17; page-break-inside: avoid"&gt;       &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;&amp;#160;&lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;FAQ &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;&lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/bb495180.aspx"&gt;‘How Do I’ videos&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Videos&lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow: 19; page-break-inside: avoid"&gt;       &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Webcasts &amp;amp; Hands on labs&lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Webcasts &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Dos webcast especí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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 108.05pt; padding-top: 0cm" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 107.35pt; padding-top: 0cm" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Codigo &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 249.05pt; padding-top: 0cm" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&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 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" valign="top" width="172"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&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 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" valign="top" width="170"&gt;         &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: #365f91; mso-themecolor: accent1; mso-themeshade: 191"&gt;Descarga&lt;/span&gt; &lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;        &lt;td 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" valign="top" width="419"&gt;         &lt;p&gt;&lt;span lang="EN-US" style="font-size: 8pt; color: black; font-family: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Windows Mobile Line of Business Solution Accelerator es un ejemplo de aplicación Windows Mobile que muestra el uso de diferentes tecnologias (WCF, Sync Services, multi idioma, etc.) en una misma aplicació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 class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-7105406708142025387?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/7105406708142025387/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=7105406708142025387' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7105406708142025387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7105406708142025387'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/10/listado-de-recursos-de-desarrollo-para.html' title='Listado de recursos de desarrollo para Windows Mobile 6.5'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-5297358647360419811</id><published>2009-09-22T09:04:00.002+02:00</published><updated>2009-09-22T09:08:15.674+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codecamp'/><title type='text'>Code Camp Tarragona 2009 - Abierto los registros</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_i0a6wx1FjwE/Srh3yu5QnEI/AAAAAAAAAIA/dqhSz7GdyvE/s1600-h/INETA_logo.jpeg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5384185067986787394" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 200px; CURSOR: hand; HEIGHT: 139px" alt="" src="http://1.bp.blogspot.com/_i0a6wx1FjwE/Srh3yu5QnEI/AAAAAAAAAIA/dqhSz7GdyvE/s200/INETA_logo.jpeg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Después de publicar la lista de speakers, ya podeis empezar a registraros al Code Camp Tarragona 2009. A continuación todos los detalles.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Sobre el proceso de registro en Code Camp&lt;br /&gt;Code Camp Tarragona 2009 es un evento gratuito para todos los asistentes.&lt;br /&gt;Debido a que el evento cubre dos dias, sábado 17 de octubre y domingo 18 de octubre, se ha llegado a un acuerdo con el Hotel Palas Pineda con unas tarifas excepcionales y únicamente válidas para los asistentes al Code Camp Tarragona 2009.&lt;br /&gt;Que incluye el Hotel&lt;br /&gt;El precio del Hotel incluye la comida y cena del sábado dia 17 de octubre y el desayuno y Coffee Break del domingo dia 18 de octubre.&lt;br /&gt;Habitación compartida o individual. FAQ.&lt;br /&gt;- P: Quiero compartir habitación pero no tengo compañero,. ¿Que puedo hacer?- R: Selecciona " Registro CodeCamp Tarragona 2009 + Una noche Hotel Palas Pineda **** (Pensión Completa) con habitación compartida " y nosostros te asignaremos un compañero que se encuentre en las mismas condiciones que tú.&lt;br /&gt;- P: Ire acompañado/a de mi pareja pese a que el/ella no asistirá al Code Camp. ¿Que debo hacer?- R: Debéis registraros ambos seleccionando la opción " Registro CodeCamp Tarragona 2009 + Una noche Hotel Palas Pineda **** (Pensión Completa) con habitación compartida ". Pese a que uno de los asistente no tenga intención de asistir al Code Camp se registrará como tal.&lt;br /&gt;- P: Quiero compartir habitación y conozco a mi compañero quien tambien se registrará,. ¿Que puedo hacer?- R: Debéis registraros los dos, conjuntamente o por separado, y enviarnos un correo electrónico a &lt;a href="mailto:hotel@codecamp.es" focusset="true" _extended="true"&gt;mailto:hotel@codecamp.es&lt;/a&gt;indicando nombre y apellidos de los dos asistentes.&lt;br /&gt;- P: ¿Si no quiero compartir habitación con nadie?- R: Entonces selecciona " Registro CodeCamp Tarragona 2009 + Una noche Hotel Palas Pineda **** (Pensión Completa) con habitación individual ".&lt;br /&gt;- P: Asistiré al Code Camp pero no quiero hacer uso de los servicios del Hotel. ¿Hay algún problema?- R: No evidentemente que no lo hay. Sin embargo, no podras utilizar los servicios de comida, cena y desayuno así como las actividades del sábado por la noche que compartiremos con todos los asistentes registrados.&lt;br /&gt;Para más Información o dudas&lt;br /&gt;Para cualquier duda en relación al CodeCamp (registro, agenda, ...) , por favor utiliza los foros disponibles en &lt;a href="http://www.codecamp.es/foros.aspx" focusset="true" _extended="true"&gt;http://www.codecamp.es/foros.aspx&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-5297358647360419811?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/5297358647360419811/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=5297358647360419811' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5297358647360419811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5297358647360419811'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/09/code-camp-tarragona-2009-abierto-los.html' title='Code Camp Tarragona 2009 - Abierto los registros'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i0a6wx1FjwE/Srh3yu5QnEI/AAAAAAAAAIA/dqhSz7GdyvE/s72-c/INETA_logo.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3123764767557878049</id><published>2009-09-01T16:43:00.000+02:00</published><updated>2009-09-01T16:44:27.845+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Dispositivo Windows Mobile 6.5 a partir del 6 de octubre</title><content type='html'>&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="border: 0pt none ; max-width: 550px; float: right;" border="0" height="92" width="90" /&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 "saga" de dispositivos &lt;b&gt;Windows Mobile 6.5&lt;/b&gt;. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Se trata de la nueva versió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://www.blogger.com/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;br /&gt;&lt;p&gt;Por lo que a España y Latino América respecta, las operadoras de telefonía móvil que ofrecerán estos nuevos dispositivos serán &lt;b&gt;Orange&lt;/b&gt; y &lt;b&gt;Vodafone&lt;/b&gt; en España y &lt;b&gt;TIM Brasil&lt;/b&gt; así 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;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3123764767557878049?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3123764767557878049/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3123764767557878049' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3123764767557878049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3123764767557878049'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/09/dispositivo-windows-mobile-65-partir.html' title='Dispositivo Windows Mobile 6.5 a partir del 6 de octubre'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-4554382724948017825</id><published>2009-07-01T16:17:00.004+02:00</published><updated>2009-07-01T16:24:20.530+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Comunidad'/><category scheme='http://www.blogger.com/atom/ns#' term='Codecamp'/><title type='text'>Presentación de CodeCamp Tarragona 2009!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i0a6wx1FjwE/SktxLCUMBaI/AAAAAAAAAHY/1QfGW7azwt4/s1600-h/%3Dlogo500.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 174px;" src="http://2.bp.blogspot.com/_i0a6wx1FjwE/SktxLCUMBaI/AAAAAAAAAHY/1QfGW7azwt4/s200/%3Dlogo500.png" alt="" id="BLOGGER_PHOTO_ID_5353497016474011042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pues sí!! Ya es oficial. Los grupos de usuarios &lt;span style="font-weight: bold;"&gt;CatDotNet, BCNDEV, Spain.NET, Second NUG, LoNet Camp y Andorra.NET&lt;/span&gt; hemos unido nuestras fuerzas para organizar un &lt;span style="font-weight: bold;"&gt;CodeCamp&lt;/span&gt; de dos dias de duración para el&lt;span style="font-weight: bold;"&gt; 17 y 18 de octubre&lt;/span&gt; en &lt;span style="font-weight: bold;"&gt;Vila-Seca (Tarragona).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Se trata de un &lt;span style="font-weight: bold;"&gt;CodeCamp&lt;/span&gt; para tecnologias &lt;span style="font-weight: bold;"&gt;.NET&lt;/span&gt; y por primera vez en España se presentará un track específico para &lt;span style="font-weight: bold;"&gt;MONO&lt;/span&gt;, con lo que ambas iniciativas compartiran experiencias durante el fin de semana.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Entra en la &lt;a href="http://www.codecamp.es"&gt;Web Oficial&lt;/a&gt; o síguenos en &lt;a href="http://twitter.com/codecamp_es"&gt;twitter&lt;/a&gt;!!!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i0a6wx1FjwE/SktxFgIUefI/AAAAAAAAAHQ/Bx22TPNh5gs/s1600-h/sticker.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 112px; height: 65px;" src="http://4.bp.blogspot.com/_i0a6wx1FjwE/SktxFgIUefI/AAAAAAAAAHQ/Bx22TPNh5gs/s200/sticker.png" alt="" id="BLOGGER_PHOTO_ID_5353496921398082034" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-4554382724948017825?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/4554382724948017825/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=4554382724948017825' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4554382724948017825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4554382724948017825'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/07/presentacion-de-codecamp-tarragona-2009.html' title='Presentación de CodeCamp Tarragona 2009!!!!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i0a6wx1FjwE/SktxLCUMBaI/AAAAAAAAAHY/1QfGW7azwt4/s72-c/%3Dlogo500.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-7243461974630127837</id><published>2009-06-11T21:49:00.001+02:00</published><updated>2009-06-11T21:49:39.251+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Must Have Tools para Windows Mobile</title><content type='html'>&lt;span class="Normal"&gt;&lt;a href="http://wmugperu.org/blogs/cfong"&gt;Cesar Fong&lt;/a&gt; está recopilando un conjunto de herramientas indispensables para el desarrollo de aplicaciones para Windows Mobile. Sin duda un excelente recurso, &lt;strong&gt;¡¡Gracias Cé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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-7243461974630127837?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/7243461974630127837/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=7243461974630127837' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7243461974630127837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7243461974630127837'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/06/must-have-tools-para-windows-mobile.html' title='Must Have Tools para Windows Mobile'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-2149551529307421369</id><published>2009-06-04T19:22:00.002+02:00</published><updated>2009-06-04T19:25:27.980+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Emuladores'/><category scheme='http://www.blogger.com/atom/ns#' term='Widgets'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>¡Emuladores Windows Mobile 6.5 ya estan aquí!</title><content type='html'>Bajo el paquete de&lt;span style="font-weight: bold;"&gt; Windows Mobile 6.5 Developer Kit &lt;/span&gt;se presentan las nuevas caras de windows mobile 6.5. Además, ofrece ejemplos de desarrollo para las nuevas características del mismo y soporte para desarrollo con &lt;span style="font-weight: bold;"&gt;Widgets&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Para descargar los emuladores haz click &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e"&gt;aquí&lt;/a&gt;.&lt;br /&gt;Para empezar con Widgets haz click &lt;a href="http://blogs.msdn.com/windowsmobile/archive/2009/06/04/getting-started-with-widgets-on-windows-mobile-6-5.aspx"&gt;aquí&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-2149551529307421369?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/2149551529307421369/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=2149551529307421369' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2149551529307421369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2149551529307421369'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/06/emuladores-windows-mobile-65-ya-estan.html' title='¡Emuladores Windows Mobile 6.5 ya estan aquí!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-5774684248462312016</id><published>2009-06-04T00:24:00.000+02:00</published><updated>2009-06-04T00:25:07.536+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Visual Studio 2010 +  Windows Mobile + .NET Compact Framework</title><content type='html'>&lt;p&gt;Tras la tan esperada &lt;b&gt;Beta 1 &lt;/b&gt;de&lt;b&gt; Visual Studio 2010&lt;/b&gt; muchos de vosotros habéis podido apreciar que &lt;b&gt;NO&lt;/b&gt; existe soporte de proyectos para dispositivos &lt;b&gt;Windows Mobile.&lt;/b&gt; Lo cierto es que tras la decepción inicial acompañada de la poca información y ausencia de una postura oficial por parte de &lt;b&gt;Microsoft&lt;/b&gt;, ahora sí, &lt;b&gt; Microsoft&lt;/b&gt;  ha publicado de forma oficial en &lt;a href="http://msdn.microsoft.com/en-us/library/sa69he4t%28VS.100%29.aspx" mce_href="http://msdn.microsoft.com/en-us/library/sa69he4t(VS.100).aspx"&gt;MSDN&lt;/a&gt; lo siguiente:&lt;/p&gt; &lt;p&gt;[Traducción del ingés]&lt;/p&gt; &lt;h4&gt;"&lt;i&gt;Microsoft está comprometido en hacer de Visual Studio una potente herramienta de desarrollo para el desarrollador de dispositivos móviles,  y por tanto Visual Studio 2010 ofrecerá  soporte para el desarrollo de dispositivos móviles, pero no se pueden ofrecer detalles al respecto, &lt;/i&gt;&lt;i&gt;en estos &lt;/i&gt;&lt;i&gt;momentos. Para los actuales desarrolladores de dispositivos móviles en Visual Studio 2008, Microsoft ofrecerá un emulador de &lt;u&gt;Windows Mobile 6.5&lt;/u&gt; que trabajará junto a los existentes SDK de Windows Mobile 6."&lt;/i&gt;&lt;/h4&gt; &lt;p&gt;Mola ¿no? ;-)&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-5774684248462312016?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/5774684248462312016/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=5774684248462312016' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5774684248462312016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5774684248462312016'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/06/visual-studio-2010-windows-mobile-net.html' title='Visual Studio 2010 +  Windows Mobile + .NET Compact Framework'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-498073700859894473</id><published>2009-05-05T00:03:00.002+02:00</published><updated>2009-05-05T00:09:32.360+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Huron'/><category scheme='http://www.blogger.com/atom/ns#' term='Sync Framework'/><title type='text'>Proyecto “Huron”: Montacargas hacia la nube</title><content type='html'>&lt;p&gt;&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="left" src="http://www.microsoft.com/azure/images/huron_img56.jpg" /&gt;Dentro de la plataforma &lt;strong&gt;Microsoft Azure&lt;/strong&gt;, aparece cada vez con más fuerza un proyecto del que se ha venido hablando en los últimos meses y que promete ser, a priori, un revulsivo dentro de la apuesta de Microsoft en &lt;strong&gt;escenarios de sincronización&lt;/strong&gt;. &lt;strong&gt;Huron&lt;/strong&gt; (&lt;em&gt;nombre en clave del proyecto&lt;/em&gt;) nace de la comunión de &lt;strong&gt;&lt;a href="http://www.blogger.com/www.microsoft.com/azure/data.mspx" target="_blank"&gt;SQL Data Services&lt;/a&gt;&lt;/strong&gt; y &lt;strong&gt;Microsoft &lt;a href="http://msdn.microsoft.com/es-es/library/bb902854.aspx" target="_blank"&gt;Sync Framework&lt;/a&gt;&lt;/strong&gt;. La idea es clara, Huron sera la plataforma de sincronización entre los datos "en la nube" y clientes desconectados. Huron, además, tratará de minimizar toda la complejida que conlleva la compartición de orígenes de datos, tales como la configuración y la seguridad, mediante el uso de herramientas de configuración (&lt;em&gt;&lt;strong&gt;Huron Management Studio&lt;/strong&gt;&lt;/em&gt;) y componentes de desarrollo. &lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9576067/316x375.aspx" /&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9576069/436x375.aspx" /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Obviamente, los proveedores para los que, incialmente, estaran soportados seran &lt;strong&gt;SQL Server&lt;/strong&gt; y &lt;strong&gt;SQL Server Compact&lt;/strong&gt;, aunque se prevee soporte para &lt;strong&gt;Microsoft Access&lt;/strong&gt; tal y como explica desde el blog del equipo de desarrollo de &lt;strong&gt;Microsoft Sync Framework&lt;/strong&gt;. En dicho blog, se detalla algunas de las modificaciones respecto a las pretensiones iniciales, que ha sufrido Huron y de las cuales algunas ya se han hablado en &lt;a href="http://geeks.ms/blogs/rcorral/archive/2009/04/04/sql-server-data-services-cambio-radical-en-azure.aspx" target="_blank"&gt;Geeks.ms&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Por otro lado, y dado el contexto que se trata, Huron pretende ir más allá ofreciendo características tales como: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Publicar bases de datos en la nube &lt;/li&gt;&lt;li&gt;Suscribirse a una base de datos publicada en la nube y mantenerla sincronizada automaticamente. &lt;/li&gt;&lt;li&gt;Propagar las modificaciones sobre SQL Data Services a las bases de datos suscritas. &lt;/li&gt;&lt;li&gt;Habilitar la sincronización programada en background. &lt;/li&gt;&lt;li&gt;Realizar Backups y Restores de bases de datos hacia y desde la nube, respectivamente. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;En definitiva, un proyecto del que deberemos estar al tanto y cuyas perspectivas iniciales le auguran un importante hueco “entre las nubes”.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-498073700859894473?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/498073700859894473/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=498073700859894473' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/498073700859894473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/498073700859894473'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/05/proyecto-huron-montacargas-hacia-la.html' title='Proyecto “Huron”: Montacargas hacia la nube'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1344030449971693652</id><published>2009-04-28T21:12:00.002+02:00</published><updated>2009-04-28T21:16:26.179+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Error: No se puede mostrar un mensaje de error porque no se pudo encontrar un ensamblado de recursos opcional que lo contiene.</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;Aka: &lt;strong&gt;Could not find resource assembly&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Esta mensaje de error aparece cuando se produce una excepción y no se encuentra el archivo de recursos de descripciones de errores para .NET Compact Framework.&lt;/p&gt;&lt;p&gt;Todas las cadenas de error asociadas a .NET Compact Framework 2.0 se almacenan en un archivo de recursos externo, llamado &lt;strong&gt;System.SR.dll&lt;/strong&gt;. Este ensamblado no se distribuye para liberar memoria RAM del dispositvo.&lt;/p&gt;&lt;p&gt;La solución pasa por instalar el CAB &lt;strong&gt;System.SR.[Lang].cab&lt;/strong&gt; dónde &lt;em&gt;&lt;u&gt;Lang&lt;/u&gt;&lt;/em&gt; denota el idioma en el que queremos mostrar el mensaje de la excepción. Dicho CAB se encuentra en:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;%PROGRAM_FILES%\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\Diagnostics&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;NOTA: De forma análoga sucede lo mismo para mensajes de error relacionados con &lt;strong&gt;.NET Compact Framework 3.5&lt;/strong&gt;. &lt;strong&gt;Alejandro Mezcúa&lt;/strong&gt; publicó hace poco un &lt;a href="http://geeks.ms/blogs/amezcua/archive/2008/06/04/dll-de-mensajes-de-error-de-net-compact-framework-3-5.aspx" target="_blank"&gt;post&lt;/a&gt; sobre ello.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1344030449971693652?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1344030449971693652/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1344030449971693652' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1344030449971693652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1344030449971693652'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/04/error-no-se-puede-mostrar-un-mensaje-de.html' title='Error: No se puede mostrar un mensaje de error porque no se pudo encontrar un ensamblado de recursos opcional que lo contiene.'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-2873672718442653388</id><published>2009-04-26T23:24:00.002+02:00</published><updated>2009-04-26T23:28:29.864+02:00</updated><title type='text'>Bluetooth en .NET [Compact] Framework</title><content type='html'>&lt;p&gt;Hará aproximadamente tres años empecé a desarrollar una  libreria en .NET para la gestión de Bluetooth en Windows Mobile a raíz de un artículo que se publicó en dotNetMania num 35 (Marzo 2007). &lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align="right" src="http://upload.wikimedia.org/wikipedia/en/thumb/d/da/Bluetooth.svg/300px-Bluetooth.svg.png" /&gt;&lt;/p&gt;&lt;p&gt;Durante el tiempo que estuve desarrollando dicha libreria, pude apreciar realmente la dificultad que entraña un desarrollo sobre dicha tecnologia. De hecho, la libreria para &lt;strong&gt;Windows Mobile&lt;/strong&gt; no pude finalizarla –se quedó con algunos Bugs- y la de &lt;strong&gt;Windows XP/Vista&lt;/strong&gt; (unicamente 32 bits) logré que permitiera gestionar la radio &lt;strong&gt;Bluetooth&lt;/strong&gt;, buscar dispositivos cercanos, emparejarse y comunicarse via COM mediante el servicio &lt;a href="http://spanish.bluetooth.com/Bluetooth/Technology/Works/RFCOMM_1.htm" target="_blank"&gt;RFCOMM&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;; quise expandir la libreria mediante el uso de la capa &lt;strong&gt;SDP&lt;/strong&gt; (&lt;a href="http://www.palowireless.com/infotooth/tutorial/sdp.asp" target="_blank"&gt;Service Discovery Protocol&lt;/a&gt;) de búsqueda y uso de servicios específicos a través del &lt;a href="http://msdn.microsoft.com/en-us/library/aa938798.aspx" target="_blank"&gt;API de Bthioctl.dll de Windows Vista&lt;/a&gt;, pero ahí se quedó por falta de tiempo.&lt;br /&gt;&lt;br /&gt;Desde que el material está expuesto en desarrolloMobile.NET, recibo muy a menudo preguntas o curiosidades en mi buzón de correo personal de las que, pese a que algunas desconozco, la mayoria hacen referencia a cómo empezar y de ahí el motivo de este post, para todos aquellos que quieran saber por dónde pueden empezar a implementar soluciones basadas en Bluetooth en sus proyectos. &lt;/p&gt;&lt;h1&gt;Aspectos básicos&lt;/h1&gt;&lt;p&gt;Incialmente, tanto Windows Mobile como Windows XP/Vista nos ofrece librerias nativas para poder inicializar y obtener la información de la radio bluetooth local y algunas de esas APIs las podemos ver en el siguiente código y cuyas referencias las encontraréis &lt;a href="http://msdn.microsoft.com/en-us/library/ms902058.aspx" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;&lt;div style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &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; BthEstadosRadio : &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; { Desactivado, Activado, Detectable };&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; BTHRadio : IDisposable&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"bthutil.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthGetMode(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; BthEstadosRadio mode);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"bthutil.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthSetMode(BthEstadosRadio mode);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Btdrt.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthReadLocalVersion(&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; phci_version, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; phci_revision,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; plmp_version, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; plmp_subversion,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; pmanufacturer, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; plmp_features);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Btdrt.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthReadCOD(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; CategoriaDispositivo pcod);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Ws2.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  18:&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;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; WSACleanup();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Ws2.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  20:&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;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; WSAStartup(&lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; version, &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] wsaData);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//los enumeradores Fabricantes y CategoriaDispositivo son&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//identificadores únicos (http://www.bluetooth.org)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Fabricantes _fabricante;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;short&lt;/span&gt; _versionRadio;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; CategoriaDispositivo _claseDisp;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//constructor&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; BTHRadio()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;     { &lt;span style="color:#008000;"&gt;// inicializamos sockets&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; wsv =&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;         ((&lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt;)(((&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;)(2))  ((&lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt;)((&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;)(2))) &amp;lt;&amp;lt; 8));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] _data = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[512];&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;         WSAStartup(wsv, _data);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//obt. versión y fabricante&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt; version = 0, lversion = 0, caract = 0;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; revision = 0, lsubrevision = 0, fab = 0;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;         BthReadLocalVersion(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; version, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; revision,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; lversion, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; lsubrevision, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; fab, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; caract);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;._fabricante = fab;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  39:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;._versionRadio = (&lt;span style="color:#0000ff;"&gt;short&lt;/span&gt;)lsubrevision;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  40:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//obtenemos categoría disp.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  41:&lt;/span&gt;         BthReadCOD(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;._claseDisp);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  42:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  43:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//propiedad lectura/escritura del estado de radio&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  44:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; BthEstadosRadio EstadoRadio&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  45:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  46:&lt;/span&gt;         get&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  47:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  48:&lt;/span&gt;             BthEstadosRadio currentMode;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  49:&lt;/span&gt;             BthGetMode(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; currentMode);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  50:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; currentMode;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  51:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  52:&lt;/span&gt;         set&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  53:&lt;/span&gt;         { BthSetMode(currentMode); }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  54:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  55:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//liberamos WS2.dll&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  56:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Dispose()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  57:&lt;/span&gt;     { WSACleanup(); }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  58:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Con esta clase podemos empezar a gestionar nuestro Bluetooth (siempre y cuando se MS Bluetooth Stack) pero en realidad nos ofrecerá muy poca funcionalidad al no ser que la finalidad de la aplicación sea mostrado el estado e información de la radio. La información, en definitiva, que muestra este código es la que podemos ver en la siguiente captura de pantalla:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_i0a6wx1FjwE/SfTQ9mr_jAI/AAAAAAAAAGs/qoSMrO7Qy0g/s1600-h/Inforadio%5B2%5D.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Inforadio" border="0" alt="Inforadio" src="http://lh3.ggpht.com/_i0a6wx1FjwE/SfTQ-BImFUI/AAAAAAAAAGw/7eaSrpSwV8I/Inforadio_thumb.jpg?imgmax=800" width="244" height="141" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Aspectos avanzados&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Sin embargo, el uso de esta tecnología en nuestros desarrollos requiere unos requisitos previos. En primer lugar &lt;strong&gt;es altamente recomendable que se entienda el funcionamiento de Bluetooth&lt;/strong&gt;. A grandes rasgos, remarcaría dos conceptos muy distintos. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;strong&gt;&lt;u&gt;PRIMERO&lt;/u&gt;&lt;/strong&gt;: Debemos conocer el perfil sobre el queremos trabajar. Bluetooth es un protocolo y com tal gestiona el intercambio de mensajes en base a un estándard desarrollado con el fin de comunicar dos dispositivos. No haremos “nada” sólo con Bluetooth, en todo caso sobre Bluetooth y lo haremos a través de los &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Bluetooth_profile" target="_blank"&gt;perfiles&lt;/a&gt;&lt;/strong&gt; los cuales definen el comportamiento de los dispositivos y la comunicación. No es lo mismo que una aplicación haga uso de Bluetooth para la gestión de un manos libres que para el intercambio de archivos entre un dispositivo Windows Mobile y Windows Vista, por ejemplo. Los perfiles definen el cómo se lleva a cabo la comunicación. La comunicación con un manos libres utiliza un perfil (&lt;strong&gt;HFP&lt;/strong&gt;), y el intercambio de objectos (archivos, contactos y demás) utiliza otro (&lt;strong&gt;OBEX&lt;/strong&gt;).&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title="especificacion" border="0" alt="especificacion" src="http://lh3.ggpht.com/_i0a6wx1FjwE/SfTQ-uXkeYI/AAAAAAAAAG0/zL3UQRADIDc/especificacion_thumb%5B2%5D.jpg?imgmax=800" width="244" height="209" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;SEGUNDO&lt;/u&gt;&lt;/strong&gt;: En cuanto a la conexión entre dispositivos recordad que el proceso que normalmente realizamos para el emparejamiento manual se debe hacer programaticamente, con todo lo que ello conlleva. Para conectarnos a un dispositivos necesitamos saber &lt;strong&gt;la dirección del dispositivo&lt;/strong&gt; y el &lt;strong&gt;Guid del servicio&lt;/strong&gt; al que queremos conectarnos. El proceso de emparejamiento podría ser algo así:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &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; BTHDispositivo&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Btdrt.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthCreateACLConnection(&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     remoteBthAdd,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; phandle);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Btdrt.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthCloseConnection(&lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; phandle);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"Btdrt.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthAuthenticate(&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] remoteBthAdd);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     [DllImport(&lt;span style="color:#006080;"&gt;"btdrt.dll"&lt;/span&gt;, SetLastError = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BthSetPIN(&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] localBthAdd,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; pinLength, &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] ppin);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _nombre;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] _direccion;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pin.Length =&amp;gt; 0 y pin.Length &amp;lt;= 16&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; EstablecerPIN(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; pin)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] pinbytes = System.Text.Encoding.ASCII.GetBytes(pin);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; len = pin.Length;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;         BthSetPIN(_direccion, len, pinbytes);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; QuitarPin()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;         BthRevokePIN(_direccion);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Emparejar(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; pin)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;ushort&lt;/span&gt; handle = 0;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//conectamos&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;         BthCreateACLConnection(_direccion, &lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; handle);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//autenticamos&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  39:&lt;/span&gt;         BthAuthenticate(_direccion);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  40:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//desconectamos&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  41:&lt;/span&gt;         BthCloseConnection(handle);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  42:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  43:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Una vez emparejado toca conectar mediante un servicio común entre ellos cuya conexión se puede realizar mediante Sockets a través de un EndPoint que exponga el servicio o perfil a utilizar (&lt;a href="http://msdn.microsoft.com/en-us/library/aa363057(VS.85).aspx" target="_blank"&gt;SOCKADDR_BTH&lt;/a&gt;) tal y como muestra el siguiente &lt;a href="http://msdn.microsoft.com/en-us/library/aa362901.aspx" target="_blank"&gt;enlace&lt;/a&gt;. En modo de ejemplo a continuación se muestra el método de conexión de la libreria de desarrolloMobile.NET para WinXP.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &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;void&lt;/span&gt; Conectar(Servicios.BthServicio servicio)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     clienteSck  = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BthSocket();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     BthEndPoint endPoint = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BthEndPoint(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, servicio);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         clienteSck.Connect(endPoint);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (SocketException se)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0pxfont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:black;"   &gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;¿Ahora bien, cómo averiguamos la dirección y el Guid del Servicio?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En cuanto a los servicios o perfiles, todos y cada uno tienen un Guid asociado que es universal (estandarizado). En sitio oficial de Bluetooth podeis encontrar una &lt;a href="https://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm" target="_blank"&gt;lista completa&lt;/a&gt; (&lt;strong&gt;NOTA:&lt;/strong&gt; Debéis registraros). &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En cuanto a la dirección del dispositivo a conectar hay que saber lo siguiente. Hablando desde el punto de vista programático las únicas formas de conocer la dirección destino es a través del descubrimiento de dispositivos cercanos o consultando los dispositivos ya emparejados (previo descubrimiento). Es aqui, en este punto, dónde la mayoria de desarrollos quedan atascados, puesto que el código de desubrimiento es complejo y se lleva a cabo a través de las clases &lt;a href="http://www.blogger.com/WSALookUpServiceBegin" target="_blank"&gt;WSALookUpServiceBegin&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms741641(VS.85).aspx" target="_blank"&gt;WSALookUpServiceNext&lt;/a&gt; y &lt;a href="http://msdn.microsoft.com/en-us/library/ms741637(VS.85).aspx" target="_blank"&gt;WSALookUpServiceEnd&lt;/a&gt; y cuya forma de proceder la podéis encontrar &lt;a href="http://msdn.microsoft.com/en-us/library/aa916165.aspx" target="_blank"&gt;aquí&lt;/a&gt;. Siempre podemos conocer la dirección del dispositivo emparejandolo manualmente y por norma general, MS Bluetooth Stack almacena la dirección de todos los dispositivos previamente emparejados en el registro.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Microsoft tiene un ejemplo de uso para Bluetooth que podéis encontrar &lt;a href="http://msdn.microsoft.com/es-es/embedded/aa714533(en-us).aspx" target="_blank"&gt;aquí&lt;/a&gt;. En este ejemplo, además, podéis ver el método de descubrimiento de servicios dado un dispositivo. Además muestra en la clave dónde se almacenan los dispositivos emparejados o de confianza.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Debug&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Otros de los quebraderos de cabeza fue el Debug del proyecto. Si éste se realiza sobre una aplicación Windows Desktop no hay nada que decir pero si se realiza sobre Windows Mobile, entonces el emulador de poco me servía. Debía emparejar un dispositivo físico, realizar el despliegue sobre él a través de ActiveSync y depurar la aplicación sobre la misma.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Sin embargo, hace poco me topé con un artículo de &lt;strong&gt;codeproject&lt;/strong&gt; que permitia emular la radio Bluetooth sobre un emulador Windows Mobile. El autor es &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=5251719"&gt;Dmitry Klionsky&lt;/a&gt;, y el enlace lo podéis encontrar &lt;a href="http://www.codeproject.com/KB/mobile/bth4devemul.aspx" target="_blank"&gt;aquí&lt;/a&gt;.  &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.codeproject.com/KB/mobile/bth4devemul/bthdiscovery.jpg" /&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Recomendaciones&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Utiliza, en la medida de lo posible, componentes de gestión de pilas Bluetooth de terceros. No voy a decir ningún proveedor puesto que no he utilizado ninguno en especial. Pero el desarrollo de una libreria o componente propio debería ser la última alternativa. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Conoce la pila de tu dispositivo Bluetooth(&lt;a href="http://en.wikipedia.org/wiki/Bluetooth_stack)"&gt;http://en.wikipedia.org/wiki/Bluetooth_stack)&lt;/a&gt;. Las mas comunes son &lt;strong&gt;Microsoft Bluetooth Stack&lt;/strong&gt; y &lt;strong&gt;Widcomm&lt;/strong&gt; y la mayoria de componentes de terceros ofrecen servicios para como mínimo ambas pilas. Recuerda que una libreria para Bluetooth desarrollada para Microsoft Bluetooth stack &lt;strong&gt;NO es compatible &lt;/strong&gt;con Widcomm y viceversa. De hecho las librerias que encontrarás en desarrolloMobile.NET no son válidas para dispositivos Widcomm y demás. Encontraras un enlace con el tipo de pilas utilizas por dispositivos (modelo/marca) aqui. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Si te apatece profundizar sobre el tema, en desarrolloMobile.NET (sección Bluetooth) encontrarás más recursos. Otros de los sitios que no puedes dejar de visitar es el proyecto &lt;a href="http://www.codeplex.com/32feet" target="_blank"&gt;32feet.net&lt;/a&gt;. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-2873672718442653388?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/2873672718442653388/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=2873672718442653388' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2873672718442653388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2873672718442653388'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/04/bluetooth-en-net-compact-framework.html' title='Bluetooth en .NET [Compact] Framework'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_i0a6wx1FjwE/SfTQ-BImFUI/AAAAAAAAAGw/7eaSrpSwV8I/s72-c/Inforadio_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-846905699165728449</id><published>2009-03-19T14:51:00.001+01:00</published><updated>2009-03-19T14:51:36.230+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Widgets'/><title type='text'>Widgets en Windows Mobile 6.5</title><content type='html'>&lt;p&gt;En el pasado TechEd que tuvo lugar en Barcelona, en noviembre del año pasado, tuve la oportunidad de asistir a la sesión/presentación del &lt;strong&gt;Internet Explorer Mobile 6.0&lt;/strong&gt;. En dicha presentación &lt;strong&gt;Anil Dhawan&lt;/strong&gt; y &lt;strong&gt;Mike O’Malley, &lt;/strong&gt;ambos &lt;strong&gt;Product Manager &lt;/strong&gt;de Microsoft Corp&lt;strong&gt;, &lt;/strong&gt;fueron los maestros de ceremonia. &lt;/p&gt;  &lt;p&gt;Una de las novedades que presentó Anil fue la posibilidad de desarrollo de &lt;strong&gt;Widgets&lt;/strong&gt; sobre plataforma &lt;strong&gt;Windows Mobile &lt;/strong&gt;y ya que éstos se sustentan sobre IE Mobile 6 y por aquél entonces empezaban a sonar campanas sobre WiMoble 6.5 todo parecía indicar que los Widgets serían una realidad con la aparición de ésta última versión. &lt;/p&gt;  &lt;p&gt;Durante mi estancia en el pasado &lt;strong&gt;MVP Summit 2009&lt;/strong&gt;, tuve el placer de conocer a otro integrante del equipo de desarrollo junto a Anil y Mike, se trata de &lt;strong&gt;Jorge Peraza&lt;/strong&gt;, natural de Guadalajara – México-, con el que pude conversar durante unos pocos minutos. Pues bien, &lt;strong&gt;Jorge &lt;/strong&gt;acaba de &lt;strong&gt;&lt;a href="http://blogs.msdn.com/windowsmobile/archive/2009/03/18/windows-mobile-6-5-what-s-in-for-developers.aspx"&gt;publicar un interesantísimo post&lt;/a&gt; &lt;/strong&gt;acerca de las novedades para desarroladores de WinMobile 6.5 haciendo especial hincapié en el desarrollo de Widgets.&lt;/p&gt;  &lt;p&gt;Aquí os dejo el enlace,,,&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/windowsmobile/archive/2009/03/18/windows-mobile-6-5-what-s-in-for-developers.aspx" href="http://blogs.msdn.com/windowsmobile/archive/2009/03/18/windows-mobile-6-5-what-s-in-for-developers.aspx"&gt;http://blogs.msdn.com/windowsmobile/archive/2009/03/18/windows-mobile-6-5-what-s-in-for-developers.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-846905699165728449?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/846905699165728449/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=846905699165728449' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/846905699165728449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/846905699165728449'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/03/widgets-en-windows-mobile-65.html' title='Widgets en Windows Mobile 6.5'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-6890467305615953901</id><published>2009-01-29T11:51:00.001+01:00</published><updated>2009-01-29T11:51:06.398+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sync Framework'/><title type='text'>Webcast sobre File Sync Provider</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_i0a6wx1FjwE/SYGKFomSB4I/AAAAAAAAAFQ/yacOQUFQ6v0/s1600-h/MSF%5B7%5D.jpg"&gt;&lt;img title="MSF" 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" height="127" alt="MSF" src="http://lh4.ggpht.com/_i0a6wx1FjwE/SYGKGObOd5I/AAAAAAAAAFU/01201l-f1mU/MSF_thumb%5B3%5D.jpg?imgmax=800" width="164" align="right" border="0" /&gt;&lt;/a&gt; Se ha &lt;a href="http://blogs.msdn.com/sync/" target="_blank"&gt;publicado&lt;/a&gt; un nuevo &lt;a href="http://download.microsoft.com/download/F/2/0/F205B8F3-D48C-481C-95D9-2D2593637F9A/FileSyncProvider_v1.wmv" target="_blank"&gt;Webcast&lt;/a&gt; de poco más de un 1 hora de duración, en el que &lt;strong&gt;Ashish Shah&lt;/strong&gt;, Principal Development Lead del equipo de desarrolo de &lt;a href="http://msdn.microsoft.com/en-us/sync/default.aspx" target="_blank"&gt;Sync Framework&lt;/a&gt;, habla sobre los diferentes escenarios soportados este built-in provider de &lt;strong&gt;Microsoft Sync Framework&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Los escenarios tratados son:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sincronización de archivos &lt;em&gt;multi-master &lt;/em&gt;entre PC de una red. &lt;/li&gt;    &lt;li&gt;Sincronización de archivos entre PC fuera de una red corporativa a través de USB. &lt;/li&gt;    &lt;li&gt;Mantenimiento de las copias de seguridad de archivos. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Y además sobre los aspectos más destacados sobre este proveedor en cuanto a requisitos y características del mismo…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Salud!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-6890467305615953901?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/6890467305615953901/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=6890467305615953901' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6890467305615953901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6890467305615953901'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/01/webcast-sobre-file-sync-provider.html' title='Webcast sobre File Sync Provider'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_i0a6wx1FjwE/SYGKGObOd5I/AAAAAAAAAFU/01201l-f1mU/s72-c/MSF_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3111729289337074985</id><published>2009-01-27T15:08:00.004+01:00</published><updated>2009-01-29T16:33:50.214+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>¿Cuán precisa es la señal de nuestros receptores GPS?</title><content type='html'>&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: Este post es Cross Posting desde &lt;a href="http://geeks.ms/blogs/jmtorres/archive/2009/01/21/cuan-preciso-es-la-senyal-de-nuestros-receptores-gps.aspx"&gt;http://geeks.ms/blogs/jmtorres/archive/2009/01/21/cuan-preciso-es-la-senyal-de-nuestros-receptores-gps.aspx&lt;/a&gt;. Si tiene problema de visualización, por favor visite el original.&lt;/p&gt;&lt;p&gt; &lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" src="http://www.mundopda.com/tiendas/0005/productos/gps1.jpg" align="right" /&gt; Quién más o quién menos ha utilizado o utiliza un receptor GPS para uso lucrativo o personal, sean receptores compactos, con pantalla y software o sean a través de PDA’s con receptores conectado por Bluetooth, por ejemplo. Si es así, seguro que en muchas ocasiones hemos estado a punto de perder la paciencia debido a que los satélites aquél día, parecen no estar surcando los cielos. &lt;/p&gt;&lt;p&gt;En este post pretendo mostrar el porqué de esos comportamiento y cómo podemos evaluar la dilución de la precisión nosotros mismo con un dispositivos Windows Mobile y el SDK del mismo.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;span style="color:#ff0000;"&gt;NOTA: Algunos de los términos explicados aquí son aproximados debido a la complejidad de su comprensión. Éstos pueden tener &lt;strong&gt;alguna interpretación errónea&lt;/strong&gt; por mi parte así que si encontráis algún dato incorrecto, por favor, contactadme.&lt;/span&gt;&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;h1&gt;Conceptos previos&lt;/h1&gt;&lt;p&gt;Antes de analizar la exactitud y tasa de errores que podemos encontrarnos en nuestros receptores GPS vamos a introducir unos cuantos conceptos que deberían tenerse en cuenta.&lt;/p&gt;&lt;p&gt;&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" src="http://upload.wikimedia.org/wikipedia/commons/9/9c/ConstellationGPS.gif" align="left" /&gt;El sistema de posicionamiento global es un sistema arto complicado cuyos fundamentos matemáticos y físicos describen el comportamiento y aplicación del mismo. La parte fundamental del GPS son los satélites y éstos (unos 24 más lo de respaldo) andan por sus anchas describiendo &lt;a href="http://es.wikipedia.org/wiki/Plano_orbital" target="_blank"&gt;planos orbitales&lt;/a&gt; alrededor de la esfera terrestre a una altitud de unos 20.200 kilómetros lo que permite que hasta 10 satélites sean visibles en un radio de unas 11.000 millas náuticas.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;h1&gt;Triangulación&lt;/h1&gt;&lt;p&gt;Para que un receptor obtenga un posicionamiento (sea cual sea su exactitud y tasa de error) se requiere la detección de  4 satélites, lo cual da lugar a la &lt;strong&gt;triangulación 3D&lt;/strong&gt;. Con éstas cuatro señales el receptor es capaz de determinar la longitud (x), la latitud(y), la altitud (y) y el tiempo (t) con lo que en un entorno ideal sin errores, el receptor GPS se situará en la intersección de las 4 esferas definidas por las señales de los satélites. El uso de únicamente 3 satélites deriva en el posicionamiento en 2D (exento de z, altitud).&lt;/p&gt;&lt;p&gt;Es de vital importancia el llamado cuarto satélite puesto que éste es que determinará el valor de t. Esto es debido a que se determina la distancia del receptor al satélite en base a la velocidad de la luz más una constante de rectificación de errores y la sincronización de todos los satélites mediante un reloj atómico que incorporan.&lt;/p&gt;&lt;h1&gt;Fuentes de error&lt;/h1&gt;&lt;h3&gt;Efectos atmosféricos&lt;/h3&gt;&lt;p&gt;&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" height="106" src="http://upload.wikimedia.org/wikipedia/commons/a/a9/Diurnal_ionospheric_current.jpg" width="102" align="left" /&gt;Como dije anteriormente la señales que emiten los satélites lo hacen a la velocidad de la luz, pero en el espacio exterior. De esta forma, existen errores relacionados a la refracción con la ionosfera y con la troposfera. &lt;/p&gt;&lt;p&gt;En la &lt;strong&gt;ionosfera&lt;/strong&gt; es la capa dónde se produce una mayor tasa de error pudiendo llegar a ser de +/- 5 metros. Esto es debido a que en esta capa  de la atmósfera se encuentra un alto nivel de electrones e iones positivos, producidos por la radiación solar, que interfieren negativamente sobre las señales. La &lt;strong&gt;Troposfera&lt;/strong&gt;, por su parte, concentra una gran cantidad de vapor de agua lo que da lugar a otro tipo de refracción de las ondas con unos valores que oscilan entre los +/- 0.5 metros.&lt;/p&gt;&lt;h3&gt;Errores de reloj&lt;/h3&gt;&lt;p&gt;Pese a que los relojes equipados en los satélites son atómicos, no son 100% precisos y experimentan errores por ruidos o desfases con los errores del receptor, que no son atómicos. Estos errores pueden llega a producir una desviación de + o – 2 metros.&lt;/p&gt;&lt;h3&gt;Relatividad&lt;/h3&gt;&lt;p&gt;Por un lado tenemos que los satélites recorren la esfera terrestres a una altitud de más de 20.000 km a una velocidad de unos 12.000km/h lo que provoca que, según la teoría de la relatividad, los relojes de los satélites (el tiempo) corra más lentamente en los satélites que en la tierra por su velocidad (relatividad espacial) y por su altitud (relatividad potencial) lo que generará retardos del orden de 7,2 y 38 nanosegundos/día respectivamente. &lt;/p&gt;&lt;h3&gt;Efecto Sagnac&lt;/h3&gt;&lt;p&gt;Otro efecto &lt;em&gt;relativístico&lt;/em&gt; es el efecto &lt;a href="http://en.wikipedia.org/wiki/Sagnac_effect" target="_blank"&gt;Sagnac&lt;/a&gt; que es causado por el posicionamiento, del receptor/observador, en la superficie terrestre relativo a la velocidad de rotación del globo terrestre. Este efecto, sin embargo, tiene una tasa de error ínfimo.&lt;/p&gt;&lt;h3&gt;Efecto Multipath&lt;/h3&gt;&lt;p&gt;Es muy común andar o circular por ciudades cuya altura de los edificios superan unas cuantas plantas, de la misma forma que se produce por cuestiones orográficas, montañas etc. Pese a que el receptor puede no obtener una señal con la calidad SNR (señal/ruido) óptima, puede ocurrir algo imprevisto, que la señal llegue con SNR optima pero provenga rebotada de un edificio o montaña cercana.&lt;/p&gt;&lt;p&gt; &lt;a href="http://lh4.ggpht.com/_i0a6wx1FjwE/SYHLdhXcWvI/AAAAAAAAAFY/AzpqZ_4vKaY/s1600-h/multipath%5B2%5D.jpg"&gt;&lt;img title="multipath" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="168" alt="multipath" src="http://lh3.ggpht.com/_i0a6wx1FjwE/SYHLenmLvLI/AAAAAAAAAFc/6SdH-7L0_dc/multipath_thumb.jpg?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Este tipo de error es muy común en receptores en movimiento, pudiendo llegar a  generar una tasa de error de hasta +/- 1 metro.&lt;/p&gt;&lt;h3&gt;Disponibilidad Selectiva &lt;/h3&gt;&lt;p&gt;Esta fuente de error es la inducida mediante la alteración o manipulación de la señal del satélite para que envíe datos erróneos en forma de mensajes NMEA al receptor, intencionadamente. Este tipo de fuente fue utilizada durante las guerras del Golfo de principio de los 90 y, evidentemente fueron inducidas adrede por el gobierno de los EEUU. A partir de mayo de 2000, el entonces presidente de los EEUU Bill Clinton, eliminó la disponibilidad selectiva haciendo público el uso del GPS sin alteración humana.&lt;/p&gt;&lt;h3&gt;Geometría de los satélites y DOP&lt;/h3&gt;&lt;p&gt;Tan importante es el posicionamiento de satélites como la geometría que describen entre ellos y emiten sus señales, me explico. En la siguiente imagen podemos observar como cuatro satélites emiten señales válidas a un receptor GPS.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLfcFCvOI/AAAAAAAAAFg/H6lbDiJ2wnI/s1600-h/DOP%20alto%5B2%5D.jpg"&gt;&lt;img title="DOP alto" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="DOP alto" src="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLgSlyTTI/AAAAAAAAAFk/5TEbY6KjNYM/DOP%20alto_thumb.jpg?imgmax=800" width="153" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Sin embargo la geometría de sus señales no es óptima debido a a la proximidad que existe entre ellos. En la siguiente imagen, ocurre todo lo contrario.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLiFyfc4I/AAAAAAAAAFo/mU8jO5YCQM4/s1600-h/DOP%20bajo%5B2%5D.jpg"&gt;&lt;img title="DOP bajo" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="168" alt="DOP bajo" src="http://lh3.ggpht.com/_i0a6wx1FjwE/SYHLi9m2Q_I/AAAAAAAAAFs/fopIFu9XuaE/DOP%20bajo_thumb.jpg?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;La señales provenientes de los satélites geométricamente mejor posicionados generarán un mayor fiabilidad del posicionamiento. Así pues:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;La dilución de precisión (DOP) se emplea en cartografía y describe la precisión del GPS en base a la geometría de los satélites. Cuando la señal DOP es alta, los satélites están muy cerca entre sí con lo que la precisión disminuye y el valor DOP aumenta. Si por el contrario los satélites son distantes, la precisión aumenta y con ello el valor DOP disminuye. Existen diluciones de precisión para el posicionamiento horizontal (HDOP) , vertical (VDOP), el de posicionamiento (PDOP) y el de tiempo (TDOP) con lo que dentro del cada uno de dichos aspectos puede ofrecer un valor distinto. Los obstáculos urbanos y naturales puede aumentar el DOP de la señal del GPS—&amp;gt; Ver efecto &lt;strong&gt;Multipath&lt;/strong&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;h3&gt;¿Como se controlan todos estos errores?&lt;/h3&gt;&lt;p&gt;La corrección de estos errores se llevan a cabo mediante complejas formulas fisicomatemáticas específicas para cada fuente de error. La mayoría de estos errores son transparente para mostros y ni siquiera debemos tenerlos en cuenta, en la mayoría de circunstancias. &lt;/p&gt;&lt;p&gt;Muchos de estas correcciones podríamos obtenerlas mediante las sentencias NMEA recibidas (pero nunca intervenir), sin embargo, el barómetro más común utilizado son los valores del DOP (Dilución de la precisión) y que podemos ver en este mismo post/ejemplo.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;h1&gt;Uso de la clase GPSPosition del SDK de Windows Mobile 6&lt;/h1&gt;&lt;p&gt;Junto con el SDK de Windows Mobile 6 podemos encontrar un ejemplo en código administrado de uso del GPS Intermediate Driver. Pese a que esta librería está en código nativo y forma parte, por lo tanto, del &lt;em&gt;core&lt;/em&gt; de Windows CE para las versiones 5.01 y superiores, el ejemplo en cuestión incorpora un wrapper de todas estas funciones, enumeradores y estructuras en .NET.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_i0a6wx1FjwE/SYHLkznZfGI/AAAAAAAAAFw/gAGSkPAiT58/s1600-h/SDK%5B2%5D.jpg"&gt;&lt;img title="SDK" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="173" alt="SDK" src="http://lh4.ggpht.com/_i0a6wx1FjwE/SYHLlXppG5I/AAAAAAAAAF0/0AhZ5f0dRZ4/SDK_thumb.jpg?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Nos vamos a centrar en la clase GPSPosition la cual nos retorna los valores más significativos y necesarios para el posicionamiento y valores de navegación así como el estado de las señales, satélites y valores DOP. Veámoslos.&lt;/p&gt;&lt;h3&gt;Valores que retorna &lt;/h3&gt;&lt;p&gt;En la siguiente tabla se detallan todos los valores de la estructura/clase GPSPosition.&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="1322" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;strong&gt;Propiedad&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="1120"&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;EllipsoidAltitude&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Altitud elipsoidal (para saber que es la altitud elipsoidal ver &lt;strong&gt;Visualizando las altitudes&lt;/strong&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;EllipsoidAltitudeValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor de la altitud elipsoidal es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Heading&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Rumbo en grados de 001-360&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;HeadingValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del rumbo es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;HorizontalDilutionOfPrecision&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Dilución de precisión horizontal (1-50)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;HorizontalDilutionOfPrecisionValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del HDOP es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Latitude&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Latitud en grados&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;LatitudeValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor de la latitud es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;LatitudeInDegreesMinutesSeconds&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Latitud en grados/minutos/segundos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Longitude&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Longitud en grados&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;LongitudeValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor de la longitud es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;LongitudeInDegreesMinutesSeconds&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Longitud en grados/minutos/segundos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;PositionDilutionOfPrecision&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Dilución de precisión (1-50)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;PositionDilutionOfPrecisionValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del PDO es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SatelliteCount&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Número de satélites&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SatelliteCountValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del recuento de satélites es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SatellitesInSolution&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Número de satélites utilizados&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SatellitesInSolutionValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del recuento de satélites utilizado es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SatellitesInViewCount&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Número de satélites vistos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SatellitesInViewCountValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del recuento de satélites visibles es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SeaLevelAltitude&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Altitud MSL a nivel del mar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SeaLevelAltitudeValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor de la altitud es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Speed&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Velocidad en nudos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;SpeedValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor de la velocidad es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Time&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Hora/Fecha&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;TimeValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor de la fecha es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;VerticalDilutionOfPrecision&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Dilución de precisión vertical (1-50)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;VerticalDilutionOfPrecisionValid&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Indica si el valor del VDOP es valido/fiable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt; &lt;/td&gt;&lt;td valign="top" width="1120"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;strong&gt;Métodos&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="1120"&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;GetSatellitesInSolution()&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Retorna un array del tipo Satellite con los satélites que se están utilizando en ese momento.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;GetSatellitesInView()&lt;/td&gt;&lt;td valign="top" width="1120"&gt;Retorna un array del tipo Satellite con los satélites que se están viendo en ese momento.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3&gt;Visualizando el tipo de señal (GPS_FIX_QUALITY)&lt;/h3&gt;&lt;p&gt;Dentro de la clases GPSPosition encontramos un atributo (selectionType) del tipo FixSelection cuyo valor se define en el enumerador:&lt;/p&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; FixQuality : &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    Unknown = 0,&lt;br /&gt;    Gps,&lt;br /&gt;    DGps&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Dichos valores equivalen al tipo de señal que se obtiene. En este punto cabe remarcar la existencia de los GPS Diferenciales (DGPS) que son antenas que complementan y se comunican con los receptores y cuyas tasas de error son aun menor a las del receptor GPS tradicional. Por lo tanto selectionType determinará el tipo de señal i por consiguiente la calidad de la misma. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Visualizando el número de satélites&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En cuanto a la información de los satélites contamos con dos métodos que nos retornan tanto los satélites en vista (&lt;strong&gt;GetSatellitesInView()&lt;/strong&gt;) como los utilizados (&lt;strong&gt;GetSatellitesInSolution()&lt;/strong&gt;). Los satélites descritos por la clase &lt;strong&gt;Satellite&lt;/strong&gt;, contienen, así mismo, 4 propiedades:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="588" align="center" border="0"&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="135"&gt;&lt;strong&gt;Propiedad&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="261"&gt;&lt;strong&gt;Descripcion&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="190"&gt; &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="135"&gt;Id&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="261"&gt;Identificador del satélite.&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="190"&gt; &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="135"&gt;SignalStrengh&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="261"&gt;Calidad de la señal/ruido (SNR) en decibelios. &lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="190"&gt; &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="135"&gt;A&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" height="131" src="http://upload.wikimedia.org/wikipedia/commons/4/4c/Acimut.JPG" width="142" align="left" /&gt;zimuth&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="261"&gt;Describe la posición radial relativa al receptor en grados. Un valor de 90 indica al Este de nuestra posición mientras que un valor 270 o 180, al Oeste o Sur.&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="190"&gt; &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="135"&gt;Elevation&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="261"&gt;El ángulo descrito entre el satélite y el plano del receptor.&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="190"&gt;&lt;br /&gt;&lt;p align="right"&gt; &lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 align="left"&gt;Visualizando las altitudes&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Altitud elipsoidal&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Antes de comprender la fiabilidad de la altitud, trataré de explicar que es la altitud elipsoidal.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La esfera terrestre no tiene una forma -geométricamente- esférica perfecta, mas bien tiene forma “de pera”. A partir de esta premisa, es obvio que en los cálculos  de altitud de un receptor se harán en base al tiempo que tarde en viajar la señal desde el satélite al receptor, teniendo en cuenta la velocidad de la luz más las constantes y cálculos de rectificación de errores. Supongamos que un receptor está al nivel del mar en una magnífica playa de Argentina mientras que un segundo receptor esta al nivel del mar en el norte de Noruega. Ambos están a una altitud de 0 metros, sin embargo y debido a la forma de la tierra, la señal del receptor argentino indicará valores de altitud relativa a los satélites más altos que la real y el de Noruega valores más bajos (probablemente bajo 0 metros) que la real.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para subsanarlo, el GPS representa la tierra de forma geométrica perfecta con una &lt;a href="http://en.wikipedia.org/wiki/WGS84" target="_blank"&gt;elipsoide referencial o Datum&lt;/a&gt;&lt;em&gt;&lt;/em&gt; estándar utilizado en otras áreas como la topografía. Dicho estándar lo describe WGS84 en la actualidad y probablemente sea substituido en breve.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Conociendo la posición exacta relativa del receptor y satélite sobre la línea imaginaria que describe el datum, conoce las correcciones que debe realizar para conocer la altitud exacta del receptor.  De esta forma, en España, por ejemplo, los valores de la altitud elipsoidal oscilan entre los 45 y 50 metros (&lt;strong&gt;&lt;em&gt;* datos aproximados&lt;/em&gt;&lt;/strong&gt;)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En la siguiente imágenes podemos ver como altitud elipsoidal puede ser distinta en una Lugar A (Noruega por ejemplo) y un Lugar B (Argentina por ejemplo).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_i0a6wx1FjwE/SYHLmV_A-5I/AAAAAAAAAF4/pnDVwa8uVoU/s1600-h/altelipsoidal%5B2%5D.jpg"&gt;&lt;img title="altelipsoidal" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="162" alt="altelipsoidal" src="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLnF8z2YI/AAAAAAAAAF8/2QaRi0rq-yA/altelipsoidal_thumb.jpg?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Altitud (MSL)&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La altitud, pues, es la distancia del receptor respecto al nivel del mar. &lt;strong&gt;Un valor mínimo de VDOP nos dará una mayor fiabilidad.&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Visualizando el posicionamiento y velocidad&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Los valores del posicionamiento (latitud + longitud) son absolutos y se especifican en grados/minutos/segundos o en únicamente en grados. La velocidad, por su parte, es enviada en nudos (esto es millas náutica por hora).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Conversiones nudos (fuente Wikipedia.)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;p&gt;0,514444 &lt;a href="http://es.wikipedia.org/wiki/Metros_por_segundo"&gt;metros por segundo&lt;/a&gt; (m·s&lt;sup&gt;−1&lt;/sup&gt;) &lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;p&gt;1,150779 &lt;a href="http://es.wikipedia.org/wiki/Milla"&gt;milla&lt;/a&gt; (estatutaria) por hora (&lt;a href="http://es.wikipedia.org/wiki/Millas_por_hora"&gt;mph&lt;/a&gt;) &lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;p&gt;1,852 &lt;a href="http://es.wikipedia.org/wiki/Kil%C3%B3metros"&gt;kilómetros&lt;/a&gt; por hora&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Un valor mínimo de HDOP nos ofrecerá una mayor fiabilidad.&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Por último el rumbo describe la dirección en las agujas del reloj en forma de grados de nuestro movimiento. Dirección 360 es Norte, 90 es Este, 180 es Sur y 270 es Oeste.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Visualizando los DOP&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;Los indicadores de Dilución de Precisión de la posición (además del vertical y el horizontal) los podemos encontrar en la clase GPSPosition, con lo que dado un posicionamiento y altitud podemos evaluar su precisión según los valores:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="851" border="0"&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;&lt;strong&gt;Valor&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;1&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;Ideal&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;2-3&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;Excelente. En este punto la fiabilidad de la posición es muy fiable.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;4-6&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;Buena. La fiabilidad es buena pero  con algún error (muy pequeño, sin embargo) de posicionamiento.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;7-8&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;Moderada. La señal debe ser revisada. El posicionamiento es aproximado pero no fiable.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;9-20&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;Pobre. Los posicionamientos deben ser descartados.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;21-50&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="649"&gt;Muy Pobre. Los posicionamientos pueden tener un rango de error de +/- 300 metros.&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;El ejemplo practico&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ahora solo necesitamos dos cosas, bueno tres: el &lt;a href="http://www.desarrollomobile.net/devmob/GPSLibrary/tabid/71/Default.aspx" target="_blank"&gt;SDK de Windows Mobile 6&lt;/a&gt;, un nuevo proyecto Smart Device, y configurar el Fake GPS que viene con el SDK o el GPS con nuestro dispositivo móvil a través del GPS Intermediate Driver. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para configurar el &lt;strong&gt;Fake GPS&lt;/strong&gt;, podemos ver cómo hacerlo en &lt;a href="http://www.desarrollomobile.net/devmob" target="_blank"&gt;desarrolloMobile.NET&lt;/a&gt;, sección &lt;a href="http://www.desarrollomobile.net/devmob/GPSLibrary/tabid/71/Default.aspx" target="_blank"&gt;GPS Library&lt;/a&gt;. Hecho esto y creado un proyecto Smart Device para Windows Mobile 6 (indistintamente Classic o Professional) empezamos por agregar el  proyecto  &lt;strong&gt;Microsoft.WindowsMobile.Samples.Location.csproj&lt;/strong&gt; que encontraremos en %PROGRAM_FILES%\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS. Seguidamente añadimos la referencia a dicho proyecto desde el nuestro y empezamos.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Diseñamos una interfaz con un TabControl y un par de TabPage además de unos menús para abrir y cerrar el GPS y cerrar la aplicación. (Aquí a gusto de cada uno)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_i0a6wx1FjwE/SYHLn5FThTI/AAAAAAAAAGA/H_8T6f56-Vo/s1600-h/app%20dise%C3%B1o%5B2%5D.jpg"&gt;&lt;img title="app diseño" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="app diseño" src="http://lh4.ggpht.com/_i0a6wx1FjwE/SYHLoStph4I/AAAAAAAAAGE/8I0lQQicL0E/app%20dise%C3%B1o_thumb.jpg?imgmax=800" width="203" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Vamos a mostrar en el tab POSICION todos los datos de posicionamiento así como los DOP, y en el tab de SATELITES un ListView con los satelites, información y cuales son utilizados. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLpbfyZ7I/AAAAAAAAAGI/qBnHmaO3TSs/s1600-h/app%20posicion%5B2%5D.jpg"&gt;&lt;img title="app posicion" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="app posicion" src="http://lh3.ggpht.com/_i0a6wx1FjwE/SYHLqj6PLlI/AAAAAAAAAGM/YmGcA0gis_I/app%20posicion_thumb.jpg?imgmax=800" width="163" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLsW1qB9I/AAAAAAAAAGQ/aFjIaFgf6pc/s1600-h/app%20satelites%5B2%5D.jpg"&gt;&lt;img title="app satelites" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="app satelites" src="http://lh5.ggpht.com/_i0a6wx1FjwE/SYHLtSHCxBI/AAAAAAAAAGU/8X9OxjD_JKY/app%20satelites_thumb.jpg?imgmax=800" width="160" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Utilizaremos los siguiente atributos dentro de la clase Form1 e añadimos en el evento Form_Load el siguiente código para suscribir el EventHandler a los cambios de estado del dispositivo GPS y de posicionamiento.  &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Form1 : Form&lt;br /&gt;{&lt;br /&gt;    EventHandler _updateDataHandler;&lt;br /&gt;    GpsDeviceState _dispositivo;&lt;br /&gt;    GpsPosition _posicion;&lt;br /&gt;&lt;br /&gt;    Gps gps = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Gps();&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Form1()&lt;br /&gt;    {&lt;br /&gt;        InitializeComponent();&lt;br /&gt;&lt;br /&gt;        _updateDataHandler = RefreshUI;&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Con lo que toda la lógica la trasladamos al delegado del tipo EventHandler _updateDataHandler. Éste delegará sobre el método RefreshUI. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Form1()&lt;br /&gt;{&lt;br /&gt;    InitializeComponent();&lt;br /&gt;&lt;br /&gt;    _updateDataHandler = RefreshUI;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;El método RefreshUI contempla las siguientes partes a destacar:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para el control de los datos de latitud, longitud, altitud, altitud elipsoidal, velocidad, rumbo y fecha lo haremos de la siguiente forma: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.LatitudeValid)&lt;br /&gt;{&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Lat:\t{0}\n"&lt;/span&gt;, _posicion.LatitudeInDegreesMinutesSeconds);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.LongitudeValid)&lt;br /&gt;{&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Lon:\t{0}\n"&lt;/span&gt;, _posicion.LongitudeInDegreesMinutesSeconds);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.SpeedValid)&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Velocidad:\t\t{0} nudos\n"&lt;/span&gt;, _posicion.Speed.ToString());&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.SeaLevelAltitudeValid)&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Altitud:\t\t{0} metros\n"&lt;/span&gt;, _posicion.SeaLevelAltitude.ToString());&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.EllipsoidAltitudeValid)&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Altitud elipsoidal:\t{0} metros\n"&lt;/span&gt;, _posicion.EllipsoidAltitude.ToString());&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.HeadingValid)&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Rumbo:\t\t{0} grados\n\n"&lt;/span&gt;, _posicion.Heading.ToString());&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.TimeValid)&lt;br /&gt;{&lt;br /&gt;    Text = _posicion.Time.ToString();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para toda la información de satélites jugaremos con LINQ de cara a mostrar en un ListView, de forma ordenada descendente por Señal, los satélites vistos, resaltando con una Imagen en color los utilizados. El código es: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#008000;"&gt;//satelites&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.SatellitesInSolutionValid &amp;amp;&amp;amp;&lt;br /&gt;    _posicion.SatellitesInViewValid &amp;amp;&amp;amp;&lt;br /&gt;    _posicion.SatelliteCountValid)&lt;br /&gt;{&lt;br /&gt;    lstSatelites.Items.Clear();&lt;br /&gt;    _posicion.GetSatellitesInView()&lt;br /&gt;        .OrderByDescending(s =&amp;gt; s.SignalStrength)&lt;br /&gt;        .ToList().ForEach(s =&amp;gt;&lt;br /&gt;                              {&lt;br /&gt;                                  var lvi =&lt;br /&gt;                                      &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ListViewItem(&lt;br /&gt;                                          &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;[]&lt;br /&gt;                                              {&lt;br /&gt;                                                  s.Id.ToString(),&lt;br /&gt;                                                  s.SignalStrength.ToString(),&lt;br /&gt;                                                  s.Azimuth.ToString(),&lt;br /&gt;                                                  s.Elevation.ToString()&lt;br /&gt;                                              })&lt;br /&gt;                                          {&lt;br /&gt;                                              ImageIndex =&lt;br /&gt;                                                  _posicion.GetSatellitesInSolution()&lt;br /&gt;                                                      .Contains(s, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SatelliteComparer())&lt;br /&gt;                                                      ? 0&lt;br /&gt;                                                      : 1,&lt;br /&gt;                                              Selected = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;br /&gt;                                          };&lt;br /&gt;                                  lstSatelites.Items.Add(lvi);&lt;br /&gt;                              });&lt;br /&gt;&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Satelites vistos: {0}\n"&lt;/span&gt;, _posicion.GetSatellitesInView().Length);&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Satelites en uso: {0}\n\n"&lt;/span&gt;, _posicion.GetSatellitesInSolution().Length);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Fijémonos que hago uso de un IEqualityComparer para la clase Satellite de cara a poder identificar los que están &lt;strong&gt;usados&lt;/strong&gt; dentro de la lista de &lt;strong&gt;vistos&lt;/strong&gt;. El SatelliteComparer es: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; SatelliteComparer : IEqualityComparer&amp;lt;Satellite&amp;gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Equals(Satellite x, Satellite y)&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (ReferenceEquals(x, y)) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;       &lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (ReferenceEquals(x, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)  ReferenceEquals(y, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; x.Id  == y.Id &amp;amp;&amp;amp; x.Id == y.Id;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; IEqualityComparer&amp;lt;Satellite&amp;gt; Members&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; GetHashCode(Satellite obj)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (ReferenceEquals(obj, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; 0;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; hashSat = obj.Id.ToString() == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; ? 0 : obj.Id.GetHashCode();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; hashSatId = obj.Id.GetHashCode();&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; hashSat ^ hashSatId;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Por último controlamos los DOP, HDOP y VDOP. He jugado con varios paneles y labels de forma que represente una especie de ProgressBar vertical en color. Si la señal del DOP esta entre 1 y 3 el color del panel será verde; entre 4 y 8 amarillo y superior a 8 hasta 50 rojo, de forma que el código quedaría tal que así: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#008000;"&gt;//ststus&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.HorizontalDilutionOfPrecisionValid)&lt;br /&gt;{&lt;br /&gt;    lHDOP.Text = _posicion.HorizontalDilutionOfPrecision.ToString();&lt;br /&gt;    pHDOPValue.UpdatePanel(_posicion.HorizontalDilutionOfPrecision);&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"HDOP:\t\t{0}\n"&lt;/span&gt;, _posicion.HorizontalDilutionOfPrecision.ToString());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.VerticalDilutionOfPrecisionValid)&lt;br /&gt;{&lt;br /&gt;    lVDOP.Text = _posicion.VerticalDilutionOfPrecision.ToString();&lt;br /&gt;    pVDOPValue.UpdatePanel(_posicion.HorizontalDilutionOfPrecision);&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"VDOP:\t\t{0}\n"&lt;/span&gt;, _posicion.VerticalDilutionOfPrecision.ToString());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.PositionDilutionOfPrecisionValid)&lt;br /&gt;{&lt;br /&gt;    lPODValue.Text = _posicion.PositionDilutionOfPrecision.ToString();&lt;br /&gt;    pPODValue.UpdatePanel(_posicion.HorizontalDilutionOfPrecision);&lt;br /&gt;    str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"DOP:\t\t{0}\n\n"&lt;/span&gt;, _posicion.PositionDilutionOfPrecision.ToString());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;He creado un método extensor para la clase Panel llamado UpdatePanel al cual le paso el valor float de DOP para que configure el comportamiento del Panel como hemos descrito anteriormente. El método en cuestión es: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &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; ExtensionMethods&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; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; UpdatePanel(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; Panel panel, &lt;span style="color:#0000ff;"&gt;float&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        panel.Size =&lt;br /&gt;                &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Size(panel.Width, 20 + (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; * 2);&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &amp;gt; 8 &amp;amp;&amp;amp; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &amp;lt;= 50)&lt;br /&gt;            panel.BackColor = Color.Red;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &amp;gt; 3 &amp;amp;&amp;amp; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &amp;lt;= 8)&lt;br /&gt;            panel.BackColor = Color.Yellow;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &amp;gt; 0 &amp;amp;&amp;amp; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt; &amp;lt;= 3)&lt;br /&gt;            panel.BackColor = Color.Green;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En definitiva, con la gestión de información en labels y control de estado del GPS el método RefreshUI quedaría así: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-: nonefont-family:consolas, 'Courier New', courier, monospace;font-size:8pt;color:#f4f4f4;"   &gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RefreshUI(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs args)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (gps.Opened)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] str = {&lt;span style="color:#006080;"&gt;""&lt;/span&gt;};&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_dispositivo != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            str[0] = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Info Dispositivo:\n{0} {1}, {2}\n\n"&lt;/span&gt;, _dispositivo.FriendlyName, _dispositivo.ServiceState, _dispositivo.DeviceState);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.LatitudeValid)&lt;br /&gt;            {&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Lat:\t{0}\n"&lt;/span&gt;, _posicion.LatitudeInDegreesMinutesSeconds);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.LongitudeValid)&lt;br /&gt;            {&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Lon:\t{0}\n"&lt;/span&gt;, _posicion.LongitudeInDegreesMinutesSeconds);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.SpeedValid)&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Velocidad:\t\t{0} nudos\n"&lt;/span&gt;, _posicion.Speed.ToString());&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.SeaLevelAltitudeValid)&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Altitud:\t\t{0} metros\n"&lt;/span&gt;, _posicion.SeaLevelAltitude.ToString());&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.EllipsoidAltitudeValid)&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Altitud elipsoidal:\t{0} metros\n"&lt;/span&gt;, _posicion.EllipsoidAltitude.ToString());&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.HeadingValid)&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Rumbo:\t\t{0} grados\n\n"&lt;/span&gt;, _posicion.Heading.ToString());&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.TimeValid)&lt;br /&gt;            {&lt;br /&gt;                Text = _posicion.Time.ToString();&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//satelites&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.SatellitesInSolutionValid &amp;amp;&amp;amp;&lt;br /&gt;                _posicion.SatellitesInViewValid &amp;amp;&amp;amp;&lt;br /&gt;                _posicion.SatelliteCountValid)&lt;br /&gt;            {&lt;br /&gt;                lstSatelites.Items.Clear();&lt;br /&gt;                _posicion.GetSatellitesInView()&lt;br /&gt;                    .OrderByDescending(s =&amp;gt; s.SignalStrength)&lt;br /&gt;                    .ToList().ForEach(s =&amp;gt;&lt;br /&gt;                                          {&lt;br /&gt;                                              var lvi =&lt;br /&gt;                                                  &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ListViewItem(&lt;br /&gt;                                                      &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;[]&lt;br /&gt;                                                          {&lt;br /&gt;                                                              s.Id.ToString(),&lt;br /&gt;                                                              s.SignalStrength.ToString(),&lt;br /&gt;                                                              s.Azimuth.ToString(),&lt;br /&gt;                                                              s.Elevation.ToString()&lt;br /&gt;                                                          })&lt;br /&gt;                                                      {&lt;br /&gt;                                                          ImageIndex =&lt;br /&gt;                                                              _posicion.GetSatellitesInSolution()&lt;br /&gt;                                                                  .Contains(s, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SatelliteComparer())&lt;br /&gt;                                                                  ? 0&lt;br /&gt;                                                                  : 1,&lt;br /&gt;                                                          Selected = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;br /&gt;                                                      };&lt;br /&gt;                                              lstSatelites.Items.Add(lvi);&lt;br /&gt;                                          });&lt;br /&gt;&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Satelites vistos: {0}\n"&lt;/span&gt;, _posicion.GetSatellitesInView().Length);&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"Satelites en uso: {0}\n\n"&lt;/span&gt;, _posicion.GetSatellitesInSolution().Length);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//ststus&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.HorizontalDilutionOfPrecisionValid)&lt;br /&gt;            {&lt;br /&gt;                lHDOP.Text = _posicion.HorizontalDilutionOfPrecision.ToString();&lt;br /&gt;                pHDOPValue.UpdatePanel(_posicion.HorizontalDilutionOfPrecision);&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"HDOP:\t\t{0}\n"&lt;/span&gt;, _posicion.HorizontalDilutionOfPrecision.ToString());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.VerticalDilutionOfPrecisionValid)&lt;br /&gt;            {&lt;br /&gt;                lVDOP.Text = _posicion.VerticalDilutionOfPrecision.ToString();&lt;br /&gt;                pVDOPValue.UpdatePanel(_posicion.HorizontalDilutionOfPrecision);&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"VDOP:\t\t{0}\n"&lt;/span&gt;, _posicion.VerticalDilutionOfPrecision.ToString());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_posicion.PositionDilutionOfPrecisionValid)&lt;br /&gt;            {&lt;br /&gt;                lPODValue.Text = _posicion.PositionDilutionOfPrecision.ToString();&lt;br /&gt;                pPODValue.UpdatePanel(_posicion.HorizontalDilutionOfPrecision);&lt;br /&gt;                str[0] += &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;"DOP:\t\t{0}\n\n"&lt;/span&gt;, _posicion.PositionDilutionOfPrecision.ToString());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            lblPosition.Text = str[0];&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para hacer pruebas con el Fake GPS de la aplicación, podemos utilizar el conjunto de sentencias NMEA que viene con el FAKE GPS mediante dos archivos o podemos insertar una captura de un GPS real tomada por mí mismo y que podéis encontrar &lt;a href="http://www.desarrollomobile.net/devmob/GPSLibrary/tabid/71/Default.aspx" target="_blank"&gt;aquí&lt;/a&gt;. El archivo se llama outgps2.txt y solo tenéis que copiarlo a vuestro emulador, en la carpeta Fake GPS de archivos de programa, junto a los otros dos y configurarlo para que lo utilice. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Si queréis probarlo en un PDA real, lo único que tenéis que hacer es configurar apropiadamente el &lt;strong&gt;GPS Intermediate Driver&lt;/strong&gt; desde la configuración –&amp;gt; Settings.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;El código completo lo podéis obtener desde &lt;a href="http://www.desarrollomobile.net/devmob/GPSLibrary/tabid/71/Default.aspx" target="_blank"&gt;aquí&lt;/a&gt;, y se llama &lt;strong&gt;GPSStatus&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Fuentes:&lt;/h5&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.dotnetmania.com/Articulos/049/index.html" target="_blank"&gt;Uso de GPS desde Windows Mobile – dotNetMania num .49&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="http://www.isa.cie.uva.es/gps/GPSerrores.html" href="http://www.isa.cie.uva.es/gps/GPSerrores.html"&gt;http://www.isa.cie.uva.es/gps/GPSerrores.html&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="http://www.kowoma.de/en/gps/errors.htm" href="http://www.kowoma.de/en/gps/errors.htm"&gt;http://www.kowoma.de/en/gps/errors.htm&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="http://www.upv.es/satelite/trabajos/pracGrupo4/errors.htm" href="http://www.upv.es/satelite/trabajos/pracGrupo4/errors.htm"&gt;http://www.upv.es/satelite/trabajos/pracGrupo4/errors.htm&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms850332.aspx" href="http://msdn.microsoft.com/en-us/library/ms850332.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms850332.aspx&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3111729289337074985?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3111729289337074985/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3111729289337074985' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3111729289337074985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3111729289337074985'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/01/cuan-precisa-es-la-senal-de-nuestros.html' title='¿Cuán precisa es la señal de nuestros receptores GPS?'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_i0a6wx1FjwE/SYHLenmLvLI/AAAAAAAAAFc/6SdH-7L0_dc/s72-c/multipath_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-4809567887061402577</id><published>2009-01-07T11:04:00.001+01:00</published><updated>2009-01-07T11:04:24.474+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><category scheme='http://www.blogger.com/atom/ns#' term='Sync Framework'/><title type='text'>Microsoft Sync Framework - FAQ -</title><content type='html'>&lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;table class="" cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td class="" valign="top" width="400"&gt;         &lt;h3&gt;NOTAS:&lt;/h3&gt;          &lt;p&gt;A fecha de 6 de enero de 2009.&lt;/p&gt;          &lt;p&gt;Versiones: &lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;Microsoft Sync Framework 1.0              &lt;ul&gt;               &lt;li&gt;Sync Services for ADO.NET 2.0 &lt;/li&gt;             &lt;/ul&gt;           &lt;/li&gt;            &lt;li&gt;Microsoft Sync Framework 2.0 CTP1 &lt;/li&gt;            &lt;li&gt;Sync Services for ADO.NET for Devices 1.0 &lt;/li&gt;            &lt;li&gt;Microsoft Sync Framework for devices 1.0 CTP1 &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;General&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;1.- ¿Que es Microsft Sync Framework 1.0?&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://ts2.images.live.com/images/thumbnail.aspx?q=332340073121&amp;amp;id=a0755ca7d9aa3c66920b053cb6b2efa0" align="right" mce_src="http://ts2.images.live.com/images/thumbnail.aspx?q=332340073121&amp;amp;id=a0755ca7d9aa3c66920b053cb6b2efa0" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Es la respuesta de Microsoft a los escenarios ocasionalmente conectados. MSF 1.0 es la primera versión de un marco de desarrollo que permite el desarrollo de cualquier tipo de solución que requiera de algún tipo de sincronización en escenarios off-line de cualquier tipo de origen de datos sobre cualquier protocolo o tipo de red y exponerlos como servicios &lt;strong&gt;WCF&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;2.- ¿Con que producto se distribuye? / ¿Dónde puedo obtenerlo?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Finalmente, MSF 1.0 se distribuye con SQL Server 2008 debido a su afinidad en contextos de sincronización de datos y con Visual Studio 2008 .NET SP1. Sin embargo, también podemos descargarlo desde el siguiente &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C88BA2D1-CEF3-4149-B301-9B056E7FB1E6&amp;amp;displaylang=en" target="_blank" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C88BA2D1-CEF3-4149-B301-9B056E7FB1E6&amp;amp;displaylang=en"&gt;enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.desarrollomobile.net/devMob/Portals/0/articles/sync/MSF%20instalacion%20SQL%20Sever%202008.png" target="_blank" mce_href="http://www.desarrollomobile.net/devMob/Portals/0/articles/sync/MSF%20instalacion%20SQL%20Sever%202008.png"&gt;&lt;img height="150" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/sync/MSF%20instalacion%20SQL%20Sever%202008.png" width="225" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.- ¿Es gratuito?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Si, sin embargo contiene unas cláusulas especiales que deben ser consultadas con Microsoft si MSF va a ser utilizado en plataformas que no estén basadas en Windows mediante licencias comerciales y kits de portabilidad.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.- ¿Puedo utilizar Microsoft Sync Framework sobre sistemas operativos Windows 64 bits?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sí. Soporta además de x86, AMD64 y IA64.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.- ¿Qué relación tienen Sync Services for ADO.NET y Microsoft Sync Framework?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sync Services for ADO.NET es uno de los tres proveedores &lt;em&gt;Built-In&lt;/em&gt; de MSF y está orientada específicamente a la sincronización de orígenes de datos accesibles mediante ADO.NET.&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://ts4.images.live.com/images/thumbnail.aspx?q=489211831775&amp;amp;id=c811d041ff143915e5576aa74eeb52bd" align="right" mce_src="http://ts4.images.live.com/images/thumbnail.aspx?q=489211831775&amp;amp;id=c811d041ff143915e5576aa74eeb52bd" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5.- ¿Y los File Sync Services?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Idem. Sin embargo File Sync está orientado a la sincronización de archivos y carpetas. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6.- Pero, ¿Qué son los proveedores de sincronización?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Son orígenes susceptibles de sincronización y pueden ser de naturaleza heterogénea. MSF provee tres proveedores listos para usar, orientados a datos, archivos y SSE, agrupados en Sync Services for ADO.NET, File Sync y RSS Sync Feed, respectivamente. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;7.- En definitiva, ¿qué incluye Microsoft Sync Framework 1.0?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;MSF incluye:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Un proveedor específico para la sincronización de orígenes de datos agrupados en Sync Services for ADO.NET 2.0 de los que hay que distinguir dos tipos diferentes de escenarios: off-line y peer-to-peer. &lt;/li&gt;    &lt;li&gt;Un proveedor específico para la sincronización de archivos y carpetas agrupados en File Sync Services. &lt;/li&gt;    &lt;li&gt;Un proveedor específico para la sincronización de SSE(&lt;em&gt;Simple Sharing Extensions&lt;/em&gt;) que permite la sincronización de orígenes RSS y Atom. &lt;/li&gt;    &lt;li&gt;El SDK completo con todas las clases que intervienen en los sistemas de sincronización utilizadas para la creación de proveedores específicos distintos a los tres descritos anteriormente. &lt;/li&gt;    &lt;li&gt;Los Metadata Services, los cuales permiten el almacenamiento de la metadata en los procesos de sincronización sin la cual, ésta no seria posible. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Sync_Framework.svg/800px-Sync_Framework.svg.png" mce_src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Sync_Framework.svg/800px-Sync_Framework.svg.png" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;8.- ¿Podemos crear proveedores &lt;em&gt;customizados&lt;/em&gt;?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Si. Todas y cada una de las clases necesarias están definidas en MSF, sin embargo, la creación de proveedores customizados implica un conocimiento más a bajo nivel sobre las características, funcionamiento y actores de la sincronización.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;9.- ¿Por que es tan importante SQL Server Compact en MSF?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Los Metadata Services que MSF incorpora por defecto están basados en &lt;strong&gt;SQL Server Compact&lt;/strong&gt;, sin embargo podemos hacer uso de servicios de metadata propios. Asimismo, en los Sync Services for ADO.NET, SQL Server Compact es uno de los proveedores de datos nativos.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;10.- ¿Hay algo similar para Windows Mobile?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sí. Sin embargo el único lanzamiento oficial actualmente es &lt;a href="http://blogs.msdn.com/sync/archive/2008/09/16/now-available-sync-services-for-ado-net-on-windows-mobile-devices.aspx" target="_blank" mce_href="http://blogs.msdn.com/sync/archive/2008/09/16/now-available-sync-services-for-ado-net-on-windows-mobile-devices.aspx"&gt;Sync Services for ADO.NET for Devices 1.0 SP1&lt;/a&gt;. Por otro lado, &lt;strong&gt;MSF 1.0 for Devices&lt;/strong&gt; está en &lt;a href="http://blogs.msdn.com/sync/archive/2008/08/12/sync-framework-for-windows-mobile-devices-ctp1.aspx" target="_blank" mce_href="http://blogs.msdn.com/sync/archive/2008/08/12/sync-framework-for-windows-mobile-devices-ctp1.aspx"&gt;CTP&lt;/a&gt; y se prevé su lanzamiento durante este mismo año 2009. Importante: &lt;strong&gt;¿Por qué Sync Services for ADO.NET está en la versión 2.0 y Microsfoft Sync Framework en la versión 1.0? &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;11.- ¿Se puede desarrollar para código nativo?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Efectivamente, se pueden desarrollar aplicaciones bajo código nativo con MSF. &lt;/p&gt;  &lt;h3&gt;Sync Services for ADO.NET&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;1.- ¿Por qué Sync Services for ADO.NET está en la versión 2.0 y Microsoft Sync Framework en la versión 1.0? / ¿Que diferencia hay entre Sync Services for ADO.NET 1.0 y 2.0?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Con la presentación de las primeras betas de SQL Server Compact 3.5 (versión 2008) se presentó Sync Services for ADO.NET 1.0. Debido a que MSF estaba en fase de desarrollo Sync Services for ADO.NET 1.0 &lt;strong&gt;NO&lt;/strong&gt; estaba construido sobre MSF. Con la aparición de MSF 1.0, se presentó Sync Services for ADO.NET 2.0 es cual &lt;strong&gt;SI&lt;/strong&gt; estaba construido sobre MSF y aportaba una serie de &lt;a href="http://blogs.msdn.com/sync/archive/2008/08/06/top-new-features-in-sync-services-for-ado-net-v2.aspx" target="_blank" mce_href="http://blogs.msdn.com/sync/archive/2008/08/06/top-new-features-in-sync-services-for-ado-net-v2.aspx"&gt;nuevas características&lt;/a&gt;. Actualmente Sync Services for ADO.NET 1.0 está desfasado y únicamente se presentó como futura solución en entornos ocasionalmente conectados para clientes ligeros que utilizaran SQL Server Compact 3.5.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.- ¿Qué tipo de proveedores de datos puedo utilizar? / ¿Puedo utilizar Oracle - MySQL ó XML ?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Se puede utilizar cualquier tipo de proveedor de datos que sea accesible mediante ADO.NET. Sync Services for ADO.NET es especialmente útil con proveedores SQL Server Compact 3.5, debido a que incorpora un LocalProvider específico, y con SQL Server 2008 gracias a que éste puede apoyarse en una de sus nuevas características, la llamada Change Tracking. Es importante comprender que a excepción de SQL Server Compact 3.5, todos los demás proveedores, sean locales o remotos, deben ser implementados como clases que derivan de &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.server.dbserversyncprovider.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.server.dbserversyncprovider.aspx"&gt;Microsoft.Synchronization.Server.DbServerSyncProvider&lt;/a&gt;, como tal, cualquier origen accesible de ADO.NET debe proveer de un mecanismo que permita el seguimiento de las modificaciones como Change Tracking en SQL Server 2008. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Ver punto &lt;strong&gt;8.- Y si no utilizo SQL Server 2008, y por lo tanto no hago uso de Change Tracking…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Las siguientes dos clases muestran en modo de ejemplo como seria un proveedor de sincronización remoto para una base de datos SQL Server 2005, y por lo tanto sin un mecanismo propio de seguimiento de cambios, y un proveedor específico local para SQL Server Compact. Nótese la diferencia y complejidad.&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;&lt;span style="color: #008000"&gt;//Clase padre Microsoft.Synchronization.Server.DbServerSyncProvider&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//NOTA: Si el origen es SQL Server 2008 hacemos uso de Change Tracking&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//Sino, deben utilizarse técnicas invasivas sobre la base de datos como    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//se hace en la siguiente clase de ejemplo.    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//ATENCIÓN: La siguiente clase es únicamente de ejemplo de creación     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//de un proveedor remoto de SQL Server 2005. Sírvase únicamente como    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;//referencia. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ServidorSyncProvider : DbServerSyncProvider&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ServidorSyncProvider()&lt;br /&gt;    {&lt;br /&gt;        SqlConnection conexionServidor = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlConnection(strServerConnString);&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Connection = conexionServidor;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//creamos comando ancla &lt;/span&gt;&lt;br /&gt;        SqlCommand comandoMomento = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; varMomento = &lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncNewReceivedAnchor;&lt;br /&gt;        comandoMomento.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SELECT &amp;quot;&lt;/span&gt; + varMomento + &lt;span style="color: #006080"&gt;&amp;quot; = @@DBTS&amp;quot;&lt;/span&gt;;&lt;br /&gt;        comandoMomento.Parameters.Add(varMomento, SqlDbType.Timestamp);&lt;br /&gt;        comandoMomento.Parameters[varMomento].Direction = ParameterDirection.Output;&lt;br /&gt;        comandoMomento.Connection = conexionServidor;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.SelectNewAnchorCommand = comandoMomento;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//configuramos una tabla para sync bidireccional&lt;/span&gt;&lt;br /&gt;        SyncAdapter piezaSyncAdapter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SyncAdapter(&lt;span style="color: #006080"&gt;&amp;quot;Pieza&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//comandos de desacarga&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//inserts nuevos del servidor&lt;/span&gt;&lt;br /&gt;        SqlCommand piezaIncrInserts = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        piezaIncrInserts.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SELECT [idPieza],[numSerie],[descripcion],[precio],[ultimoCoste],[stock],[stockMinimo]&amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,[ubicacionAlmacen],[unidadMedida] FROM [LightMaintenanceSynchSer].[dbo].[Pieza] &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;WHERE (InsertTimestamp &amp;gt; @sync_last_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND InsertTimestamp &amp;lt;= @sync_new_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND InsertId &amp;lt;&amp;gt; @sync_client_id)&amp;quot;&lt;/span&gt;;&lt;br /&gt;        piezaIncrInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncLastReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaIncrInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncNewReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaIncrInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncClientId, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaIncrInserts.Connection = conexionServidor;&lt;br /&gt;        piezaSyncAdapter.SelectIncrementalInsertsCommand = piezaIncrInserts;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//updates nuevos del servidor&lt;/span&gt;&lt;br /&gt;        SqlCommand piezaIncrUpdates = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        piezaIncrUpdates.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SELECT [idPieza],[numSerie],[descripcion],[precio],[ultimoCoste],[stock],[stockMinimo]&amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,[ubicacionAlmacen],[unidadMedida] FROM [LightMaintenanceSynchSer].[dbo].[Pieza] &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;WHERE (UpdateTimestamp &amp;gt; @sync_last_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND UpdateTimestamp &amp;lt;= @sync_new_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND UpdateId &amp;lt;&amp;gt; @sync_client_id &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND NOT (InsertTimestamp &amp;gt; @sync_last_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND InsertId &amp;lt;&amp;gt; @sync_client_id))&amp;quot;&lt;/span&gt;;&lt;br /&gt;        piezaIncrUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncLastReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaIncrUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncNewReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaIncrUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncClientId, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaIncrUpdates.Connection = conexionServidor;&lt;br /&gt;        piezaSyncAdapter.SelectIncrementalUpdatesCommand = piezaIncrUpdates;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//deletes nuevos del servidor&lt;/span&gt;&lt;br /&gt;        SqlCommand piezaIncrDeletes = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        piezaIncrDeletes.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SELECT [idPieza],[numSerie],[descripcion],[precio],[ultimoCoste],[stock],[stockMinimo]&amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,[ubicacionAlmacen],[unidadMedida] &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot; FROM [LightMaintenanceSynchSer].[dbo].[Pieza_Tombstone] &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;WHERE (@sync_initialized = 1 &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND DeleteTimestamp &amp;gt; @sync_last_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND DeleteTimestamp &amp;lt;= @sync_new_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND DeleteId &amp;lt;&amp;gt; @sync_client_id)&amp;quot;&lt;/span&gt;;&lt;br /&gt;        piezaIncrDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncInitialized, SqlDbType.Bit);&lt;br /&gt;        piezaIncrDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncLastReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaIncrDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncNewReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaIncrDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncClientId, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaIncrDeletes.Connection = conexionServidor;&lt;br /&gt;        piezaSyncAdapter.SelectIncrementalDeletesCommand = piezaIncrDeletes;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//comandos de carga/subida&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//aplicamos inserts al servidor&lt;/span&gt;&lt;br /&gt;        SqlCommand piezaInserts = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        piezaInserts.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;INSERT INTO [LightMaintenanceSynchSer].[dbo].[Pieza] ([idPieza],[numSerie],[descripcion]&amp;quot;&lt;/span&gt;+&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,[precio],[ultimoCoste],[stock],[stockMinimo],[ubicacionAlmacen],[unidadMedida],[UpdateId],[InsertId]) &amp;quot;&lt;/span&gt;+&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;VALUES @idPieza,@numSerie,@descripcion,@precio,@ultimoCoste,@stock,@stockMinimo,@ubicacionAlmacen,&amp;quot;&lt;/span&gt;+&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;@unidadMedida, @sync_client_id, @sync_client_id) &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SET @sync_row_count = @@rowcount&amp;quot;&lt;/span&gt;;&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@idPieza&amp;quot;&lt;/span&gt;, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@numSerie&amp;quot;&lt;/span&gt;, SqlDbType.NVarChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@descripcion&amp;quot;&lt;/span&gt;, SqlDbType.NVarChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@precio&amp;quot;&lt;/span&gt;, SqlDbType.Money);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@ultimoCoste&amp;quot;&lt;/span&gt;, SqlDbType.Money);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@stock&amp;quot;&lt;/span&gt;, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@stockMinimo&amp;quot;&lt;/span&gt;, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@ubicacionAlmacen&amp;quot;&lt;/span&gt;, SqlDbType.NChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@unidadMedida&amp;quot;&lt;/span&gt;, SqlDbType.NChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncClientId, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncRowCount, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Connection = conexionServidor;&lt;br /&gt;        piezaSyncAdapter.InsertCommand = piezaInserts;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//aplicamos updates al servidor&lt;/span&gt;&lt;br /&gt;        SqlCommand piezaUpdates = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        piezaUpdates.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;UPDATE Pieza SET &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;idPieza = @idPieza &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,numSerie = @numSerie &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,descripcion = @descripcion &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,precio = @precio &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,ultimoCoste = @ultimoCoste &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,stock = @stock &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,stockMinimo = @stockMinimo &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,ubicacionAlmacen = @ubicacionAlmacen &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,unidadMedida = @unidadMedida  &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;,UpdateId = @sync_client_id &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;WHERE (idPieza = @idPieza) &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND (@sync_force_write = 1 &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;OR (UpdateTimestamp &amp;lt;= @sync_last_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;OR UpdateId = @sync_client_id)) &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SET @sync_row_count = @@rowcount&amp;quot;&lt;/span&gt;;&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@idPieza&amp;quot;&lt;/span&gt;, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@numSerie&amp;quot;&lt;/span&gt;, SqlDbType.NVarChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@descripcion&amp;quot;&lt;/span&gt;, SqlDbType.NVarChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@precio&amp;quot;&lt;/span&gt;, SqlDbType.Money);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@ultimoCoste&amp;quot;&lt;/span&gt;, SqlDbType.Money);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@stock&amp;quot;&lt;/span&gt;, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@stockMinimo&amp;quot;&lt;/span&gt;, SqlDbType.Int);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@ubicacionAlmacen&amp;quot;&lt;/span&gt;, SqlDbType.NChar);&lt;br /&gt;        piezaInserts.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@unidadMedida&amp;quot;&lt;/span&gt;, SqlDbType.NChar);&lt;br /&gt;        piezaUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncClientId, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncForceWrite, SqlDbType.Bit);&lt;br /&gt;        piezaUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncLastReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaUpdates.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncRowCount, SqlDbType.Int);&lt;br /&gt;        piezaUpdates.Connection = conexionServidor;&lt;br /&gt;        piezaSyncAdapter.UpdateCommand = piezaUpdates;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//aplicamos deletes al servidor            &lt;/span&gt;&lt;br /&gt;        SqlCommand piezaDeletes = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand();&lt;br /&gt;        piezaDeletes.CommandText =&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;DELETE FROM Pieza &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;WHERE (idPieza = @idPieza) &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;AND (@sync_force_write = 1 &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;OR (UpdateTimestamp &amp;lt;= @sync_last_received_anchor &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;OR UpdateId = @sync_client_id)) &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SET @sync_row_count = @@rowcount &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;IF (@sync_row_count &amp;gt; 0)  BEGIN &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;UPDATE Pieza_Tombstone &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;SET DeleteId = @sync_client_id &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;WHERE (idPieza = @idPieza) &amp;quot;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color: #006080"&gt;&amp;quot;END&amp;quot;&lt;/span&gt;;&lt;br /&gt;        piezaDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@idPieza&amp;quot;&lt;/span&gt;, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncForceWrite, SqlDbType.Bit);&lt;br /&gt;        piezaDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncLastReceivedAnchor, SqlDbType.Timestamp);&lt;br /&gt;        piezaDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncClientId, SqlDbType.UniqueIdentifier);&lt;br /&gt;        piezaDeletes.Parameters.Add(&lt;span style="color: #006080"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + SyncSession.SyncRowCount, SqlDbType.Int);&lt;br /&gt;        piezaDeletes.Connection = conexionServidor;&lt;br /&gt;        piezaSyncAdapter.DeleteCommand = piezaDeletes;&lt;br /&gt;&lt;br /&gt;         &lt;span style="color: #008000"&gt;//añadimos el adaptador&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.SyncAdapters.Add(piezaSyncAdapter);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ejemplo de implementación del proveedor local para SQL Server Compact&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #008000"&gt;//Proveedor local SQL Server Compact&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ClienteSyncProvider : SqlCeClientSyncProvider&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ClienteSyncProvider()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000"&gt;//Incializamos la cadena de conexión para la base de datos sql ce.&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ConnectionString = strClientConnString;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000"&gt;//pese a que no es necesario podemos intervenir durante y despues de la creación del esquema de la base de datos local&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.CreatingSchema += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventHandler&amp;lt;CreatingSchemaEventArgs&amp;gt;(ClienteSyncProvider_CreatingSchema);&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.SchemaCreated += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventHandler&amp;lt;SchemaCreatedEventArgs&amp;gt;(ClienteSyncProvider_SchemaCreated);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ClienteSyncProvider_CreatingSchema(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, CreatingSchemaEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Console.Write(&lt;span style="color: #006080"&gt;&amp;quot;Creating schema for &amp;quot;&lt;/span&gt; + e.Table.TableName + &lt;span style="color: #006080"&gt;&amp;quot; | &amp;quot;&lt;/span&gt;);&lt;br /&gt;        &lt;span style="color: #008000"&gt;//e.Schema.Tables[&amp;quot;Pieza&amp;quot;].Columns[&amp;quot;idPieza&amp;quot;].RowGuid = true;&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ClienteSyncProvider_SchemaCreated(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, SchemaCreatedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080"&gt;&amp;quot;Schema created for &amp;quot;&lt;/span&gt; + e.Table.TableName);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;3.- ¿Substituyen Sync Services for ADO.NET a RDA?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;NO. Sync Services for ADO.NET &lt;strong&gt;NO&lt;/strong&gt; pretende sustituir a RDA. Sin embargo, Microsoft ha anunciado que no seguirá evolucionando RDA y mantendrá el soporte a ésta en tanto en cuanto existan clientes que basen sus soluciones de sincronización en base a esta tecnología. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;4.- Sync Services for ADO.NET funcionan únicamente para base de datos SQL Server Compact, ¿Cierto?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Falso. Pese a que existe un proveedor específico para SQL Server Compact 3.5, Sync Services for ADO.NET 2.0 puede ser utilizado con cualquier proveedor de datos. Sin embargo, para aquellos proveedores distintos a SQL Server Compact, deberemos implementar la lógica de funcionamiento para cada uno de ellos. Actualmente existen algunos proveedores desarrollados como por ejemplo el de &lt;a href="http://geeks.ms/blogs/jmtorres/archive/2008/06/25/cliente-sql-server-express-para-sync-services-para-ado-net.aspx" target="_blank" mce_href="http://geeks.ms/blogs/jmtorres/archive/2008/06/25/cliente-sql-server-express-para-sync-services-para-ado-net.aspx"&gt;SQL Server Express&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;5.- ¿Qué tipos de escenarios de sincronización soporta Sync Services for ADO.NET 2.0?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Básicamente se distinguen dos tipos de escenarios:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Escenarios off-line: este tipo de escenarios tienen la particularidad de que existe un único proveedor remoto y uno o varios proveedores locales los cuales pueden estar o no conectados en línea. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Escenarios de colaboración o peer-to-peer: sin embargo aquí no existe la figura de remoto o local. Sencillamente todos son proveedores se sincronizan entre sí ya que son proveedores de igual a igual. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="" cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;&lt;br /&gt;    &lt;tr&gt;&lt;br /&gt;      &lt;td class="" valign="top" width="200"&gt;&lt;img src="http://i.msdn.microsoft.com/bb887608.Figure3(en-us).png" mce_src="http://i.msdn.microsoft.com/bb887608.Figure3(en-us).png" /&gt; &lt;/td&gt;&lt;br /&gt;&lt;br /&gt;      &lt;td class="" valign="top" width="200"&gt;&lt;img src="http://i.msdn.microsoft.com/bb887608.Figure4(en-us).png" mce_src="http://i.msdn.microsoft.com/bb887608.Figure4(en-us).png" /&gt; &lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;    &lt;tr&gt;&lt;br /&gt;      &lt;td class="" valign="top" width="200"&gt;Escenarios off-line&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;      &lt;td class="" valign="top" width="200"&gt;Escenarios de colaboración o punto a punto&lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;  &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;strong&gt;6.- ¿Existe algún proveedor para SQL Server Express?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Sí. Pero es de &lt;a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=1200" target="_blank" mce_href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=1200"&gt;código abierto&lt;/a&gt; y están bajo licencia Microsoft Public License, con lo que no hay garantías de uso, pese que a por mi experiencia funciona bastante bien (al menos en escenarios sencillos).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;7.- ¿En qué punto, exactamente se unen Sync Services for ADO.NET 2.0 y la nueva característica de SQL Server 2008 Change Tracking?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ante un escenarios de sincronización de dos proveedores como pueden ser SQL Server Compact y SQL Server 2008, Sync Services for ADO.NET 2.0 aporta un proveedor específico para SQL Server Compact en el cual apenas hay que hacer nada. Este proveedor se encarga de:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Insertar los cambios propagados desde el origen de datos remoto &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Propagar sus propios cambios al origen de datos remoto &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Manejar los conflictos, si los hay. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Por otro lado, el proveedor remoto (SQL Server 2008) realizará:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Obtener todos los cambios acontecidos sobre las tablas o conjunto de datos susceptibles de sincronización y propagarlos al proveedor local. –&amp;gt; &lt;em&gt;Aqui entra en escena Change Tracking!!!&lt;/em&gt; &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Aplicar los cambios propagados desde el proveedor local a la base de datos SQL Server 2008. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;Manejo y control de conflictos. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para el proveedor de SQL Server 2008, todo el control de cambios acontecidos en el mismo pueden ser controlados por Change Tracking. Change Tracking mantendrá durante el espacio de tiempo especificado todos los cambios realizados sobre las tablas habilitadas para tal fin. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;8.- Y si no utilizo SQL Server 2008, y por lo tanto no hago uso de Change Tracking…&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Deberás crear un mecanismo de seguimiento de filas mediante la inserción de columnas que determinen el cuándo y quién ha añadido o modificado cada una de las fila. Esto es una técnica invasiva con lo que conlleva una mayor sobrecarga de información. Para las filas que se eliminen se deben utilizar desencadenadores y “tablas lápida” para almacenar las filas eliminadas asi como la información de versión representada mediante RowGuid Columns. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Por ejemplo,&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La tabla Customer de la base de datos Northwind tiene el siguiente esquema:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; SyncSamplesDb.Sales.Customer(&lt;br /&gt;    CustomerId uniqueidentifier &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; NEWID(), &lt;br /&gt;    CustomerName nvarchar(100) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    SalesPerson nvarchar(100) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    CustomerType nvarchar(100) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Siguiendo las instrucciones de &lt;a href="http://msdn.microsoft.com/en-us/library/cc305973.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/cc305973.aspx"&gt;la siguiente tabla de la librería del Microsoft Sync Framework Developer Center&lt;/a&gt;, vamos a configurar la tabla para que detecte las modificaciones bidireccionales de inserción, modificación y eliminación de datos y para ello primero añadimos las columnas que realizaran el seguimiento:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; SyncSamplesDb.Sales.Customer &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;ADD&lt;/span&gt; UpdateTimestamp &lt;span style="color: #0000ff"&gt;timestamp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; SyncSamplesDb.Sales.Customer &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;ADD&lt;/span&gt; InsertTimestamp &lt;span style="color: #0000ff"&gt;binary&lt;/span&gt;(8) &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: #cc6633"&gt;@@DBTS&lt;/span&gt; + 1&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; SyncSamplesDb.Sales.Customer &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;ADD&lt;/span&gt; UpdateId uniqueidentifier &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: #006080"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; SyncSamplesDb.Sales.Customer &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;ADD&lt;/span&gt; InsertId uniqueidentifier &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: #006080"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Y las indexamos con índices no clusterizados.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color: #0000ff"&gt;INDEX&lt;/span&gt; IX_Customer_UpdateTimestamp&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; Sales.Customer(UpdateTimestamp)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color: #0000ff"&gt;INDEX&lt;/span&gt; IX_Customer_InsertTimestamp&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; Sales.Customer(InsertTimestamp)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color: #0000ff"&gt;INDEX&lt;/span&gt; IX_Customer_UpdateId&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; Sales.Customer(UpdateId)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color: #0000ff"&gt;INDEX&lt;/span&gt; IX_Customer_InsertId&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; Sales.Customer(InsertId)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Debido a que queremos realizar el seguimiento de eliminaciones, crearemos las tabla lápida.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; SyncSamplesDb.Sales.Customer_Tombstone(&lt;br /&gt;    CustomerId uniqueidentifier &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt;, &lt;br /&gt;    CustomerName nvarchar(100) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    SalesPerson nvarchar(100) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    CustomerType nvarchar(100) &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    DeleteId uniqueidentifier &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: #006080"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;,&lt;br /&gt;    DeleteTimestamp &lt;span style="color: #0000ff"&gt;timestamp&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Y por lo tanto, debemos crear, además, el desencadenador.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TRIGGER&lt;/span&gt; Customer_DeleteTrigger &lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; SyncSamplesDb.Sales.Customer &lt;span style="color: #0000ff"&gt;FOR&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff"&gt;BEGIN&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; NOCOUNT &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;DELETE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; SyncSamplesDb.Sales.Customer_Tombstone &lt;br /&gt;        &lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; CustomerId &lt;span style="color: #0000ff"&gt;IN&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; CustomerId &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; deleted)&lt;br /&gt;    INSERT &lt;span style="color: #0000ff"&gt;INTO&lt;/span&gt; SyncSamplesDb.Sales.Customer_Tombstone (CustomerId, CustomerName, SalesPerson, CustomerType) &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; CustomerId, CustomerName, SalesPerson, CustomerType &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; deleted&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; NOCOUNT &lt;span style="color: #0000ff"&gt;OFF&lt;/span&gt;&lt;br /&gt;END&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Finalmente, los índices de la tabla lápida.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&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: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CLUSTERED&lt;/span&gt; &lt;span style="color: #0000ff"&gt;INDEX&lt;/span&gt; IX_Customer_Tombstone_DeleteTimestamp&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; Sales.Customer_Tombstone(DeleteTimestamp)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt; &lt;span style="color: #0000ff"&gt;INDEX&lt;/span&gt; IX_Customer_Tombstone_DeleteId&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; Sales.Customer_Tombstone(DeleteId)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Más info: &lt;a href="http://msdn.microsoft.com/en-us/library/cc305973.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/cc305973.aspx"&gt;How to: Use a Custom Change Tracking System&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;9.- También podría utilizar Data Change Capture en lugar de Change Tracking, ¿no?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;No. Debido a la naturaleza asíncrona de Data Change Capture, éste es idóneo para otro tipo de escenarios.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;10.- ¿Existe algún tipo de soporte en forma de diseñador o asistentes desde el Visual Studio 2008 .NET?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Si. En nuestros proyectos podemos añadir un elemento llamado base de dato local caché (Local Database Cache), &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_i0a6wx1FjwE/SWR-H4z8qSI/AAAAAAAAAEQ/skdJXEBHEOQ/s1600-h/ElementoLocalDatabase2.jpg" mce_href="http://geeks.ms/blogs/jmtorres/ElementoLocalDatabase_4509D6F1.jpg"&gt;&lt;img title="ElementoLocalDatabase" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="157" alt="ElementoLocalDatabase" src="http://lh6.ggpht.com/_i0a6wx1FjwE/SWR-IXFg6JI/AAAAAAAAAEU/bAQDH2AS3Zc/ElementoLocalDatabase_thumb.jpg?imgmax=800" width="244" border="0" mce_src="http://geeks.ms/blogs/jmtorres/ElementoLocalDatabase_thumb_21F96581.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;cuyo diseñador nos permite la creación de una solución basada en Sync Services for ADO.NET.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_i0a6wx1FjwE/SWR-JO2HquI/AAAAAAAAAEg/Fki92RpLpOA/s1600-h/ConfigureDataSync2.jpg" mce_href="http://geeks.ms/blogs/jmtorres/ConfigureDataSync_5C746555.jpg"&gt;&lt;img title="ConfigureDataSync" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="176" alt="ConfigureDataSync" src="http://lh6.ggpht.com/_i0a6wx1FjwE/SWR-JgcD-iI/AAAAAAAAAEs/IxFkPclI3dQ/ConfigureDataSync_thumb.jpg?imgmax=800" width="244" border="0" mce_src="http://geeks.ms/blogs/jmtorres/ConfigureDataSync_thumb_59EB3397.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;11. ¿Cuál es la principal característica diferenciadora de Sync Services for ADO.NET con Merge Replication o RDA?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hay varias. Empezando por la independencia del protocolo o tipo de red. Sync Services for ADO.NET, además, está orientada a servicios con lo que podemos exponer el proveedor remoto mediante WCF. Además, el control y gestión de conflictos es único ya que nos permite aplicar lógica de negocio para la resolución de los mismos. Por último, podemos hacer un seguimiento de datos a nivel de columna.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;12.- ¿Que significa seguimiento a nivel de columna o de fila?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Por defecto, el seguimiento de cambios se realiza a nivel de fila, igual que en Merge replication o RDA. Esto significa que ante la modificación de cualquier columna se evaluará la fila como modificada con lo que tras una sincronización se propagará dicha fila, como elemento básico, al proveedor de destino. El seguimiento a nivel de columna utiliza únicamente las columnas de las filas modificadas para la acción de sincronización, sin embargo, y pese a que la cantidad de información (cambios) es inferior repercute notablemente en el rendimiento de SQL Server y salvo casos excepcionales debería ser evitado. &lt;strong&gt;&lt;font size="2"&gt;&lt;font size="1"&gt;NOTA: Change Tracking de SQL Server 2008 permite el seguimiento a nivel de columna&lt;/font&gt;.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;13.- ¿Por qué la detección y manejo de conflictos es único? &lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Porque permite, como dije antes, aplicar lógica de negocio o aplicar comportamientos específicos en base al origen del conflicto. Así pues, podemos predisponer el comportamiento de la sincronización ante un conflicto para que siempre “gane” el proveedor servidor o local, pudiendo incluso combinar los resultados si esto es posible. Si el conflicto es inesperado podemos registrarlo para poder evaluarlo más adelante. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb725997.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/bb725997.aspx"&gt;Más Info&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;14.- ¿Que se entiende por un conflicto?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Un conflicto es la modificación simultánea durante una sesión de sincronización de unos elementos de datos (ItemData) por dos o más orígenes. Esto da lugar a que ante la acción de sincronización deba intervenir algún tipo lógica que determine cual va a ser el resultado final para todos los participantes. Además, un conflicto puede ser una violación de algún tipo de restricción del motor de la base de datos como por ejemplo una FOREIGN KEY.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;File Sync y Feed Sync&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;1.- ¿Que tipo de archivos puedo sincronizar?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Cualquier tipo de archivo o carpeta compatibles con Win-32 como FAT o NTFS.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;2.- ¿Existe alguna aplicación de ejemplo con código?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La más famosa e idónea para comenzar en este tipo de aplicaciones es &lt;a href="http://blogs.msdn.com/sync/archive/2008/08/14/now-available-synctoy-2-0-file-synchronization.aspx" target="_blank" mce_href="http://blogs.msdn.com/sync/archive/2008/08/14/now-available-synctoy-2-0-file-synchronization.aspx"&gt;SyncToy&lt;/a&gt;.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/sync/archive/2008/08/14/now-available-synctoy-2-0-file-synchronization.aspx" target="_blank" mce_href="http://blogs.msdn.com/sync/archive/2008/08/14/now-available-synctoy-2-0-file-synchronization.aspx"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://ts4.images.live.com/images/thumbnail.aspx?q=275524953935&amp;amp;id=8531987d798de602076cb6c83814da23" mce_src="http://ts4.images.live.com/images/thumbnail.aspx?q=275524953935&amp;amp;id=8531987d798de602076cb6c83814da23" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;3.- ¿Qué peculiaridad tiene RSS Sync Feed respecto a File Sync? &lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Que la sincronización de orígenes SSE únicamente son unidireccionales mientras que en FileSync son bidireccionales.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-4809567887061402577?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/4809567887061402577/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=4809567887061402577' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4809567887061402577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4809567887061402577'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2009/01/microsoft-sync-framework-faq.html' title='Microsoft Sync Framework - FAQ -'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_i0a6wx1FjwE/SWR-IXFg6JI/AAAAAAAAAEU/bAQDH2AS3Zc/s72-c/ElementoLocalDatabase_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1055097647841827483</id><published>2008-12-08T16:03:00.000+01:00</published><updated>2008-12-08T16:05:45.802+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodePlex'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Application Architecture Guide 2.0 - Aplicaciones moviles</title><content type='html'>&lt;p mce_keep="true"&gt;Dentro del marco del ya conocido &lt;a class="" href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Home" target="_blank" mce_href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Home"&gt;patterns &amp;amp; practices&lt;/a&gt; de guiía de arquitectura de aplicaciones ha aparecido &lt;a class="" href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Chapter%2019%20-%20Mobile%20Applications&amp;amp;referringTitle=Home" target="_blank" mce_href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Chapter%2019%20-%20Mobile%20Applications&amp;amp;referringTitle=Home"&gt;un capítulo integro para aplicaciones móviles&lt;/a&gt;. &lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Se trata del &lt;strong&gt;capítulo 19&lt;/strong&gt; titulado &lt;strong&gt;Mobile Applications&lt;/strong&gt; en los que podremos encontrar desde cómo afrontar el desarrollo de una aplicación identificando los componentes de la misma, pasando por conocer las claves del diseño y del contexto o escenario dónde se va a ejecutar, hasta los aspectos más destacados de la comunicación, acceso a datos y sincronización, entre otros.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;&lt;img height="422" alt="" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=AppArchGuide&amp;amp;DownloadId=49498" width="516" border="0" mce_src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=AppArchGuide&amp;amp;DownloadId=49498" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Sin duda un must read, como mínimo para consolidar conocimiento o ver otros puntos de vista. Si queréis algo más práctico, el recurso por excelencia es &lt;a class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=428E4C3D-64AD-4A3D-85D2-E711ABC87F04&amp;amp;displaylang=en" target="_blank" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=428E4C3D-64AD-4A3D-85D2-E711ABC87F04&amp;amp;displaylang=en"&gt;Windows Mobile Line of Business Solution Accelerator 2008&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Mery krismas, manué.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1055097647841827483?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1055097647841827483/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1055097647841827483' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1055097647841827483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1055097647841827483'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/12/application-architecture-guide-20.html' title='Application Architecture Guide 2.0 - Aplicaciones moviles'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-4629327773778763482</id><published>2008-11-21T21:55:00.000+01:00</published><updated>2008-11-21T21:56:34.816+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Desarrollo de Servicios Windows para Mobile bajo codigo administrado</title><content type='html'>&lt;p mce_keep="true"&gt;Recientemente me encontrado con un proyecto en &lt;em&gt;Codeplex&lt;/em&gt; para la utlización de servicios bajo &lt;strong&gt;Windows Mobile&lt;/strong&gt; de &lt;a class="" href="http://blogs.compactframework.de/Peter.Nowak/" mce_href="http://blogs.compactframework.de/Peter.Nowak/"&gt;Peter Nowak&lt;/a&gt; llamado &lt;a class="" href="http://www.codeplex.com/managedserviceswm" mce_href="http://www.codeplex.com/managedserviceswm"&gt;Managed Services for Windows Mobile&lt;/a&gt;. Se trata de una librería bajo código administrado que permite la creación de Servicios de forma aproximada a como lo hace Windows Desktop. &lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;&lt;img height="320" alt="" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=managedserviceswm&amp;amp;DownloadId=35732" width="240" border="0" mce_src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=managedserviceswm&amp;amp;DownloadId=35732" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Entre sus características destaca: &lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div mce_keep="true"&gt;Para utilizar esta libreria no se requiere de acceso a P/Invoke.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div mce_keep="true"&gt;Está desarrollada en .NET CF 2.0.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div mce_keep="true"&gt;Ejecuta servicios automáticamente al iniciar el sistema&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div mce_keep="true"&gt;Contiene un administrador bastante sencillo de utilizar. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;&lt;img height="320" alt="" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=managedserviceswm&amp;amp;DownloadId=35734" width="240" border="0" mce_src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=managedserviceswm&amp;amp;DownloadId=35734" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Por las pruebas que he realizado en un emulador tiene, aparentemente -está en versión Alpha-, buena pinta. Desde el mismo site de Codeplex viene con un ejemplo de servicio, documentación, código fuente y el Service Manager utility, con lo que ejecutarlo o crear tu propio servicio no es demasiado complicado, otra cosa es entender realmente como funciona internamente.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;&lt;img height="640" alt="" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=managedserviceswm&amp;amp;DownloadId=35737" width="811" border="0" mce_src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=managedserviceswm&amp;amp;DownloadId=35737" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Por lo visto, está basado en un post del blog de &lt;a class="" href="http://bansky.net/blog/" mce_href="http://bansky.net/blog/"&gt;&lt;strong&gt;Pavel Bánský&lt;/strong&gt;&lt;/a&gt;, en el que explica &lt;a class="" href="http://bansky.net/blog/2008/04/services-for-windows-mobile-in-managed-code/" mce_href="http://bansky.net/blog/2008/04/services-for-windows-mobile-in-managed-code/"&gt;cómo desarrollar servicios para Windows Mobile bajo código administrado&lt;/a&gt;. Todo parte de la idea de ejecución in-process de una DLL bajo &lt;strong&gt;\Windows\Services.exe&lt;/strong&gt;, sin embargo la forma más habitual para hacerlo es mediante código nativo. Pavel muestra como encapsular las llamadas a WinCE y Peter se basa en el resultado para crear una librería íntegra para la creación de servicios bajo código administrado.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Si quereis profundizar más sobre el tema mirad en &lt;a class="" href="http://msdn.microsoft.com/en-us/library/aa455187.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa455187.aspx"&gt;Services.exe Application Development for Windows Mobile-based Devices&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-4629327773778763482?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/4629327773778763482/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=4629327773778763482' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4629327773778763482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4629327773778763482'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/11/desarrollo-de-servicios-windows-para.html' title='Desarrollo de Servicios Windows para Mobile bajo codigo administrado'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3818957765533475290</id><published>2008-09-26T23:20:00.000+02:00</published><updated>2008-09-27T23:22:08.069+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>¿¡¡Windows Mobile se esta mueriendo!!?</title><content type='html'>&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;IMG height=190 alt="" src="http://enatorv.files.wordpress.com/2008/06/suicidio.jpg" width=230 align=left border=0 mce_src="http://enatorv.files.wordpress.com/2008/06/suicidio.jpg"&gt;&amp;nbsp; Acabo de llegar a casa y he recibido, con agrado, mi publicación periódica de &lt;STRONG&gt;Smartphone &amp;amp; Pocket PC Magazine&lt;/STRONG&gt;. Sobre la portada principal venía enganchado en forma de aviso en tamaño completo una nota en la que comenzaba con: &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;br /&gt;&lt;P&gt;&lt;EM&gt;Dear Smartphone &amp;amp; Pocket PC magazine Subscriber:&lt;/EM&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Mal vamos, a ver que ha pasado, pensé. Seguidamente después de explicar un resumen de los cerca de 11 años que lleva la publicación en el mercado, nos notifica qué en el mes de noviembre &lt;U&gt;será la última publicación&lt;/U&gt; y seguidamente se suspenderá. Dicha suspensión es debida a la p&lt;STRONG&gt;oca esponsorización&amp;nbsp;y clientes de Windows Mobile&lt;/STRONG&gt;.&amp;nbsp;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;La nota no para aquí. Seguidamente anuncian que seguirán una nueva publicación llamada &lt;STRONG&gt;Smartphone Magazine's iPhone Life&lt;/STRONG&gt; ya que consideran oportuno apostar por un teléfono cuyo&amp;nbsp;acogimiento por parte de los usuarios&amp;nbsp;le augura un gran futuro y, evidentemente, es totalmente lícito.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Para finalizar citan textualmente que ven un futuro muy negro a Windows Mobile, y que pese a los esfuerzos de algunos fabricantes y de la propia Microsoft por apostar por nuevos dispositivos, deciden apostar por el iPhone por cuestiones de negocio.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Esto es un fiel retrato de lo que está sucediendo en EEUU y que muy probablemente empiece a notarse en Europa con la llegada, desde hace ya unos meses, del iPhone. Además de preocuparme por aquellos que han ampliado la hipoteca para poder adquirir uno y &lt;I&gt;ligarse de por vida&lt;/I&gt; con Telefónica, me preocupa la comparación iPhone-Windows Mobile que tiene lugar en algunos rincones de la red. Bajo mi punto de vita no existe comparación posible entre un dispositivo físico (cerrado y no tiene Copy&amp;amp;Paste)&amp;nbsp;y un sistema operativo (que debió de haberse reciclado mucho antes); sí lo aceptaría entre &lt;B&gt;iPhone- HTC Diamond&lt;/B&gt;, por ejemplo.&amp;nbsp;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Pero está no es la cuestión; no escribo este post para criticar o alabar. La cuestión es que de los más de 1.000.000.000 -mil millones- de móviles&amp;nbsp;&amp;nbsp;que se vendieron en el mundo en el 2006, la mitad de la tarta correspondía a &lt;B&gt;Nokia&lt;/B&gt; y a &lt;B&gt;Motorola&lt;/B&gt;. Nokia será lo que será pero manda en el mercado; a mí no me gustan, pero están ahí. Motorola por otro lado hace sus finitos con Windows Mobile pero el afán de competir con las &lt;B&gt;Blackberry&lt;/B&gt; &amp;amp; Cía, (creo -no tengo datos-) no ha dado muchos frutos. En este punto es dónde me interesa saber ¿Qué es lo que &lt;B&gt;&lt;U&gt;no&lt;/U&gt;&lt;/B&gt; está consiguiendo Microsoft con los fabricantes?&amp;nbsp; Por si fuera poco, esta semana se presentó en España en el &lt;B&gt;Google Developer&lt;/B&gt; Day el &lt;B&gt;&lt;A href="http://www.htc.com/www/product/g1/overview.html"&gt;G1 de HTC&lt;/A&gt;&lt;/B&gt;, el primer móvil que saldrá al mercado para la operadora &lt;B&gt;AT&amp;amp;T&lt;/B&gt; en EEUU. Uno más al grupo. Este además, ha aprendido de los errores del iPhone, más la legión de seguidores de SO Linux y la amplia comunidad de desarrolladores que la promueven, se va a convertir seguro en el gran rival de Windows Mobile, me refiero a &lt;B&gt;Android&lt;/B&gt;. ¿Qué pasará con el iPhone? ¿Conocéis un sistema llamado Mac que empezó por allá los 70? &lt;/P&gt;&lt;br /&gt;&lt;P&gt;De todas formas, creo que pese a que Windows Mobile 7.0 lo tendrá difícil, ofrecerá gratas sensaciones. Además es un sistema operativo basado sobre el núcleo multimodular Windows CE 6.0 con unos cuantos años a sus espaldas, punto que no comparte ningún otro SO. Me pregunto si los fabricantes y operadores también las tendrán.&lt;/P&gt;&lt;/SPAN&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3818957765533475290?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3818957765533475290/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3818957765533475290' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3818957765533475290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3818957765533475290'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/09/windows-mobile-se-esta-mueriendo.html' title='¿¡¡Windows Mobile se esta mueriendo!!?'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-800514735758161302</id><published>2008-09-20T23:19:00.000+02:00</published><updated>2008-09-27T23:20:53.538+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opinión'/><title type='text'>La herencia entre clases, ¿a ti te deja dormir?</title><content type='html'>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG style="WIDTH: 351px; HEIGHT: 261px" height=301 alt="" src="http://geeks.ms/photos/jmtorres/images/100041/original.aspx" width=400 align=left border=0 mce_src="http://geeks.ms/photos/jmtorres/images/100041/original.aspx"&gt;Una de las malas prácticas más comunes que solemos acusar los desarrolladores es el abusivo uso de la herencia entre clases. De hecho,&amp;nbsp;yo mismo en&amp;nbsp;mis primeros pasos en OO con Java en la universidad, asociaba erróneamente la OO a la herencia, es decir si no hay herencia no hay OO. El supuesto o teórico despiece que debe permitir la reutilización de código gracias a la flexibilidad de esta propiedad, lo confundía con descuartizarlo de tal forma que obtenía&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;un rompecabezas lógico de clases inmanejable&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;e ineficiente; eso sí, el diagrama estático en UML quedaba muy bien (en apariencia visual claro).&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Hace relativamente poco, hablando con un ex profesor sobre el tema en cuestión, me comentó acerca de la existencia de un principio, el &lt;STRONG&gt;&lt;A class="" href="http://en.wikipedia.org/wiki/Liskov_Substitution_Principle" mce_href="http://en.wikipedia.org/wiki/Liskov_Substitution_Principle"&gt;Principio de Sustitución de Liskov &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;(LSP)&lt;/A&gt;&lt;/STRONG&gt;, el cual permite confirmar la eficiencia (no eficacia) de una herencia entre clases. LSP recibe el nombre de &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;A href="http://es.wikipedia.org/wiki/Barbara_H._Liskov"&gt;Barbara Liskov&lt;/A&gt;&lt;/B&gt; quién lo presentó en un seminario de OO. En la herencia se establece la subclase como “es un” (“is a”) -especificación- de la clase base y Barbara argumentó que además de “ser un”, la subclase debía “comportarse como” . &lt;B style="mso-bidi-font-weight: normal"&gt;Andy Hunt&lt;/B&gt; y &lt;B style="mso-bidi-font-weight: normal"&gt;Dave Thomas&lt;/B&gt; (&lt;/FONT&gt;&lt;A href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X"&gt;&lt;FONT face=Calibri size=3&gt;The pragmatic programmer&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;) resumieron LSP como: “Las subclases deben ser usables a través de la interfaz de la clase base sin que el usuario tenga la necesidad de conocer la diferencia.”. (&lt;/FONT&gt;&lt;A href="http://www.objectmentor.com/resources/articles/lsp.pdf"&gt;&lt;FONT face=Calibri size=3&gt;Más info&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;)&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Esta misma tarde, ha tenido lugar &lt;A class="" href="http://geeks.ms/blogs/fhualpa/archive/2008/09/18/elbruno-en-livemeeting.aspx" mce_href="/blogs/fhualpa/archive/2008/09/18/elbruno-en-livemeeting.aspx"&gt;un Webcast de Bruno&lt;/A&gt;, en cual he participado como oyente. Más allá del Webcast en sí, el cual ha sido brillante como no podía esperar,&amp;nbsp; Bruno ha hablado sobre el mal uso que se hace –de forma genérica- de la herencia, la cual cosa me ha llamado la atención y me ha dado pie a que, posteriormente, una vez finalizado el Webcast, le hiciera una pregunta a acerca del uso de test unitarios basados&amp;nbsp; específicos para evaluar la eficienciade la herencia, ya sea por LSP u otros técnicas. La respuesta fue buena: destacó la abstracción de interfaces –efectivamente como una aproximación válida- &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;y de un principio &lt;U&gt;&lt;STRONG&gt;que comparto absolutamente con él&lt;/STRONG&gt;&lt;/U&gt;: el &lt;A class="" href="http://es.wikipedia.org/wiki/Sentido_com%C3%BAn" mce_href="http://es.wikipedia.org/wiki/Sentido_com%C3%BAn"&gt;Principio del Sentido Común&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;IMG height=170 alt="" src="http://www.hachemuda.com/tutorialPostIt/postit.jpg" width=230 align=left border=0 mce_src="http://www.hachemuda.com/tutorialPostIt/postit.jpg"&gt;Ahora bien, ¿Qué factores influyen en el sentido “&lt;I style="mso-bidi-font-style: normal"&gt;más común&lt;/I&gt;” del sentido común? La experiencia, la capacidad de abstracción, los conocimiento teóricos sobre el tema,,,,, Cuando oí hablar por primera vez del LSP instintivamente analicé código hecho por mí para verificar si se cumplía dicho principio y encontré una herencia en cuestión –estoy convencido que hay más- que no lo hizo, sin embargo, dicho código forma parte de una solución funcional, está en producción. Luego, ¿es incorrecto pese a que funciona? ¿Es eficaz, pero no eficiente? ¿Podría encontrarme problemas si decidiera o requiriera extender las clases? Si es así, ¿Debo tener en cuenta al pie de la letra el LSP u otros mecanismos cada vez que confeccione un diagrama estático de clases? &lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Ojo, no pretendo discutir el LSP, faltaría más. La herencia llevada de forma eficiente&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;reduce la complejidad al desarrollador al poderse centrar únicamente en los atributos genéricos evitando tener que entrar en detalles; LSP es un principio, no como axioma sino lógico, que determina el nivel de eficiencia de la herencia entre clases y, por consiguiente, es un principio válido. Me refiero más a la línea que marcan los principios y las doctrinas académicas y las necesidades y realidades actuales. &lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Probablemente en este punto entre en escena las técnicas de calidad y demás. Ahí no voy a entrar; en &lt;/FONT&gt;&lt;A href="http://geeks.ms/search/SearchResults.aspx?q=calidad"&gt;&lt;FONT face=Calibri size=3&gt;esta comunidad&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; hay gente que sabe mejor que yo del tema; más bien me gustaría saber vuestra experiencia u opinión&amp;nbsp;al respecto, anécdotas y situaciones &lt;EM&gt;paranormales&lt;/EM&gt; más allá de los libros&lt;EM&gt;.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;FONT face=Calibri size=3&gt;En fin, ahí se queda; el próximo sábado por la noche saldré, beberé, &lt;STRIKE&gt;fumaré&lt;/STRIKE&gt; hasta perder el conocimiento; &lt;STRONG&gt;la herencia no me quitará el sueño&lt;/STRONG&gt; ;-)&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-800514735758161302?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/800514735758161302/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=800514735758161302' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/800514735758161302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/800514735758161302'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/09/la-herencia-entre-clases-ti-te-deja.html' title='La herencia entre clases, ¿a ti te deja dormir?'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-5017154513783058981</id><published>2008-09-15T23:00:00.001+02:00</published><updated>2008-09-16T16:01:18.527+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><title type='text'>SQL Server Compact 3.5. Buenas prácticas</title><content type='html'>&lt;P mce_keep="true"&gt;&lt;IMG height=1 alt="" src="http://geeks.ms/controlpanel/blogs/Desde%20el%20pasado%20mes%20de%20abril%20hasta%20hoy%20he%20realizado%20varias%20charlas%20y%20he%20mantenido%20algunas%20conversaciones%20acerca%20de%20SQL%20Server%20Compact%203.5.%20De%20todas%20ellas,%20lo%20que%20más%20me%20ha%20sorprendido%20es%20que%20aún%20se%20relaciona%20la%20edición%20Compact%20con%20la%20antigua%20SQL%20Server%20CE%20y%20por%20consiguiente%20se%20da%20por%20hecho%20que%20el%20uso%20de%20base%20de%20datos%20SQL%20Server%20Compact%20está%20únicamente%20restringida%20a%20plataformas%20Windows%20CE.%20Lo%20cierto%20es%20que%20una%20de%20las%20características%20que,%20bajo%20mi%20punto%20de%20vista,%20va%20a%20suponer%20un%20antes%20y%20un%20después%20es%20precisamente%20que%20éstas%20puedan%20ser%20utilizadas%20tanto%20en%20plataformas%20Windows%20Desktop%20y%20Windows%20CE%20desde%20su%20aparición" width=1 align=left border=0 a mce_src="Desde el pasado mes de abril hasta hoy he realizado varias charlas y he mantenido algunas conversaciones acerca de SQL Server Compact 3.5. De todas ellas, lo que más me ha sorprendido es que aún se relaciona la edición Compact con la antigua SQL Server CE y por consiguiente se da por hecho que el uso de base de datos SQL Server Compact está únicamente restringida a plataformas Windows CE. Lo cierto es que una de las características que, bajo mi punto de vista, va a suponer un antes y un después es precisamente que éstas puedan ser utilizadas tanto en plataformas Windows Desktop y Windows CE desde su aparición " Everywhere).? (codename 3.1 versión la de partir tal? como&gt;Desde el pasado mes de abril hasta hoy he realizado varias charlas y he mantenido algunas conversaciones acerca de &lt;B&gt;SQL Server Compact 3.5&lt;/B&gt;. De todas ellas, lo que más me ha sorprendido es que aún se relaciona la edición Compact con la antigua &lt;B&gt;SQL Server CE&lt;/B&gt; y por consiguiente se da por hecho que el uso de base de datos SQL Server Compact está únicamente restringida a plataformas &lt;B&gt;Windows CE&lt;/B&gt;. Lo cierto es que una de las características que, bajo mi punto de vista, va a suponer un antes y un después es precisamente que éstas puedan ser utilizadas tanto en plataformas &lt;B&gt;Windows Desktop&lt;/B&gt; y Windows CE desde su aparición "&lt;I&gt;como tal&lt;/I&gt;" a partir de la versión 3.1 (&lt;I&gt;codename &lt;B&gt;Everywhere&lt;/B&gt;&lt;/I&gt;).&lt;/P&gt;&lt;br /&gt;&lt;P&gt;SQL Server Compact 3.5 es un gestor de base de datos relacional orientada específicamente para &lt;B&gt;cliente ligeros&lt;/B&gt; (&lt;I&gt;SmartClients&lt;/I&gt;) en &lt;B&gt;sistemas ocasionalmente conectados&lt;/B&gt;. De hecho, los &lt;B&gt;Servicios de Sincronización para ADO.NET&lt;/B&gt; (&lt;I&gt;Sync Services for ADO.NET&lt;/I&gt;) fue presentado junto a las primeras betas como versión 1.0 (&lt;I&gt;fuera del runtime de MSF&lt;/I&gt;). El objetivo era el de presentar una tecnología que, pese a que despunta por su alta -relativa a las tecnologías actuales- flexibilidad, pretende marcar un antes y un después en soluciones de sincronización para cliente ligeros con bases de datos Compact. &lt;B&gt;ClickOnce&lt;/B&gt; es otra tecnología de despliegue específica para este tipo de clientes.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;En realidad todo esto son piezas tecnológicas cuya sinergia conjunto derivan en un potente conjunto de herramientas de desarrollo que facilitan la creación de soluciones ocasionalmente conectadas junto con todos los aspectos, peculiaridades y características que presentan. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;Probablemente la pieza angular esta situada en la propia base de datos, un "simple" archivo sdf del cual recae todo -o una parte muy importante- del peso de la solución. El modelo de desarrollo empleado para este tipo de bases de datos &lt;B&gt;no es muy diferente&lt;/B&gt; al que utilizamos habitualmente en aplicaciones escritorio pero &lt;B&gt;sí tiene su peculiaridades&lt;/B&gt;, de hecho, es una base de datos que puede ser utilizada en una aplicación para Windows Vista y Windows CE, o lo que es lo mismo &lt;B&gt;.NET Framework&lt;/B&gt; y .&lt;B&gt;NET Compact Framework&lt;/B&gt;, luego si existen estas peculiaridades y la madurez de la tecnología actual lo permite, ¿porque no crear componentes de acceso a datos multiplataforma genéricos?, esto es, para .NET Framework y .NET Compact Framework. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;En realidad esto tiene sus pros y sus contras, evidentemente. .NET Compact Framework es aproximadamente la equivalencia del 30% de .NET Framework y afrontar el desarrollo de componentes multiplataforma es posible, con sus "&lt;I&gt;peros&lt;/I&gt;", pero posible. Un ejemplo lo tenemos en el uso de operaciones transaccionales, como novedad desde la versión 3.5 éstas&amp;nbsp;pueden residir bajo ámbitos establecidos por el administrador de transacciones ligeras (Lightweight Transaction Manager) a través de las clases expuestas en System.Transaction, sin embargo, únicamente bajo plataformas Windows Desktop; he aquí un ejemplo de "peculiaridad para el código multiplataforma".&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Pese a que SQL Server Compact no ha sido concebida como base de datos de &lt;B&gt;gran capacidad de almacenaje y procesamiento&lt;/B&gt; no debemos descuidar la escalabilidad de la aplicación, conocer qué tipo de índices están disponibles y como sacar el máximo partido de ellos de cara a facilitar la tarea al optimizador de consultas, así como conocer, mínimamente, las diferencias de éste respecto su hermano mayor. Una característica que me gustaría destacar es que SQL Server Compact ofrece unas propiedades de gestión de excepciones, a través de las clases específicas distribuidas dentro de System.Data.SqlClientCE, basadas en códigos de errores nativos tipificados y errores HResults, propagados desde las capas más bajas de abstracción del Sistema Operativo, que bajo mi punto de vista son excepcionales si sabes cómo manejarlos.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;IMG height=156 alt="" src="http://learning.solidq.com/Pictures/eBooks/Desarrollo%20SQL%20Server%20Compact%20Edition.jpg" width=120 align=left border=0 mce_src="http://learning.solidq.com/Pictures/eBooks/Desarrollo%20SQL%20Server%20Compact%20Edition.jpg"&gt;Durante los más de 14 meses en los que estado inmerso en el estudio y búsqueda de modelos de desarrollo específico para &lt;B&gt;SQL Server Compact&lt;/B&gt;, he tratado de sintetizar lo más importante para que el desarrollador iniciado con el este tipo de bases de datos parta con cierta ventaja antes de sus desarrollos, &lt;B&gt;&lt;A href="http://www.solidq.com/ib/Press.aspx"&gt;plasmándolo en un libro electrónico de poco más de 110 páginas&lt;/A&gt;&lt;/B&gt; y cuyo editor, &lt;B&gt;SolidQ@Press&lt;/B&gt;, ha editado y ya está disponible.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;B&gt;&lt;I&gt;Desarrollo de aplicaciones con SQL Server Compact Edition: Buenas Prácticas&lt;/I&gt;&lt;/B&gt;, no pretende ser un guía de referencia, sino un libro vertical, que trata todas y cada una de los aspectos más destacados que hay que tener en cuenta para la creación de aplicaciones consumidoras de la ‘mini' de la familia SQL Server, de forma directa, llana y sin introducciones.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-5017154513783058981?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/5017154513783058981/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=5017154513783058981' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5017154513783058981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5017154513783058981'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/09/sql-server-compact-35-buenas-prcticas.html' title='SQL Server Compact 3.5. Buenas prácticas'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-8941015314515603797</id><published>2008-08-04T13:02:00.001+02:00</published><updated>2008-08-04T13:02:48.705+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><title type='text'>Mi primer libro: SQL Server Compact 2008</title><content type='html'>&lt;P mce_keep="true"&gt;¡Al fín! Después de más de un año de trabajo, en la que de forma solitaria empecé a escribir una referencia, un tutorial o sencillamenteunas notas sobre la nueva versión de &lt;STRONG&gt;SQL Server Compact 3.5&lt;/STRONG&gt; que posteriormente ha acabado en un libro, con la editorial de referencia para tecnologías .NET, &lt;STRONG&gt;&lt;A class="" href="http://www.campusmvp.com/CampusMVP/Krasis_Press.htm" mce_href="http://www.campusmvp.com/CampusMVP/Krasis_Press.htm"&gt;Krasis Press&lt;/A&gt;&lt;/STRONG&gt;.&lt;/P&gt;&lt;br /&gt;&lt;P mce_keep="true"&gt;¿Que deciros del libro? Pues se trata de una referencia completa de SQL Server Compact 3.5, incluyendo las futuras características del SP1 que aparecerá junto al de Visual Studio .NET 2008. He tratado plasmar que es realmente una base de datos SQL Server Compact, cuáles son su características diferenciales que la hacen única en la plataforma .NET de Microsoft, qué la diferencia de otras ediciones cómo SQL Server Express así como todo lo referente a la sintaxis T-SQL y desarrollo de aplicaciones con ADO.NET y los mecanismos de sincronización existentes.&lt;/P&gt;&lt;br /&gt;&lt;P mce_keep="true"&gt;&amp;nbsp;Agradecer, por último, a todos los que me han ayudado en esta obra, de una forma u otra, empezando por &lt;A class="" href="http://www.microsoft.com/spain/prensa/cv/fernando_b.mspx" mce_href="http://www.microsoft.com/spain/prensa/cv/fernando_b.mspx"&gt;Fernando Bocigas&lt;/A&gt;, &lt;STRONG&gt;Jefe &lt;EM&gt;de Producto SQL Server de Microsoft Ibérica&lt;/EM&gt;&lt;/STRONG&gt;, quién además ha enriquezido la obra con el prólogo. A &lt;A class="" href="http://geeks.ms/blogs/jalarcon/default.aspx" mce_href="/blogs/jalarcon/default.aspx "&gt;José Manuel Alarcón&lt;/A&gt;, &lt;A class="" href="http://www.dotnetmania.com/" mce_href="http://www.dotnetmania.com"&gt;Paco Marín&lt;/A&gt;, &lt;A class="" href="http://geeks.ms/blogs/mposadas/default.aspx" mce_href="/blogs/mposadas/default.aspx "&gt;Marino Posadas&lt;/A&gt;, &lt;A class="" href="http://geeks.ms/blogs/unai/default.aspx" mce_href="/blogs/unai/default.aspx "&gt;Unai Zorrilla&lt;/A&gt;, Francisco Otero, Francisco Javier Buzón, &lt;A class="" href="http://sbalboa.blogspot.com/" mce_href="http://sbalboa.blogspot.com"&gt;Santi Balboa&lt;/A&gt;, &lt;A class="" href="http://msmvps.com/blogs/eladio_rincon/default.aspx" mce_href="http://msmvps.com/blogs/eladio_rincon/default.aspx"&gt;Eladio Rincón&lt;/A&gt;, &lt;A class="" href="http://mvp.support.microsoft.com/" mce_href="http://mvp.support.microsoft.com/"&gt;Cristina González&lt;/A&gt; [MVP Lead], &lt;A class="" href="http://ramonb.blogspot.com/" mce_href="http://ramonb.blogspot.com/"&gt;Ramón Bosch&lt;/A&gt;, &lt;A class="" href="http://www.tecdencies.com/" mce_href="http://www.tecdencies.com/"&gt;Lleonard del Río&lt;/A&gt;, &lt;A class="" href="http://msmvps.com/blogs/peplluis/" mce_href="http://msmvps.com/blogs/peplluis/"&gt;Pep Lluis Baño&lt;/A&gt;&amp;nbsp;y &lt;A class="" href="http://blogs.msdn.com/sqlservercompact/" mce_href="http://blogs.msdn.com/sqlservercompact/"&gt;al equipo de desarrollo de SQL Server Compact&lt;/A&gt;. ¡Gracias a todos!&lt;/P&gt;&lt;br /&gt;&lt;P mce_keep="true"&gt;&lt;A class="" href="http://www.campusmvp.com/CampusMVP/SQL_Server_Compact_2008_SP1_Referencia_Completa.htm" mce_href="http://www.campusmvp.com/CampusMVP/SQL_Server_Compact_2008_SP1_Referencia_Completa.htm"&gt;Aquí os dejo más info del libro:&lt;/A&gt;&lt;/P&gt;&lt;br /&gt;&lt;H1&gt;SQL Server Compact 2008 SP1 Referencia Completa&lt;/H1&gt;&lt;br /&gt;&lt;DIV id=page_content&gt;&lt;!-- INICIO CONTENIDOS --&gt;&lt;br /&gt;&lt;TABLE class="" height="100%" cellSpacing=0 cellPadding=5 width="100%" align=center&gt;&lt;br /&gt;&lt;TBODY&gt;&lt;br /&gt;&lt;TR&gt;&lt;br /&gt;&lt;TD class="" height=10&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;br /&gt;&lt;TR&gt;&lt;br /&gt;&lt;TD class=""&gt;&lt;!--Imagen Libro---&gt;&lt;br /&gt;&lt;P align=right&gt;&lt;A href="http://campusmvp.com/CampusMVP/img/libros/grandes/sql-server-350.jpg" target=_blank $included="null"&gt;&lt;IMG style="BORDER-RIGHT: #bfc6c8 8px solid; BORDER-TOP: #bfc6c8 8px solid; MARGIN: 10px; BORDER-LEFT: #bfc6c8 8px solid; WIDTH: 175px; BORDER-BOTTOM: #bfc6c8 8px solid; HEIGHT: 253px" alt="Microsoft SQL Server Compact 2008 SP1: Referencia Completa" hspace=10 src="http://campusmvp.com/CampusMVP/img/libros/sql-server-175.jpg" align=right border=0&gt; &lt;/A&gt;&lt;/P&gt;&lt;!--Reseña Libro---&gt;&lt;br /&gt;&lt;P&gt;&lt;STRONG&gt;José Miguel Torres&lt;/STRONG&gt;&lt;BR&gt;(Device Aplication Development MVP)&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;STRONG&gt;Editorial Krasis Press&lt;BR&gt;426 páginas&lt;BR&gt;Tapa Blanda&lt;BR&gt;17,50 x 24,80 cm.&lt;BR&gt;ISBN: 978-84-935489-4-0&lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;&lt;P align=justify&gt;Esta obra pretende ser una referencia completa que dé a conocer al lector de una forma directa las muchas posibilidades que ofrece &lt;STRONG&gt;SQL Server Compact 3.5&lt;/STRONG&gt;, ya sean para &lt;STRONG&gt;aplicaciones Windows&lt;/STRONG&gt; como de dispositivos &lt;STRONG&gt;Windows Mobile &lt;/STRONG&gt;o &lt;STRONG&gt;Tablet PC&lt;/STRONG&gt;, desde los fundamentos de las bases de datos embebidas hasta su aplicación en entornos distribuidos y sistemas ocasionalmente conectados, además de:&lt;/P&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Familiarizarse con los componentes que conforman &lt;STRONG&gt;SQL Server Compact 3.5&lt;/STRONG&gt; así como herramientas y utilidades relacionadas.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Conocer &lt;STRONG&gt;cómo funciona una base de datos SQL Server Compact&lt;/STRONG&gt; y sus características diferenciales.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Crear, administrar y manipular bases de datos mediante herramientas de administración con el uso de formularios y asistentes así como una guía completa de la sintaxis T-SQL soportada.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Conocer los mecanismos de bloqueo y las nuevas aportaciones en contextos transaccionales.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Desarrollar aplicaciones para &lt;STRONG&gt;Windows Mobile&lt;/STRONG&gt; y &lt;STRONG&gt;Windows Desktop&lt;/STRONG&gt; con &lt;STRONG&gt;ADO.NET 3.5&lt;/STRONG&gt; de forma eficaz.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Describir las características de los mecanismos de sincronización compatibles; cuál utilizar y porqué.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Utilizar la réplica por mezcla y el acceso remoto a datos (RDA), desde sus fundamentos, paso a paso.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV align=justify&gt;Incluye &lt;STRONG&gt;las novedades&lt;/STRONG&gt; reciéntemente aparecidas en el &lt;STRONG&gt;Service Pack 1&lt;/STRONG&gt;.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8941015314515603797?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.campusmvp.com/CampusMVP/SQL_Server_Compact_2008_SP1_Referencia_Completa.htm' title='Mi primer libro: SQL Server Compact 2008'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8941015314515603797/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8941015314515603797' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8941015314515603797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8941015314515603797'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/08/mi-primer-libro-sql-server-compact-2008.html' title='Mi primer libro: SQL Server Compact 2008'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-9136440956681452761</id><published>2008-07-18T13:47:00.001+02:00</published><updated>2008-07-18T13:47:43.650+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Técnicas de Test Extremo a la vieja usanza....</title><content type='html'>&lt;p mce_keep="true"&gt;Dentro del ámbito &lt;strong&gt;industrial/empresarial &lt;/strong&gt;el uso de dispositivos móviles o PDA requieren de unos requisitos que por naturaleza no llegan, ni de largo, los típicos dispositivos que llevamos, hoy en dia, en nuestro bolsillos, en términos de duración de bateria, soporte contra caídas, lluvia o ambientes "sucios" de partículas.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Los &lt;strong&gt;dispositivos &lt;em&gt;rugerizados&lt;/em&gt;&lt;/strong&gt; se catalogan mediante el estándard &lt;a class="" href="http://en.wikipedia.org/wiki/IP_Code" target="_blank" mce_href="http://en.wikipedia.org/wiki/IP_Code"&gt;&lt;strong&gt;IP (Ingress Protection&lt;/strong&gt;)&lt;/a&gt; el cual:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div mce_keep="true"&gt;evalúa de un 0 a un 6 el soporte a la dispersión de partículas sólidas (aka polvo), siendo 0 algo así como No Protección y 6 Dust Tight, el cual certifica que un dispositivo puede trabajar en ambientes muy cargados de partículas. &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;div mce_keep="true"&gt;por otro lado, evalúa de un 0 a un 8 el soporte de agua, siendo 0 No Protección y 8 Protección a Inmersión completa. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Para las PDAs industriales la típica certificación es &lt;strong&gt;IP54&lt;/strong&gt; o &lt;strong&gt;IP64&lt;/strong&gt;, la cual permite la protección contra el polvo y las salpicaduras de agua. Además, estos dispositivos soportan la caída sobre &lt;em&gt;&lt;strong&gt;hormigón&lt;/strong&gt;&lt;/em&gt; desde &lt;u&gt;1,20 metros&lt;/u&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Por lo visto, además de la terminología y estandarización - hay más -, las pruebas que realizan los fabricantes están basadas en los principios de &lt;strong&gt;&lt;em&gt;Pirron&lt;/em&gt;&lt;/strong&gt;, al estilo empírico extremo, y si no mirad el siguiente video sobre el motorola (Symbol) MC9090 que he encontrado, (puestos a filosofar), causalmente.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uTkuSRa5vto&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;br /&gt;&lt;embed src="http://www.youtube.com/v/uTkuSRa5vto&amp;hl=en&amp;fs=1" mce_src="http://www.youtube.com/v/uTkuSRa5vto&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-9136440956681452761?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/9136440956681452761/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=9136440956681452761' title='25 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/9136440956681452761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/9136440956681452761'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/07/tcnicas-de-test-extremo-la-vieja-usanza.html' title='Técnicas de Test Extremo a la vieja usanza....'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3823740854076183772</id><published>2008-06-25T11:35:00.000+02:00</published><updated>2008-06-25T11:36:27.511+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sync Framework'/><title type='text'>Cliente SQL Server Express para Sync Services para ADO.NET</title><content type='html'>&lt;p mce_keep="true"&gt;&lt;img height="250" alt="" src="http://msdn.microsoft.com/en-us/sync/bb821992.Figure1.png" width="300" align="textTop" border="0" mce_src="http://msdn.microsoft.com/en-us/sync/bb821992.Figure1.png" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt;Acaban de anunciar, en el&lt;a class="" href="http://blogs.msdn.com/sync/archive/2008/06/24/sample-sql-express-client-synchronization-using-sync-services-for-ado-net.aspx" mce_href="http://blogs.msdn.com/sync/archive/2008/06/24/sample-sql-express-client-synchronization-using-sync-services-for-ado-net.aspx"&gt; blog del equipo de desarrollo de MS Sync Framework&lt;/a&gt;, &lt;a class="" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=1200" mce_href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=1200"&gt;un ejemplo&lt;/a&gt; (en CodePlex) de cómo utilizar &lt;strong&gt;SQL Server Express&lt;/strong&gt; para a sincronización mediante &lt;strong&gt;Sync Services for ADO.NET&lt;/strong&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt; Pese a que muestra una clase que imementa de &lt;a class="" href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.clientsyncprovider(SQL.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.clientsyncprovider(SQL.100).aspx"&gt;&lt;strong&gt;ClientSyncProvider&lt;/strong&gt;&lt;/a&gt;, el ejemplo nos permite ver toda las complejidad ( y consiguiente flexibilidad ) que esconde el proveedor local de sincronización. Hasta ahora el único cliente específico que incorporan los servicios de sincronizción es para la edición &lt;strong&gt;Compact de SQL Server &lt;/strong&gt;a través de la clase&lt;strong&gt; &lt;/strong&gt;&lt;a class="" href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.sqlserverce.sqlceclientsyncprovider(SQL.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.data.sqlserverce.sqlceclientsyncprovider(SQL.100).aspx"&gt;&lt;strong&gt;SqlCeClientSyncProvider&lt;/strong&gt;&lt;/a&gt;, la cual nos resuelve toda la complejidad. De todas formas, la especificación del proveedor para SQL Server Express nos puede servir de guía para el desarrollo de otros tipos de proveedores.&lt;/p&gt;&lt;br /&gt;&lt;p mce_keep="true"&gt; Por último, recordad que la RC0 de los servicios de sincronización &lt;a class="" href="http://geeks.ms/blogs/jmtorres/archive/2008/06/11/liberado-ms-sync-framework.aspx" mce_href="/blogs/jmtorres/archive/2008/06/11/liberado-ms-sync-framework.aspx"&gt;se presentan&lt;/a&gt; con el RC0 de SQL Server 2008.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3823740854076183772?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3823740854076183772/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3823740854076183772' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3823740854076183772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3823740854076183772'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/06/cliente-sql-server-express-para-sync.html' title='Cliente SQL Server Express para Sync Services para ADO.NET'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-7843397288316353335</id><published>2008-06-11T23:03:00.001+02:00</published><updated>2008-06-11T23:10:40.213+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sync Framework'/><title type='text'>Liberado Microsoft Sync Framework RC0</title><content type='html'>&lt;a class="" href="http://blogs.msdn.com/sync" mce_href="http://blogs.msdn.com/sync"&gt;Liam Cavanagh&lt;/a&gt; &lt;a class="" href="http://blogs.msdn.com/sync/archive/2008/06/09/announcing-sync-framework-v1-0-rc0-and-sync-services-for-ado-net-v2-0-rc0.aspx" mce_href="http://blogs.msdn.com/sync/archive/2008/06/09/announcing-sync-framework-v1-0-rc0-and-sync-services-for-ado-net-v2-0-rc0.aspx"&gt;ha anunciado el blog&lt;/a&gt; oficial del equipo de desarrollo la presentación de &lt;a class="" href="http://msdn.microsoft.com/en-us/sync/default.aspx" mce_href="http://msdn.microsoft.com/en-us/sync/default.aspx"&gt;MS Sync Framework &lt;/a&gt;en la &lt;a class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=35F53843-03F7-4ED5-8142-24A4C024CA05&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=35F53843-03F7-4ED5-8142-24A4C024CA05&amp;amp;displaylang=en"&gt;RC0 del SQL Server 2008&lt;/a&gt; que ya está disponible para suscripciones MSDN.&lt;br /&gt;Durante la instalación de SQL Server 2008, se nos da la opción de instalar MS Sync Framework. La versión que se presenta es, asismiso, una Release Candidate 0 de MS Sync Framework 1.0 y Sync Services for ADO.NET 2.0.&lt;br /&gt;Pues nada, esto parece que empiezar a tomar forma y posiciones. Hay que estar al tanto a esta tecnología; la verdad es que promete ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-7843397288316353335?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/7843397288316353335/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=7843397288316353335' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7843397288316353335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7843397288316353335'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/06/liam-cavanagh-ha-anunciado-el-blog.html' title='Liberado Microsoft Sync Framework RC0'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-562184020833612752</id><published>2008-04-28T23:22:00.000+02:00</published><updated>2008-04-28T23:29:07.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><title type='text'>SQL Metal OSUI for Visual Studio</title><content type='html'>Acabo de subir a &lt;strong&gt;codeplex&lt;/strong&gt; una version totalmente funcional de &lt;strong&gt;&lt;a href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=sqlmetalosui&amp;amp;ReleaseId=12928"&gt;SQL Metal OSUI para Visual Studio.&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SQL Metal OSUI&lt;/strong&gt; es una herramienta &lt;em&gt;Open Source&lt;/em&gt; que mediante sqlmetal.exe genera archivos dbml, map y de código CS y VB para la generación de &lt;strong&gt;LINQ to SQL&lt;/strong&gt; con bases de datos SQL &lt;strong&gt;Server Compact&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;En esta versión, la he integrado con &lt;strong&gt;Visual Studio&lt;/strong&gt; como &lt;em&gt;herramienta externa&lt;/em&gt;. Para instalarla bajaros &lt;a href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=sqlmetalosui&amp;amp;ReleaseId=12928"&gt;el instalador &lt;/a&gt;y &lt;a href="http://www.codeplex.com/sqlmetalosui"&gt;seguir las instrucciones&lt;/a&gt;. En principio no es complicado pero, de momento, la integración con Visual Studio será manual.&lt;br /&gt;&lt;br /&gt;Salud!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-562184020833612752?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codeplex.com/sqlmetalosui' title='SQL Metal OSUI for Visual Studio'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/562184020833612752/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=562184020833612752' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/562184020833612752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/562184020833612752'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/04/sql-metal-osui-for-visual-studio.html' title='SQL Metal OSUI for Visual Studio'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-2153697425321144211</id><published>2008-04-15T00:54:00.001+02:00</published><updated>2008-04-15T01:17:02.070+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>MVP Global Summit 2008.- Dia 1</title><content type='html'>Pues después de haberme habituad al desfase horario y haber pasado el dia del domingo paseando por Seattle con Alejandro Mezcua (&lt;a href="http://www.byteabyte.net/"&gt;byteabyte.net&lt;/a&gt;), Julian Peris y Salvador Ramos (&lt;a href="http://www.helpdna.net/"&gt;helpdna.net&lt;/a&gt;), en la que, dicho sea de paso, nos homenajeamos con una mariscada de aquí te espero (ver foto), pues ha llegado el primer dia de "trabajo" despues de las presentaciones y registro correspondiente.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5189242111348060594" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_i0a6wx1FjwE/SAPkNNxmMbI/AAAAAAAAAB4/C-1MHefEX8c/s320/100_1924.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;En esta primera parte, en el Washington State Convention &amp;amp; Trade Center de Seattle, he podido asistir a un Open Space (una especie de mesa redonda) con &lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336538.aspx"&gt;&lt;strong&gt;Michele Leroux Bustamante&lt;/strong&gt; &lt;/a&gt;sobre Windows Comm Foundation - Avoiding Common Pitfallls, ( que por cierto tengo ahora mismo sentada en la mesa de justamente al lado en la zona de descanso ). Posteriormente hemos hecho lo propio con &lt;strong&gt;Carlos Mattos&lt;/strong&gt;, en una charla acerca de LINQ to SQL y LINQ to DataSet Best Practices y otra con Elisabeth Vanderveld sobre Windows Mobile Platform - Enhancing the User Experience through Applications. La duración de las mismas era de aproximadamente 75 minutos y han habido unas 16 charlas en las tres sesiones de la tarde.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora, en el descando antes del Welcome Dinner (es decir, la cena) estoy en la zona escribiendo de forma rápida estas líneas.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;PD: Ayer estuvimos en el posiblemente último partido de los Supersonics en Seattle que ganaron 99 a 95 a los Maverick de Dallas. En cuanto al partido.... sencillamente impresionante. Un espectaculo.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5189242747003220418" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_i0a6wx1FjwE/SAPkyNxmMcI/AAAAAAAAACA/7QMeiLj6RZw/s320/100_1929.JPG" border="0" /&gt;&lt;br /&gt;Seguiremos informando.... Salud!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-2153697425321144211?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/2153697425321144211/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=2153697425321144211' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2153697425321144211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2153697425321144211'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/04/mvp-globla-summit-2008-dia-1.html' title='MVP Global Summit 2008.- Dia 1'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i0a6wx1FjwE/SAPkNNxmMbI/AAAAAAAAAB4/C-1MHefEX8c/s72-c/100_1924.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-8867380929545844849</id><published>2008-04-02T10:49:00.000+02:00</published><updated>2008-04-02T10:52:02.988+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Windows Mobile 6.1, características</title><content type='html'>&lt;p&gt;&lt;img src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61logo.png" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61logo.png" /&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Las prinicipales caracterísiticas de Windows Mobile 6.1 se agrupan en:&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Inicio&lt;/li&gt;&lt;li&gt;Personalización&lt;/li&gt;&lt;li&gt;Mensajería&lt;/li&gt;&lt;li&gt;Productividad.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Incio&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Es algo así como un &lt;strong&gt;Getting Started&lt;/strong&gt;, punto de partida, que permite al usuario los 10 primeros días configurar las tareas básicas del dispositivo móvil de una forma clara y sencilla. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="WIDTH: 320px; HEIGHT: 240px" height="240" src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61gettingstarted.png" width="320" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61gettingstarted.png" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Personalización&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Nuevo interface para la pantalla Hoy. Se trata de agilizar y obtener la información de una forma más sencilla, intuitiva y rápida mediante paneles deslinzantes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61personalizacion.png" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61personalizacion.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Mensajería&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;SMS Encadenados&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Pese a que es nuevo en Windows Mobile, al idea de SMS encadenados tipo correo electrónico no es nuevo. De hecho Blackberry ya lo incorpora y su uso es muy práctico. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img height="297" src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61sms.png" width="309" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61sms.png" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Multiselección&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Podremos seelccionar más de uno mensaje (sea de texto o de correo) y realizar una única operación sobre el agrupamiento (reenviar, eliminar, mover, marcar como leído, etc...&lt;/p&gt;&lt;p&gt;&lt;em&gt;Direct Push&lt;/em&gt;&lt;/p&gt;&lt;p&gt;El proceso de sincronización remoto de los dispositivos basados en Windows Mobile 6.1 ha sido mejorado con Exchange Server 2007 Service Pack 1 (SP1). La arquitectura de sincronización ha sido rediseñada para reducir el ancho de banda en hasta un 60% y mejorar el tiempo de la batería en hasta un 33% (según las pruebas realizadas comparando dispositivos Windows Mobile 6 y Windows Mobile 6.1).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Productividad &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Copiar, Pegar y Cortar.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Para las versiones Standard, es decir, pantall no tactil, ahora se podrá (al fín!!) copia, cortar y pegar en la composición de mensajes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61product.png" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/wiki/wm61/wm61product.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Aplicación gestión de tareas&lt;/em&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';" &gt;&lt;span style="font-size:85%;"&gt;Windows Mobile 6.1 añade un Gestor de Tareas para ayudar a los usuarios a manejar y controlar mejor la memoria y la batería de sus dispositivos al permitirles cerrar y conectar con aplicaciones y programas. También podrán ver el rendimiento general de los datos relativos a la memoria del dispositivo y el uso de la CPU. Por ejemplo, si una persona quiere escuchar música utilizando Windows Media Player Mobile a la vez que utiliza otras aplicaciones, un mensaje aparecerá notificando la insuficiencia de memoria para poner en marcha el reproductor. Utilizando el Gestor de Tareas, el usuario puede navegar rápidamente a través de la lista de aplicaciones que están funcionando en su dispositivo, para así salirse de aquellas que sean innecesarias y liberar de esta manera memoria. &lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';" &gt;&lt;span style="mso-spacerun: yes;font-size:85%;" &gt;&lt;em&gt;Live Search&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';font-size:85%;"  &gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;Live Search viene en ROM. (Los fabricantes deciden si incorporarla o no)&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';font-size:85%;"  &gt;&lt;o:p&gt;&lt;em&gt;Internet Explorer Mobile &lt;/em&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';" &gt;&lt;o:p&gt;&lt;span lang="ES-TRAD" style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-: ES-TRADfont-family:'Times New Roman';font-size:85%;"  &gt;Internet Explorer Mobile&lt;b style="mso-bidi-font-weight: normal"&gt; &lt;/b&gt;mejora la capacidad de los usuarios de navegar en una página en concreto de la Web. Pueden seleccionar una porción de una página para ver mejor el contenido para después volver al tamaño estándar de visionado. Una vez que un usuario ha accedido a una página Web en particular, se puede mover la herramienta de selección sobre esa sección para verlo más cerca&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span lang="ES-TRAD" style="mso-ansi-language: ES-TRAD;font-family:'Arial','sans-serif';" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8867380929545844849?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8867380929545844849/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8867380929545844849' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8867380929545844849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8867380929545844849'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/04/windows-mobile-61-caractersticas.html' title='Windows Mobile 6.1, características'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-7756214734542974707</id><published>2008-03-19T15:21:00.000+01:00</published><updated>2008-03-19T15:29:34.143+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Compact WCF'/><title type='text'>Windows Mobile Line of Business Solution Accelerator 2008</title><content type='html'>Acaba de aparecer la plataforma Line of Business actualizada a la version 2008. En esta ocasión cabe destacar la aparición de la mayoría de las nuevas tecnologías y características de la família de productos de desarrollo del 2008:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Uso de los Servicios de sincronización (Sync Services for ADO.NET) para Windows Mobile.&lt;/li&gt;&lt;li&gt;Ejemplo de comunicación mediante WCF utilizando Exchange 2007.&lt;/li&gt;&lt;li&gt;Capa de datos específica para SQL Server Compact 3.5 &lt;/li&gt;&lt;li&gt;LINQ&lt;/li&gt;&lt;li&gt;Integración con MapPoint&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Para descargarlo hacer click &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=428E4C3D-64AD-4A3D-85D2-E711ABC87F04&amp;amp;displaylang=en"&gt;aqui&lt;/a&gt;; encontraréis documentos, el código de ejemplo, en definitiva, todo lo necesarios para poner en práctica la aplicación.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-7756214734542974707?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/sync/archive/2008/03/17/mobile-development-using-the-windows-mobile-line-of-business-solution-accelerator-2008.aspx' title='Windows Mobile Line of Business Solution Accelerator 2008'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/7756214734542974707/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=7756214734542974707' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7756214734542974707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7756214734542974707'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/03/windows-mobile-line-of-business.html' title='Windows Mobile Line of Business Solution Accelerator 2008'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1780622493181688533</id><published>2008-02-11T13:57:00.000+01:00</published><updated>2008-02-11T21:00:07.160+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Mobile World Congress 2008: Microsoft presenta Windows Mobile para Sony Ericsson</title><content type='html'>&lt;a href="http://www.slipperybrick.com/wp-content/uploads/2008/02/sony-ericsson-xperia-x1.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Microsoft acaba de hacer público esta mañana que Sony Ericsson presentará el nuevo teléfono móvil equipado con Windows Mobile. Se trata del modelo XPERIA™ X1, y estará presente en la segunda mitad de este mismo año.&lt;br /&gt;&lt;br /&gt;Las características del XPERIA X1 incluyen:&lt;br /&gt;&lt;br /&gt;• Forma curvada y con teclado QWERTY para acceso más sencillo, pantalla táctil de 3 pulgadas y cuerpo de acabado metálico y buena calidad.&lt;br /&gt;• Windows Mobile, HSDPA/HSUPA y soporte Wi-Fi™ para que los usuarios puedan disfrutar de sus entretenimientos favoritos y puedan trabajar eficazmente mientras se mueven.&lt;br /&gt;• Paneles XPERIA™ que facilita la navegación en Internet, multimedia y en otras aplicaciones con la punta de los dedos.&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Ay7RMHcUuGQ&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Ay7RMHcUuGQ&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1780622493181688533?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1780622493181688533/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1780622493181688533' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1780622493181688533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1780622493181688533'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/02/mobile-world-congress-2008-microsoft.html' title='Mobile World Congress 2008: Microsoft presenta Windows Mobile para Sony Ericsson'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-5253763762525755021</id><published>2008-01-09T12:14:00.000+01:00</published><updated>2008-01-09T12:22:45.652+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Deshabilitando WCFSvchost.exe desde VS 2008</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_i0a6wx1FjwE/R4SuLbpCa1I/AAAAAAAAABE/qu-fg87-uKE/s1600-h/WCFsvchost+disabled.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5153435385040366418" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_i0a6wx1FjwE/R4SuLbpCa1I/AAAAAAAAABE/qu-fg87-uKE/s320/WCFsvchost+disabled.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Después de empezar a migrar algunos servicios &lt;strong&gt;WCF&lt;/strong&gt; y de notar las nuevas caracterísitcas que ofrece como &lt;strong&gt;WCFScvhost&lt;/strong&gt;.exe para albergar servicios (además de &lt;strong&gt;WCFTestclient&lt;/strong&gt;.exe para consumirlos) me he encontrado con que al quere utilizar un host personalizado siempre me salía el &lt;strong&gt;wcfsvchost&lt;/strong&gt;.exe.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Si quereis NO utilizar wcfsvchost&lt;/strong&gt; para vuestros servicios, mirad &lt;a href="http://msdn2.microsoft.com/es-es/library/bb552363.aspx"&gt;&lt;strong&gt;esto&lt;/strong&gt;&lt;/a&gt;, del &lt;strong&gt;msdn&lt;/strong&gt;. Lo que dice es que para evitar que wcfsvchost.exe se ejecute, tenemos que utiliizar, desde la pestaña &lt;strong&gt;Debug&lt;/strong&gt; de las propiedades del proyecto, la opción &lt;strong&gt;Start external program&lt;/strong&gt; e indicar el &lt;strong&gt;exe&lt;/strong&gt; (ya sea consola o windows) que hará de host del servicio. También podeis quitar la opción de &lt;strong&gt;Command Line Arguments&lt;/strong&gt; para ejecución del cliente. Desde ese mismo instante &lt;strong&gt;Wcfsvchost.exe&lt;/strong&gt; ya no intervendrá y os evitareis perder una mañana entera a solucionar esta jodienda.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-5253763762525755021?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/5253763762525755021/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=5253763762525755021' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5253763762525755021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/5253763762525755021'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2008/01/deshabilitando-wcfsvchostexe-desde-vs.html' title='Deshabilitando WCFSvchost.exe desde VS 2008'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i0a6wx1FjwE/R4SuLbpCa1I/AAAAAAAAABE/qu-fg87-uKE/s72-c/WCFsvchost+disabled.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-8310675883142799942</id><published>2007-12-11T23:51:00.000+01:00</published><updated>2007-12-12T00:01:20.902+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Configurar Cellular Emulator</title><content type='html'>Configuración del Cellular Emulator y utilización, paso a paso...&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;u&gt;&lt;a class="" href="http://www.desarrollomobile.net/devmob/Recursos/Art%c3%adculos/tabid/68/TID/14/cid/5/Default.aspx" mce_href="http://www.desarrollomobile.net/devmob/Recursos/Art%c3%adculos/tabid/68/TID/14/cid/5/Default.aspx"&gt;Artículo de desarrolloMobile.NET&lt;/a&gt;&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&lt;strong&gt;&lt;u&gt;&lt;a class="" href="http://www.blogger.com/controlpanel/blogs/www.desarrollomobile.net" mce_href="www.desarrollomobile.net"&gt;&lt;img style="WIDTH: 213px; HEIGHT: 49px" height="80" src="http://www.desarrollomobile.net/devMob/Portals/0/logo1.jpg" width="350" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/logo1.jpg" /&gt;&lt;/a&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Paso a paso:&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;En primer lugar abrimos el Device Emulator Manager y el Cellular Emulator&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Conectamos mediante el DEM con el emulador de Windows Mobile 6 Professional (La edición classic no soporta teléfono)&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;A continuación nos dirigimos a la configuración del emulador (File &lt;span style="font-size:0;"&gt;à&lt;/span&gt; Configuration).&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;En la pestaña Peripherals (Periféricos) asignamos el puerto COM que tiene establecido por defecto el Cellular Emulator (Ver imagen 1)&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;A continuación hacemos un soft reset al emulador.&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Aparecerá en la barra de tareas de WinMobile 6 la cobertura de la antena de teléfono.&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/celluemulator1.PNG" mce_src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/celluemulator1.PNG" /&gt;&lt;br /&gt;Imagen 1&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Realizar llamadas desde Cellular Emulator al Emulador Windows Mobile 6 Prof.&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Sencillamente, desde la pestaña &lt;em&gt;Call Manager&lt;/em&gt; introduce el número de teléfono origen y haz clic en &lt;em&gt;Dial&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img height="406" alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/cellemula_llamada.PNG" width="752" /&gt;&lt;br /&gt;Imagen 2&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Realizar llamadas desde el Emulador Windows Mobile 6 Prof al Cellular Emulator&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Marca el número de teléfono destino (cualquiera) para realizar una llamada. &lt;em&gt;Cellular Emulator&lt;/em&gt; cogerá la llamada y la emulará.&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Si deseas emular una llamada cuyo emisor tiene un comportamiento predeterminado, por ejemplo, llamada ocupada (&lt;em&gt;busy&lt;/em&gt;), marca los números de teléfono que se indican en &lt;em&gt;Preset Number&lt;/em&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;img height="400" alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/cellemula_llamada2.PNG" width="757" /&gt;&lt;br /&gt;&lt;/strong&gt;Imagen 3&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img height="406" alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/cellemula_llamada_ocupada.PNG" width="769" /&gt;&lt;br /&gt;Imagen 4&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Intercambio de SMS entre ambos&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Desde la pestaña SMS podrás interactuar mediante envío de mensajes SMS desde y hacia el emulador. Sencillamente en &lt;em&gt;Send to device&lt;/em&gt; desde el &lt;em&gt;Cellular Emulator&lt;/em&gt; envía un mensaje al emulador Windows Mobile 6 y desde &lt;em&gt;Receive from device&lt;/em&gt; mira los SMS enviados desde Windows Mobile 6.&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;em&gt;&lt;u&gt;NOTA: Evitar enviar palabras con letras acentuadas.&lt;/u&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 10pt"&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img height="412" alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/cellemula_SMS.PNG" width="790" /&gt;&lt;br /&gt;Imagen 5&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Interoperando con GPRS (3G) y 2G&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;-&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Desde la pestaña Network podemos pasar de 2G a 3G. Si pasamos con 3G la configuración desde el emulador Windows mobile 6 debe seguirse de la siguiente manera:&lt;/div&gt;&lt;br /&gt;&lt;div style="MARGIN: 0cm 0cm 0pt 72pt; TEXT-INDENT: -18pt"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:0;"&gt;o&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Vamos a &lt;em&gt;Start&lt;/em&gt; &lt;span style="font-size:0;"&gt;--&amp;gt; &lt;/span&gt;&lt;em&gt;Settings&lt;/em&gt; --&amp;gt; &lt;em&gt;Connections&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:0;"&gt;o&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Añadimos una nueva conexión por modem (&lt;em&gt;Add new modem connection&lt;/em&gt;)&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style="MARGIN: 0cm 0cm 0pt 72pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;o&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Importante seleccionar &lt;strong&gt;&lt;u&gt;Cellular GPRS&lt;/u&gt;&lt;/strong&gt; como modem de la conexión. Podemos inventarnos los demás datos.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="MARGIN: 0cm 0cm 0pt 72pt; TEXT-INDENT: -18pt"&gt;&lt;span style="font-size:0;"&gt;o&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;Conectamos y comprueba que empiezan a emitirse datos en el apartado &lt;em&gt;Data Channels&lt;/em&gt; del Cellular Emulator.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir="ltr" style="MARGIN: 0cm 0cm 0pt 72pt; TEXT-INDENT: -18pt"&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img height="554" alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/cellular_network_gprsmodem.PNG" width="353" /&gt;&lt;br /&gt;Imagen 6&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/articles/cellular_emulator/cellular_network_conexion.PNG" /&gt;&lt;br /&gt;Imagen 7&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8310675883142799942?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8310675883142799942/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8310675883142799942' title='8 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8310675883142799942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8310675883142799942'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/12/configurar-cellular-emulator.html' title='Configurar Cellular Emulator'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-2236260839382268968</id><published>2007-12-06T23:53:00.000+01:00</published><updated>2007-12-07T13:21:29.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Compact Edition'/><title type='text'>SqlMetal.exe User Interface</title><content type='html'>&lt;div align="justify"&gt;After trying out the new features of &lt;strong&gt;Orcas Beta 2&lt;/strong&gt;, I noticed using &lt;strong&gt;LINQ to SQL&lt;/strong&gt; projects, designers don't support &lt;strong&gt;SQL Server Compact Edition&lt;/strong&gt;. The only way is using sqlmetal.exe command tool that allows to create either code, map, desginer files from any SQL Server database (any edition). I don't like this kind of tools, are so slow, so I decided to create a project to use sqlmetal.exe more easily under &lt;strong&gt;user graphic interface&lt;/strong&gt; &lt;strong&gt;with .NET 3.5&lt;/strong&gt;. My first idea was to create a V&lt;strong&gt;isual Studio AddIn&lt;/strong&gt; but I didn't know how to begin besides was to busy to spent some time learning. &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;I created an User Control project &lt;strong&gt;using C#&lt;/strong&gt; and embedded it into a Windows Forms project. Now I have my own &lt;strong&gt;SQL Server Compact Edition 3.5&lt;/strong&gt; database's generator to use with LINQtoSQL projects and is so usefull. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;I think that it could be usefull for others developers and I just upload it in &lt;a href="http://www.codeplex.com/"&gt;http://www.codeplex.com/&lt;/a&gt; called &lt;a href="http://www.codeplex.com/sqlmetalosui"&gt;&lt;strong&gt;SqlMetal Open Source User Interface (sqlmetal osui).&lt;/strong&gt; &lt;/a&gt;You may download the source and test it and if you want, participate in the project. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;a href="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=sqlmetalosui&amp;amp;DownloadId=23250"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 637px; CURSOR: hand; HEIGHT: 508px" height="353" alt="" src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=sqlmetalosui&amp;amp;DownloadId=23250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Enjoy it!!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-2236260839382268968?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codeplex.com/sqlmetalosui' title='SqlMetal.exe User Interface'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/2236260839382268968/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=2236260839382268968' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2236260839382268968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2236260839382268968'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/12/sqlmetalexe-user-interface.html' title='SqlMetal.exe User Interface'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1002761785740642</id><published>2007-12-03T22:10:00.000+01:00</published><updated>2007-12-03T22:59:42.917+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><title type='text'>La dilución de precisión de una señal GPS (para desarrolladores)</title><content type='html'>&lt;div align="justify"&gt;Pese a que existen más de 50 sentencias &lt;a class="" href="http://en.wikipedia.org/wiki/NMEA" target="_blank"&gt;NMEA&lt;/a&gt; que son emitidas por los 30 satélites que tenemos alrededor de la esfera terrestre, los receptores que podemos encontrar típicamente en el mercado para los navegadores sólo utilizan unas pocas sentencias. Muchas fueron concebidas para fines militares con lo que abarcan tanto posicionemiento terrestre, aéreo y marítimo. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;En muy típico encontrar en librerias clases (por ejemplo Microsoft.WindowsMobile.Samples.Location) que albergan el posicionamiento (latitud + longitud), altitud (MSL, sobre el nivel del mar), velocidad, trayectoria, rumbo, información de los satélites, etcétera. De todos estos datos se ofrece también la dilución de precisión del posicionamiento (además del vertical, horizontal y a veces de tiempo) y en muchas ocasiones no se tiene una idea clara acerca de qué tipo de información ofrece. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;La dilución de precisón (DPO) se emplea en cartografía y describe la precisión del GPS en base a la geometria de los satélites. Cuando la señal DPO es alta, los satélites estan muy cerca entre sí con lo que la precisión disminuye y el valor DOR aumenta. Si por el contrario los satélites son distantes, la precisión aumenta y con ello el valor DPO disminuye. Existen diluciones de precisión para el posicionamiento horizontal (HDOP) , vertical (VDOP), el de posicionamiento (PDOP) y el de tiempo (TDOP) con lo que dentro del cada uno de dichos aspectos puede ofrecer un valor distinto. Los obstaculos urbanos y naturales puede aumentar el DOP de la señal del GPS.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Si teneis posibilidad de probarlo fijaros en los valores que se ofrecen. Normalmente un valor igual o inferior a 6 ofrece una fiabilidad buena (siendo ideal un valor 1), mientras que valores por encima de 8 son pobres pudiendo llegar a 50. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;em&gt;Como título he añadido para desarrolladores, o como máximo, para personas con un nivel matemático al mío. Digo esto porque en cualquier aspecto relacionado con el sistema de posicionamiento global, cuando quieres profundizar te muestran una ecuación de 5 a 10 bytes, es decir gigantesca (y si no mirar la imagen de abajo). Esta explicación es simplemente para curiosos que en alguna ocasión se han encontrado con las siglas DOP y no sabían que hacer con ellas ;-)&lt;/em&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PD: Pá cagarse&lt;a href="http://www.mathworks.com/matlabcentral/files/3391/gdop.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.mathworks.com/matlabcentral/files/3391/gdop.gif" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1002761785740642?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1002761785740642/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1002761785740642' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1002761785740642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1002761785740642'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/12/la-dilucin-de-precisin-de-una-seal-gps.html' title='La dilución de precisión de una señal GPS (para desarrolladores)'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-588188664075607123</id><published>2007-11-10T23:43:00.000+01:00</published><updated>2007-11-10T23:50:27.038+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='desarrolloMobile.NET'/><title type='text'>desarrolloMobile.NET a punto</title><content type='html'>&lt;p&gt;&lt;img alt="desarrolloMobile.NET" src="http://www.desarrollomobile.net/devMob/Portals/0/logo1.jpg" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Novedades en desarrolloMobile.NET:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Todas (al menos las que pueda) las novedades de dispositivos Windows Mobile&lt;/li&gt;&lt;br /&gt;&lt;li&gt;La librería Bluetooth para .NET sigue activa y puede ser accedida por &lt;a href="http://library.desarrollomobile.net/"&gt;http://library.desarrollomobile.net/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tutoriales de inicialización a .NET Compact Framework&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sección de videos de desarrollo de dispositivos móviles "&lt;strong&gt;How To&lt;/strong&gt;" de &lt;strong&gt;MSDN&lt;/strong&gt; y novedades y curiosidades de &lt;strong&gt;YouTube &lt;/strong&gt;en &lt;strong&gt;Windows Mobile&lt;/strong&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Wiki&lt;/strong&gt; orientado a términos específicos de movilidad.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sección &lt;strong&gt;FAQs &lt;/strong&gt;con las preguntas y respuestas más comunes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sección &lt;strong&gt;Artículos &lt;/strong&gt;dónde casos prácticos y soluciones.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Y por último algunos de los blogs msdn de los equipos de desarrollo de Microsoft agrupados en la sección &lt;strong&gt;feedHunter&lt;/strong&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;En fín, para los que queráis colaborar las secciones FAQs, Artículos y WikiMobile están abiertas. Lo único que tenéis que hacer es registraros. Para los demás, espero que podáis encontrar alguna solución, idea o cualquier otra utilidad que estéis buscando.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-588188664075607123?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/588188664075607123/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=588188664075607123' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/588188664075607123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/588188664075607123'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/11/desarrollomobilenet-punto.html' title='desarrolloMobile.NET a punto'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-8598821197876346402</id><published>2007-11-02T12:41:00.000+01:00</published><updated>2007-11-02T12:52:37.987+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Remote Logger'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerToys'/><category scheme='http://www.blogger.com/atom/ns#' term='Compact WCF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Logging de WCF sobre .NET Compact Framework</title><content type='html'>&lt;a href="http://blogs.msdn.com/danhorbatt/"&gt;&lt;strong&gt;Dan Horbatt's&lt;/strong&gt; &lt;/a&gt;ha publicado un interesantísimo post acerca de cómo seguir la traza de mensajes WCF cuando una aplicación .&lt;strong&gt;NET Compact Framework&lt;/strong&gt; es el cliente. Si de por sí ya es compleja el &lt;a href="http://msdn2.microsoft.com/en-us/library/ms731859.aspx"&gt;logging en &lt;strong&gt;WCF&lt;/strong&gt;&lt;/a&gt;, cuando lo trasladamos a&lt;strong&gt; .NET Compact Framework&lt;/strong&gt; podemos morir en el intento. De hecho, a mí, ni se me había pasado por la cabeza.&lt;br /&gt;&lt;br /&gt;Sin embargo &lt;strong&gt;Dan&lt;/strong&gt; demuestra como a través del &lt;strong&gt;Remote Logger&lt;/strong&gt; (incluido en el &lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C8174C14-A27D-4148-BF01-86C2E0953EAB&amp;amp;displaylang=en"&gt;PowerToys 3.5 CTP &lt;/a&gt;&lt;/strong&gt;) podemos hacerlo mostrandonos un ejemplo con el emulador.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8598821197876346402?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/danhorbatt/archive/2007/11/01/remote-logging-wcf-on-net-compact-framework.aspx' title='Logging de WCF sobre .NET Compact Framework'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8598821197876346402/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8598821197876346402' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8598821197876346402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8598821197876346402'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/11/loggin-de-wcf-sobre-net-compact.html' title='Logging de WCF sobre .NET Compact Framework'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-6090042455436509772</id><published>2007-10-16T08:00:00.000+02:00</published><updated>2007-10-27T12:10:11.984+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='desarrolloMobile.NET'/><title type='text'>desarrolloMobile.NET .... en pruebas</title><content type='html'>&lt;a href="http://www.desarrollomobile.net/devMob/Portals/0/logo1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://www.desarrollomobile.net/devMob/Portals/0/logo1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_yE31JyB0P5g/RtWxvgZaFfI/AAAAAAAAACo/UWVOkRFz9oA/s320/fotos+035.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Ya estoy finalizando la estructura y diseño del nuevo site bajo plataforma dotNetNuke. Durante un par de semanas estará de pruebas e iré añadiendo recursos, FAQs, artículos y entradas en la wikiMobile.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Si quereis echarle un vistazo podéis entrar, registraros (con LiveID aún no) y criticarlo abiertamente ;-)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Cualquier sugerencia o colaboración o lo que sea será bienvenida. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-6090042455436509772?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.desarrollomobile.net/devmob' title='desarrolloMobile.NET .... en pruebas'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/6090042455436509772/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=6090042455436509772' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6090042455436509772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6090042455436509772'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/03/problemas-en-desarrollomobilenet.html' title='desarrolloMobile.NET .... en pruebas'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1465055923435684228</id><published>2007-09-18T09:45:00.000+02:00</published><updated>2007-09-18T09:48:00.299+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Compact WCF'/><title type='text'>Compact WCF Ten Commandments # .NET Compact Framework 3.5</title><content type='html'>&lt;p&gt;&lt;em&gt;&lt;span style="font-size:78%;"&gt;De &lt;a href="http://wcefe.blogspot.com/"&gt;wcefe.blogspot.com&lt;/a&gt;:&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Compact WCF&lt;/strong&gt; was born from E-Mail transport capabilities. Read and understand the &lt;a href="http://blogs.msdn.com/romanbat/archive/2006/10/21/windows-communication-foundation-compact-edition-and-the-story-of-the-lunch-launcher.aspx"&gt;story of "Lunch Launcher"&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Compact WCF&lt;/strong&gt; is a subset of &lt;strong&gt;WCF Framework&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Compact WCF&lt;/strong&gt; only consume, don't host &lt;strong&gt;WCF&lt;/strong&gt; &lt;strong&gt;Service&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Forget &lt;strong&gt;Contracts&lt;/strong&gt;. You are managing messages, so...&lt;/li&gt;&lt;li&gt;... be familiarized with &lt;strong&gt;Channel Factories&lt;/strong&gt; and &lt;strong&gt;XmlSerializerWrapper&lt;/strong&gt;. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Compact WCF&lt;/strong&gt; don't support MSMQ, TCP o others transports. Http/s and E-Mail transports bindings do.&lt;/li&gt;&lt;li&gt;Forget transfer a large amount of data into a message, discard &lt;strong&gt;stream mode&lt;/strong&gt;, is not available. "Buffer" it into your head.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Compact WCF&lt;/strong&gt; supports a subset* of WS_Security and WS_Addresing. [* -&gt; only Basic256Rsa15.]&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Make&lt;/strong&gt; Microsoft &lt;strong&gt;Exchange&lt;/strong&gt; MVP o expert &lt;strong&gt;friend&lt;/strong&gt;. Keep him/her close to you.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Think Mobile&lt;/strong&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1465055923435684228?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1465055923435684228/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1465055923435684228' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1465055923435684228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1465055923435684228'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/09/compact-wcf-ten-commandments-net.html' title='Compact WCF Ten Commandments # .NET Compact Framework 3.5'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-6923000691656222755</id><published>2007-09-07T21:32:00.000+02:00</published><updated>2007-09-10T16:50:53.871+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opinión'/><title type='text'>¿Saben cuántos móviles se vendieron durante el 2006?</title><content type='html'>Si hablara con un colega le diría... "échale", ahora les digo, "dígan algo"...&lt;br /&gt;&lt;br /&gt;Pues se vendieron unos&lt;strong&gt; 1.000.000.000&lt;/strong&gt; de móviles...si, cuenten los zeros; &lt;strong&gt;tiene 9&lt;/strong&gt;, es decir, unos mil millones de móviles &lt;strong&gt;en todo el mundo&lt;/strong&gt;. Sólo en el último trimestre (Campaña de Navidad incluida) el 30%. Nokia y Motorola se repartieron la mitad del "pastelito".&lt;br /&gt;&lt;br /&gt;Para este año algunas compañías calculan unas ventas similares al del 2006. Es decir que si buscan trabajo no descarten enfundarse de rojo, dejarse barba, teñirla de blanca y alquilar (creo que vale una pasta, aviso) un reno (una fregoneta, también vale). La industria apoya a Santa Claus , está claro, y ahora se acercan las fechas más "productivas".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-6923000691656222755?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/6923000691656222755/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=6923000691656222755' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6923000691656222755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6923000691656222755'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/09/saben-cuntos-mviles-se-vendieron.html' title='¿Saben cuántos móviles se vendieron durante el 2006?'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1004990739712996026</id><published>2007-09-04T15:16:00.000+02:00</published><updated>2007-09-04T15:23:46.369+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><title type='text'>Windows Mobile Developer Briefing 2007   # Mobility Sub Tour #</title><content type='html'>El próximo &lt;em&gt;20 de septiembre&lt;/em&gt; se celebrará en &lt;strong&gt;Barcelona&lt;/strong&gt; tres eventos simultaneos para &lt;strong&gt;desarrolladores&lt;/strong&gt;, partners y clientes totalmente gratuito. Asistiré al de desarrolladores bajo el nombre &lt;strong&gt;Windows Mobile Developer Briefing 2007&lt;/strong&gt;. Para las demás reuniones:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032348565&amp;Culture=es-ES"&gt;Windows Mobile Partner Briefing 2007&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032348569&amp;amp;Culture=es-ES"&gt;Windows Mobile Enterprise Customer Briefing 2007&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nos vemos!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1004990739712996026?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032348566&amp;Culture=es-ES' title='Windows Mobile Developer Briefing 2007   # Mobility Sub Tour #'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1004990739712996026/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1004990739712996026' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1004990739712996026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1004990739712996026'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/09/windows-mobile-developer-briefing-2007.html' title='Windows Mobile Developer Briefing 2007   # Mobility Sub Tour #'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3736068914410531848</id><published>2007-07-31T15:58:00.000+02:00</published><updated>2007-07-31T16:01:11.187+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MPX'/><title type='text'>MPx 300 Firmware updated!!!</title><content type='html'>Pues sí!! ya tengo la última versión ROM operativa para el MPx, (21 March 2005). Trabajito me ha costao.... si alguien está interesado contactarme!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3736068914410531848?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3736068914410531848/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3736068914410531848' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3736068914410531848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3736068914410531848'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/07/mpx-300-firmware-updated.html' title='MPx 300 Firmware updated!!!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-6389096427778429422</id><published>2007-06-25T13:30:00.000+02:00</published><updated>2007-06-25T13:53:25.417+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Local Server Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Local Server Framework for Windows Mobile</title><content type='html'>&lt;a href="http://msdn2.microsoft.com/en-us/library/bb415413.aspx"&gt;&lt;strong&gt;Local Server Framework&lt;/strong&gt;&lt;/a&gt;&lt;em&gt;(Sólo para Windows Mobile)&lt;/em&gt; forma parte de &lt;strong&gt;Windows Embedded CE Tests and Test Tools&lt;/strong&gt;, herramienta que viene junta a &lt;a href="http://jmtorres.blogspot.com/2007/03/windows-mobile-6-demo-sdk-y-dems.html"&gt;&lt;strong&gt;Windows Mobile 6.0 SDK&lt;/strong&gt; &lt;/a&gt;y cuyo objetivo principal es el del testeo de drivers y otras funcionalidades del sistema operativo a través de una linea de comandos&lt;em&gt;(Sólo para Windows CE)&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Local Server Framework&lt;/em&gt; se centra principalmente en el tedioso trabajo de testeo de aplicaciones móviles contra servicios Web, mediante la simulación de un falso servidor local que simula dicho contexto. Os recomiendo un &lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032340726%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;WebCast &lt;/a&gt;que muestra en ejemplo de uso de esta herramienta.&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/Bb415514.c5e0b434-0d38-4971-b203-39398ad029fa(en-us,MSDN.10).gif"&gt;&lt;img style="WIDTH: 422px; CURSOR: hand" height="378" alt="" src="http://msdn2.microsoft.com/en-us/library/Bb415514.c5e0b434-0d38-4971-b203-39398ad029fa(en-us,MSDN.10).gif" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Imagen enlazada al MSDN&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;Existen otras herramientas aunque son específicas para &lt;strong&gt;Windows C&lt;/strong&gt;E a excepción de &lt;strong&gt;Local&lt;/strong&gt; &lt;strong&gt;Server Framework&lt;/strong&gt; que lo es para &lt;strong&gt;Windows Mobile&lt;/strong&gt;. A continuación os muestro la lista de las misma con el enlace correspondiente:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa934674.aspx"&gt;Application Verifier Tool (Windows CE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa934745.aspx"&gt;CPU Monitor Tool (Windows CE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb203265.aspx"&gt;PerfToCsv Tool (Windows CE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa934067.aspx"&gt;Print Screen Tool (Windows CE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa934625.aspx"&gt;Scritping Host Tool (Windows CE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa935057.aspx"&gt;Windwows Embedde CE Stress Tool (Windows CE)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-6389096427778429422?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/6389096427778429422/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=6389096427778429422' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6389096427778429422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6389096427778429422'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/06/local-server-framework-for-windows.html' title='Local Server Framework for Windows Mobile'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-2820390867335832093</id><published>2007-06-12T14:11:00.000+02:00</published><updated>2007-06-12T10:44:15.826+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><title type='text'>Introducción a .NET Compact Framework 2.0</title><content type='html'>Estoy escribiendo una serie de articulos (&lt;em&gt;en plan coleguitas ;-)&lt;/em&gt;) para introducirse en el desarrollo de Windows Mobile con .NET Compact Framework 2.0. Hasta ahora tengo acabado y ya podéis descargaros los siguiente:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.desarrollomobile.net/visita.aspx?link=http://www.desarrollomobile.net/downloads/dotnetcf/Introducción%20a%20CF%201aParte.pdf&amp;id=271"&gt;El primer proyecto con .NET Compact Framework 2.0.&lt;/a&gt; (Mayo 2007)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.desarrollomobile.net/visita.aspx?link=http://www.desarrollomobile.net/downloads/dotnetcf/Introducción%20a%20CF%202aParte.pdf&amp;id=272"&gt;AciveSync, Emuladores y el Device Emulator Manager.&lt;/a&gt; (Mayo 2007)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.desarrollomobile.net/visita.aspx?link=http://www.desarrollomobile.net/downloads/dotnetcf/Introducción%20a%20CF%203aParte.pdf&amp;id=273"&gt;Anatomia de un dispositivo móvil&lt;/a&gt; (Junio 2007)&lt;/li&gt;&lt;/ol&gt;Si deseas comunicarme al respecto algo (critica, sugerencia,..) no lo dudes y déjame un comentario.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-2820390867335832093?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.desarrollomobile.net/explore2.aspx?item=43' title='Introducción a .NET Compact Framework 2.0'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/2820390867335832093/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=2820390867335832093' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2820390867335832093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/2820390867335832093'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/05/introduccin-net-compact-framework-20.html' title='Introducción a .NET Compact Framework 2.0'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-4209324166136175795</id><published>2007-06-11T17:21:00.000+02:00</published><updated>2007-06-12T15:38:57.798+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Origami'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinión'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interfaces'/><title type='text'>¿eres cirujano plástico.net?</title><content type='html'>Ante la inminente aceptación de &lt;strong&gt;WPF&lt;/strong&gt; y &lt;strong&gt;Silverlight&lt;/strong&gt; en dispositivos móviles, &lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Toshiba_Portege_3500_Tablet_PC.JPG/250px-Toshiba_Portege_3500_Tablet_PC.JPG"&gt;tablet pc&lt;/a&gt;, &lt;a href="http://images.dailytech.com/nimage/715_large_umpc1.jpg"&gt;umpc&lt;/a&gt; (&lt;span style="font-size:85%;"&gt;Mobile PC #Codename Origami#&lt;/span&gt;), &lt;a href="http://tbn0.google.com/images?q=tbn:VQ85_Qai7wCGUM:http://palmyamcha.hkisl.net/archives/050822_mpx1.jpg"&gt;smartdevice &lt;/a&gt;que se avecina ,explicaré mis opiniones respecto a la peculiaridades físicas de la pantalla antes de confeccionar una interfaz de usuario.&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;La resolución no suele ser muy grande y es, a veces, ligeramente más horizontal que un PC (p.e. 800x480 en Mobile PC). Los usuarios normalmente no utilizan teclados, sino que interactuaran con el dedo o con un lápiz táctil con lo que las zonas de selección son determinantes, entendiendo por zonas de selección (&lt;em&gt;&lt;strong&gt;esto es la era WPF&lt;/strong&gt;&lt;/em&gt;) todas aquellas partes del formulario encuadrado en la pantalla que contengan uno o varios controles que interactúen con la aplicación , botones, cajas de selección, etc. A muchos usuarios no les hará mucha gracia confundir una imagen con una zona de selección o lo que es peor no distinguir ninguna zona dentro del marco de la pantalla. &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Hablando de usabilidad, traten de &lt;strong&gt;evitar el acercar&lt;/strong&gt; las zonas de selección a los bordes de la pantalla. Se recomienda un tamaño aproximado de &lt;strong&gt;10mm por área de selección&lt;/strong&gt;. No permitan a un control &lt;strong&gt;Check Box&lt;/strong&gt; navegar por vuestra aplicación con un tamaño inferior, no seria bueno hacer sentir al usuario, cuando éste tenga que seleccionar el valor de un Check Box, como si tuviera que tratar de 'hilar un hilo' en un alfiler. Recuerden que el ratón puede ser el dedo o el lápiz pero tampoco olviden que puede haber un teclado.&lt;br /&gt;&lt;br /&gt;Eviten utilizar &lt;strong&gt;Scroll Bars&lt;/strong&gt;. Sin embargo, como desarrollador de dispositivos móviles de plataformas Pocket PC y Smartphone yo los utilizo a menudo, pero &lt;strong&gt;siempre verticales&lt;/strong&gt;. Si deciden poner que sean verticales, eso sí, cuanto menos mejor. Eviten las horizontales o lo que es &lt;strong&gt;peor&lt;/strong&gt; las &lt;strong&gt;horizontales y verticales combinadas&lt;/strong&gt;. No carguen la interficie gráfica en exceso. No exijan demasiado a los eventos; los botones de función que ofrece UMPC son muy bien avenidos, aprovéchenlos. Algunos Table PC ofrecen una pantalla táctil electromagnética que junto a sofisticados lápices permiten otro tipo de eventos. UMPC y Pocket PC no incorpora pantallas de ese tipo.&lt;br /&gt;&lt;br /&gt;Las peculiaridades se centran principalmente en la pantalla y en el cambio de iteración entre ordenador y usuario en el que no hay ni teclado ni ratón, o en ocasiones sí. Por lo general los desarrolladores de dispositivos embebidos (desde Smartphone hasta Tablet PC dónde la características de las pantallas limitan las aplicaciones por motivos obvios), que son capaces de elaborar una interfície gráfica de usuario &lt;strong&gt;ágil, funcional&lt;/strong&gt; y además &lt;strong&gt;gráficamente agradable&lt;/strong&gt; son, para mí, auténticos &lt;strong&gt;'cirujanos plásticos'&lt;/strong&gt; del desarrollo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/windowsvista/aa904973.aspx"&gt;Prueba tus habilidades&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;p align="center"&gt;&lt;a href="http://images.dailytech.com/nimage/715_large_umpc1.jpg"&gt;&lt;img style="WIDTH: 320px; CURSOR: hand" alt="" src="http://images.dailytech.com/nimage/715_large_umpc1.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-4209324166136175795?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/4209324166136175795/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=4209324166136175795' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4209324166136175795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/4209324166136175795'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/06/eres-cirujano-plsticonet.html' title='¿eres cirujano plástico.net?'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1169235898688801775</id><published>2007-06-10T20:02:00.000+02:00</published><updated>2007-06-28T08:54:04.372+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enlaces'/><title type='text'>blogs y sites interesantes</title><content type='html'>No soy muy constante en eso de periódicamente "invertir" un tiempo en leer blogs y demás sites, los cuales no niego que sean interesantes. en este mismo blog, expongo a vuestra izquierda una lista de enlaces de los que más frecuento.&lt;br /&gt;&lt;br /&gt;Ayer me comunicaron que uno de lo blogs que más leo había cambiado de "dominio". Recordé que tenia que cambiar el enlace de este blog cuando de repente no aparece. He vivido unos cuantos meses pensando que ese enlace enriquecía este blog (eso también vale ;-)) y cual ha sido mi sorpresa cuando no lo he visto.&lt;br /&gt;&lt;br /&gt;El enlace en cuestión es del blog de &lt;a href="http://ramonbosch.blogspot.com/"&gt;Ramón Bosch&lt;/a&gt;. De aqui os aconsejo que no dejeis de echarle un vistazo, sus opiniones y forma de ver las cosas, sencillamente, son impresionantes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1169235898688801775?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1169235898688801775/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1169235898688801775' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1169235898688801775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1169235898688801775'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/06/blogs-y-sites-interesantes.html' title='blogs y sites interesantes'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-619000081724371129</id><published>2007-06-08T17:51:00.000+02:00</published><updated>2007-06-08T17:57:01.312+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office Mobile 2007'/><title type='text'>Office Mobile 2007 ¡por la patilla! (*)</title><content type='html'>&lt;p align="justify"&gt;&lt;strong&gt;Microsoft&lt;/strong&gt; ha anunciado la disponibilidad de actualizaciones &lt;strong&gt;gratuitas&lt;/strong&gt; de &lt;strong&gt;Office Mobile 2007 &lt;/strong&gt;(*) para una selección de dispositivos durante el tercer trimestre del año. Office Mobile 2007 amplía las capacidades de Windows Mobile para leer y editar documentos creados con Microsoft Office 2007 y también incluye nuevas funcionalidades como Fax y ZIP.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div align="justify"&gt;Los fabricantes que lancen dispositivos con Windows Mobile 6 llevarán Office Mobile 2007 preinstalado a principios del tercer trimestre de 2007. &lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;Microsoft también presenta una versión de Windows Mobile 6 para smartphones en japonés. El nuevo sistema operativo estará disponible en dispositivos de &lt;strong&gt;HTC&lt;/strong&gt;, &lt;strong&gt;Sharp&lt;/strong&gt; y &lt;strong&gt;Toshiba&lt;/strong&gt; desde Junio de 2007 en Japón, con actualizaciones gratuitas a Office Mobile 2007 en una selección de dispositivos para el tercer trimestre de &lt;strong&gt;2007&lt;/strong&gt;. La última versión del sistema operativo ofrece funcionalidades vistas en el PC que ahora se trasladan a los dispositivos móviles.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_i0a6wx1FjwE/Rml8FqKRRLI/AAAAAAAAAAU/3mJnY_nXGBg/s1600-h/Softbank+Mobile+Corp+japan.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5073722891868128434" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_i0a6wx1FjwE/Rml8FqKRRLI/AAAAAAAAAAU/3mJnY_nXGBg/s320/Softbank+Mobile+Corp+japan.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-619000081724371129?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/619000081724371129/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=619000081724371129' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/619000081724371129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/619000081724371129'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/06/office-mobile-2007-por-la-patilla.html' title='Office Mobile 2007 ¡por la patilla! (*)'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i0a6wx1FjwE/Rml8FqKRRLI/AAAAAAAAAAU/3mJnY_nXGBg/s72-c/Softbank+Mobile+Corp+japan.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-8023953456444527434</id><published>2007-05-22T21:34:00.000+02:00</published><updated>2007-05-22T21:44:47.712+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MPX'/><title type='text'>MPX: ¡¡Completé la trilogía!!</title><content type='html'>Pues si!! ya tengo en mi manos el gran &lt;strong&gt;MPX300&lt;/strong&gt; o &lt;strong&gt;MPx&lt;/strong&gt;. Despues de haver pasado por el &lt;a href="http://www.gba-flash.com/images/mpx200.jpg"&gt;&lt;strong&gt;MPX200&lt;/strong&gt; &lt;/a&gt;y &lt;strong&gt;&lt;a href="http://www.jaimerodela.com/mpx220-1.jpg"&gt;MPX220&lt;/a&gt;&lt;/strong&gt;, con &lt;strong&gt;Windows Mobile Smartphone 2002&lt;/strong&gt; y &lt;strong&gt;2003SE&lt;/strong&gt;, adquirí por &lt;a href="http://www.ebay.es"&gt;&lt;strong&gt;eBay&lt;/strong&gt; &lt;/a&gt;una reliquia, el &lt;strong&gt;&lt;a href="http://www.valuesphere.com/Merchant2/graphics/00000001/motorola-mpx300.jpg"&gt;MPX300&lt;/a&gt;&lt;/strong&gt;!!&lt;br /&gt;&lt;br /&gt;Este movil "no ha visto la luz", ya que &lt;a href="http://www.motorola.es"&gt;&lt;strong&gt;Motorola&lt;/strong&gt; &lt;/a&gt;no lo comercializó en Europa. Despues de una tirada "Beta", fue comercializado en &lt;strong&gt;Singapur&lt;/strong&gt; y debido a su alto precio (más de 1,000$) y la necseidad de Motorola de hacer competencia a &lt;a href="http://www.blackberry.com/es/"&gt;&lt;strong&gt;Blackberry&lt;/strong&gt; &lt;/a&gt;y &lt;strong&gt;&lt;a href="http://euro.palm.com/es/es"&gt;Palm&lt;/a&gt;&lt;/strong&gt;, decidió no comercializarlo, sacando en su lugar &lt;strong&gt;&lt;a href="http://motorola-rm.locaweb.com.br/motoq/es/q-home.asp"&gt;MotoQ&lt;/a&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Os dejo &lt;a href="http://www.youtube.com/watch?v=QjVZz9LvWy0"&gt;un video &lt;/a&gt;que encontré por &lt;strong&gt;YouTube&lt;/strong&gt; con todas sus características. En realidad, en comparación con los actuales del mercado tiene poca memoria (64ROM y 28 RAM) y es lento (152Mhz) [#apareció en el 2004#], pero es una pieza digna de museo...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;embed src="http://www.youtube.com/v/QjVZz9LvWy0" width="425" height="350" type="application/x-shockwave-flash" wmode="transparent"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8023953456444527434?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8023953456444527434/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8023953456444527434' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8023953456444527434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8023953456444527434'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/05/mpx-complet-la-triloga.html' title='MPX: ¡¡Completé la trilogía!!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-6841639596345829845</id><published>2007-05-04T14:37:00.000+02:00</published><updated>2007-05-04T14:40:49.974+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveSync'/><title type='text'>Sincronización ActiveSYnc con servidor Exchange (Lista de Errores)</title><content type='html'>Aqui teneis una completísima &lt;strong&gt;lista de errores, causas y soluciones&lt;/strong&gt; de sincronización y otros entre &lt;a href="http://jmtorres.blogspot.com/2007/02/activesync-45-ya-disponible.html"&gt;ActiveSync &lt;/a&gt;y &lt;strong&gt;Exhange.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: Probablemente no cuente con los nuevos errores de Exchange 2007, en cuanto a sincronización con ActiveSync se refiere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-6841639596345829845?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.pocketpcfaq.com/faqs/activesync/exchange_errors.php' title='Sincronización ActiveSYnc con servidor Exchange (Lista de Errores)'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/6841639596345829845/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=6841639596345829845' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6841639596345829845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6841639596345829845'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/05/sincronizacin-activesync-con-servidor.html' title='Sincronización ActiveSYnc con servidor Exchange (Lista de Errores)'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-8519064244236805288</id><published>2007-04-26T08:45:00.000+02:00</published><updated>2007-04-26T09:00:41.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Compact Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF en .NET CF 3.5</title><content type='html'>Hace poco, a través del site de &lt;a href="http://www.byteabyte.net"&gt;Alejandro Mezcua&lt;/a&gt;, encontré &lt;a href="http://blogs.msdn.com/markprenticems/archive/2007/03/27/introduction-to-windows-communication-foundation-for-the-net-compact-framework-messaging-stack.aspx"&gt;un post &lt;/a&gt;introductorio acerca de la utilización de &lt;strong&gt;WCF&lt;/strong&gt; desde&lt;strong&gt; .NET CF 3.5&lt;/strong&gt;. Ahora, &lt;a href="http://blogs.msdn.com/markprenticems"&gt;Mark Prentice&lt;/a&gt;, autor de los post, muestra una de las utilizaciones que más beneficios va a aportar (creo yo) en entornos móviles, enlaces WCF a través de &lt;strong&gt;Exchange&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;La idea nació dentro del equipo de desarrollo de .NET CF, concretamente de &lt;strong&gt;&lt;a href="http://blogs.msdn.com/mikezintel"&gt;Mike Zintel&lt;/a&gt;&lt;/strong&gt;, y fue &lt;a href="http://blogs.msdn.com/romanbat"&gt;Roman Batoukov &lt;/a&gt;quién a través &lt;strong&gt;&lt;a href="http://blogs.msdn.com/romanbat/archive/2006/10/21/windows-communication-foundation-compact-edition-and-the-story-of-the-lunch-launcher.aspx"&gt;de un post imprescindible&lt;/a&gt;&lt;/strong&gt;, explicaba cómo desde entornos móviles podían sacar el máximo provecho &lt;strong&gt;WCF&lt;/strong&gt;, ¿como? pues a través de correos electrónicos...&lt;br /&gt;&lt;br /&gt;Si estais interesados sobre el tema os recomiendo primero, &lt;a href="http://blogs.msdn.com/romanbat/archive/2006/10/21/windows-communication-foundation-compact-edition-and-the-story-of-the-lunch-launcher.aspx"&gt;la teoria&lt;/a&gt;, de Roman y luego la puesta en marcha (&lt;a href="http://blogs.msdn.com/markprenticems/archive/2007/04/25/introduction-to-the-windows-communication-foundation-for-the-net-compact-framework-store-and-forward-messaging.aspx"&gt;practica&lt;/a&gt;) de Mark. El resultado... espectacular.&lt;br /&gt;&lt;br /&gt;Si alguien quiere compartir su experiencia, por favor, dejad un comentario; quiero comprobar si os quedais tan impresionados como yo...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-8519064244236805288?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/8519064244236805288/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=8519064244236805288' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8519064244236805288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/8519064244236805288'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/wcf-en-net-cf-35.html' title='WCF en .NET CF 3.5'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3551575463797878912</id><published>2007-04-25T16:18:00.000+02:00</published><updated>2007-04-25T16:22:55.593+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEDC'/><title type='text'>Se acercan MEDC (Las Vegas y Berlín)</title><content type='html'>Otro año más se celebra el &lt;strong&gt;Microsoft Mobile &amp; Embedded Developer Conference&lt;/strong&gt; en &lt;a href="https://www.medc2007.com/public/home.aspx"&gt;Las Vegas &lt;/a&gt;dónde las estrellas serán&lt;strong&gt; .NET CF 3.5&lt;/strong&gt; y &lt;strong&gt;Windows Mobile 6&lt;/strong&gt;. Para la edición de Europa, este año pasa a celebrarse en &lt;a href="https://www.medc2007.com/europe/default.aspx"&gt;Berlín&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Otro año más, también, que no puedo ir y me voy a quedar con las ganas. Si alguién va que lo disfrute!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3551575463797878912?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3551575463797878912/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3551575463797878912' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3551575463797878912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3551575463797878912'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/se-acercan-medc-las-vegas-y-berln.html' title='Se acercan MEDC (Las Vegas y Berlín)'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-319048266926265969</id><published>2007-04-16T18:13:00.000+02:00</published><updated>2007-04-16T19:30:10.549+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tagged'/><title type='text'>Taggeado!!</title><content type='html'>Pues si, mi buena amiga &lt;a href="http://fabianaaragon.spaces.live.com"&gt;Fabiana&lt;/a&gt;, me ha taggeado. Confesaré 5 cosas sobre mí que normalmente no cuento. Me apunto a esta estupidez :-)&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Cuando sea grande quiero ser piloto de avión y caminar por los aeropuertos con las espaldas anchas y mis 'lupas' RayBan, que por cierto ya &lt;a href="http://tbn0.google.com/images?q=tbn:k18X-ifHXV39PM:http://di1.shopping.com/images/di/4b/6e/76/486f755a6c795a596a57447541335669535477-100x100-0-0.jpg"&gt;las tengo &lt;/a&gt;aunque solo me las pongo en el coche. Soy un chiflado del &lt;strong&gt;Flight Simulator&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Estoy 'chiflao' por el cava catalán. Mis preferidos son el &lt;a href="http://www.directoalpaladar.com/images/2006/11/kripta.jpg"&gt;Kripta&lt;/a&gt; d'Agustí Torelló,  &lt;a href="http://www.adfruendumvino.be/images/juveycampsreserva.jpg"&gt;Reserva de la Familia de Juvé i Camps&lt;/a&gt;, &lt;a href="http://lowpower.iis.u-tokyo.ac.jp/~kawapy/wines/157.jpg"&gt;Reserva de Sumarroca&lt;/a&gt;, &lt;a href="http://www.cavescolomer.com/cas_prod_cava8.htm"&gt;'er' &lt;/a&gt;de Cristina Colomer Bernat, &lt;a href="http://www.estintobasico.com/uploaded_images/cellerbatlle-751426.jpg"&gt;Celler Batlle&lt;/a&gt; de Gramona y el &lt;a href="http://www.robertjmur.com/castella/prodgranreserva.html"&gt;Gran Reserva &lt;/a&gt;de Robert J.Mur, entre otros...&lt;/li&gt;&lt;li&gt;Confieso que siento una enorme admiración por &lt;a href="http://www.gorkalimotxo.net/weboteca/monolitro/monolitro01/vaquilla.html"&gt;Juan José Moreno Cuenca&lt;/a&gt;, del cual tengo todas las películas que hablan de su vida, así como &lt;a href="http://www.agapea.com/HASTA-LA-LIBERTAD-MEMORAMA-VAQUILLA-n71858i.htm"&gt;el libro autobiográfico &lt;/a&gt;que he leído ya dos veces.&lt;/li&gt;&lt;li&gt;En mi coche tengo una pegatina/retrato de &lt;a href="http://usuarios.lycos.es/camaronweb/"&gt;José Monge Cruz&lt;/a&gt;. Para quién le guste el flamenco, estará conmigo, sobran las palabras.&lt;/li&gt;&lt;li&gt;Cuando era pequeño gané el campeonato de catalunya de cross y fuí subcampeón varias veces en varias categorias. Tenía una prometedora carrera en el mundo del atletismo que se truncó, para mi desgracia. Posteriormente pasé a correr delante de la polícia...&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Podría profundizar en alguna de ellas, pero tampoco hay que pasarse ¿¿no?? &lt;/p&gt;&lt;p&gt;Ah! se me olvidaba, voy a taggear (o como se llame) a Marino Posadas, Santi Balboa.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-319048266926265969?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/319048266926265969/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=319048266926265969' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/319048266926265969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/319048266926265969'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/taggeado.html' title='Taggeado!!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1804024769143002369</id><published>2007-04-16T10:01:00.000+02:00</published><updated>2007-04-16T10:15:51.817+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile 6'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='SDK'/><title type='text'>Windows Mobile 6 (SDK y API obsoletas)</title><content type='html'>Ya se ha publicado el &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=06111A3A-A651-4745-88EF-3D48091A390B&amp;displaylang=en"&gt;&lt;strong&gt;SDK&lt;/strong&gt; de &lt;strong&gt;Windows Mobile 6&lt;/strong&gt;&lt;/a&gt;, tanto para la versión &lt;strong&gt;Professional&lt;/strong&gt; (&lt;em&gt;WM 6 inc. Phone Edition&lt;/em&gt;) como para la &lt;strong&gt;Standard&lt;/strong&gt; (&lt;em&gt;WM6 Smartphone&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Microsoft&lt;/strong&gt; ha modificado los nombres de las categorias del nuevo sistema operativo de la siguiente manera:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows Mobile (Smartphone) = &lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Windows Mobile Standard&lt;/strong&gt;&lt;/span&gt; &lt;/li&gt;&lt;li&gt;Windows Mobile (Pocket PC) = &lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Windows Mobile Classic&lt;/strong&gt;&lt;/span&gt; &lt;/li&gt;&lt;li&gt;Windows Mobile (Pocket PC Phone Edition) = &lt;span style="color:#cc0000;"&gt;&lt;strong&gt;Windows Mobile Professional&lt;/strong&gt;&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;De esta forma debemos indentificar los nuevos nombres la a la hora de crear un nuevo proyecto (Tipo de Proyecto) e Imágenes del Emulador. &lt;/p&gt;&lt;p&gt;Por otro lado también se ha publicado las &lt;strong&gt;API&lt;/strong&gt; que dejan de ser funcionales en Wi&lt;strong&gt;ndows Mobile 6.&lt;/strong&gt; La verdad es que la lista es larga, así que os invito a &lt;a href="http://channel9.msdn.com/wiki/default.aspx/MobileDeveloper.DeprecatedFeaturesInWindowsMobile6"&gt;echar un vistazo en Channel 9&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1804024769143002369?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://channel9.msdn.com/wiki/default.aspx/MobileDeveloper.HomePage' title='Windows Mobile 6 (SDK y API obsoletas)'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1804024769143002369/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1804024769143002369' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1804024769143002369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1804024769143002369'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/windows-mobile-6-sdk-y-api-obsoletas.html' title='Windows Mobile 6 (SDK y API obsoletas)'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-1264706728401596013</id><published>2007-04-16T09:33:00.000+02:00</published><updated>2007-04-16T09:34:42.232+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Service Throttling</title><content type='html'>&lt;strong&gt;&lt;em&gt;Throttling&lt;/em&gt;&lt;/strong&gt; viene de &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Throttle"&gt;throttle&lt;/a&gt;&lt;/strong&gt;, y este termino sólo lo había utilizado en aviación "&lt;em&gt;move throttle from idle,..."&lt;/em&gt; y se refería a la palanca de gases de los reactores modernos. Pero que carajo significa en &lt;strong&gt;WCF&lt;/strong&gt;??&lt;br /&gt;&lt;br /&gt;Throttling es una técnica que permite la restricción de clientes de un servicio &lt;strong&gt;WCF&lt;/strong&gt;. Ésta se aplica al &lt;strong&gt;Servicio&lt;/strong&gt; y todos sus &lt;strong&gt;EndPoints&lt;/strong&gt;. Los tres parámetros que controla son:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Concurrencia máxima de sesiones&lt;/li&gt;&lt;li&gt;Concurrencia máxima de llamadas&lt;/li&gt;&lt;li&gt;Concurrencia máxima de instancias&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Pese a que se asigna al tipo de Servicio ésta, al igual que otras, es un aspecto del &lt;strong&gt;hosting&lt;/strong&gt;, con lo que deberemos indicar los valores en el &lt;strong&gt;.con&lt;/strong&gt;fig del proyecto que lo hospeda. Un ejemplo:&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;[serviceBehaviors&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#336666;"&gt;[behavior name = "MiServicio"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#990000;"&gt;[service throttling maxConcurrentsSessions = "10"&lt;br /&gt;maxConcurrentsCalls = "10"&lt;br /&gt;maxConcurrentsInstances = "5" \]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#336666;"&gt;\]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;\]&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size:85%;color:#330033;"&gt;&lt;strong&gt;NOTA: He utilizado brackets (paréntesis) en lugar de &lt;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/strong&gt;&lt;span style="color:#330033;"&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-1264706728401596013?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/1264706728401596013/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=1264706728401596013' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1264706728401596013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/1264706728401596013'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/service-throttling.html' title='Service Throttling'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-3336558573104254316</id><published>2007-04-11T16:55:00.000+02:00</published><updated>2007-04-19T10:48:35.190+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CATdotNET.org'/><title type='text'>CATdotNET.org</title><content type='html'>Hace poco más de un par de meses me reuní con &lt;strong&gt;&lt;a href="http://www.lleonarddelrio.net/"&gt;Lleonard del Río&lt;/a&gt;&lt;/strong&gt;, socio-fundador de &lt;a href="http://www.raona.cat"&gt;Raona&lt;/a&gt;, ya que nos rondaba por la cabeza la creación de un grupo de usuarios que englobara tanto a profesionales, como estudiantes o simples entusiasta de la tecnología &lt;strong&gt;.NET&lt;/strong&gt;. A partir de entonces y con la inestimable colaboración y ayuda de &lt;strong&gt;&lt;a href="http://www.productivitycenter.org/catalan/cip/Pages/Equip.aspx"&gt;Diégo Gómez&lt;/a&gt;&lt;/strong&gt;, empezó a tomar forma lo que ahora es &lt;strong&gt;CATdotNET.org&lt;/strong&gt;, un grupo de usuarios de .NET para la &lt;em&gt;Catalunya central&lt;/em&gt;, en el que pretendemos ofrecer un marco de colaboración a través de &lt;a href="http://www.catdotnet.org"&gt;nuestra web&lt;/a&gt;, aún en construcción, con reuniones periódicas entre &lt;strong&gt;Igualada&lt;/strong&gt; y &lt;strong&gt;Manresa&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;CORRECCIÓN:&lt;br /&gt;A principios del mes de &lt;strong&gt;Mayo&lt;/strong&gt;, convocaremos la primera reunión y poder ofrecer un par de charlas sobre .NET. La fecha y la hora así como el temario de las charlas no estan concretadas por tanto, en cuanto se hagan oficiales las podreis encontrar en la &lt;strong&gt;&lt;a href="http://www.catdotnet.org"&gt;Web&lt;/a&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Asi mismo, si estais interesados en obtener más información, colaborar o cualquier otra sugerenicia u opinión, no dudeis en &lt;a href="mailto:info@catdotnet.org"&gt;contactarnos&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-3336558573104254316?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.catdotnet.org' title='CATdotNET.org'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/3336558573104254316/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=3336558573104254316' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3336558573104254316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/3336558573104254316'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/catdotnetorg.html' title='CATdotNET.org'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-7514395092362307329</id><published>2007-04-10T10:18:00.000+02:00</published><updated>2007-04-10T10:44:20.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Smart Client Guidance'/><title type='text'>Smart Client Software Factory, excelente!!</title><content type='html'>He estado 'trasteando' con la versión &lt;em&gt;Alpha 7 de Abril&lt;/em&gt; del &lt;strong&gt;Smart Client Guidance &lt;/strong&gt;que podeis encontrar en &lt;strong&gt;CodePlex&lt;/strong&gt;. Lo que más me ha llamado la atención és la posibilidad de utilizar el &lt;strong&gt;Connection Manager&lt;/strong&gt;, que tantas veces he necesitado desde las aplicaciones en &lt;strong&gt;Windows&lt;/strong&gt; &lt;strong&gt;Mobile&lt;/strong&gt;, ahora para &lt;strong&gt;Windows XP/Vista&lt;/strong&gt; y con resultados sorprendentes y de forma sencilla...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;a href="http://4.bp.blogspot.com/_i0a6wx1FjwE/RhtKqlNonQI/AAAAAAAAAAM/M_SMLkAax68/s1600-h/connectionmanager.GIF"&gt;&lt;img id="BLOGGER_PHOTO_ID_5051713502430403842" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_i0a6wx1FjwE/RhtKqlNonQI/AAAAAAAAAAM/M_SMLkAax68/s320/connectionmanager.GIF" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Smart Client Software Factory&lt;/strong&gt; forma parte de &lt;strong&gt;Smart Client Guidance&lt;/strong&gt; de &lt;strong&gt;patterns and&lt;/strong&gt;&lt;strong&gt; practices&lt;/strong&gt;, en el que también engloba &lt;strong&gt;Mobile Client Software Factory&lt;/strong&gt; (&lt;em&gt;&lt;span style="font-size:85%;"&gt;del cual dedicaré una serie de post&lt;/span&gt;&lt;/em&gt;). Además del &lt;em&gt;ConnectionManager&lt;/em&gt; también encontraremos ejemplos de extensibilidad de &lt;strong&gt;WPF&lt;/strong&gt; para nuestras aplicaciones &lt;em&gt;Windows&lt;/em&gt;, así como todo tipo de ejemplos fundamentados en el 'padre' de SCSF, &lt;strong&gt;Composite UI Application Block&lt;/strong&gt;, un marco de trabajo basado en .NET 2.0 y que permite el desarrollo de UI ricas, flexibles, extensibles y &lt;em&gt;&lt;strong&gt;"fáciles"&lt;/strong&gt;&lt;/em&gt; de desarrollar.&lt;br /&gt;&lt;br /&gt;En fín, &lt;strong&gt;Smart Client Guidance&lt;/strong&gt; es toda una herramienta en la línia de &lt;strong&gt;Enterprise Library 2.0&lt;/strong&gt;, al principio asusto pero luego disfrutas a lo grande!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-7514395092362307329?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codeplex.com/smartclient' title='Smart Client Software Factory, excelente!!'/><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/7514395092362307329/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=7514395092362307329' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7514395092362307329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/7514395092362307329'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/smart-client-software-factory-excelente.html' title='Smart Client Software Factory, excelente!!'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i0a6wx1FjwE/RhtKqlNonQI/AAAAAAAAAAM/M_SMLkAax68/s72-c/connectionmanager.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-6052041419099216088</id><published>2007-04-09T18:23:00.000+02:00</published><updated>2007-04-09T18:24:15.813+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interoperabilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Cliente VB6</title><content type='html'>Por lo que he podido ver la &lt;strong&gt;interoperabilidad&lt;/strong&gt; de clientes no &lt;strong&gt;WCF&lt;/strong&gt; está bastante presente sin embargo &lt;em&gt;&lt;span style="color:#000099;"&gt;con algunas conotaciones&lt;/span&gt;&lt;/em&gt;, ya sea el cliente &lt;strong&gt;Java, COM o VC++.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En el caso de &lt;strong&gt;Visual Basic&lt;/strong&gt;, por lo que he podido ver, existen tres escenarios en función del &lt;strong&gt;Runtime&lt;/strong&gt; instalado. Así, si el cliente posee .&lt;strong&gt;NET Framework 3.0&lt;/strong&gt;, la opción más lógica es la creación de un ensamblado &lt;strong&gt;COM Interop&lt;/strong&gt;, que contenga el proxy al WCF Service. Es decir, el cliente que, normalmente, generamos con Svcutil.exe, lo exponemos a COM y exportamos la biblioteca de tipos para que sea referenciada por un proyecto Visual Basic 6.0. En el segundo caso, el cliente tiene .&lt;strong&gt;NET Framework 2.0&lt;/strong&gt;. La alternativa anteriormente comentada no es válida así que podemos generar, el lugar de un proxy &lt;strong&gt;WCF&lt;/strong&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/ms751433.aspx"&gt;un proxy &lt;strong&gt;ASMX&lt;/strong&gt;&lt;/a&gt;. De las misma forma pasamos en proxy a COM Interop, exportamos la biblioteca de tipos y referenciamos o instanciamos desde VB6. La última, en la que no tenemos el &lt;strong&gt;CLR&lt;/strong&gt; de .NET instalado, podemos utilizar &lt;strong&gt;SOAP&lt;/strong&gt;. Windows XP viene con las biliotecas&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7243019-6052041419099216088?l=jmtorres.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jmtorres.blogspot.com/feeds/6052041419099216088/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7243019&amp;postID=6052041419099216088' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6052041419099216088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7243019/posts/default/6052041419099216088'/><link rel='alternate' type='text/html' href='http://jmtorres.blogspot.com/2007/04/cliente-vb6.html' title='Cliente VB6'/><author><name>José Miguel Torres</name><uri>http://www.blogger.com/profile/00332291893267131192</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg/300px-Humphrey_Bogart_by_Karsh_%28Library_and_Archives_Canada%29.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7243019.post-778044267765979158</id><published>2007-04-03T21:55:00.000+02:00</published><updated>2007-04-03T21:56:06.730+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Escenarios de seguridad en WCF: A nivel de Mensaje</title><content type='html'>¿Transporte o Menaje? Bien, según el escenario, aunque ahora no hablaré de ello (quizás otro post). Ante la posibilidad de implantación de servicios desarrollados con &lt;strong&gt;WCF&lt;/strong&gt;, se presentan varios escenarios dónde la utilización de los mismo vienen, sino determinada, sí influenciada por su política de seguridad.&lt;br /&gt;&lt;br /&gt;Modos de seguridad hay 5 [&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;None, Transport, Message, Both, TransportWithMessageCredentials, TransportCredential Only&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;], si quereis ampliar información mirar &lt;a href="http://msdn2.microsoft.com/en-us/library/ms731925.aspx"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/ms733836.aspx"&gt;Message Security with Username Client &lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Ante este contexto explicaré &lt;strong&gt;tres posible &lt;/strong&gt;modos de autenticación &lt;strong&gt;UserName&lt;/strong&gt;. Primeramente saber que en los tres modos de autenticación en el Servidor debe existir un certificado &lt;strong&gt;X509&lt;/strong&gt; para que el cliente pueda constatar la autenticidad del servicio. Si quereis más info de como crearlo mirar aqui.&lt;br /&gt;&lt;br /&gt;En el intercambio inicial desde una llamada del cliente los datos en &lt;strong&gt;&lt;em&gt;formato binario&lt;/em&gt;&lt;/strong&gt; son trasportados mediante la &lt;em&gt;especificación &lt;strong&gt;WS-Trust&lt;/strong&gt;&lt;/em&gt; (&lt;strong&gt;véase &lt;a href="http://msdn.microsoft.com/ws/2004/04/ws-trust"&gt;TLS Negotiation&lt;/a&gt;&lt;/strong&gt;). Una vez el servicio ha sido autenticado se establece un contexto de seguridad compartido [Shared security context].&lt;br /&gt;&lt;br /&gt;Los mensajes, por defecto, están &lt;strong&gt;encriptados y firmados&lt;/strong&gt; (véase &lt;a href="http://msdn2.microsoft.com/en-us/library/system.net.security.protectionlevel.aspx"&gt;ProtectionLevel &lt;/a&gt;) y són transportados bajo dicho contexto de seguridad. La peculiaridad de este escenario és que el cliente es auten
