<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Jorge Serrano - MVP Visual Developer - Visual Basic</title><subtitle type="html">Blog sobre tecnología .NET en general y sobre Visual Basic en particular.</subtitle><id>http://geeks.ms/blogs/jorge/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/jorge/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/jorge/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2012-02-29T14:00:00Z</updated><entry><title>Evitando cometer errores en el registro de aplicaciones Windows Phone 7 en el Marketplace (I)</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/05/01/evitando-cometer-errores-en-el-registro-de-aplicaciones-windows-phone-7-en-el-marketplace-i.aspx" /><id>/blogs/jorge/archive/2012/05/01/evitando-cometer-errores-en-el-registro-de-aplicaciones-windows-phone-7-en-el-marketplace-i.aspx</id><published>2012-05-01T06:00:00Z</published><updated>2012-05-01T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://windowsphoneapps.es/wp-content/uploads/2011/12/apphublogo.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;El proceso de registro de aplicaciones de Windows Phone 7 en el Marketplace de Microsoft es bastante lento, y cada vez que una aplicación enviada no pasa el corte de registro, debemos resolver los problemas detectados y volver a subir el nuevo fichero xap de la aplicación para que éste pase nuevamente todo el proceso de registro.&lt;/p&gt;  &lt;p&gt;Indudablemente, las primeras veces que desarrollamos aplicaciones corremos el riesgo de cometer errores que sólo evita la experiencia.&lt;/p&gt;  &lt;p&gt;Voy a escribir una serie de entradas donde recoja estos errores y la posible forma de que no caigamos en ellos.&lt;/p&gt;  &lt;p&gt;En esta entrada voy a resumir aquellos puntos o pasos que considero de relevancia y que debemos tener en cuenta a la hora de crear y subir nuestras aplicaciones al Marketplace ya que podríamos evitarnos perder el tiempo y de entrar en un ciclo vicioso de arreglar un fallo, subir, volver a arreglar otro, volver a subir, etc.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Idioma por defecto en nuestras aplicaciones&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Es un error más común de lo que parece y corresponde en muchas ocasiones a la falta de observación y por supuesto, las prisas en publicar una aplicación.&lt;/p&gt;  &lt;p&gt;El archivo &lt;em&gt;&lt;strong&gt;AssemblyInfo.cs&lt;/strong&gt;&lt;/em&gt; indica el idioma a utilizar por defecto.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pK3M75m4apXduH66kVXjV6i131AxJGcZigWz-c77Kh6M5mGVEog6nyGVdaMQoMDfWevgM639l-0tOOd8JOxXAAQ/20120501_01.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Dentro de este archivo encontramos esta información:&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pK3M75m4apXc9snXY0RE3a5QfaK9RpE0T5oF_limrjH7qEdrDfBQjT3CT714V_UiH2JAVwZuB9-pwBksG3IU-KA/20120501_02.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;También podríamos acceder a ella en la ventana de propiedades y en&lt;strong&gt;&lt;em&gt; Assembly Information...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pEn-7oiCw7kgiUDYYUr8S_3zcxePaQcclfyVSZmhoKSiUsSp6YcyRHO9b4MXuLHgmAJoHyTUxyaVEO-62xU67oQ/20120501_03.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Aquí encontraremos la información del ensamblado y ahí el idioma por defecto que queremos utilizar en nuestra aplicación.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pEn-7oiCw7kiLc_UVm94SV-ZFnKc8jp1TgBV2RhNznVOELlEIFI7DNDhY0vkt6Z_gq-KNlpPkJix5A4zM-YI5eA/20120501_04.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;El caso es que cuando subimos nuestra aplicación (fichero xap) al Marketplace de Microsoft, éste analiza el fichero xap y de acuerdo a la información del ensamblado, nos indica en la pantalla la información que debemos cumplimentar y el idioma o idiomas en lo que lo podemos hacer.&lt;/p&gt;  &lt;p&gt;Es decir, que si nuestra aplicación es multi-idioma, se nos permitirá indicar la descripción de nuestra aplicación en todos los idiomas para los que está preparada nuestra aplicación.&lt;/p&gt;  &lt;p&gt;Pero aquí entra en juego dos características que debemos tener en cuenta.&lt;/p&gt;  &lt;p&gt;La primera y más evidente es que debemos escribir la descripción corta y ampliada en el mismo idioma que se indica en la pantalla de registro de nuestra aplicación para el Marketplace. Parece evidente, pero a veces no lo es tanto.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pEn-7oiCw7kicCU0A1etc1v7eO8peV0ZcFuKiIJS5dmH5-DTfJQLOWErNVY_2731QGJ3CymY5dfzKxphBBDus1g/20120501_05.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;La segunda de ellas, es que debemos indicar el idioma correcto.&lt;/p&gt;  &lt;p&gt;Imaginemos que por ejemplo, editamos y modificamos el fichero &lt;strong&gt;&lt;em&gt;AssemblyInfo.cs&lt;/em&gt;&lt;/strong&gt; que indica anteriormente e indicamos erróneamente una cultura, como por ejemplo la que indico en la siguiente imagen:&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1paD4f0Z-qyIYxom64JOjClu42NsaCrDhJmEwJb5Ry_KWFBtdM_cDAsKUxAQrH4mBjW2XJQO773GmTN9FCQWMuoA/20120501_06.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;En este caso, aparecerá en la Web del Marketplace un error similar al que se indica a continuación:&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pEn-7oiCw7kh2PV5XP3aWAGvArt6c07E6JZhm998WWxoCFQGkz5tyu55IVpxZ1t7SqCMTheaRcthFJcb_Wd0TkQ/20120501_07.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Indudablemente, este error se produce porque la cultura indicada no ha sido encontrada por el Marketplace de Microsoft y por lo tanto, no puede ubicar la aplicación dentro del rango de idiomas permitidos.&lt;/p&gt;  &lt;p&gt;La solución es indicar el idioma correctamente, o utilizar en su caso el idioma correcto que queremos utilizar.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.sn2.livefilestore.com/y1pK3M75m4apXdmQNMK7iyL2V5g7ILsStf9_H3_wJJV79c4EzsVbv-wXifA7a_wmCV4I7wUTaGhGKWXcejVXFbAJg/20120501_08.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;De esta manera y siguiendo estas normas básicas, podremos estar preparados para subir correctamente nuestras aplicaciones al Marketplace de Microsoft sin esperar a que la Web del Marketplace nos devuelva un error o a que el proceso de validación de nuestra aplicación no pase y nos indiquen que nuestra aplicación no ha pasado la certificación.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Espero que sea de utilidad.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204752" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>Especificación del formato VHDX v0.95</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/30/especificaci-243-n-del-formato-vhdx-v0-95.aspx" /><id>/blogs/jorge/archive/2012/04/30/especificaci-243-n-del-formato-vhdx-v0-95.aspx</id><published>2012-04-30T06:00:00Z</published><updated>2012-04-30T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://msdnrss.thecoderblogs.com/wp-content/plugins/wp-o-matic/cache/ee96b_1351.image_5F00_122C80A6.png" width="297" height="327" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Microsoft ha liberado recientemente el documento en versión 0.95 de la Especificación del formato VHDX.&lt;/p&gt;  &lt;p&gt;Recordemos que el formato VHDX (Virtual Hard Disk Format) corresponde con la virtualización de discos por parte de Microsoft.&lt;/p&gt;  &lt;p&gt;El documento escrito en inglés y en formato Microsoft Word tiene un peso de poco más de 450 Kb y puede ser descargado &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29681"&gt;desde este enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Esta nueva versión es posible que esté apareciendo debido a que Microsoft según algunos rumores, estaría trabajando ultimando su Hyper-V v3.0 así como mejoras en los discos duros virtuales (VHDX) que para la próxima versión de Windows, Windows 8, llegarían a soportar hasta 16 Tb.&lt;/p&gt;  &lt;p&gt;El documento que indico en esta entrada tiene que ver con la última revisión del formato, y siendo una revisión muy cercana a la versión 1.0, dudo que su contenido varíe extraordinariamente de la futura y definitiva versión 1.0 del documento.&lt;/p&gt;  &lt;p&gt;Espero que le sea útil a alguien en el caso de necesitar abrir, conocer o interpretar los discos duros virtuales de Microsoft.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204745" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows 8" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+8/default.aspx" /></entry><entry><title>Lo que debes hacer al empezar con Windows Phone</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/28/lo-que-debes-hacer-al-empezar-con-windows-phone.aspx" /><id>/blogs/jorge/archive/2012/04/28/lo-que-debes-hacer-al-empezar-con-windows-phone.aspx</id><published>2012-04-28T06:00:00Z</published><updated>2012-04-28T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://thetechnoclub.com/post/wpsec.jpg" width="147" height="148" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Microsoft ha publicado un documento en formato Microsoft Word de apenas 300 Kb y en inglés, que contiene unas recomendaciones para trabajar de forma inteligente cuando los empleados de una empresa (y usuarios no corporativos) empiezan a utilizar terminales dotados de Windows Phone.&lt;/p&gt;  &lt;p&gt;En este documento de apenas 5 páginas, se realizan algunas recomendaciones que debemos seguir.&lt;/p&gt;  &lt;p&gt;Entre estas recomendaciones (algunas de ellas realmente básicas), están las de establecer una contraseña de 4 dígitos, la configuración de Microsoft Outlook Mobile para sincronizar el mail, calendario y contactos con Microsoft Exchange, algunas recomendaciones respecto al bloqueo de la pantalla inicial, lo que debemos hacer para localizar un teléfono móvil perdido, lo que debemos hacer para reportar que hemos perdido o nos han robado un terminal, etc.&lt;/p&gt;  &lt;p&gt;Podrás acceder a la descarga de este documento &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=29292"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204692" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>Microsoft Camera Codec Pack v16.3.1483.0410</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/27/microsoft-camera-codec-pack-v16-3-1483-0410.aspx" /><id>/blogs/jorge/archive/2012/04/27/microsoft-camera-codec-pack-v16-3-1483-0410.aspx</id><published>2012-04-27T06:00:00Z</published><updated>2012-04-27T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;img src="http://www.dosbit.com/images/2011/10/Windows-Live-Gallery.png" width="141" height="141" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A la hora de ver ficheros RAW con nuestro sistema operativo Windows, es posible que nos encontremos con que el sistema no es capaz de mostrar correctamente la imagen en pantalla.&lt;/p&gt;  &lt;p&gt;Indudablemente hay productos en el mercado (sobre todo los de retoque fotográfico como Adobe Photoshop) que sí nos permite llevar a cabo esta tarea, pero existen otros que no.&lt;/p&gt;  &lt;p&gt;Microsoft ha creado este pack de codificación precisamente para que podamos combinarlo con Windows Live Photo Gallery y podamos acceder a los ficheros RAW de nuestras cámaras fotográficas.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Sólo con Windows Live Photo Gallery?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Realmente este paquete no es sólo para Windows Live Photo Gallery, sino también para los paquetes Software basados en WIC (Windows Imaging Codecs).&lt;/p&gt;  &lt;p&gt;Es por eso que resulta interesante instalarlo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Qué versiones de Microsoft Camera Codec Pack hay?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Existen dos versiones diferentes de Microsoft Camera Codec Pack, la de 64 bits y la de 32 bits.&lt;/p&gt;  &lt;p&gt;Y dentro de estas versiones, soporte para diferentes lenguajes o idiomas.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Qué formatos RAW soporta?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Esta actualización permite visualizar infinidad de formatos RAW.&lt;/p&gt;  &lt;p&gt;A continuación indico una tabla/resumen del soporte:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Canon&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;Digital Rebel XT, Digital Rebel XTi, EOS 10D, EOS 20D, EOS 30D, EOS 40D, EOS 50D Digital, EOS 300D, EOS 350D, EOS 400D, EOS 450D, EOS 500D, EOS 550D, EOS 1000D, EOS 5D, EOS 5D Mark II, EOS 7D Digital, EOS D30, EOS D60, EOS Digital Rebel, EOS Kiss Digital, EOS Kiss Digital N, EOS Kiss Digital X, EOS Kiss F, EOS Kiss X2, EOS Kiss X3, EOS Kiss X4, EOS Rebel T1i, EOS Rebel T2i, EOS Rebel XS, EOS Rebel XSi, EOS-1D, EOS-1D Mark II, EOS-1D Mark II N, EOS-1D Mark III, EOS-1D Mark IV, EOS-1Ds, EOS-1Ds Mark II, EOS-1Ds Mark III, PowerShot G2, PowerShot G3, PowerShot G5, PowerShot G6, PowerShot G9, PowerShot G10, PowerShot G11, PowerShot Pro1, PowerShot S90, PowerShot S95, PowerShot SX1 IS&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Nikon&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;Coolpix P6000, D1H, D2H, D2Hs, D2X, D2Xs, D3, D3s, D3X, D40, D40x, D50, D60, D70, D70s, D80, D90, D100, D200, D300, D300s, D700, D3000, D3100, D5000, D7000&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Sony&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;DSLR-A100, DSLR-A200, DSLR-A230, DSLR-A300, DSLR-A330, DSLR-A350, DSLR-A380, DSLR-A500, DSLR-A550, DSLR-A560, DSLR-A580, DSLR-A700, DSLR-A850, DSLR-A900, Alpha NEX-3, Alpha NEX-5, Alpha NEX-5N, Alpha SLT-A55/A55V, Cyber-shot DSC-R1&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Olympus&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;C-7070 Wide Zoom, C-8080 Wide Zoom, E-1, E-3, E-10, E-20, E-30, E-420, E-450, E-520, E-620, EVOLT E-300, EVOLT E-330, EVOLT E-400, EVOLT E-410, EVOLT E-500, EVOLT E-510, PEN E-P1&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;em&gt;Pentax&lt;/em&gt;&lt;/strong&gt; (PEF formats only):      &lt;br /&gt;&lt;em&gt;*ist D, *ist DL, *ist DS, K10D, K20D, K100D, K100D Super, K110D, K200D, K-7, K-x&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Leica&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;DIGILUX 3, D-LUX 4, M8, M8.2, M9&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Konica Minolta&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;ALPHA-7 DIGITAL, DiMAGE A1, DiMAGE A2, DYNAX 7D, Maxxum 7D&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;em&gt;Epson&lt;/em&gt;&lt;/strong&gt;:       &lt;br /&gt;&lt;em&gt;RD1&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Panasonic&lt;/strong&gt;&lt;/em&gt;:       &lt;br /&gt;&lt;em&gt;Lumix DMC-G1, Lumix DMC-GH1, Lumix DMC-GF1, Lumix DMC-LX3, Lumix DMC-LX5&lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Descarga&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Accederás a este &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=26829"&gt;paquete de codificación en este enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Recuerda que el paquete de codificación es gratuito.&lt;/p&gt;  &lt;p&gt;Igualmente, podrás &lt;a href="http://windows.microsoft.com/en-US/windows-live/photo-gallery-get-started"&gt;descargar Window Live Photo Gallery de este otro enlace&lt;/a&gt;.    &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204691" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Photo" scheme="http://geeks.ms/blogs/jorge/archive/tags/Photo/default.aspx" /></entry><entry><title>Validando sin parar. Uso de DataAnnotations</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/26/validando-sin-parar-uso-de-dataannotations.aspx" /><id>/blogs/jorge/archive/2012/04/26/validando-sin-parar-uso-de-dataannotations.aspx</id><published>2012-04-26T06:00:00Z</published><updated>2012-04-26T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://www.wbotelhos.com/stepy/img/image-3.png" width="362" height="215" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introducci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Como pasa en muchos casos, el otro d&amp;iacute;a me encontraba haciendo pruebecillas e implementando diferentes procesos de validaci&amp;oacute;n en Dtos y entidades.&lt;/p&gt;
&lt;p&gt;Al finalizar mis pruebas, el resultado de todo es un conjunto de clases que hac&amp;iacute;a justo lo que quer&amp;iacute;a respecto a las validaciones.&lt;/p&gt;
&lt;p&gt;Decoraba mis clases y/o miembros como deseaba, y en base a esa decoraci&amp;oacute;n, ejecutaba el proceso de validaci&amp;oacute;n que me permit&amp;iacute;a obtener qu&amp;eacute; miembros no hab&amp;iacute;an cumplido esa validaci&amp;oacute;n y porqu&amp;eacute;.&lt;/p&gt;
&lt;p&gt;Sin embargo, mientras estaba desarrollando todo esto, me ven&amp;iacute;a a la mente que exist&amp;iacute;a &amp;ldquo;&lt;em&gt;algo&lt;/em&gt;&amp;rdquo; para hacer si no esto mismo, s&amp;iacute; algo muy muy similar. No obstante y ya que estaba metido en el fregado, decid&amp;iacute; avanzar por aquello de refrescar/aprender cosas. Cuando acab&amp;eacute; me puse a pensar m&amp;aacute;s profundamente y ca&amp;iacute; en la cuenta de algo que llamaba &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;DataAnnotations&lt;/span&gt;&lt;/em&gt; o similar.&lt;/p&gt;
&lt;p&gt;El caso es que &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;DataAnnotations&lt;/em&gt;&lt;/span&gt; me habr&amp;iacute;a ahorrado mucho tiempo, as&amp;iacute; que aqu&amp;iacute; lo pongo para aquellos que se encuentren en una tesitura parecida y no pierdan el tiempo rehaciendo la rueda como hice yo (si bien nunca viene mal para refrescar/aprender cosas).&lt;/p&gt;
&lt;p&gt;En esta entrada, voy a comentaros en qu&amp;eacute; consiste y como utilizar &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;DataAnnotations&lt;/em&gt;&lt;/span&gt; en vuestros desarrollos de .NET.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;En qu&amp;eacute; consiste DataAnnotations?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;B&amp;aacute;sicamente, &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;DataAnnotations&lt;/em&gt;&lt;/span&gt; nos permite llevar a cabo validaciones de datos de acuerdo a nuestras necesidades. Esas necesidades son decoraciones que indicaremos a los miembros de nuestras entidades y Dtos. Una decoraci&amp;oacute;n corresponder&amp;aacute; a una validaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Qu&amp;eacute; ensamblado es el que entra en juego con las clases de DataAnnotations?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para &amp;quot;&lt;em&gt;jugar&lt;/em&gt;&amp;quot; con &lt;span style="text-decoration:underline;"&gt;&lt;em&gt;DataAnnotations&lt;/em&gt;&lt;/span&gt;, deberemos agregar un ensamblado a las referencias de nuestro proyecto. Este ensamblado es &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations&lt;/span&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo marcamos el tipo de validaci&amp;oacute;n de un miembro?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para marcar el tipo de validaci&amp;oacute;n de un miembro, utilizaremos diferentes atributos.&lt;/p&gt;
&lt;p&gt;Estos atributos pueden anidarse de manera que un campo pueda tener m&amp;aacute;s de una validaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Entre estos atributos encontramos los siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Required&lt;/strong&gt;&lt;/span&gt;&lt;/em&gt;: perteneciente a &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations.RequiredAttribute&lt;/span&gt;&lt;/em&gt;, marca que el miembro debe tener un campo obligatorio. Esta decoraci&amp;oacute;n puede ser utilizada junto a &lt;em&gt;&lt;strong&gt;ErrorMessage&lt;/strong&gt;&lt;/em&gt; para indicar un mensaje personalizado de error en el caso de que no se cumpla esta validaci&amp;oacute;n. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Range&lt;/strong&gt;&lt;/em&gt;: perteneciente a &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations.RangeAttribute&lt;/span&gt;&lt;/em&gt;, marca un rango de valores entre los que debe estar comprendido el valor pasado al miembro. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;StringLength&lt;/em&gt;&lt;/strong&gt;: perteneciente a &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations.StringLengthAttribute&lt;/span&gt;&lt;/em&gt;, indica un tama&amp;ntilde;o del campo &lt;em&gt;&lt;strong&gt;string&lt;/strong&gt;&lt;/em&gt;. Esta decoraci&amp;oacute;n puede ir en conjunci&amp;oacute;n con &lt;em&gt;&lt;strong&gt;MinimunLength&lt;/strong&gt;&lt;/em&gt; para indicar incluso un tama&amp;ntilde;o m&amp;iacute;nimo del campo &lt;strong&gt;&lt;em&gt;string&lt;/em&gt;&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;RegularExpression&lt;/em&gt;&lt;/strong&gt;: perteneciente a &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations.RegularExpressionAttribute&lt;/span&gt;&lt;/em&gt;, indica una expresi&amp;oacute;n regulada que debe ser utilizada para validar el miembro. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;DataType&lt;/em&gt;&lt;/strong&gt;: perteneciente a &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations.DataTypeAttribute&lt;/span&gt;&lt;/em&gt;, indica un nombre de un tipo adicional que debe asociarse a un campo de datos. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;CustomValidation&lt;/strong&gt;&lt;/em&gt;: perteneciente a &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;System.ComponentModel.DataAnnotations.CustomValidationAttribute&lt;/span&gt;&lt;/em&gt;, nos permite validar a trav&amp;eacute;s de validaciones personalizadas. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vamos con un ejemplo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Y como siempre, la mejor forma de ver esto en funcionamiento es practicar con un ejemplo.&lt;/p&gt;
&lt;p&gt;Imaginemos la siguiente situaci&amp;oacute;n. Debemos crear un objeto Persona que contendr&amp;aacute; diferentes miembros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Id&lt;/em&gt;&lt;/strong&gt;: identificador de la entidad. Campo no requerido. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Nombre&lt;/strong&gt;&lt;/em&gt;: nombre de la persona. Campo requerido. Campo de 25 caracteres m&amp;aacute;ximo. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Apellido&lt;/strong&gt;&lt;/em&gt;: apellido de la persona. Campo requerido. Campo de 50 caracteres m&amp;aacute;ximo. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Dni&lt;/strong&gt;&lt;/em&gt;: n&amp;uacute;mero del documento nacional de identidad de la persona. Campo requerido. Campo de m&amp;aacute;s de 1 car&amp;aacute;cter y de hasta 8 caracteres. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Tel&amp;eacute;fono&lt;/strong&gt;&lt;/em&gt;: n&amp;uacute;mero telef&amp;oacute;nico de la persona. Campo no requerido. Campo de 9 a 13 cifras (aunque vamos a omitir la validaci&amp;oacute;n en este ejemplo). &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Mail&lt;/strong&gt;&lt;/em&gt;: correo electr&amp;oacute;nico de la persona. Campo no requerido. Validable a trav&amp;eacute;s de una expresi&amp;oacute;n regulada que verifica la validez de una cuenta de correo electr&amp;oacute;nico. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pn5TN1scNwfX_B8iTK26nfPeUtrayvPZz1X_ccKUrO8vQbLPCzmOosMTIcbrKfGBCb7_APcZFgEObFTrV60n0UA/20120426_01.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;De acuerdo a los datos que tenemos, hemos preparado el c&amp;oacute;digo de nuestro objeto &lt;em&gt;Persona&lt;/em&gt; de la siguiente manera:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:500px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.ComponentModel.DataAnnotations;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;sealed&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Persona&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Id { get; set; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     [Required]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     [StringLength(25)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nombre { get; set; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;     [Required(ErrorMessage = &lt;span style="color:#006080;"&gt;&amp;quot;No te olvides del apellido&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;     [StringLength(50)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Apellido { get; set; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     [Required]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;     [StringLength(8, MinimumLength = 1)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Dni { get; set; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;long&lt;/span&gt; Telefono { get; set; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;     [RegularExpres*ion(&lt;span style="color:#006080;"&gt;&amp;quot;expression&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Mail { get; set; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt; } // Persona&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Nota: &amp;quot;expression&amp;quot; dentro de RegularExpression debe ser reemplazada por la expresi&amp;oacute;n regulada correspondiente. Por alguna raz&amp;oacute;n que desconozco, el sitio me est&amp;aacute; bloqueando la expresi&amp;oacute;n regulada. La indicar&amp;eacute; en los comentarios a esta entrada.&lt;/strong&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una vez hecho esto, bastar&amp;aacute; con ejecutar una porci&amp;oacute;n de c&amp;oacute;digo que se encargar&amp;aacute; de realizar las siguientes tareas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear la entidad Persona. &lt;/li&gt;
&lt;li&gt;Llevar a cabo el proceso de validaci&amp;oacute;n. &lt;/li&gt;
&lt;li&gt;En el caso de que existan errores de validaci&amp;oacute;n, recorrerlos para procesarlos como deseemos. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El c&amp;oacute;digo de ejecuci&amp;oacute;n y demostraci&amp;oacute;n del funcionamiento de la validaci&amp;oacute;n con DataAnnotations quedar&amp;iacute;a de la siguiente manera:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:500px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Creamos un objeto Persona y le agregamos valores&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; Persona persona = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Persona();&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; persona.Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Jos&amp;eacute;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//persona.Apellido = &amp;quot;L&amp;oacute;pez&amp;quot;;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; persona.Dni = &lt;span style="color:#006080;"&gt;&amp;quot;1112233&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; persona.Mail = &lt;span style="color:#006080;"&gt;&amp;quot;joselopez@dominio.com&amp;quot;&lt;/span&gt;;            &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Proceso de validaci&amp;oacute;n.&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; ValidationContext validationContext = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ValidationContext(persona, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; List&amp;lt;ValidationResult&amp;gt; errors = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ValidationResult&amp;gt;();&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt; Validator.TryValidateObject(persona, validationContext, errors, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Si hay errores, los recorremos y los mostramos (versi&amp;oacute;n demo).            &lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (errors.Count() &amp;gt; 0)&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; errorMessages = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var error &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; errors)&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;         errorMessages += error.ErrorMessage + Environment.NewLine;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;     MessageBox.Show(errorMessages);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;     MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;Entidad correcta&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;En este ejemplo, he querido dejar comentado intencionadamente la asignaci&amp;oacute;n de &lt;em&gt;Apellido&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;De esta manera, la validaci&amp;oacute;n devolver&amp;aacute; un mensaje por pantalla parecido a este:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pTn8ySMMkyKftT2wEWOOYFu38-mtUktUUE1eRHwMx_YHATP5Pc7JVfxeEcaM0QAQI_xS1ZTK7j2hyzXxSetWFhQ/20120426_02.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;El mensaje corresponde con la validaci&amp;oacute;n del campo &lt;em&gt;Apellido&lt;/em&gt; y cuyo mensaje en el caso de no pasar la validaci&amp;oacute;n, hemos querido personalizar con el texto &amp;ldquo;&lt;em&gt;No te olvides del apellido&lt;/em&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Evidentemente, en las otras validaciones tendr&amp;iacute;amos resultados parecidos.&lt;/p&gt;
&lt;p&gt;De hecho, si por ejemplo quitara del correo electr&amp;oacute;nico el car&amp;aacute;cter @ tendr&amp;iacute;a el siguiente resultado:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1p13VXxsGezm6LHwfTYLAYR2E9EeVILkXYeEK-74sUTlWM7SUDrhvE0MCEI2c-_daISFN_Oq5CSSHyMgUb9yuIpA/20120426_03.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Como podemos observar, las validaciones se producen con muy poco esfuerzo.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extensibilidad a la hora de hacer &lt;em&gt;nuestras propias&lt;/em&gt; validaciones&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si quisi&amp;eacute;ramos extender las validaciones que ofrece .NET y que recoge casi todas las casu&amp;iacute;sticas, no tendr&amp;iacute;amos problemas.&lt;/p&gt;
&lt;p&gt;Bastar&amp;iacute;a con crear nuestros propios atributos y heredar de &lt;a href="http://msdn.microsoft.com/es-es/library/system.componentmodel.dataannotations.validationattribute.aspx"&gt;ValidationAtttribute&lt;/a&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Como podemos ver, trabajar con &lt;em&gt;&lt;span style="text-decoration:underline;"&gt;DataAnnotations&lt;/span&gt;&lt;/em&gt; en nuestros desarrollos, puede resultarnos de utilidad y ahorrarnos mucho trabajo, adem&amp;aacute;s de aportarnos flexibilidad a la hora de desarrollar nuestras propias validaciones personalizadas.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204661" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Arquitectura" scheme="http://geeks.ms/blogs/jorge/archive/tags/Arquitectura/default.aspx" /><category term=".NET Framework 3.5" scheme="http://geeks.ms/blogs/jorge/archive/tags/.NET+Framework+3.5/default.aspx" /><category term="Visual Studio 2008" scheme="http://geeks.ms/blogs/jorge/archive/tags/Visual+Studio+2008/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/jorge/archive/tags/C_2300_/default.aspx" /><category term="Microsoft .NET Framework 3.5" scheme="http://geeks.ms/blogs/jorge/archive/tags/Microsoft+.NET+Framework+3.5/default.aspx" /><category term=".NET Framework 4.0" scheme="http://geeks.ms/blogs/jorge/archive/tags/.NET+Framework+4.0/default.aspx" /><category term="Visual Studio 2010" scheme="http://geeks.ms/blogs/jorge/archive/tags/Visual+Studio+2010/default.aspx" /><category term="Microsoft .NET Framework 4.0" scheme="http://geeks.ms/blogs/jorge/archive/tags/Microsoft+.NET+Framework+4.0/default.aspx" /><category term="Visual Basic 2010" scheme="http://geeks.ms/blogs/jorge/archive/tags/Visual+Basic+2010/default.aspx" /></entry><entry><title>Microsoft Enterprise Library 5.0.1 Integration Pack para Windows Azure</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/25/microsoft-enterprise-library-5-0-1-integration-pack-para-windows-azure.aspx" /><id>/blogs/jorge/archive/2012/04/25/microsoft-enterprise-library-5-0-1-integration-pack-para-windows-azure.aspx</id><published>2012-04-25T21:00:00Z</published><updated>2012-04-25T21:00:00Z</updated><content type="html">&lt;p&gt;&lt;img height="175" width="175" src="http://i1-news.softpedia-static.com/images/news2/Download-Hands-On-Labs-for-Enterprise-Library-5-0-Integration-Pack-for-Windows-Azure-2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Informaci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Microsoft ha publicado la versi&amp;oacute;n 5.0.1 de esta extensi&amp;oacute;n para Microsoft Enterprise Library 5.0 que puede ser utilizada con Windows Azure.&lt;/p&gt;
&lt;p&gt;Entre otras caracter&amp;iacute;sticas, este paquete incluye el Autoscaling Application Block (Wasabi), el Transient Fault Handling Application Block (Topaz), un proveedor de configuraci&amp;oacute;n y un configurador de archivos Blob.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enlaces&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Podr&amp;aacute;s acceder a la Web de descarga &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28189"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para m&amp;aacute;s informaci&amp;oacute;n sobre Microsoft Enterprise Library 5.0 Integration Pack para Windows Azure, haz clic &lt;a href="http://msdn.microsoft.com/en-us/library/hh680918(v=pandp.50).aspx"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Blog con informaci&amp;oacute;n adicional &lt;a href="http://windowsazurecat.com/2011/02/enterprise-library-on-windows-azure-key-learnings-from-customer-project/"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204666" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term=".NET Framework 4.0" scheme="http://geeks.ms/blogs/jorge/archive/tags/.NET+Framework+4.0/default.aspx" /><category term="Visual Studio 2010" scheme="http://geeks.ms/blogs/jorge/archive/tags/Visual+Studio+2010/default.aspx" /><category term="Windows Azure" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Azure/default.aspx" /></entry><entry><title>Google mueve ficha. Posiciona tus datos en la nube con Google Drive</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/25/google-mueve-ficha-posiciona-tus-datos-en-la-nube-con-google-drive.aspx" /><id>/blogs/jorge/archive/2012/04/25/google-mueve-ficha-posiciona-tus-datos-en-la-nube-con-google-drive.aspx</id><published>2012-04-25T07:00:00Z</published><updated>2012-04-25T07:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://www.redusers.com/noticias/wp-content/uploads/2012/04/Google_Drive_Logo_lrg-540x429-515x333.jpg" width="163" height="110" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Si hace unas horas conocíamos que &lt;a href="http://geeks.ms/blogs/jorge/archive/2012/04/24/skydrive-est-225-de-cambio-demos-la-bienvenida-al-nuevo-skydrive.aspx"&gt;SkyDrive se renovaba&lt;/a&gt; y permitía usar entre 7 Gb y 25 Gb de datos en la nube sincronizándolos con nuestro PC, hoy conocemos que Google ha sacado a la luz su sistema de datos en la nube, Google Drive.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿En qué consiste Google Drive?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Al igual que en el caso de Microsoft SkyDrive, Google ha decidido crear diferentes planes de almacenamiento en la nube con sincronización en Google Docs.&lt;/p&gt;  &lt;p&gt;Por defecto, un usuario con cuenta GMail tendrá 5 Gb de almacenamiento gratuito.&lt;/p&gt;  &lt;p&gt;Adicionalmente, Google indica que la cuenta de GMail ha pasado de 7 Gb a 10 Gb, y el de Picasa posee un tamaño de 1 Gb (al menos en mi caso).&lt;/p&gt;  &lt;p&gt;10 Gb de GMail.   &lt;br /&gt;5 Gb de Drive (almacenamiento en la nube).    &lt;br /&gt;1 Gb de Picasa.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Actualizaciones&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Pasar a tener 25 Gb Drive y Picasa viene a costar unos 2.49$ al mes. Como bonificación, la cuenta de correo GMail pasará a tener 25 Gb de espacio.&lt;/p&gt;  &lt;p&gt;Si lo que queremos es tener 100 Gb Drive y Picasa, entonces deberemos pagar 4.99 $ al mes, pasando nuestra cuenta de GMail a 25 Gb.&lt;/p&gt;  &lt;p&gt;Y así van subiendo las cuotas.&lt;/p&gt;  &lt;p&gt;Aquí os dejo una tabla resumen de estos baremos extraídos de la Web de Google.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1paBRMRerj0RAUmHdwDQYkthuGEQAASEbc3W5f53dZQOumt1iUpoiF3YCeaTAKwZDu9-5dpnpnnW6TTa5YGeRsmQ/20120425_01.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Suponiendo que los datos de la tabla anterior sean correctos, vemos alguna diferencia con respecto a otros servicios como Dropbox, Microsoft SkyDrive o iCloud de Apple.&lt;/p&gt;  &lt;p&gt;Nota: comento lo de que los datos de la tabla sean correctos ya que en la Web de &lt;a href="http://support.google.com/drive/bin/answer.py?hl=es&amp;amp;answer=2375124&amp;amp;p=storage_overview"&gt;explicación de los servicios&lt;/a&gt;, Google no deja claro del todo si GMail posee 10 Gb ó 7 Gb, ya que comenta las dos cosas al hablar de lo mismo. Quiero pensar que es una errata y pasa de 7 Gb a 10 Gb.&lt;/p&gt;  &lt;p&gt;Lo que está claro es que la guerra de servicios de almacenamiento en la nube está siendo bastante frenética, lo que posibilita que se ofrezcan mejores servicios y precios a los usuarios que somos al fin y al cabo los que saldremos beneficiados de esta situación.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cómo trabajar con Google Drive&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo primero de todo es poner en funcionamiento Google Drive.&lt;/p&gt;  &lt;p&gt;Para ello, bastará con pulsar el botón de activación en Google Drive.&lt;/p&gt;  &lt;p&gt;No obstante, a la hora de escribir esta entrada, el servicio ha dejado de funcionar tal y como era de esperar. Según se indica en algunos sitios en Internet, los fallos de activación de las cuentas y la demanda de activaciones ha hecho que Google active las cuentas progresivamente.&lt;/p&gt;  &lt;p&gt;Es por eso, que tendremos que fijarnos en el botón que aparece en la parte superior de nuestra página Web. Este botón puede indicar &amp;quot;Empieza con 5 GB gratis&amp;quot; o bien, &amp;quot;Notificarme&amp;quot;.&lt;/p&gt;  &lt;p&gt;Si aparece el segundo botón, deberemos pulsarlo para pasar a una lista de espera en la que Google nos avisará cuando el servicio esté preparado para ser activado. En caso contrario, estaremos de suerte.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sincronización&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Google Drive podrá sincronizar documentos y archivos desde Windows, Mac OS y Android, si bien, es posible que en breve se pueda sincronizar también para iOS, aunque de momento habrá que esperar, algo en lo que otras empresas como Microsoft sí le llevan a Google la delantera.&lt;/p&gt;  &lt;p&gt;En Android, podemos localizar la aplicación Google Drive.&lt;/p&gt;  &lt;p&gt;Para Windows no he podido localizar aún esta aplicación. Quiero pensar que cuando active el almacenamiento en la nube tendré posibilidad de instalar la aplicación que me permitirá sincronizar los datos en la nube.   &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Para acceder a Google Drive, deberemos hacer clic en el &lt;a href="https://drive.google.com/"&gt;siguiente enlace&lt;/a&gt; (recuerda tener una cuenta de GMail).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204649" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="General" scheme="http://geeks.ms/blogs/jorge/archive/tags/General/default.aspx" /><category term="Google Android" scheme="http://geeks.ms/blogs/jorge/archive/tags/Google+Android/default.aspx" /><category term="Android" scheme="http://geeks.ms/blogs/jorge/archive/tags/Android/default.aspx" /></entry><entry><title>Reiniciar un Windows Phone 7 con Nokia Lumia 800 sin Hard Reset</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/25/reiniciar-un-windows-phone-7-con-nokia-lumia-800-sin-hard-reset.aspx" /><id>/blogs/jorge/archive/2012/04/25/reiniciar-un-windows-phone-7-con-nokia-lumia-800-sin-hard-reset.aspx</id><published>2012-04-25T06:00:00Z</published><updated>2012-04-25T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;img src="http://i.nokia.com/image/view/-/232114/medRes/2/-/Searay-Black-00043-png.png?v=6" width="245" height="245" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Quizás no os pase nunca, pero a mí me ha ocurrido y por si os pasa lo mismo y os entra el momento histeria... que quede por aquí escrito por si le sirve a alguien.&lt;/p&gt;  &lt;p&gt;Escuchando música MP3 en mi Nokia Lumia 800 mientras trabajaba, de repente el terminal se ha quedado congelado. La pantalla bloqueada con la fecha en la que se quedó frito y sin responder a ninguna de las teclas.&lt;/p&gt;  &lt;p&gt;Momento histeria On. ¿Qué hacer?.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Haciendo un Hard Reset (no recomendado inicialmente)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo primero en lo que he pensado es en que a lo mejor no quedaba otra que hacer un Hard Reset de mi terminal.&lt;/p&gt;  &lt;p&gt;Siempre que he hecho un Hard Reset lo he hecho desde el menú del terminal, pero nunca a través de las teclas.&lt;/p&gt;  &lt;p&gt;En teoría existe un método para hacer el Hard Reset a través de una combinación de teclas, pero eso borraría toda la configuración, datos, etc., del terminal, así que si puedo evitarlo mejor.&lt;/p&gt;  &lt;p&gt;No obstante y si por necesitas hacer un Hard Reset, lo que debes hacer es lo siguiente (no probado, y si lo pruebas, que sepas que te deja el terminal con los datos de fábrica perdiendo todos los datos guardados en el terminal):&lt;/p&gt;  &lt;p&gt;- Presionamos al mismo tiempo el botón de reducir volumen de audio, el botón de la cámara y el botón de encendido/apagado.   &lt;br /&gt;- Esperamos a que vibre el terminal, y en ese momento quitamos el dedo del botón de encendido/apagado dejando el resto de dedos pulsados durante unos 10 segundos y finalmente los quitamos.    &lt;br /&gt;- El terminal se deberá reiniciar solo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reiniciando sin Hard Reset&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ahora bien, hacer el Hard Reset hace que el terminal aparezca vacío, con todos los datos, imágenes, música, configuraciones, etc borrados.&lt;/p&gt;  &lt;p&gt;Si no queremos que esto ocurra pero queremos únicamente reiniciar el terminal, bastará con dejar el dedo pulsado en el botón de encendido/apagado durante unos 10 segundos.&lt;/p&gt;  &lt;p&gt;El terminal vibrará y se reiniciará sin que perdamos nada.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Si os pasa algo parecido, ya sabéis como actuar.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204621" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>Skydrive está de cambio Demos la bienvenida al nuevo SkyDrive</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/24/skydrive-est-225-de-cambio-demos-la-bienvenida-al-nuevo-skydrive.aspx" /><id>/blogs/jorge/archive/2012/04/24/skydrive-est-225-de-cambio-demos-la-bienvenida-al-nuevo-skydrive.aspx</id><published>2012-04-24T13:00:00Z</published><updated>2012-04-24T13:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="https://secure.shared.live.com/~Live.SiteContent.Explore/~15.40.54/header/logo_sky.png" border="0" style="max-width:550px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introducci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Levantarse por la ma&amp;ntilde;ana y saber que tu cuenta de SkyDrive ha pasado de 25 Gb a 7 Gb no es del gusto de nadie.&lt;/p&gt;
&lt;p&gt;Sin embargo, saber que Microsoft ha establecido cambios para que una cuenta que antes ten&amp;iacute;a 25 Gb y que ahora pasar&amp;aacute; a 7 Gb no pierda esos 18 Gb de m&amp;aacute;s permiti&amp;eacute;ndonos recuperarlos, es un alivio.&lt;/p&gt;
&lt;p&gt;Tampoco es menos el comprobar que una cuenta que tiene 7 Gb, puede pasar a 25 Gb sin que perdamos dinero... dicho de otro modo, un usuario nuevo que se cree una cuenta s&amp;oacute;lo podr&amp;aacute; tener 7 Gb, y si quiere m&amp;aacute;s, tendr&amp;aacute; que pagar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actualizando nuestra cuenta de SkyDrive para usar 25 Gb&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Siempre y cuando la cuenta de passport con uso de SkyDrive ya estuviera activa con anterioridad, la actualizaci&amp;oacute;n para usar los 25 Gb que inicialmente ten&amp;iacute;amos es gratuita y siempre y cuando no se nos pase el tiempo de actualizaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Bastar&amp;aacute; con acceder a &lt;a href="https://skydrive.live.com/"&gt;https://skydrive.live.com/&lt;/a&gt; y a trav&amp;eacute;s de esta direcci&amp;oacute;n, acceder con nuestra cuenta passport.&lt;/p&gt;
&lt;p&gt;Una vez dentro, en la parte superior deber&amp;iacute;a aparecer un hiperv&amp;iacute;nculo que nos invita a hacer clic en &amp;eacute;l para actualizar nuestra cuenta que ahora tiene 7 Gb, a 25 Gb de forma grauita.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los nuevos costes de SkyDrive&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A modo resumen, los nuevos costes de SkyDrive para Europa son los siguientes:&lt;/p&gt;
&lt;p&gt;Para una cuenta creada nueva:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SkyDrive gratuito hasta 7 Gb de almacenamiento.&lt;/li&gt;
&lt;li&gt;SkyDrive + 20 hasta 27 Gb de almacenamiento a 8 &amp;euro;/a&amp;ntilde;o.&lt;/li&gt;
&lt;li&gt;SkyDrive + 50 hasta 57 Gb de almacenamiento a 19 &amp;euro;/a&amp;ntilde;o.&lt;/li&gt;
&lt;li&gt;SkyDrive + 100 hasta 107 Gb de almacenamiento a 37 &amp;euro;/a&amp;ntilde;o.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para una cuenta creada anteriormente y actualizada a 25 Gb:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SkyDrive gratuito hasta 25 Gb de almacenamiento.&lt;/li&gt;
&lt;li&gt;SkyDrive + 20 hasta 45 Gb de almacenamiento a 8 &amp;euro;/a&amp;ntilde;o.&lt;/li&gt;
&lt;li&gt;SkyDrive + 50 hasta 75 Gb de almacenamiento a 19 &amp;euro;/a&amp;ntilde;o.&lt;/li&gt;
&lt;li&gt;SkyDrive + 100 hasta 125 Gb de almacenamiento a 37 &amp;euro;/a&amp;ntilde;o.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo sincronizar datos entre nuestro PC y SkyDrive?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Microsoft ha hecho p&amp;uacute;blica una herramienta que nos permitir&amp;aacute; sincronizar los datos de nuestro ordenador con la nube (SkyDrive).&lt;/p&gt;
&lt;p&gt;Esta herramienta podr&amp;aacute; ser descargada e instalada &lt;a href="https://apps.live.com/skydrive/app/9a65e47d-606a-4816-a246-90f54bf7a3ea"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si has trabajado por ejemplo con Dropbox, te resultar&amp;aacute; especialmente familiar la nueva forma de trabajar con SkyDrive. De hecho, es la forma normal y natural de trabajo con el escritorio de trabajo, arrastrando y soltando archivos, creando carpetas, etc, con la productividad de un PC.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-width:550px;" border="0" src="https://public.blu.livefilestore.com/y1pGUAG0kEcmQ6qskNHKCX0q9UOIS7PL6bHDIDSaOxNW8fjUOcfoPuwSRrG9lTwhyOB0XGYrJkL8n1dm4Y68k90zQ/20120424_01.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;El &amp;uacute;nico &amp;ldquo;pero&amp;rdquo; que algunos ya han comentado en las redes sociales es el hecho de que no podemos hacer clic con el bot&amp;oacute;n derecho del rat&amp;oacute;n sobre un archivo y obtener la ruta de acceso tal y como ocurre con Dropbox por ejemplo. Es decir, a SkyDrive a&amp;uacute;n le faltan algunos detalles pero es desde luego un gran paso compar&amp;aacute;ndolo con como deb&amp;iacute;amos trabajar con SkyDrive antes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Google?, &amp;iquest;Dropbox?, &amp;iquest;iCloud?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Microsoft ha dado un importante paso hacia adelante, no s&amp;oacute;lo igualando las prestaciones de sus competidores, sino incluso mejorando estas.&lt;/p&gt;
&lt;p&gt;Si eres de los que les gusta comparar un producto con otro, te invito a visitar el siguiente enlace con la informaci&amp;oacute;n comparativa entre estos cuatro productos. Podr&amp;aacute;s acceder a esta informaci&amp;oacute;n &lt;a href="http://windows.microsoft.com/en-US/skydrive/compare"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;En resumen, los nuevos cambios de SkyDrive son cambios muy notables que beneficiar&amp;aacute;n a los usuarios. En mi caso he sincronizado a modo de prueba unos 5 Gb de informaci&amp;oacute;n y no he tenido ning&amp;uacute;n problema. Te invito y recomiendo a que lo uses.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://windows.microsoft.com/en-US/skydrive/home/"&gt;P&amp;aacute;gina Web oficial de SkyDrive&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204624" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="General" scheme="http://geeks.ms/blogs/jorge/archive/tags/General/default.aspx" /></entry><entry><title>Patrón Interfaz Marcadora (II)</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/24/patr-243-n-interfaz-marcadora-ii.aspx" /><id>/blogs/jorge/archive/2012/04/24/patr-243-n-interfaz-marcadora-ii.aspx</id><published>2012-04-24T06:00:00Z</published><updated>2012-04-24T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Introducci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En la &lt;a href="http://geeks.ms/blogs/jorge/archive/2012/04/23/patr-243-n-interfaz-marcadora-i.aspx"&gt;entrada anterior&lt;/a&gt;, vimos en qu&amp;eacute; consist&amp;iacute;a el Patr&amp;oacute;n Interfaz Marcadora y c&amp;oacute;mo usarlo a trav&amp;eacute;s de interfaces.&lt;/p&gt;
&lt;p&gt;En esta entrada vamos a ver c&amp;oacute;mo implementar el Patr&amp;oacute;n Interfaz Marcadora a trav&amp;eacute;s de atributos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implementaci&amp;oacute;n del Patr&amp;oacute;n Interfaz Marcadora con atributos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lo primero que debemos hacer es crear una clase que act&amp;uacute;e como atributo con el cu&amp;aacute;l decorar una clase con el fin de hacerla del tipo que deseemos.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum1" 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; MarcadoraAttribute : System.Attribute&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt; } // MarcadoraAttribute&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Una vez creado este atributo, crearemos la clase que decoraremos con el atributo que hemos creado para hacerla del tipo que queremos.&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; [Marcadora]&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Foo&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt; } // Foo&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Finalmente tendremos la posibilidad de verificar que una determinada clase, est&amp;aacute; marcada con el atributo que indica que es de un tipo concreto.&lt;/p&gt;
&lt;p&gt;En nuestro caso y para el ejemplo que hemos preparado, quedar&amp;aacute; de la siguiente manera:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;"&gt;
&lt;div id="codeSnippet" style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum1" style="color:#606060;"&gt;   1:&lt;/span&gt; Foo foo = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Foo();&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum2" style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (foo.GetType().IsDefined(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(MarcadoraAttribute), &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;))&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum3" style="color:#606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum4" style="color:#606060;"&gt;   4:&lt;/span&gt;     MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;Es marcadora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum5" style="color:#606060;"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum6" style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum7" style="color:#606060;"&gt;   7:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum8" style="color:#606060;"&gt;   8:&lt;/span&gt;     MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;No es marcadora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span id="lnum9" style="color:#606060;"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Espero que esto le sirva a m&amp;aacute;s de uno para conocer c&amp;oacute;mo funciona y como utilizar este patr&amp;oacute;n.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204588" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="C#" scheme="http://geeks.ms/blogs/jorge/archive/tags/C_2300_/default.aspx" /><category term=".NET Framework 4.0" scheme="http://geeks.ms/blogs/jorge/archive/tags/.NET+Framework+4.0/default.aspx" /></entry><entry><title>Patrón Interfaz Marcadora (I)</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/23/patr-243-n-interfaz-marcadora-i.aspx" /><id>/blogs/jorge/archive/2012/04/23/patr-243-n-interfaz-marcadora-i.aspx</id><published>2012-04-23T06:00:00Z</published><updated>2012-04-23T06:00:00Z</updated><content type="html">&lt;p&gt;&lt;i&gt;Segunda parte de esta entrada:&amp;nbsp;&lt;a href="http://geeks.ms/blogs/jorge/archive/2012/04/24/patr-243-n-interfaz-marcadora-ii.aspx"&gt;Patr&amp;oacute;n Interfaz Marcadora (II)&lt;/a&gt;&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introducci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Uno de los patrones m&amp;aacute;s desconocidos en general y no por ello infrautilizado, es el Patr&amp;oacute;n de Interfaz Marcadora o &lt;i&gt;Marker Interface Pattern&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;En .NET tenemos dos formas de implementar este patr&amp;oacute;n. En esta primera entrada sobre este patr&amp;oacute;n veremos una de estas formas.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Qu&amp;eacute; es el Patr&amp;oacute;n Interfaz Marcadora?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lo primero de todo es entender bien qu&amp;eacute; es o en qu&amp;eacute; consiste el Patr&amp;oacute;n Interfaz Marcadora.&lt;/p&gt;
&lt;p&gt;Se trata de un patr&amp;oacute;n de dise&amp;ntilde;o que puede ser utilizado para proporcionar informaci&amp;oacute;n marcadora sobre un objeto concreto.&lt;/p&gt;
&lt;p&gt;El objetivo de este patr&amp;oacute;n es el de &lt;i&gt;&lt;span style="text-decoration:underline;"&gt;indicar el comportamiento&lt;/span&gt;&lt;/i&gt; de la clase que la implementa.&lt;/p&gt;
&lt;p&gt;Sin embargo, debe quedar claro para evitar dudas, que una interfaz marcadora es aquella que carece de miembros, es decir, que sirve para &lt;i&gt;&lt;span style="text-decoration:underline;"&gt;marcar&lt;/span&gt;&lt;/i&gt;. Adem&amp;aacute;s de esto, al carecer de miembros, no define ning&amp;uacute;n contrato que pueda ser implementado.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Clases y subclases&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hablando de herencia, debemos tener claro un aspecto que seguramente dominaremos todos a estas alturas. Si tenemos una clase que implementa una interfaz marcadora y una subclase que hereda de esa clase, &amp;eacute;sta tambi&amp;eacute;n arrastrar&amp;aacute; consigo esa interfaz marcadora. Es algo obvio, pero debemos tenerlo en cuenta.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo funciona?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comprenderemos mejor el funcionamiento de este patr&amp;oacute;n con un ejemplo en c&amp;oacute;digo C#.&lt;/p&gt;
&lt;p&gt;Para ello, crearemos inicialmente una interfaz &lt;i&gt;vac&amp;iacute;a&lt;/i&gt; como por ejemplo:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IMarcadoraFoo&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; } // IMarcadoraFoo&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Luego, tendremos una clase que implementar&amp;aacute; esta interfaz marcadora, como por ejemplo la clase Foo:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&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; Foo : IMarcadoraFoo&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; } // Foo&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si dispongo de un m&amp;eacute;todo o funci&amp;oacute;n que interact&amp;uacute;e de alguna manera con una clase &lt;em&gt;Foo&lt;/em&gt;, podr&amp;eacute; preguntarle si implementa esta interfaz marcadora.&lt;/p&gt;
&lt;p&gt;Un ejemplo sencillo de como preguntar si una clase implementa la interfaz marcadora es hacerlo de la siguiente manera:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; Foo foo = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Foo();&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (foo &lt;span style="color:#0000ff;"&gt;is&lt;/span&gt; IMarcadoraFoo)&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;Es marcadora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;No es marcadora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Como podemos apreciar en el c&amp;oacute;digo anterior, hemos verificado que la clase &lt;em&gt;Foo&lt;/em&gt; con la que queremos trabajar es una clase que implementa la interfaz marcadora &lt;em&gt;IMarcadoraFoo&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;No obstante, existe otra forma m&amp;aacute;s recomendable en .NET de implementar al Patr&amp;oacute;n Interfaz Marcadora, y es hacerlo con atributos. Esto lo veremos en la pr&amp;oacute;xima entrega.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Marker_interface_pattern"&gt;Marker Interface Pattern (Wikipedia)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Segunda parte de esta entrada:&amp;nbsp;&lt;a href="http://geeks.ms/blogs/jorge/archive/2012/04/24/patr-243-n-interfaz-marcadora-ii.aspx"&gt;Patr&amp;oacute;n Interfaz Marcadora (II)&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204586" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="C#" scheme="http://geeks.ms/blogs/jorge/archive/tags/C_2300_/default.aspx" /><category term=".NET Framework 4.0" scheme="http://geeks.ms/blogs/jorge/archive/tags/.NET+Framework+4.0/default.aspx" /></entry><entry><title>Lock Screen personalizada para Windows Phone 7</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/22/lock-screen-personalizada-para-windows-phone-7.aspx" /><id>/blogs/jorge/archive/2012/04/22/lock-screen-personalizada-para-windows-phone-7.aspx</id><published>2012-04-22T07:30:00Z</published><updated>2012-04-22T07:30:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Cuando adquirí mi Windows Phone, una de las primeras cosas que hice fue bloquear la pantalla de inicio con contraseña. Una manía que he adquirido con el paso de los años y que he seguido haciendo con todos los terminales móviles que he tenido.&lt;/p&gt;  &lt;p&gt;No obstante, un día me pregunté qué pasaría si teniendo la pantalla de inicio bloqueada, me dejara el móvil o si tuviera un accidente o percance.&lt;/p&gt;  &lt;p&gt;Con esa idea desarrollé una aplicación que denominé AA (Avisa A), pero el inconveniente de esta aplicación es que me impide poner los datos principales de contacto, personales o que yo desee en la pantalla de inicio.&lt;/p&gt;  &lt;p&gt;En la Web de peticiones para Windows Phone 7 encontré posteriormente una iniciativa que solicitaba a Microsoft que agregaran la posibilidad de agregar en la pantalla de inicio aquellos datos que consideramos de relevancia o importancia cuando bloqueamos la pantalla de inicio de nuestros Windows Phone. Lógicamente y siendo coherente con lo que pensaba apoyé la idea.&lt;/p&gt;  &lt;p&gt;Más adelante sin embargo, me encontré con una Web en la que AJ Troxell mostraba una pantalla de inicio personalizada para Windows Phone en el caso de que bloqueáramos la pantalla. ¡Genial!... fácil y sencillo sino hay otra opción de momento.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lock Screen de AJ Troxell&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;AJ Troxell explica más o menos como ha hecho esta pantalla y ha agregado incluso algunas plantillas al respecto. Podéis encontrar esta información &lt;a href="http://ajtroxell.com/2011/12/wp7-lock-screen/#.T4kuF6t1Cnk"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;La idea está resumida en esta captura de pantalla:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://ajtroxell.com/wp-content/uploads/2011/12/lock_screen_preview-564x805.jpg" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lock Screen de Jorge Serrano&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Y con esta misma idea, me creé una pantalla de bloqueo para mi Windows Phone, similar a la idea inicial de AJ Troxell pero con particularidades que considero de importancia y que en la plantilla de AJ Troxell no se incluían.&lt;/p&gt;  &lt;p&gt;Algunos MVPs y otras personas han visto ya esta pantalla y además de que “&lt;em&gt;lógicamente&lt;/em&gt;” les recuerde a la plantilla de AJ Troxell, me han preguntado si iba a publicar las plantillas que he utilizado, y aunque en un principio no lo pensaba hacer por la similitud de la idea de AJ Troxell, he creído oportuno hacerlo, y como lo prometido es deuda, aquí van a ir.&lt;/p&gt;  &lt;p&gt;Lo primero de todo y antes de nada, explicar porqué he creado mis plantillas.&lt;/p&gt;  &lt;p&gt;En la pantalla de bloqueo de AJ Troxell, éste ha agregado su nombre en grande, su foto, su correo electrónico, su Web, su cuenta de facebook, de Twitter y su teléfono.&lt;/p&gt;  &lt;p&gt;Mi idea es similar pero dándole una vuelta a esto. Mi nombre me gusta que aparezca pero no destacado, la importancia que busco si alguien encuentra mi móvil es la de facilitarle la vida localizando a su propietario y en en caso de emergencia, los datos más relevantes, así que el nombre es importante pero más aún otra información. &lt;/p&gt;  &lt;p&gt;En mi caso por lo tanto, esta pantalla de bloqueo debe tener para mí datos que considero importantes por si tuviera algún problema, ya sea porque he perdido mi teléfono o porque he tenido un percance. Con esta filosofía, yo he querido hacer esta pantalla algo más simple y limpia y he querido poner mi nombre, mi correo electrónico, mi cuenta de Twitter, mi teléfono, mi grupo sanguíneo, mis posibles alergias y a quien avisar en caso de emergencia.&lt;/p&gt;  &lt;p&gt;Hay que tener en cuenta, que si pierdo mi teléfono y está bloqueado, la mejor manera de permitir que alguien me lo devuelva es o bien llamar a mi número de teléfono desde otro teléfono y tener la suerte de que alguien coja la llamada, o bien indicar un teléfono de contacto para que llamen a ese número. Y lo mismo ocurre si tengo un percance.&lt;/p&gt;  &lt;p&gt;Las plantillas que he preparado para este propósito son las siguientes:&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pTBLeWsDqB4Ez5RbHHYRYuIV26DHJ5yyO-9xmlA3gYyVn9n0IjsaNsj1K6w4SQWMd2l5vJuwsYNikvUkCunHmuQ/20120422_01.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Las plantillas&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Obviamente, muchos de los datos utilizados en la imagen anterior son falsos.&lt;/p&gt;  &lt;p&gt;Que cada uno se decargue la plantilla y la modifique como considere oportuno.&lt;/p&gt;  &lt;p&gt;La plantilla que pongo a vuestro alcance tiene 12 aspectos diferentes.&lt;/p&gt;  &lt;p&gt;Crear el vuestro propio no es tampoco costoso, así como un fondo tipo paisaje o lo que consideréis oportuno.&lt;/p&gt;  &lt;p&gt;El fichero de descarga tiene un tamaño de 2.4 Mb y dentro de él, encontraréis la plantilla en formato psd (Adobe Photoshop) y con un tamaño de casi 8.5 Mb.&lt;/p&gt;  &lt;p&gt;Podréis acceder a la plantilla &lt;a href="https://skydrive.live.com/redir.aspx?cid=ed7dad70423e8ce4&amp;amp;resid=ED7DAD70423E8CE4!560&amp;amp;parid=ED7DAD70423E8CE4!557"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Ahora bien, sino tenéis Adobe Photoshop, podréis utilizar un plugin para Paint .NET que permite abrir ficheros en formato psd.&lt;/p&gt;  &lt;p&gt;Paint .NET es gratuito como sabréis todos y podréis acceder a él &lt;a href="http://www.getpaint.net/"&gt;en este enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;El plugin para abrir ficheros psd con Paint .NET lo podréis encontrar &lt;a href="http://psdplugin.codeplex.com/"&gt;en este otro enlace&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;¡Que lo disfrutéis!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204577" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>Mis 6 aplicaciones de Windows Phone más descargadas</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/17/mis-6-aplicaciones-de-windows-phone-m-225-s-descargadas.aspx" /><id>/blogs/jorge/archive/2012/04/17/mis-6-aplicaciones-de-windows-phone-m-225-s-descargadas.aspx</id><published>2012-04-17T13:00:00Z</published><updated>2012-04-17T13:00:00Z</updated><content type="html">&lt;p&gt;&lt;img height="148" width="148" src="http://www.puntogeek.com/wp-content/uploads/2011/06/logo-windows-phone.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Me gustar&amp;iacute;a aprovechar mi blog para &amp;quot;promocionar&amp;quot; algunas de las aplicaciones que para Windows Phone he publicado recientemente y que espero le sea de utilidad a alguien (con ese prop&amp;oacute;sito se hacen digo yo).&lt;/p&gt;
&lt;p&gt;El hecho de escribir esta entrada es principalmente para dar a conocer estas aplicaciones, sin embargo, en realidad me he animado a ello despu&amp;eacute;s de encontrarme con un comentario positivo acerca de una de mis aplicaciones de una persona que conozco, a la que despu&amp;eacute;s de enviarle un correo electr&amp;oacute;nico d&amp;aacute;ndole mis agradecimientos me ha indicado que no ten&amp;iacute;a ni idea que yo hab&amp;iacute;a sido el autor de esa aplicaci&amp;oacute;n... as&amp;iacute; que en ese momento es cuando me he puesto a pensar que seguramente lo que pase aqu&amp;iacute; es que no estoy promocionando adecuadamente mis aplicaciones (que por cierto, son gratuitas).&lt;/p&gt;
&lt;p&gt;De mis 20 aplicaciones para Windows Phone publicadas hasta la fecha en el Marketplace de Microsoft, me gustar&amp;iacute;a destacar 6 de ellas, no por ser o representar algo especial o ser extraordinarias en cuanto a su dise&amp;ntilde;o, funcionalidad, etc, sino por la cantidad de descargas que han tenido hasta la fecha (hay alguna aplicaci&amp;oacute;n m&amp;aacute;s sobre la que le he puesto una gran cari&amp;ntilde;o y trabajo y tienen unas cifras de descargas de reirse).&lt;/p&gt;
&lt;p&gt;Quiero pensar que esa cantidad de descargas debe deberse a algo positivo (espero). No obstante, siguen siendo muy pocas descargas comparado con otras aplicaciones del Marketplace, pero puesto que s&amp;oacute;lo dedico un peque&amp;ntilde;o espacio de tiempo libre a escribir estas aplicaciones, no considero esta modesta cantidad despreciable.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="text-decoration:underline;"&gt;Mi peque&amp;ntilde;o ranking de aplicaciones publicadas es el siguiente:&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://catalog.zune.net/v3.2/es-ES/apps/23d96852-57a7-4a4f-910e-9aa99ae66028/primaryImage?width=95&amp;amp;height=95&amp;amp;resize=true" alt="" /&gt;     &lt;br /&gt;&lt;strong&gt;Pictionary Draw&lt;/strong&gt;, con 3566 descargas.     &lt;br /&gt;Lo utilizo &amp;uacute;nicamente para ahorrarme pintar en hojas de papel permitiendo ser un poco m&amp;aacute;s &amp;quot;verdes&amp;quot; y evitar que se talen tanto &amp;aacute;rboles.     &lt;br /&gt;Entre las cr&amp;iacute;ticas recibidas, se me pide hacer de &amp;eacute;l un aut&amp;eacute;ntico Pictionary.     &lt;br /&gt;Le estoy dando alguna vuelta al tema, pero creo que me pego de lleno con temas legales, aunque ya estoy analizando la posibilidad de evitar estos problemas.     &lt;br /&gt;&lt;img height="498" width="280" src="http://catalog.zune.net/v3.2/es-ES/image/5b3bb40a-a1dc-405e-9d58-5b8bef7442fc?width=1280&amp;amp;height=720&amp;amp;resize=true" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://catalog.zune.net/v3.2/es-ES/apps/820f7bad-520a-4c4e-8afb-9d17810876a1/primaryImage?width=95&amp;amp;height=95&amp;amp;resize=true" alt="" /&gt;     &lt;br /&gt;&lt;strong&gt;Chiquitron Sound&lt;/strong&gt;, con 3099 descargas.     &lt;br /&gt;Se me ocurri&amp;oacute; hacer esta aplicaci&amp;oacute;n partiendo de la base de que all&amp;aacute; por el 2003 aproximadamente, me cre&amp;eacute; una aplicaci&amp;oacute;n en Visual Basic 6 que hac&amp;iacute;a pr&amp;aacute;cticamente esto mismo y que utilizaba en las reuniones de trabajo (siempre y cuando fuera adecuado).     &lt;br /&gt;Con el mismo prop&amp;oacute;sito, pens&amp;eacute; llevar esto en el bolsillo para echarse unas risas.     &lt;br /&gt;Pens&amp;eacute; que iba a ser la aplicaci&amp;oacute;n menos descargada y me equivoqu&amp;eacute;...     &lt;br /&gt;&lt;img height="498" width="280" src="http://catalog.zune.net/v3.2/es-ES/image/7eb1ab6e-9506-45d4-acb4-52a40be6e73e?width=1280&amp;amp;height=720&amp;amp;resize=true" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://catalog.zune.net/v3.2/es-ES/apps/f2e10f7c-195b-46e1-bb69-a1116c409bfd/primaryImage?width=95&amp;amp;height=95&amp;amp;resize=true" alt="" /&gt;     &lt;br /&gt;&lt;strong&gt;Plano Metro Madrid&lt;/strong&gt;, con 1697 descargas.     &lt;br /&gt;Cuando adquir&amp;iacute; mi primer Windows Phone, una de las primeras aplicaciones que me descargu&amp;eacute; fue el Plano de Metro de Madrid que program&amp;oacute; Jos&amp;eacute; &amp;Aacute;ngel Fern&amp;aacute;ndez.     &lt;br /&gt;Cuando pasado el tiempo resete&amp;eacute; mi terminal, fu&amp;iacute; a por la misma aplicaci&amp;oacute;n pero ya no exist&amp;iacute;a.     &lt;br /&gt;Pas&amp;eacute; un tiempo sin ella pero la echaba en falta, as&amp;iacute; que me puse en contacto con Jos&amp;eacute; &amp;Aacute;ngel y me enter&amp;eacute; que decidi&amp;oacute; eliminarla del Marketplace, por lo que le ped&amp;iacute; que la publicara nuevamente, pero me indic&amp;oacute; que no encontraba el c&amp;oacute;digo de la misma, as&amp;iacute; que me puse a hacer mi versi&amp;oacute;n de lo que consideraba que deb&amp;iacute;a ser una aplicaci&amp;oacute;n de este tipo.     &lt;br /&gt;En breve preveo hacer lo propio con otras ciudades.     &lt;br /&gt;&lt;img height="498" width="280" src="http://catalog.zune.net/v3.2/es-ES/image/e4d1e8cd-84e8-4d72-80dd-7a85d9ae1a79?width=1280&amp;amp;height=720&amp;amp;resize=true" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://catalog.zune.net/v3.2/es-ES/apps/4395b919-9e56-4b6b-bb19-91c9fcd8bcba/primaryImage?width=95&amp;amp;height=95&amp;amp;resize=true" alt="" /&gt;     &lt;br /&gt;&lt;strong&gt;Night Exposure&lt;/strong&gt;, con 1050 descargas.     &lt;br /&gt;Como amante y aficionado a la fotograf&amp;iacute;a, decid&amp;iacute; migrar esta aplicaci&amp;oacute;n que hice en su d&amp;iacute;a para Windows y Windows SmartPhone a Windows Phone.     &lt;br /&gt;Muchas veces, cuando queremos fotograf&amp;iacute;ar con bajas condiciones de luz o con filtros de densidad neutra, se echa en falta el tener alg&amp;uacute;n mecanismo de contabilizaci&amp;oacute;n que nos ayude a ajustar los par&amp;aacute;metros de nuestra c&amp;aacute;mara fotogr&amp;aacute;fica de manera r&amp;aacute;pida y exacta.     &lt;br /&gt;Esta herramienta permite facilitarnos esta tarea.     &lt;br /&gt;&lt;img height="498" width="280" src="http://catalog.zune.net/v3.2/es-ES/image/6ad7560e-dedd-42b3-b1c2-27e1e92c10a5?width=1280&amp;amp;height=720&amp;amp;resize=true" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://catalog.zune.net/v3.2/es-ES/apps/a5144ddc-8944-4ea3-a361-a740ee28468c/primaryImage?width=95&amp;amp;height=95&amp;amp;resize=true" alt="" /&gt;     &lt;br /&gt;&lt;strong&gt;A cuanto toca&lt;/strong&gt;, con 560 descargas.     &lt;br /&gt;Peque&amp;ntilde;a utilidad para calcular el dinero (con o sin propina) que debemos pagar cuando salimos a tomar algo en grupo.     &lt;br /&gt;Existe por supuesto la calculadora de toda la vida, pero esta herramienta realiza los c&amp;aacute;lculos de forma mucho m&amp;aacute;s r&amp;aacute;pida y flexible.     &lt;br /&gt;&lt;img height="498" width="280" src="http://catalog.zune.net/v3.2/es-ES/image/4e8efc42-1188-4c61-99b4-29e50937d34a?width=1280&amp;amp;height=720&amp;amp;resize=true" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://catalog.zune.net/v3.2/es-ES/apps/a931aedc-2103-486c-b1df-351f1503f78e/primaryImage?width=95&amp;amp;height=95&amp;amp;resize=true" alt="" /&gt;     &lt;br /&gt;&lt;strong&gt;Dilbert Today!&lt;/strong&gt;, con 514 descargas.     &lt;br /&gt;Creo que el nombre lo dice todo.     &lt;br /&gt;Nos permite ver la vi&amp;ntilde;eta del d&amp;iacute;a de Dilbert e incluso guardarla en nuestra biblioteca de im&amp;aacute;genes de Windows Phone por si quisi&amp;eacute;ramos reenviarla, o lo que dese&amp;aacute;ramos hacer.     &lt;br /&gt;&lt;img height="498" width="280" src="http://catalog.zune.net/v3.2/es-ES/image/e4c65bec-e409-4f0c-88eb-791f352f6e1a?width=1280&amp;amp;height=720&amp;amp;resize=true" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Espero haber dado a conocer a alguien alguna de estas aplicaciones, y que ante todo le sea de utilidad a alguien.&lt;/p&gt;
&lt;p&gt;Saludos.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204501" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>Utilizando fuentes personalizadas en nuestras aplicaciones de Windows Phone 7</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/12/utilizando-fuentes-personalizadas-en-nuestras-aplicaciones-de-windows-phone-7.aspx" /><id>/blogs/jorge/archive/2012/04/12/utilizando-fuentes-personalizadas-en-nuestras-aplicaciones-de-windows-phone-7.aspx</id><published>2012-04-12T07:45:00Z</published><updated>2012-04-12T07:45:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Introducci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cuando desarrollamos una aplicaci&amp;oacute;n de Windows Phone 7 normalmente utilizaremos las fuentes de letra habituales instaladas en nuestro sistema y que ser&amp;aacute;n utilizadas por Windows Phone en tiempo de ejecuci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Si Windows Phone no tiene o no encuentra esa fuente de letra, utilizar&amp;aacute; la Segoe WP, pero imagin&amp;eacute;monos que queremos utilizar una fuente de letra personalizar en nuestra aplicaci&amp;oacute;n, &amp;iquest;c&amp;oacute;mo podemos hacerlo?.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Iniciando el proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lo primero de todo es contar con una fuente de letra.&lt;/p&gt;
&lt;p&gt;En mi caso he elegido una fuente de letra de nombre &amp;quot;SketchFlow Print&amp;quot; (modo demo).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pYDLciqVvmmVGU18wJQC4Wndwcl9iCpD0-mYz_uiS4lFhNt5Ye7BOqjrR27HALEkxUjj9C3ywDT8wpF5xWm3BTA/20120412_01.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Preparando el proyecto en Visual Studio 2010&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L&amp;oacute;gicamente, lo primero que tenemos que hacer una vez tengamos la fuente de letra que queremos utilizar, es crear nuestro proyecto en Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pT28dwutOcvq31JUZwZ_JC4kdaS9qRVpal8DLJO227pzTMKjgUHJ8hVt3b_mFkih68diCF9xpGn1BpbJkfJ_W-w/20120412_02.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Una vez hecho esto y en mi caso, he cambiado el modo de depuraci&amp;oacute;n a Windows Phone Device.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1plstecCx6iN5BQTcGWJs_W-O6gyR3Sdkr6uMq3a7YausFQS1J9TvhomXQ-iJ18Ft6T-6MTtz4G7VSX4igaitGmA/20120412_03.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Al ejecutar nuestra aplicaci&amp;oacute;n, &amp;eacute;sta se mostrar&amp;aacute; por defecto de la siguiente manera en nuestro Windows Phone 7:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1p0aEwb3TycIKXLEaPzc-XH7D0G3YUqAJdybAmqy-UOhrfpfrt_LpLyGJCYi6F-yGhuQ7R2u0XRpMypER4lF37pg/20120412_04.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agregando una fuente de letra personalizada al proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Como podemos ver en la imagen anterior, la fuente de letra es la que Windows Phone utiliza por defecto.&lt;/p&gt;
&lt;p&gt;Ahora bien, para agregar una fuente de letra personalizada, vamos a crear un directorio denominado &lt;em&gt;&lt;strong&gt;Fonts&lt;/strong&gt;&lt;/em&gt; y vamos a agregar dentro la fuente de letra (con extensi&amp;oacute;n ttf) en este directorio.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1plstecCx6iN6nqcT6j7N_bi6TA62dVrU2fwAVHFyCTlmwIwAIbSSmAafyUVrEX5TyDjJxNX-T1se_rDKMTcEh1w/20120412_05.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Una vez hecho esto, seleccionaremos la fuente de letra y modificaremos en la ventana de propiedades la propiedad &lt;strong&gt;&lt;em&gt;Acci&amp;oacute;n de compilaci&amp;oacute;n&lt;/em&gt;&lt;/strong&gt; para ponerla como &lt;em&gt;&lt;strong&gt;Contenido&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pT28dwutOcvo_uTNl_na-QoM1SYYxEiwxxpnsTSjQGFP-56L8QlLQSXZsbBl7Xt4SBIE-7ZfuJktdLKPziqs_tQ/20120412_06.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Lo &amp;uacute;ltimo que tenemos por delante es indicar al control de usuario que queramos la fuente de letra a utilizar.&lt;/p&gt;
&lt;p&gt;Por ejemplo, para el t&amp;iacute;tulo de la aplicaci&amp;oacute;n y en su control &lt;strong&gt;&lt;em&gt;TextBlock&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &amp;lt;TextBlock x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;PageTitle&amp;quot;&lt;/span&gt; Text=&lt;span style="color:#006080;"&gt;&amp;quot;page name&amp;quot;&lt;/span&gt; Margin=&lt;span style="color:#006080;"&gt;&amp;quot;9,-7,0,0&amp;quot;&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; FontFamily=&lt;span style="color:#006080;"&gt;&amp;quot;Fonts/SketchFlow Print.ttf#SketchFlow Print&amp;quot;&lt;/span&gt; FontSize=&lt;span style="color:#006080;"&gt;&amp;quot;60&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Aqu&amp;iacute; lo importante es observar la propiedad &lt;strong&gt;&lt;em&gt;FontFamily&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; indico la ruta en la que se encuentra nuestra fuente personalizada (&lt;em&gt;Fonts&lt;/em&gt;), el fichero de nuestra fuente de letra (&lt;em&gt;SketchFlow Print.tff&lt;/em&gt;), y el nombre de la fuente de letra (&lt;em&gt;SketchFlow Print&lt;/em&gt;) y que podemos ver f&amp;aacute;cilmente en la primera captura de pantalla, que se consigue en Windows haciendo doble clic sobre la fuente de letra.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Probando el proyecto&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Finalmente, nuestra aplicaci&amp;oacute;n tendr&amp;aacute; ahora un aspecto similar al siguiente:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pT28dwutOcvpPSnJGyHje-lOKSO0bTP464MWkCeN36w4TNwes-V79fP1Uz2l1rdBNNUsZZ9rx0X0j_cwereeNJA/20120412_07.png?psid=1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Utilizando la fuente de letra en toda la aplicaci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ahora bien, este truco sirve para utilizar una fuente de letra personalizada con un control de usuario concreto, pero imaginemos que queremos utilizar la fuente de letra a lo largo de todo el proyecto o aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;iquest;C&amp;oacute;mo resolver esto de forma f&amp;aacute;cil para que no tengamos que indicar siempre el nombre de la fuente de letra y su nombre?.&lt;/p&gt;
&lt;p&gt;Imaginemos incluso los beneficios/perjuicios a la hora de mantener nuestra aplicaci&amp;oacute;n y la cantidad de modificaciones que tendr&amp;iacute;amos que hacer (aunque en este caso lo resolvamos f&amp;aacute;cilmente con un reemplazar).&lt;/p&gt;
&lt;p&gt;Para resolver este dilema, lo que podemos hacer es abrir el archivo &lt;strong&gt;&lt;em&gt;App.xaml&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dentro de este archivo, nos situaremos en la secci&amp;oacute;n &lt;strong&gt;&lt;em&gt;Application.Resources&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; indicaremos la fuente de letra a utilizar tal y como se indica a continuaci&amp;oacute;n:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &amp;lt;Application.Resources&amp;gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;     &amp;lt;FontFamily x:Key=&lt;span style="color:#006080;"&gt;&amp;quot;SketchFlowPrintFont&amp;quot;&lt;/span&gt;&amp;gt;Fonts/SketchFlow Print.ttf#SketchFlow Print&amp;lt;/FontFamily&amp;gt;&lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &amp;lt;/Application.Resources&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A continuaci&amp;oacute;n, nos iremos al c&amp;oacute;digo de nuestra aplicaci&amp;oacute;n y modificaremos la propiedad &lt;strong&gt;&lt;em&gt;FontFamily&lt;/em&gt;&lt;/strong&gt; del control de usuario de esta forma:&lt;/p&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;width:97.5%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;cursor:text;border:silver 1px solid;padding:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;" id="codeSnippet"&gt;
&lt;pre style="text-align:left;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &amp;lt;TextBlock x:Name=&lt;span style="color:#006080;"&gt;&amp;quot;PageTitle&amp;quot;&lt;/span&gt; Text=&lt;span style="color:#006080;"&gt;&amp;quot;page name&amp;quot;&lt;/span&gt; Margin=&lt;span style="color:#006080;"&gt;&amp;quot;9,-7,0,0&amp;quot;&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; FontFamily=&lt;span style="color:#006080;"&gt;&amp;quot;{StaticResource SketchFlowPrintFont}&amp;quot;&lt;/span&gt; FontSize=&lt;span style="color:#006080;"&gt;&amp;quot;60&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Como podemos apreciar, lo &amp;uacute;nico que hemos hecho aqu&amp;iacute; es simplificar el uso de la fuente de letra acudiendo a los recursos de la aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Espero que te resulte &amp;uacute;til.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204406" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="C#" scheme="http://geeks.ms/blogs/jorge/archive/tags/C_2300_/default.aspx" /><category term="Visual Basic 2010" scheme="http://geeks.ms/blogs/jorge/archive/tags/Visual+Basic+2010/default.aspx" /><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>¿Está la nueva generación de ingenieros informáticos mal formada?</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/02/191-est-225-la-nueva-generaci-243-n-de-ingenieros-inform-225-ticos-mal-formada.aspx" /><id>/blogs/jorge/archive/2012/04/02/191-est-225-la-nueva-generaci-243-n-de-ingenieros-inform-225-ticos-mal-formada.aspx</id><published>2012-04-02T07:30:00Z</published><updated>2012-04-02T07:30:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://4.bp.blogspot.com/--UwTvwWghRI/TeHgfCyEvdI/AAAAAAAAABI/rrLkfUJVfEI/s1600/travel-accident-insurance.jpg" width="336" height="269" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Leo un art&amp;iacute;culo de t&amp;iacute;tulo &amp;quot;Los CIO consideran mal formada a la nueva generaci&amp;oacute;n de ingenieros inform&amp;aacute;ticos&amp;quot; en Computer World que me ha hecho pegar un peque&amp;ntilde;o salto en mi silla.&lt;/p&gt;
&lt;p&gt;La r&amp;aacute;pida respuesta de quien quiere sobrevivir en un mundo tecnol&amp;oacute;gico como el actual, es pensar que uno mismo no se considera mal formado, y que el hecho de que haya gente mal formada en el mercado, lejos de perjudicarle en realidad le beneficia (punto de vista ego&amp;iacute;sta).&lt;/p&gt;
&lt;p&gt;Sin embargo, no es esperanzador, pensar que los CIO de las empresas (seg&amp;uacute;n expresa Computer World), piensan en un 90%, que los reci&amp;eacute;n licenciados no tienen unos conocimientos suficientes dentro del &amp;aacute;mbito de la gesti&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Seg&amp;uacute;n el mismo art&amp;iacute;culo, las carencias que hacen pensar a los CIO de esta forma, est&amp;aacute;n centradas en el dominio de herramientas inform&amp;aacute;ticas b&amp;aacute;sicas (programaci&amp;oacute;n, gesti&amp;oacute;n de ERP, gesti&amp;oacute;n de entornos de productividad y herramientas de BI). Adem&amp;aacute;s de esto, los CIO reconocen que est&amp;aacute;n necesitados de que los candidatos perfeccionen el dominio a otros idiomas.&lt;/p&gt;
&lt;p&gt;El final del art&amp;iacute;culo, culmina con una conclusi&amp;oacute;n que m&amp;aacute;s me suena a excusa barata que a otra cosa: &amp;quot;... estas carencias explican que las empresas prefieran a personal con experiencia en lugar de contratar a candidatos reci&amp;eacute;n titulados. Las exigencias de las empresas hacen que los procesos de contrataci&amp;oacute;n prime la productividad antes que la formaci&amp;oacute;n que se pueda realizar sobre un empleado.&amp;quot;.&lt;/p&gt;
&lt;p&gt;Voy por partes...&lt;/p&gt;
&lt;p&gt;En primer lugar, empezar&amp;eacute; por la exigencia de que los candidatos conozcan principalmente el ingl&amp;eacute;s.   &lt;br /&gt;Teniendo en cuenta que los &amp;uacute;ltimos Presidentes del Gobierno de Espa&amp;ntilde;a no sab&amp;iacute;an ingl&amp;eacute;s o franc&amp;eacute;s y que siempre han necesitado un traductor a su lado, &amp;iquest;c&amp;oacute;mo exigir que los reci&amp;eacute;n licenciados sepan m&amp;aacute;s ingl&amp;eacute;s que el Presidente del Gobierno?.    &lt;br /&gt;Estoy de acuerdo con que todos (me incluyo) debemos dominar la lengua de Shakespeare, pero exigir el dominio de un idioma a un reci&amp;eacute;n titulado, me hace pensar que los CIO lo que est&amp;aacute;n pensando realmente es en pagar poco por un candidato reci&amp;eacute;n titulado y que adem&amp;aacute;s sepa ingl&amp;eacute;s... es decir, que el candidato tenga m&amp;aacute;s de lo que pienso pagar por &amp;eacute;l.&lt;/p&gt;
&lt;p&gt;En segundo lugar, voy a comentar aspectos relativos a las carencias t&amp;eacute;cnicas que denuncian el 90% de los CIO que hay en el mercado.   &lt;br /&gt;Adem&amp;aacute;s de que el estudio se centra en la rama de gesti&amp;oacute;n &amp;uacute;nicamente, aqu&amp;iacute; podemos decir eso de &amp;quot;la pescadilla que se muerde la cola&amp;quot;.    &lt;br /&gt;&amp;iquest;Hay alg&amp;uacute;n CIO que crea realmente que un reci&amp;eacute;n titulado sale dominando un paquete de gesti&amp;oacute;n de ERP, un entorno de productividad, una herramienta de BI o simplemente sabe realmente programar?.    &lt;br /&gt;Porque si hay alg&amp;uacute;n CIO que piensa as&amp;iacute; y est&amp;aacute; leyendo esto, le dir&amp;eacute; con mucho cari&amp;ntilde;o que se baje del guindo.    &lt;br /&gt;Al igual que ning&amp;uacute;n reci&amp;eacute;n titulado puede ser CIO en una empresa, ning&amp;uacute;n reci&amp;eacute;n titulado puede tener de salida todos esos conocimientos, m&amp;aacute;s que nada porque es necesario tener algo que un reci&amp;eacute;n titulado no tiene... EXPERIENCIA.&lt;/p&gt;
&lt;p&gt;Pero adem&amp;aacute;s de la EXPERIENCIA, tambi&amp;eacute;n hay otro aspecto muy importante a tener en cuenta... RECURSOS (y no confundamos recursos con personas, algo que odio mentar cuando se habla de recursos).&lt;/p&gt;
&lt;p&gt;&amp;iquest;Tiene acaso un reci&amp;eacute;n titulado la posibilidad de probar, trastear, tocar, etc un entorno real o virtual ERP, de gesti&amp;oacute;n de productividad, de herramientas BI o de programaci&amp;oacute;n?. En el 99% NO.   &lt;br /&gt;Pero es que aunque lo tuviera, &amp;iquest;hay gente cerca que le diga a ese reci&amp;eacute;n titulado que est&amp;aacute; haciendo las cosas mal?. En el 99% de ese 1% restante, NO.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; significa esto entonces?.   &lt;br /&gt;QUE LA FORMACI&amp;Oacute;N ES IMPORTANTE.&lt;/p&gt;
&lt;p&gt;Bien, pero la formaci&amp;oacute;n, &amp;iquest;se hace en la empresa o en casa?.&lt;/p&gt;
&lt;p&gt;Y es aqu&amp;iacute; donde tocamos otro aspecto sensible que las empersas obvian y que los CIO aqu&amp;iacute; omiten, en mi opini&amp;oacute;n, interesadamente.&lt;/p&gt;
&lt;p&gt;El empleado, no s&amp;oacute;lo los reci&amp;eacute;n titulados, tambi&amp;eacute;n los de mayor rango dentro del organigrama empresarial, NECESITAN SER FORMADOS CONTINUAMENTE.&lt;/p&gt;
&lt;p&gt;Y es que la autoformaci&amp;oacute;n est&amp;aacute; muy bien porque a la empresa le hace olvidarse de esas necesidades, y los gastos corren a cargo de los empleados que utilizan su tiempo libre en adquirir conocimientos que luego aplicar&amp;aacute; a su trabajo tarde o temprano, por lo que la empresa cubre unas necesidades resueltas por el empleado de forma altru&amp;iacute;sta.&lt;/p&gt;
&lt;p&gt;Sin embargo, yo del art&amp;iacute;culo que he le&amp;iacute;do en Computer World saco una conclusi&amp;oacute;n bastante triste, y es que los CIO que han rellenado esa encuesta y forman parte de ese 90%, piensan como excusa de la no contrataci&amp;oacute;n a j&amp;oacute;venes reci&amp;eacute;n titulados, que la pelota&amp;nbsp; est&amp;aacute; en el tejado de los inform&amp;aacute;ticos de nueva generaci&amp;oacute;n, cuando en realidad, ellos deben pensar que realmente NADIE HA NACIDO APRENDIDO, y que PEDIR PERAS AL OLMO es una utop&amp;iacute;a.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Alguien cree realmente que los reci&amp;eacute;n titulados sale con los mismos o mayores conocimientos que un inform&amp;aacute;tico con no s&amp;eacute; cuantos a&amp;ntilde;os de experiencia?.&lt;/p&gt;
&lt;p&gt;Que se hagan la pregunta a la inversa y piensen si una persona reci&amp;eacute;n titulada de Empresariales por ejemplo podr&amp;iacute;a ser CIO de una empresa. &amp;iquest;A qu&amp;eacute; no?. Pues exactamente lo mismo aqu&amp;iacute; pero para los inform&amp;aacute;ticos. ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enlaces&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.idg.es/computerworld/Los-CIO-consideran-mal-formada-a-la-nueva-generaci/seccion-factor/noticia-119756"&gt;Art&amp;iacute;culo de Computer World&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.itcio.es/liderazgo-estrategia/informes/1010777014702/90-cios-cree-universidad-no-forma.1.html"&gt;La misma noticia en ITCIO.es&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204167" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Opini&amp;#243;n" scheme="http://geeks.ms/blogs/jorge/archive/tags/Opini_26002300_243_3B00_n/default.aspx" /></entry><entry><title>¡Renovado como MVP!… ¡y van 11!</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/04/02/161-renovado-como-mvp-161-y-van-11.aspx" /><id>/blogs/jorge/archive/2012/04/02/161-renovado-como-mvp-161-y-van-11.aspx</id><published>2012-04-02T06:30:00Z</published><updated>2012-04-02T06:30:00Z</updated><content type="html">&lt;p&gt;&lt;img height="140" width="89" src="http://b0sggq.tuk.livefilestore.com/y1pQyP0L2ZqeK0bCdLOXrcMGWzkpCE5JG5gCS1YMtqVpPZpf6GUPJ4rqLE6RaLs4i6O8FbmlTxOENs/00030.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Ayer tuve un d&amp;iacute;a fant&amp;aacute;stico, no lo voy a negar.&lt;/p&gt;
&lt;p&gt;Celebr&amp;eacute; mi cumplea&amp;ntilde;os en familia y para colmo, Microsoft me comunic&amp;oacute; la renovaci&amp;oacute;n como MVP en VB un a&amp;ntilde;o m&amp;aacute;s.&lt;/p&gt;
&lt;p&gt;Si considero dif&amp;iacute;cil la renovaci&amp;oacute;n como MVP, m&amp;aacute;s a&amp;uacute;n en estos momentos de crisis y problemas varios que todos de forma directa o indirecta estamos sufriendo.   &lt;br /&gt;A eso, hay que unirle la fabulosa presencia de cada vez mejores profesionales en el campo, que hacen que la renovaci&amp;oacute;n sea cada a&amp;ntilde;o que pasa, m&amp;aacute;s dif&amp;iacute;cil.    &lt;br /&gt;Lo bueno de esa fant&amp;aacute;stica competencia es que le hace a uno seguir apretando para no perder comba con la tecnolog&amp;iacute;a.&lt;/p&gt;
&lt;p&gt;Esa competencia que a algunos les preocupa, a otros nos encanta porque lo &amp;uacute;nico a lo que nos invita es a tratar de ser todos cada vez mejores en nuestros campos.&lt;/p&gt;
&lt;p&gt;As&amp;iacute; que reconozco que 11 a&amp;ntilde;os seguidos como MVP son muchos a&amp;ntilde;os, y aunque uno se acostumbra gratamente a ello, no ser&amp;iacute;a completamente sincero con vosotros si dijera que esto seguir&amp;aacute; siendo siempre as&amp;iacute;. S&amp;eacute; que alg&amp;uacute;n d&amp;iacute;a esto parar&amp;aacute;, as&amp;iacute; que como dice la frase, un a&amp;ntilde;o m&amp;aacute;s... Carpe Diem. :)&lt;/p&gt;
&lt;p&gt;Para este a&amp;ntilde;o, y despu&amp;eacute;s de alg&amp;uacute;n que otro sobresalto l&amp;oacute;gico de la situaci&amp;oacute;n en la que vivimos, espero poder dar m&amp;aacute;s y mejor de m&amp;iacute; mismo. Con eso me conformo ampliamente.&lt;/p&gt;
&lt;p&gt;Muchas gracias a todos los que me hab&amp;eacute;is felicitado por tel&amp;eacute;fono, mensajes, etc. &amp;iexcl;Os lo agradezco mucho!. :)&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Seguimos en la brecha!&lt;/p&gt;
&lt;p&gt;P.D.: Un recuerdo especial a los que no han podido ser nominados como MVPs, ya sea porque no han sido renovados, o porque pensaban que les iban a nominar pero no les han nominado&amp;hellip; a todos ellos&amp;hellip; NO DESESPER&amp;Eacute;IS, PORQUE &amp;iexcl;EL QUE SIEMBRA SIEMPRE RECOGE!. ;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204166" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Opini&amp;#243;n" scheme="http://geeks.ms/blogs/jorge/archive/tags/Opini_26002300_243_3B00_n/default.aspx" /></entry><entry><title>Windows Phone SDK 7.1.1 Update - RTW - GO LIVE</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/03/27/windows-phone-sdk-7-1-1-update-rtw-go-live.aspx" /><id>/blogs/jorge/archive/2012/03/27/windows-phone-sdk-7-1-1-update-rtw-go-live.aspx</id><published>2012-03-27T08:00:00Z</published><updated>2012-03-27T08:00:00Z</updated><content type="html">&lt;p&gt;&lt;img height="135" width="232" src="http://pocketnow.com/html/portal/news/0000019217//Windows_Phone_New_Logo2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Microsoft ha publicado la actualizaci&amp;oacute;n del SDK o kit de desarrollo de software para Windows Phone. Esta actualizaci&amp;oacute;n corresponde a la versi&amp;oacute;n 7.1.1.&lt;/p&gt;
&lt;p&gt;Esta nueva versi&amp;oacute;n DEL SDK, ofrece a los desarrolladores herramientas que les faciliten el desarrollo de aplicaciones para dispositivos m&amp;oacute;viles Windows Phone de 256 MB.&lt;/p&gt;
&lt;p&gt;Recordemos que recientemente algunas compa&amp;ntilde;&amp;iacute;as como Nokia han sacado al mercado dispositivos m&amp;oacute;viles de bajo coste y dotados de Windows Phone. Al ser dispositivos de bajo coste, &amp;eacute;stos poseen todas las funcionalidades de sus hom&amp;oacute;logos pero al ser m&amp;aacute;s econ&amp;oacute;micos su hardware se ha visto recortado. Por ejemplo, en lugar de disponer de 512 Mb de memoria, disponen de 256 Mb de memoria.&lt;/p&gt;
&lt;p&gt;Esto conlleva a su vez, a revisar los desarrollos de nuestras aplicaciones de Windows Phone ya que deber&amp;aacute;n estar preparadas para soportar este tipo de dispositivos.&lt;/p&gt;
&lt;p&gt;Existen por lo tanto unas recomendaciones de Microsoft al respecto sobre las que voy a pasar muy por encima en estos momentos (mirad la secci&amp;oacute;n de enlaces para obtener m&amp;aacute;s informaci&amp;oacute;n al respecto).&lt;/p&gt;
&lt;p&gt;Sobre la instalaci&amp;oacute;n del SDK 7.1.1, Microsoft recomienda desinstalar todos los KB2669191 que corresponden con:   &lt;br /&gt;- Windows Phone Emulator.    &lt;br /&gt;- Windows Phone SDK 7.1 Assemblies.    &lt;br /&gt;- Windows Phone SDK 7.1 Add-in for Visual Studio 2010.    &lt;br /&gt;- Hotfix for Windows Phone SDK 7.1 ENU.&lt;/p&gt;
&lt;p&gt;La versi&amp;oacute;n RTW del SDK 7.1.1 corresponde con la versi&amp;oacute;n 40219.390 y con la versi&amp;oacute;n de adaptaci&amp;oacute;n 8773.20120308-1218.   &lt;br /&gt;Sobre el Zune, no existe novedad alguna y se debe utilizar la versi&amp;oacute;n 04.08.2345.00 del mismo.&lt;/p&gt;
&lt;p&gt;Finalmente, recuerda que el SDK es compatible con Windows 8 Consumer Preview y que est&amp;aacute; disponible en Ingl&amp;eacute;s, Espa&amp;ntilde;ol, Chino, Franc&amp;eacute;s, Alem&amp;aacute;n, Italiano, Japon&amp;eacute;s, Coreano y Ruso, y que su tama&amp;ntilde;o de descarga es de unos 290 Mb aproximadamente.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff402530(v=VS.92).aspx"&gt;Informaci&amp;oacute;n sobre la instalaci&amp;oacute;n de Windows Phone SDK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hh855084(v=vs.92).aspx"&gt;Informaci&amp;oacute;n de las novedades de Windows Phone SDK 7.1.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=29233"&gt;Acceso a la descarga de Windows Phone SDK 7.1.1 (290Mb)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.developer.nokia.com/Community/Wiki/Video_playback_guidance_for_Nokia_Lumia_610"&gt;Video playback guidance for Nokia Lumia 610 con informaci&amp;oacute;n interesante para los desarrolladores de aplicaciones Windows Phone de cara a su adaptaci&amp;oacute;n a los nuevos dispositivos&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204049" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>La responsabilidad del trabajo</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/03/15/la-responsabilidad-del-trabajo.aspx" /><id>/blogs/jorge/archive/2012/03/15/la-responsabilidad-del-trabajo.aspx</id><published>2012-03-15T17:30:00Z</published><updated>2012-03-15T17:30:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://2.bp.blogspot.com/_4yBzf6Q29tc/TTVmC0pfR7I/AAAAAAAAB9g/6qydgNlUiKc/s1600/efecto_domino.jpg" width="329" height="209" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;No voy a descubrir nada si afirmo que seguimos en crisis y que muy a mi pesar, me temo que seguiremos así aún durante un tiempo.&lt;/p&gt;  &lt;p&gt;Cada vez veo más tiendas cerradas en mi barrio de Madrid, un lugar céntrico, dónde había tenderos de los que denominaríamos &amp;quot;de toda la vida&amp;quot;, y que ahogados por la acuciante crisis, se ven obligados a reducir el personal de sus pequeñas tiendas, o incluso a cerrar sus negocios.&lt;/p&gt;  &lt;p&gt;Lo que empieza siendo una crisis de algún sector concreto, termina convirtiéndose en un barrido de fichas de dominó, y ahora prácticamente no hay profesión que se libre de la crisis.&lt;/p&gt;  &lt;p&gt;Pese a todo ello, la profesión de informática y concretamente de desarrollo del Software es de las menos golpeadas de la crisis. Sin embargo y aprovechando la crisis, las empresas han tirado por los suelos los sueldos.&lt;/p&gt;  &lt;p&gt;No hace falta que cuente mucho más al respecto por aquí respecto a este último tema, basta con darse una vuelta por alguno de esos portales de empleo para darse cuenta uno mismo de lo que hablo. Varios idiomas, experiencia abundante, conocimientos extensos e incluso con perfiles altos, y trabajando como si uno tuviera un perfil &amp;quot;normal&amp;quot; y por un sueldo por debajo de las expectativas iniciales que una persona con cierta experiencia profesional ya podría entender como lógico.&lt;/p&gt;  &lt;p&gt;El caso es que que nos vengan a estas alturas pidiendo esfuerzos a los informáticos y a los desarrolladores del Software suena a chufla, ya que llevamos años (al menos en España) sufriendo no solo recortes salariales y estancamiento en los sueldos, sino ajustándonos los cinturones, e incluso cuando las cosas les iban bien a muchos.&lt;/p&gt;  &lt;p&gt;No obstante y con la que está cayendo alrededor nuestra, y pese a todo esto que comento, podemos considerarnos unos auténticos privilegiados. Yo al menos, me considero así.&lt;/p&gt;  &lt;p&gt;Aún y así, ese privilegio alimenta aún más mi exigencia personal (y no hablo de aspectos económicos), sobre todo cuando levanto la cabeza del teclado y echo una rápida mirada alrededor mía.&lt;/p&gt;  &lt;p&gt;Ya que tengo la posibilidad de trabajar, quiero hacerlo desde la responsabilidad de quien espera y confía poner su granito de arena para intentar que otros salgan del agujero en el que están metidos, y sabedor de que si esos salen, mi situación mejorará de forma indirecta.&lt;/p&gt;  &lt;p&gt;Quiero pensar &amp;quot;egoístamente&amp;quot; que mi esfuerzo vale la pena, que mi implicación, persistencia, tesón y responsabilidad, ayudarán a que la situación económica y social mejore.&lt;/p&gt;  &lt;p&gt;Lo que no tengo tan claro es si cuando las cosas mejoren, se acordarán de los sueldos de los informático o si éstos seguirán anclados como lo han estado durante bastantes años.&lt;/p&gt;  &lt;p&gt;Sí, muchas veces pienso que quizás sea además de idealista, un inocente.&lt;/p&gt;  &lt;p&gt;Pero creo honestamente, que de esta crisis se saldrá cuando dejemos de pensar egoístamente en nosotros mismos y nuestros problemas, y traslademos esa reflexión a un plano más amplio... comprendiendo que si al vecino le va bien, a uno mismo le irá bien también, y entendiendo así que los problemas de todos son nuestros problemas aunque no estemos afectados directamente por ellos.&lt;/p&gt;  &lt;p&gt;Lo importante para mí de todo esto es que cuando veo a alguien cercano a mí que se queda en paro o que pasa por problemas económicos, más ganas y fuerzas me da para poner más empeño en todo lo que hago.&lt;/p&gt;  &lt;p&gt;Espero haber trasladado algo de optimismo y sentido al ambiente que nos rodea, y deseo que todos seamos conscientes de los privilegiados que somos y de la responsabilidad que tenemos, y sobre todo, de que cada uno por su cuenta no hará nada, y entre todos sí.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Para finalizar, me gustaría contar un par de moralejas sobre el valor de los seres humanos y sobre la implicación que puede tener el trabajo y la responsabilidad.&lt;/p&gt;  &lt;p&gt;La primera de ellas dice algo así:&lt;/p&gt;  &lt;p&gt;En una conferencia, el ponente mostró un billete de 100 dólares y preguntó:   &lt;br /&gt;- ¿Quién quiere este billete ?    &lt;br /&gt;Varias manos se levantaron, pero el ponente volvió a preguntar:    &lt;br /&gt;- Antes de dárselo a alguien, debo hacer aún algo con el billete.    &lt;br /&gt;Lo arrugó con sus manos una y otra vez, y volvió a preguntas:    &lt;br /&gt;- ¿Quién sigue queriendo este billete?    &lt;br /&gt;Las mismas manos seguían alzadas. Ante esa imagen, volvió a comentar:    &lt;br /&gt;- ¿Y si hiciera esto? (lo tiró contra la pared, lo dejó caer al suelo, lo pisoteó como a una colilla y, una vez más, mostró el billete, aunque ahora estaba bastante sucio y arrugado).    &lt;br /&gt;Repitió la pregunta una vez más y ninguna mano se bajó.    &lt;br /&gt;El ponente dijo entonces:    &lt;br /&gt;- No olviden nunca esta escena. Haga lo que haga con este billete de 100 dólares, continúa siendo un billete de 100 dólares. A menudo en la vida nos arrugan, nos pisan, nos maltratan, nos injurian; sin embargo, a pesar de ello, siempre seguimos valiendo lo mismo.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;La segunda se expresa más o menos de esta forma (aunque la practicidad y veracidad completa de esta última es más que discutible, pero me quedo con el fondo del asunto):&lt;/p&gt;  &lt;p&gt;Nos encontramos en primavera, antes de verano.   &lt;br /&gt;Una pequeña población de las que en invierno suelen quedar desiertas, pero que en verano triplica su población. Sin embargo, la crisis ha golpeado con dureza el municipio, y aunque el verano está cerca, las deudas ahogan a sus habitantes.    &lt;br /&gt;Para colmo y dada la época del año, llueve torrencialmente desde hace varios días, y la ciudad apenas recibe turistas.     &lt;br /&gt;Por fortuna, llega un turista bastante bien trajeado y entra en el único pero cuidado hotel de la población.    &lt;br /&gt;El recepcionista le indica que tiene todas las habitaciones libres y que puede elegir la que desee.    &lt;br /&gt;Pone un billete de 100€ en la mesa del recepcionista, pide una habitación y se va a ver las habitaciones.     &lt;br /&gt;Mientras tanto, el recepcionista del hotel que es a su vez el único dueño del mismo, coge el billete y sale corriendo a pagar sus deudas con el carnicero.    &lt;br /&gt;El carnicero, coge el billete y sale pitando a pagar sus deudas con el criador de cerdos.     &lt;br /&gt;El criador de cerdos por su parte, sale como alma que lleva el diablo y paga al proveedor de pienso para animales.     &lt;br /&gt;El del pienso coge el billete al vuelo y corre a liquidar su deuda con la prostituta a la que hace tiempo que no paga (en tiempos de crisis, hasta ella ofrece servicios a crédito).    &lt;br /&gt;La prostituta coge el billete y sale para el pequeño hotel donde había traído a sus clientes las últimas veces y que todavía no había pagado entregando el billete de 100€ al dueño del hotel y liquidando así sus deudas.     &lt;br /&gt;En ese mismo instante deja de llover y aparece el turista, quién le indica al recepcionista y dueño del hotel que aprovechando que ha dejado de llover va a seguir su camino por la carretera, por lo que el dueño del hotel le devuelve sus 100 €.    &lt;br /&gt;Nadie ha ganado un duro, pero ahora toda la ciudad vive sin deudas y mira el futuro con confianza.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203842" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Opini&amp;#243;n" scheme="http://geeks.ms/blogs/jorge/archive/tags/Opini_26002300_243_3B00_n/default.aspx" /></entry><entry><title>Windows Phone :: Publicada la aplicación Marketplace Rate v1.0</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/03/13/windows-phone-publicada-la-aplicaci-243-n-marketplace-rate-v1-0.aspx" /><id>/blogs/jorge/archive/2012/03/13/windows-phone-publicada-la-aplicaci-243-n-marketplace-rate-v1-0.aspx</id><published>2012-03-13T07:30:00Z</published><updated>2012-03-13T07:30:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Quería aprovechar esta entrada para mostraros la versión 1.0 de una aplicación gratuita para Windows Phone que he publicado recientemente en el Marketplace de Microsoft.&lt;/p&gt;  &lt;p&gt;El nombre de esta aplicación es Marketplace Rate y está disponible tanto en inglés como en español.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Para qué sirve?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Se trata de una aplicación con la que podremos acceder al Marketplace de Microsoft para obtener información de una determinada aplicación.&lt;/p&gt;  &lt;p&gt;El problema de los desarrolladores es que la forma de analizar y evaluar la aceptación de nuestras aplicaciones, así como acceder a los comentarios de los usuarios sobre nuestras aplicaciones, resulta demasiado farragoso y nos obliga a acudir a la página Web oficial del Marketplace y realizar tareas manuales bastante pesadas.&lt;/p&gt;  &lt;p&gt;La idea detrás de esta aplicación es la de crear una herramienta que nos permita acceder de forma rápida y eficaz, a los comentarios que los usuarios hacen sobre nuestras aplicaciones así como a la cantidad de votos y votación media de la misma, con el hándicap de que no sólo podremos ver los votos y comentarios que se han realizado sobre nuestra aplicación en una determinada región como ocurre con la Web oficial del Marketplace de Microsoft, sino que podremos acceder de una vez y en una única pantalla a todos los comentarios que han hecho los usuarios en todas las partes del mundo de forma directa y rápida.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Algunas capturas de pantalla de la aplicación&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A continuación, os pongo algunas capturas de pantalla de la aplicación:&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pUs0OwsOEe49gxoDRojxP0zJJpNkKnzOp-xxRmX2WjRI7L-I3JUKOgySRt403GJw86ONjhZNXH7C6KydVa8367A/20120313_01.png?psid=1" width="240" height="400" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1peePY4__GyjbwkK9UNVnFm5tii_Pr3zDx8K4F0IpGKG7x9gQa8kgM_67imXm4-r3KCDTIGVaBilQ0pPDPKaNXZA/20120313_02.png?psid=1" width="240" height="400" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pF4-U80tSewcX70JiRnlvwOJwVJypav-eldPQe6AOausSEYLFYG5ijYQKJuotqierH1BAl2yajm0ZaYQ32yU2ZA/20120313_03.png?psid=1" width="240" height="400" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pbhAd7PVLbxBqOI2EmCHihW52CHzilpB6zZTZ7ShNCMwRtoUMVQFd1mNfzUdFGNbxJj6me6ufRctG0FVMiygQlg/20120313_04.png?psid=1" width="240" height="400" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Futuras versiones de Marketplace Rate&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ni que decir, que ya estoy trabajando en una segunda versión de esta aplicación que contendrá nuevas características y mejoras, algunas de ellas de acuerdo a los cambios que va a sufrir el Marketplace en las próximas semanas o meses.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Video demostrativo&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A continuación, os indico un video que he colgado en YouTube para mostrar el uso y funcionamiento de la aplicación.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:351268fe-6698-40b3-a4f6-a50b8a583755" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=5zJ5XaJ_vVk" target="_new"&gt;&lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jorge/videodfe0dd6b40a2_5F00_078C5D9A.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;Video sobre la aplicación Marketplace Rate v1.0&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Confío en que os resulte de utilidad.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203817" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry><entry><title>Publicado Windows Phone SDK 7.1.1 CTP – NO GO LIVE</title><link rel="alternate" type="text/html" href="/blogs/jorge/archive/2012/02/29/publicado-windows-phone-sdk-7-1-1-ctp-no-go-live.aspx" /><id>/blogs/jorge/archive/2012/02/29/publicado-windows-phone-sdk-7-1-1-ctp-no-go-live.aspx</id><published>2012-02-29T13:00:00Z</published><updated>2012-02-29T13:00:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://pocketnow.com/html/portal/news/0000019217//Windows_Phone_New_Logo2.jpg" width="232" height="135" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Microsoft ha lanzado en este mes de Febrero que ahora finaliza una actualización de Microsoft Windows Phone SDK (aún en versión preliminar, CTP).&lt;/p&gt;  &lt;p&gt;Concretamente, lo que se denomina como &lt;em&gt;&lt;u&gt;Windows Phone SDK 7.1.1 CTP&lt;/u&gt;&lt;/em&gt; que corresponde con la versión denominada como &lt;em&gt;Windows Phone Tango&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;El porqué de esta actualización&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;El motivo principal del &amp;quot;porqué&amp;quot; de esta actualización, se debe fundamentalmente a que varios fabricantes llevaban varios meses desarrollando teléfonos móviles dotados de Windows Phone y de low-cost.&lt;/p&gt;  &lt;p&gt;En concreto, tenemos dos fabricantes que se han aventurado a mostrar estos nuevos terminales, algo que ha sucedido en el MWC (Mobile World Congress) 2012 que se está celebrando en Barcelona (España).&lt;/p&gt;  &lt;p&gt;En concreto, Nokia ha presentado (además de varias novedades) un dispositivo móvil de nombre Nokia Lumia 610.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pMWFzJjSrpFMXs0yju68eS3mU8vi4oA1rJbSYKSR6o5p_0__TsaIV4_SWMIhnOG4IrVLc9b__s1HduRA5P6B5mA/20120229_01.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Por su parte, el fabricante chino ZTE ha presentado su nuevo dispositivo móvil ZTE Orbit.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pn7XP3hPfB6uq321ufdt5lTWFoGJV-kQa-maUREtR2bDQ-z48HU8ciy_QgM8uljPiwqzribL1wdgVYvcnCyUh-g/20120229_02.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Ambos dispositivos tienen un precio inferior a 200 € y sus características técnicas son menos exigentes que la de sus hermanos mayores. Concretamente, disponen de 256 Mb de memoria RAM en lugar de las 512 Mb que suelen tener el resto de terminales, y soporte para procesadores Qualcomm 7x27a de menor velocidad (800 MHz en lugar de 1 GHz de los modelos superiores).&lt;/p&gt;  &lt;p&gt;Esto significa que aunque podamos instalar cualquier aplicación de Windows Phone del Marketplace en estos dispositivos, es posible que encontremos algún problema de rendimiento.&lt;/p&gt;  &lt;p&gt;El problema más directo es en la asignación de memoria. Con terminales dotados de 256 Mb, la asignación de memoria cambia, y eso afecta o puede llegar a afectar de forma muy directa con nuestras aplicaciones.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;¿Y cómo resolver esto?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Es por eso que Microsoft ha decidido publicar Windows Phone SDK 7.1.1, una actualización de su SDK que permita detectar cuando nos encontramos ante una aplicación que se ejecuta en terminales de bajo coste y cuando no, para que en base a ello, prepararemos nuestras aplicaciones de forma adecuada.&lt;/p&gt;  &lt;p&gt;La nueva versión preliminar de Windows Phone SDK 7.1.1 nos permitirá empezar a desarrollar nuestras aplicaciones con estas características.&lt;/p&gt;  &lt;p&gt;¡Ojo!, Windows Phone SDK 7.1.1 no se trata de una versión definitiva, y no dispone de licencia GO LIVE. Esto significa que se trata de una versión preliminar de pruebas, y NO podremos publicar aplicaciones desarrolladas con esta versión en el Marketplace. Es fácil pensar que poco cambio habrá seguramente con la versión definitiva, por lo que podremos ir ya poniéndonos manos a la obra con esta nueva versión de desarrollo.&lt;/p&gt;  &lt;p&gt;Adicionalmente a todo lo comentado hasta ahora, el SDK trae una modificación al emulador existente y es la de poder elegir entre un emulador de 512 Mb (el tradicional hasta esta nueva versión) y un nuevo emulador de 256 Mb que nos permitirá trabajar con algunas de las restricciones planteadas.&lt;/p&gt;  &lt;p&gt;A la hora de desarrollar nuestras aplicaciones, podemos limitar el despliegue de las mismas en dispositivos de bajo consumo utilizando el valor ID_REQ_MEMORY_90 en los requisitos que encontraremos en el archivo WMAppManifest.xml (ver documentación oficial para más detalles).&lt;/p&gt;  &lt;p&gt;De cara a la gestión de recursos dependiendo del tipo de aplicación, el SDK incluye un nuevo valor de nombre ApplicationWorkingSetLimit en el namespace Microsoft.Phone.Info (Microsoft.Phone.dll) y que puede ser invocado a través de DeviceExtendedProperties.GetValue(ApplicationWorkingSetLimit). De esta manera, podremos capturar la cantidad de memoria del dispositivo (menos de 90 MB = 94371840 para dispositivos de 256 Mb) para de esta forma, saber qué tipo de dispositivo es el que invoca nuestra aplicación y actuar de acuerdo a nuestras necesidades.&lt;/p&gt;  &lt;p&gt;Otra novedad del nuevo SDK es que el control de anuncios está ahora incorporado al SDK.&lt;/p&gt;  &lt;p&gt;Aún y así, conviene ser prudentes con estas novedades para ver si algunas de ellas sufren finalmente algún cambio o transformación.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Diferencias entre versiones&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;En esta pequeña tabla, se resumen aquellas características más destacables entre un Windows Phone de 256 Mb y un Windows Phone de 512 Mb desde el punto de vista técnico.&lt;/p&gt;  &lt;p&gt;&lt;img src="https://public.blu.livefilestore.com/y1pMWFzJjSrpFOUNjJofVXFHrfen_t1YtSjtqbqf_I1i_rkd25XLWPKgsPcsrgD3mr7HfnQoviUtIATeqE_3UQAPQ/20120229_03.png?psid=1" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;De acuerdo a esta pequeña tabla, vemos que la recomendación de Microsoft es la de ejecutar en terminales de 256 Mb aplicaciones de menos de 90 Mb necesarias de asignación de memoria.&lt;/p&gt;  &lt;p&gt;Incluso, Microsoft va más allá, y recomienda que sea incluso menos o igual de 60 Mb, ya que a partir de esa cantidad, la paginación afectará directa y estrechamente a la ejecución de nuestras aplicaciones y por lo tanto al rendimiento y a la experiencia de usuario.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;¿Para cuando la versión final?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Según App Hub, la versión final de Windows Phone SDK 7.1.1 estará disponible el próximo mes, y contendrá soporte para Malayo e Indonesio tal y como se puede extraer &lt;a href="http://create.msdn.com/en-US/news/windows-phone-sdk-7-1-1-tech-preview"&gt;de lo que ellos comentan&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Junto a esta actualización, el Marketplace sufrirá una expansión. Expansión que implica a 23 nuevos mercados adicionales: Bahrain, Bulgaria, China, Costa Rica, Croatia, Estonia, Iceland, Iraq, Israel, Kazakhstan, Latvia, Lithuania, Qatar, Romania, Saudi Arabia, Slovakia, Slovenia, Thailand, Turkey, UAE, Ukraine, Venezuela y Vietnam. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Enlaces&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Acceso a la página Web oficial de &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28962"&gt;descarga de Windows Phone SDK 7.1.1 (versión preliminar NO GO LIVE)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Información con las &lt;a href="http://msdn.microsoft.com/en-us/library/hh855084(v=vs.92).aspx"&gt;novedades de Windows Phone SDK 7.1.1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Información de Microsoft para el &lt;a href="http://msdn.microsoft.com/library/hh855081(v=vs.92).aspx"&gt;desarrollo de aplicaciones para dispositivos de 256 Mb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Blog de Aaron Stebner &lt;a href="http://blogs.msdn.com/b/astebner/archive/2012/02/27/10273543.aspx"&gt;http://blogs.msdn.com/b/astebner/archive/2012/02/27/10273543.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.developer.nokia.com/Community/Wiki/Best_practices_for_delivering_apps_to_256_MB"&gt;Trucos de Nokia para el desarrollo de aplicaciones de Windows Phone para terminales de 256 Mb&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203580" width="1" height="1"&gt;</content><author><name>jorge</name><uri>http://geeks.ms/members/jorge/default.aspx</uri></author><category term="Windows Phone 7" scheme="http://geeks.ms/blogs/jorge/archive/tags/Windows+Phone+7/default.aspx" /></entry></feed>
