<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

	<channel>
		<title>Magazine - cnet</title>
		<link>http://www.genbetadev.com</link>
		<description>
Información sobre el sector de los desarrolladores, el desarrollo de aplicaciones, para móviles, desarrollo web, bases de datos, frameworks y lenguajes de programación		</description>
		<pubDate>2013-05-19 07:12:07</pubDate>

		<generator>http://www.genbetadev.com</generator>
                    <item>
      <title><![CDATA[Desarrollo en Windows 8 y Windows Phone 8 con XAML y C#, análisis del libro]]></title>
      <link>http://www.genbetadev.com/formacion/desarrollo-en-windows-8-y-windows-phone-8-con-xaml-y-c-analisis-del-libro</link>
      <guid>http://www.genbetadev.com/formacion/desarrollo-en-windows-8-y-windows-phone-8-con-xaml-y-c-analisis-del-libro</guid>
      <pubDate>Mon, 28 Jan 2013 07:02:03 +0000</pubDate>

      <author>Juan Quijano</author>
      <description><![CDATA[
      <p><img alt="Desarrollo en Windows 8 y Windows Phone 8 con XAML y C#" src="http://img.genbetadev.com/2013/01/Desarrollo_en_W8_y_WP8_con_XAML_y_Csharp.jpg" class="centro" /></p>

	<p>Para los desarrolladores en el ecosistema Microsoft, <strong>estamos en una época especialmente interesante</strong> con una apuesta muy importante, a la altura de la comercialización del <span class="caps"><span class="caps">IBM</span></span> PC o de Windows 95.</p>

	<p>Las novedades no paran de presentarse desde 2008, a un ritmo endiablado de sostener; mantenerse, al menos, al corriente de las principales evoluciones de los sistemas, productos y herramientas requiere estudiar permanentemente.</p>

	<p>Por ello hoy quiero hacer un análisis de una reciente publicación que representa un impresionante manual de introducción avanzado al <strong>Desarrollo en Windows 8 y Windows Phone 8 con <span class="caps"><span class="caps">XAML</span></span> y C#</strong>.<br />

<!--more--></p>

	<p><h2>Sobre los autores, colaboradores y editores</h2><br />

<img alt="Josue, Rafa e Ibón" src="http://img.genbetadev.com/2013/01/autores.jpg" class="centro" /></p>

	<p>Aunque este artículo va a ser acompañado en breve con una larga conversación con los autores, si quisiera señalar que entre los tres reúnen más de 30 años de experiencia en el desarrollo. Es decir <strong>es un libro escrito por y para desarrolladores</strong>.</p>

	<p><em>Josué Yeray</em> y <em>Rafael Serna</em> ya visitaron las páginas de GenbetaDev en un artículo sobre <a href="http://www.genbetadev.com/desarrollo-aplicaciones-moviles/windows-phone-controla-podcast-y-screencast-de-desarrollo-en-wp7">Windows Phone Controla, podcast y screencast de desarrollo en wp7</a>, constituyendo una de las parejas más reconocidas  del panorama nacional de Windows Phone 8. Además, <em>Josué</em> e <em>Ibon Landa</em>, son <span class="caps"><span class="caps">MVP</span></span> (Most Value Professional); un importante reconocimiento de Microsoft a los profesionales que no pertenecen a la compañía pero que realizan un gran aporte continuado a la comunidad, que por su parte los propone y vota.</p>

	<p>También es de reseñar que la propia <strong>Nokia ha prestado su colaboración</strong> en el trabajo de construcción del libro, reconociendo el trabajo para la comunidad de Josue al nombrarlo Nokia Developer Champion en el 2011.</p>

	<p>Y por último, pero no por ello menos importante, el trabajo de editorial de <em>José Manuel Alarcón</em> (otro <span class="caps"><span class="caps">MVP</span></span>) que, frente a <a href="http://www.campusmvp.com/krasis-press.htm">Krasis Press</a>, ha ayudado a imprimir y distribuir esta magnífica obra.</p>

	<p><h2>Contenido en fondo y forma orientado al desarrollo</h2><br />

En un lenguaje sencillo, nos llevan los autores de la mano, <strong>con profusión de código de ejemplo</strong>, en un continuo aprendizaje paso a paso desde el más simple “<em>Hello World</em>” realizado en <span class="caps"><span class="caps">XAML</span></span>, hasta conceptos avanzados de programación <span class="caps"><span class="caps">SOLID</span></span> como son la segregación de interfaces o la inyección de dependencias. </p>

	<p>El primer capítulo hace un resumen bastante completo sobre de dónde sale Windows 8, con su estilo de interfaz gráfico llamado inicialmente Metro Style y actualmente Microsoft Design Style. Continua, aun dentro del capítulo, con otro vistazo por encima del novísimo Windows Phone 8 – presentado hace no más de tres meses –, de porqué es como es y qué ventajas tiene sobre la versión anterior: la 7.x. </p>

	<p>Para cerrar el contenido muestra al lector qué herramientas gratuitas tiene a su disposición para poder realizar los ejemplos incluidos, o las aplicaciones que serán publicadas a través de los diferentes Market.</p>

	<p><strong>A partir de aquí empezamos a disfrutar los desarrolladores</strong> ya que los dos siguientes capítulos hablan del patrón arquitectónico por antonomasia al programar para Windows 8 o Windows Phone 8 con <span class="caps"><span class="caps">XAML</span></span>: Model/View/ViewModel, o más conocido como <span class="caps"><span class="caps">MVVM</span></span>.</p>

	<p>Un patrón que publicó Jhon Gossman en 2005 y que permite, como se describe en el libro con un tutorial paso a paso, construir aplicaciones robustas, desacopladas, reutilizables y que facilitan la migración y funcionamiento del código en las tres plataformas destinatarias de la obra: Windows 8, Windows Phone 8 y Windows Phone 7.5.</p>

	<p>Aprenderemos qué es un Binding, de los interfazes IPropertyChangede e  ICommand – con su implementación en DelegateCommand &#8211; y el uso del patrón Locator; desembocando en el capítulo de <span class="caps"><span class="caps">MVVM</span></span> avanzado en donde se describe el concepto de Inyección de dependencias, el porqué de su importancia y los mejores framework que nos facilitan su uso.</p>

	<p>Pero aún queda el final del capítulo en donde se trata temas como <strong>las Buenas Prácticas de programación en <span class="caps"><span class="caps">MVVM</span></span></strong>, los framework para la implementación más sencilla del patrón y una sección muy breve sobre test unitarios.</p>

	<p>Como ves en estos dos capítulos tienes un manual de “<em>Cómo aprender <span class="caps"><span class="caps">MVVM</span></span> de cero a sénior en tres días</em>”. Pero la verdad es que yo lo he utilizado en un producto real pequeño y, estás poco más de 80 páginas <strong>me han tenido estudiando durante días y días</strong>. Yendo adelante y atrás, siguiendo los ejemplos de código que, si los seguimos al detalle, permiten acabar el capítulo avanzado con una aplicación funcionando en el emulador de Windows 8 con un orden, robustez y desacople muy satisfactorio</p>

	<p><h2>Llega la hora de los diseñadores gráficos y UX</h2><br />

Una ventaja del trabajo en <span class="caps"><span class="caps">XAML</span></span>, y aún más siguiendo el patrón <span class="caps"><span class="caps">MVVM</span></span>, es que un equipo de desarrollo y el de diseño gráfico, interfaz y experiencia de usuario, <strong>pueden trabajar en paralelo sin molestarse los unos a los otros</strong> al estar prácticamente desacopladas las funciones.</p>

	<p>Así a partir de este punto se abren dos largos capítulos que se extienden por más de 120 páginas en donde se describe al detalle las capacidades de los diferentes sistemas operativos.  Las diferencias de los controles más utilizados, la forma de describir y de configurar el entorno gráfico, los trucos, las Buenas Prácticas y los requisitos que debes tener en cuenta ya que te los va a exigir el Market para certificar la aplicación.</p>

	<p>Se inicia describiendo el lenguaje <span class="caps"><span class="caps">XAML</span></span>, que se utiliza en todas las plataformas, pero entrando al detalle de las diferencias con las que nos vamos a encontrar y cómo irlas solventándolas. Continuando con las capacidades de la plataforma .NET para la construcción de aplicaciones multiidioma, lo cual en un mercado global es imprescindible.</p>

	<p>Para finalizar la zona de diseño puro, entramos en un capítulo dedicado a <strong>la explicación de los interfaces de usuario en ambas plataformas</strong> (incluso un poco de Windows Phone 7). Cuáles son los controles que nos ofrecen por defecto los sistemas operativos, las particularidades de cada uno y cómo soportar las diferentes resoluciones y orientaciones de los dispositivos que obliga la certificación de las aplicaciones.</p>

	<p><h2>Metiéndonos en las tripas del Sistema</h2><br />

Estamos en la página 247, y<strong> hemos consumido más o menos la mitad del libro</strong>. Los conceptos que se tratan en los capítulos siguientes son en la mayoría desconocidos para los desarrolladores de aplicaciones Web o de escritorio Windows.</p>

	<p>Windows 8, al igual que Windows Phone 8, está pensado y diseñado para dar soporte natural a su ejecución en dispositivos móviles (tabletas, ultrabooks, portátiles, híbridos, etc.) Por lo cual el Ciclo de Vida, es decir cómo se ejecuta nuestra aplicación en conjunto con el resto dentro del sistema operativo, es el contenido del 6º capítulo. Breve, pero muy importante para conseguir que funcione correctamente el software en un ecosistema “<em>particular</em>” como el interfaz táctil de Windows 8 o Windows Phone 8.</p>

	<p>Por ejemplo, una aplicación puede notificar 6 estados diferentes al sistema: NotRunning, Running, Suspended, Terminated o ClosedByUser&#8230; <em>(toma ya!!)</em>. Y cuando la cerramos debemos detener los timers, las animaciones, el acelerómetro y la localización por <span class="caps"><span class="caps">GPS</span></span>, cerrar las operaciones por red o contra el isolated storage y apagar el sintonizador de radio FM.</p>

	<p>La densidad del siguiente capítulo, “<em>Acceso al sistema</em>”, <strong>es para una lectura reposada, tomar apuntes y volver a leerlo</strong>. Se describe con ejemplos las cosas que podemos y no podemos hacer en Windows 8 y Windows Phone 8 para interactuar con el Sistema Operativo y sus servicios. Y de las que podemos hacer, cuales son los pasos que debemos realizar y de qué forma. </p>

	<p><h2>Interactuando con el mundo real</h2><br />

Para un usuario de una tableta Windows 8 o un smartphone Windows Phone 8, <strong>los live tiles son pequeños iconos que muestran diferente información útil</strong> sobre la aplicación que enlazan. Son como unos accesos directos de toda la vida, pero vitaminados y mineralizados.</p>

	<p>La realidad es que su complejidad de uso merece un capítulo completo por parte de los autores. Y en donde no solamente se describe las diferencias dependiendo el sistema operativo, lo que implica el visualizar notificaciones tanto en las live tiles como en las pantallas de bloqueo, y el generar sistemas de comunicación basados en tecnología Push para recibir la información a mostrar desde servidores remotos.</p>

	<p>El capítulo que le sigue se centra en <strong>los sensores que incluyen los actuales dispositivos móviles</strong>, en especial los smartphone, como pueden ser los receptores Gps y el uso de librerías de Mapas, el acelerómetro, la brújula, el giroscopio y otros sensores secundarios como el inclinómetro, el sensor de orientación o el de luminosidad. </p>

	<p>Además incluye una breve descripción de la construcción y uso de las Portable Class Libraries que son un gran invento. Básicamente es un proyecto de Visual Studio al cual le indicamos cuales son los sistemas operativos sobre los que queremos que funcione nuestra aplicación: Windows 8, Windows Phone 8 y 7, Xbox, Silverlight, etc. Así el propio <span class="caps"><span class="caps">IDE</span></span> incluirá las librerías que son compatibles con los sistemas seleccionados y que podemos reutilizar en todos los proyectos que tengamos, asegurándonos de no introducir ningún código incompatible.</p>

	<p><h2>Comunicaciones: ¿se me escucha?</h2><br />

Dos capítulos comprenden el material relacionado con las comunicaciones desde un dispositivo Windows moderno. En el primero descubro con bastante interés <strong>una explicación básica e introductoria de las comunicaciones <span class="caps"><span class="caps">NFC</span></span></strong>, el nuevo paradigma de intercambio de información muy cercano al concepto del “Internet de las Cosas”, seguido a continuación del contrapunto de las capacidades de la tecnología Bluethooth, que funciona de forma excelente desde la década de los 90 del siglo pasado.</p>

	<p>Y ambas unidas por la simplicidad con las que se pueden explotar desde .NET y que explican los autores con profusión de ejemplos de código real, como en todo el libro.</p>

	<p>El segundo capítulo vuelve a un nivel técnico más profundo, similar a los iniciales de <span class="caps"><span class="caps">XAML</span></span> y <span class="caps"><span class="caps">MVVM</span></span>, tratando el inacabable – y me temo que inabarcable – uso de la tecnología de <strong>Windows Comunication Foundation (<span class="caps"><span class="caps">WCF</span></span>)</strong>, para realizar todo tipo de conexiones sobre los más variopintos protocolos y contra multitud de dispositivos.</p>

	<p>Como bien indican los autores, <span class="caps"><span class="caps">WCF</span></span> es una tecnología muy extensa sobre la que hay una abundante literatura y que sobrepasa con creces el alcance del libro. Pero aun así le dedican un buen número de páginas para explicar un sencillo ejemplo de conexión, teniendo aún espacio para revisar incluso una comunicación OnData o mostrar cómo hacer un lector <span class="caps"><span class="caps">RSS</span></span> sencillo.</p>

	<p><h2>Recta final de una extensa lectura</h2><br />

Voy a unir en un solo epígrafe el último capítulo del libro y el apéndice, ya que este capítulo final es un poco “<em>light</em>”, más centrado en la descripción del servicio que en un ejemplo real de uso utilizando alguna de las aplicaciones que, a estas alturas de la obra, deberíamos tener ya funcionando.</p>

	<p>Trata sobre<strong> Windows Azure, la Cloud de Microsoft</strong>. El sitio en donde toda aplicación con pretensiones de llegar al Gran Público (miles, cientos de miles o millones de usuarios) debe de irse para poder cubrir las necesidades de escalabilidad y disponibilidad que implica. Además de poder utilizar los servicios de movilidad (Mobile Services) que la plataforma ha publicado recientemente.</p>

	<p>A cambio de esta visión un poco más generalista, terminamos el libro con un apéndice que es una guía detallada y llena de buenos consejos de <strong>cómo publicar nuestro software en las tiendas virtuales de MS</strong>. Ya sea en el Market de Windows 8 como en la de Windows Phone, y que se podría resumir en la última frase del libro: </p>

<blockquote>“Debemos asegurarnos en todo momento que la aplicación que subamos, no contiene fallo alguno, ya que enviar una actualización implicará el mismo tiempo de publicación que si la enviamos por primera vez”</blockquote>

	<p><h2>Conclusiones</h2><br />

España es un país de contrastes que tiene una de las industrias editoriales más potentes del mundo sirviendo publicaciones a toda América Latina y al mundo castellanoparlante en general. Sin embargo <strong>el volumen de libros tecnológicos en nuestro país es muy pequeño</strong> en comparación con el potencial mercado de su difusión.</p>

	<p>Hay miles de páginas con manuales, tutoriales o post sobre conocimiento de todas las áreas de la informática, pero siempre se echan de menos obras bien escritas, <em>con autores reconocidos en la comunidad y con un potente trabajo editorial detrás</em>.</p>

	<p><strong>Este es uno de ellos.</strong></p>

	<p>Así puedo recomendarlo como uno de los mejores libros para la iniciación avanzada en el desarrollo sobre en una tecnología compleja y con ambiciones universales. No tanto por su fondo, sino por la forma. Se nota, y mucho, que los autores se pegan con esta tecnología de forma profesional y así hacen hincapié en lo importante, en las dudas que ellos tuvieron que resolver en su momento, dejando para libros con mucha mayor profundidad los vericuetos de conceptos, técnicas y conceptos como <span class="caps"><span class="caps">POO</span></span>, <span class="caps"><span class="caps">WCF</span></span>, <span class="caps"><span class="caps">SOLID</span></span>, etc.</p>

	<p>Pero en este acto de “<em>jardinería</em>”, separando el grano de la paja, <strong>es en donde tiene su mayor debilidad el texto</strong>. Se condensa tanto el conocimiento en tan poco espacio que muchas veces me he visto utilizándolo más como un libro de referencia, ese que buscas para superar el obstáculo que te impide continuar, más que como un manual al uso. O tener que profundizar en la descripción de una Buena Práctica o una pieza de código de ejemplo buscando en la infinita librería de Google, para tener un conocimiento más profundo del porqué.</p>

	<p>Espero que lo disfrutéis tanto <strong>como lo estoy haciendo yo</strong>.</p>

	<p>Enlace en Krasis Press | <a href="http://www.campusmvp.com/catalogo/Product-Desarrollo-en-Windows-8-y-Windows-Phone-8-con-XAML-y-C_163.aspx">Desarrollo en Windows 8 y Windows Phone 8 con <span class="caps"><span class="caps">XAML</span></span> y C#</a><br />

En GenbetaDev | <a href="http://www.genbetadev.com/entrevistas/desarrollo-en-w8-y-wp8-con-xaml-y-c-entrevista-a-los-autores-josue-yeray-rafael-serna-e-ibon-landa">Entrevista a Jousé Yeray, Rafael Serna e Ibón Landa</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Programar aplicaciones Metro en Windows 8: "Hola Mundo"]]></title>
      <link>http://www.genbetadev.com/cnet/programar-aplicaciones-metro-en-windows-8-hola-mundo</link>
      <guid>http://www.genbetadev.com/cnet/programar-aplicaciones-metro-en-windows-8-hola-mundo</guid>
      <pubDate>Tue, 28 Aug 2012 16:12:28 +0000</pubDate>

      <author>Javier Holguera</author>
      <description><![CDATA[
      <p><img alt="Hola Mundo Windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 11 - Nuevo Proyecto.jpg" class="centro" /></p>

	<p>Gracias a las plantillas de proyecto que forman parte de la instalación de Visual Studio 2012 tenemos la posibilidad de crear una <strong>primera Aplicación Metro</strong> que sea <strong>más sofisticada y completa que el típico “Hola Mundo”</strong> al que estamos acostumbrados en otras tecnologías.</p>

	<p>Para crear esta primera aplicación empezaremos por abrir Visual Studio 2012 y navegar al menú File -&gt; New -&gt; Project. </p>

	<p><!--more--></p>

	<p>Deberemos navegar al nodo donde se encuentren las plantillas de proyecto de JavaScript y seleccionar un proyecto de tipo Grid App y darle nombres a la solución y el proyecto. En caso de no estar familiarizado con VS, es importante saber que en este <span class="caps"><span class="caps">IDE</span></span> <strong>el código se organiza soluciones que pueden contener uno o más proyectos</strong>. Cada proyecto puede ser, a su vez, una aplicación en sí mismo, una librería de clases, un servicio web, una definición de un esquema de base de datos, etc. De esta forma, para una aplicación con código en cliente y servidor, podríamos tener una única solución con varios proyectos representando todas las piezas necesarias para su correcto funcionamiento.</p>

	<p>Tras dar valor a los campos solicitados y pulsar OK tendremos que esperar unos segundos mientras Visual Studio crea la nueva estructura de código, con una solución y un proyecto en ella. </p>

<h2>Estructura de los proyectos</h2>

	<p>Para poder ver la estructura de ficheros y proyectos que Visual Studio crea por nosotros al usar una plantilla de proyecto, simplemente tenemos que ir a la ventana de Solution Explorer. Nos encontraremos algo similar a lo que muestra la siguiente imagen. </p>

	<p><img alt="estructura de los proyectos windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 12 - Estructura de proyecto Grid.jpg" class="centro" /></p>

	<p>Algunas ideas que es importante tener en cuenta.</p>

<ul>
<li>En la carpeta References podemos encontrar las referencias a código externo que va a requerir la aplicación. Por defecto Visual Studio nos carga una referencia a WinJS, que es la librería base para la creación de Aplicaciones Metro con JavaScript. A través de ella podremos invocar a WinRT.</li>
<li>En la carpeta pages podemos encontrar las distintas páginas de que se compone la aplicación, organizadas en carpetas que contendrán las tres piezas que forman cada página: <span class="caps"><span class="caps">HTML</span></span>, <span class="caps"><span class="caps">CSS</span></span> y JavaScript.</li>
<li>En la carpeta js podemos encontrar otros códigos script que la aplicación necesitará pero que no están directamente relacionados con una página concreta. </li>
<li>En todo proyecto habrá ciertos ficheros obligatorios para su correcto funcionamiento, como son la página cargada por defecto al activar la aplicación (default.html), una clave para firmar la aplicación (fichero con extensión .pfx) y un manifiesto (package.appxmanifest) que permite declarar capacidades que la aplicación tiene y permisos que requiere para ejecutarse, entre otras cosas.</li>
</ul>

	<p>Por último, desde esta ventana podremos añadir nuevos elementos a los proyectos, simplemente pinchando el botón derecho del ratón para mostrar el menú contextual.</p>

<h2>Compilación y ejecución</h2>

	<p><strong>Compilar, desplegar, ejecutar y depurar es tan sencillo como pulsar F5</strong>. En ese momento Visual Studio compilará la aplicación, creará el paquete, lo instalará en el entorno que le hayamos indicado (nuestra máquina, por defecto), lo lanzará y conectará el depurador a la aplicación resultante. Lo que veremos, para la aplicación que acabamos de crear, será similar a esto.</p>

	<p><img alt="Aplicación Grid Windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 13 - Aplicacion Grid.jpg" class="centro" /></p>

	<p>En esta pantalla, la inicial de la aplicación, podemos ver elementos de información agrupados. En realidad toda <strong>esta información es simple relleno</strong> y se define en el fichero data.js contenido en la carpeta js del proyecto.</p>

	<p>Sin embargo, es suficiente para permitirnos ver toda la funcionalidad que tiene la aplicación. Si pulsamos en el nombre de alguno de los grupos navegaremos a la página que muestra información para cada grupo.</p>

	<p><img alt="Aplicación Grid Windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 14 - Aplicacion Grid - Pantalla grupo.jpg" class="centro" /></p>

	<p>Si, por el contrario, seleccionamos un ítem concreto, será a la pantalla de información detallada de cada ítem a donde navegaremos automáticamente.</p>

	<p><img alt="aplicación Grid Windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 15 - Aplicacion Grid - Pantalla item.jpg" class="centro" /></p>

	<p>Además la aplicación trae una implementación para Snapped View. Este tipo de vista facilita la multitarea en dispositivos táctiles, permitiendo que dos aplicaciones compartan la pantalla. Sin embargo una de las dos tendrá una vista reducida, consistente en sólo 320 pixeles de ancho, de forma que tendrá que adaptar la información que está mostrando para seguir siendo útil aún en estas circunstancias.</p>

	<p>Para poner la aplicación en estado Snapped View simplemente tendremos que pinchar en la parte superior de la pantalla y, sin soltar, arrastrar hacia uno de los lados de la pantalla. En la siguiente figura podemos ver el resultado.</p>

	<p><img alt="Spapped View" src="http://img.genbetadev.com/2012/08/650_1000_Figura 16 - Snapped View.jpg" class="centro" /></p>

	<p>Todas las Aplicaciones Metro deben implementar este tipo de vista, puesto que gracias a ella los usuarios podrán sacarles más partido a sus dispositivos, al tiempo que los desarrolladores nos beneficiamos del hecho de que nuestra aplicación permanezca mayor tiempo en pantalla.</p>

	<p>En Genbeta Dev | <a href="http://www.genbetadev.com/tag/programar-aplicaciones-metro-windows-8">Programar aplicaciones Metro en Windows 8</a></p></p>

	<p><p><div class="nota"></p>

	<p>	<p>	<p>	</p><p><img alt="Avatar de Javier Holguera" width="80" src="http://img.genbetadev.com/2012/07/FotoTwitter.png" class="derecha"/></p>Javier Holguera es desarrollador en Payvision y lleva más de 5 años trabajando con tecnologías de Microsoft en una gran variedad de proyectos. <br />
</p>

	<p></p></p>

<p>Es especialista en metodologías ágiles y en estándares web relacionado con HTML5. Es miembro activo de la comunidad .NET a través de <span class="caps"></span><span class="caps"><span class="caps"><span class="caps"><span class="caps">MADNUG</span></span></span></span> y colabora con medios como DotNetMania, PC Actual o Desarrolloweb.com.</p>

	<p>	<p>	</p><p>Puedes seguirle en Twitter: <a href="http://twitter.com/javierholguera">@javierholguera</a> o en su blog: <a href="http://javierholguera.com">javierholguera.com</a><br />

</p>

	<p></p><br />


	<p></div></p></p></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Programar aplicaciones Metro en Windows 8: herramientas]]></title>
      <link>http://www.genbetadev.com/cnet/programar-aplicaciones-metro-en-windows-8-herramientas</link>
      <guid>http://www.genbetadev.com/cnet/programar-aplicaciones-metro-en-windows-8-herramientas</guid>
      <pubDate>Tue, 21 Aug 2012 14:21:35 +0000</pubDate>

      <author>Javier Holguera</author>
      <description><![CDATA[
      <p><img alt="herramientas programar en Windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 10 - IntelliSense en JS.jpg" class="centro" /></p>

	<p>Las herramientas principales con las que se va a poder crear <strong>Aplicaciones Metro</strong> son los dos productos principales para el desarrollo y diseño de software que Microsoft lleva años ofreciendo a desarrolladores y diseñadores:<strong> Visual Studio</strong> y <strong>Blend</strong>.</p>

	<p><!--more--></p>

<h2>Visual Studio 2012</h2>

	<p>Visual Studio es un producto maduro que lleva siendo la herramienta para el desarrollo de software con tecnologías de Microsoft desde hace muchos años. En esta nueva versión, como no podía ser de otro modo, de crear <strong>Aplicaciones Metro</strong> con cualquiera de los lenguajes de programación que hemos visto en puntos anteriores.</p>

	<p>Como en anteriores ediciones, Visual Studio 2012 no será una única aplicación, sino una familia con distintas configuraciones y distintos precios que se adapta a las necesidades del desarrollador. Tendremos desde la versión Express, gratuita y suficiente para la creación de Aplicaciones Metro, hasta la versión Ultimate con los últimos adelantos en modelado y arquitectura, pruebas, depuración, etc. En cualquier caso, durante un tiempo tendremos la posibilidad de utilizar la versión Ultimate de forma totalmente gratis, por lo que puede ser una oportunidad para conocer la versión más potente de la gama y conocer sus posibilidades.</p>

	<p>En cuanto a las novedades que presenta VS 2012 con respecto a la edición anterior, son muy numerosas, por lo que destacaremos las tres más relevantes.</p>

<h3>Interfaz Metro</h3>

	<p>Quizás la novedad más impactante a primera vista es el profundo rediseño que se ha hecho de la interfaz gráfica de Visual Studio. El estilo continuista que habíamos visto desde <strong>Visual Studio 2005</strong> a <strong>Visual Studio 2010</strong> se rompe completamente en esta nueva versión, haciendo una metroficación del <span class="caps"><span class="caps">IDE</span></span>.</p>

	<p>Esta redefinición a la <strong>Metro</strong> empieza con la simplificación de la interfaz, reduciendo líneas, iconos y, en general, dando paso a un aspecto mucho más minimalista que en versiones anteriores. Se abre paso, como en otras aplicaciones con estilo Metro, el espacio y la jerarquía de tipografías para darle forma a las ventanas y su contenido.</p>

	<p>También se ha producido un cambio drástico en la iconografía, puesto que se han sustituido todos los iconos por versiones Metro de los mismos, más planos y más esquematizados. Para algunos desarrolladores acostumbrados a versiones anteriores de VS esto puede resultar un problema en una primera toma de contacto, pero el período de adaptación es menor que la diferencia con lo existente hasta ahora nos pudiera hacer pensar.</p>

<h3>IntelliSense en JavaScript</h3>

	<p>IntelliSense es un sistema de ayuda contextual que facilita la programación al ofrecer información en línea sobre <span class="caps"><span class="caps">API</span></span>s, métodos, parámetros y sus tipos, resultados, excepciones, etc. Gracias a este sistema el desarrollador se evita tener que memorizar las <span class="caps"><span class="caps">API</span></span>s, al tiempo que facilita que el código se escriba correctamente a la primera, reduciendo errores de compilación.</p>

	<p>Con Visual Studio 2012 este sistema aterriza en el JavaScript que usaremos para programar Aplicaciones Metro. En la siguiente imagen podemos ver un ejemplo de su uso, mostrando los métodos en el espacio de nombres WinJS, así como una pequeña explicación del que tenemos seleccionado.</p>

<h3>Plantillas de proyecto</h3>

	<p>Con Visual Studio 2012 vamos a tener de serie una serie de plantillas de proyecto de Aplicación Metro con <span class="caps"><span class="caps">HTML</span></span>/JS que nos van a minimizar la curva de aprendizaje de esta nueva tecnología. Las plantillas con las que contaremos son:</p>

<ul>
<li><strong>Blank App</strong>: esta plantilla crea un proyecto con una única página, la que cargará por defecto el sistema operativo al lanzar la aplicación. Puede ser un buen ejemplo para conocer los ficheros mínimos que todo proyecto de Aplicación Metro necesita.</li>
<li><strong>Grid App</strong>: la más completa de todas las plantillas, muestra ítems de información agrupados. Se compone de tres páginas, una para mostrar un resumen general de información, otra para mostrar información específica de cada grupo y una tercera para mostrar información detallada de cada ítem.</li>
<li><strong>Split App</strong>: esta plantilla define un proyecto con dos páginas, una para mostrar grupos de información y otra para mostrar los elementos de cada grupo.</li>
<li><strong>Fixed Layout App</strong>: similar a Blank App, crea una aplicación con un layout fijo, a diferencia de las anteriores que lo crean de tipo adaptativo. Esta plantilla está pensada para juegos.</li>
<li><strong>Navigation App</strong>: esta plantilla es un ejemplo básico del tipo de navegación que se debe utilizar con Aplicaciones Metro.</li>
</ul>

	<p>En función del tipo de proyecto elegiremos una plantilla u otra, así como la forma en que prefiramos empezar a crear Aplicaciones Metro: partiendo de una versión mínima (Blank App) o con una aplicación ejecutable que queramos modificar para adaptar a nuestro escenario (Grid App o Split App).</p>

<h2>Blend for Visual Studio</h2>

	<p>La otra herramienta que vamos a necesitar tener siempre a mano para crear Aplicaciones Metro es <strong>Blend for Visual Studio</strong>. Hasta ahora esta herramienta de diseño se había utilizado para crear, fundamentalmente, aplicaciones con interfaz gráfica basada en <span class="caps"><span class="caps">XAML</span></span>.</p>

	<p>Sin embargo con el lanzamiento de las nuevas Aplicaciones Metro para Windows 8 se ha creado una nueva versión de la herramienta que ofrece un completo soporte para la creación de interfaces basadas en HTML5 y CSS3. Entre las posibilidades que nos ofrece Blend para la creación de interfaces con estos lenguajes tenemos:</p>

<ul>
<li>Diseño visual, de tipo <span class="caps"><span class="caps">WYSIWYG</span></span> (What You See Is What You Get), además de permitir emular distintos tamaños y orientación del dispositivo para el que estamos creando la aplicación.</li>
<li>Modo interactivo, que permite ejecutar la aplicación dentro de Blend para poder diseñar para ciertos estados a los que sólo se llega en tiempo de ejecución.</li>
<li>Arrastrar y soltar de controles y propiedades.</li>
<li>Potente generación de código a partir de los elementos que se ha añaden visualmente.</li>
<li>Depuración de <span class="caps"><span class="caps">HTML</span></span> y <span class="caps"><span class="caps">CSS</span></span>.</li>
</ul>

	<p>En definitiva, <strong>Blend</strong> es más que un simple diseñador de interfaces. Es una potente herramienta que nos permitirá definir cada aspecto de la interfaz gráfica, desde su estilo a parte de su comportamiento ante circunstancias como cambios de orientación o tamaño de ventana.</p>

	<p>Más información | <a href="http://www.microsoft.com/visualstudio/11/es-es">Visual Studio 2012</a>, <a href="http://www.microsoft.com/expression/products/Blend_Overview.aspx">Blend for Visual Studio</a><br />

En Genbeta Dev | <a href="http://www.genbetadev.com/tag/programar-aplicaciones-metro-windows-8">Programar aplicaciones Metro en Windows 8</a></p>

	<p><p><div class="nota"></p>

	<p>	<p>	</p><p><img alt="Avatar de Javier Holguera" width="80" src="http://img.genbetadev.com/2012/07/FotoTwitter.png" class="derecha"/></p>Javier Holguera es desarrollador en Payvision y lleva más de 5 años trabajando con tecnologías de Microsoft en una gran variedad de proyectos. <br />

</p>

<p>Es especialista en metodologías ágiles y en estándares web relacionado con HTML5. Es miembro activo de la comunidad .NET a través de <span class="caps"></span><span class="caps"><span class="caps"><span class="caps">MADNUG</span></span></span> y colabora con medios como DotNetMania, PC Actual o Desarrolloweb.com.</p>

	<p>	<p>	</p><p>Puedes seguirle en Twitter: <a href="http://twitter.com/javierholguera">@javierholguera</a> o en su blog: <a href="http://javierholguera.com">javierholguera.com</a><br />
</p>

	<p></p><br />

</div></p></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Programar aplicaciones Metro de Windows 8: ciclo de vida]]></title>
      <link>http://www.genbetadev.com/cnet/programar-aplicaciones-metro-de-windows-8-ciclo-de-vida</link>
      <guid>http://www.genbetadev.com/cnet/programar-aplicaciones-metro-de-windows-8-ciclo-de-vida</guid>
      <pubDate>Mon, 13 Aug 2012 14:10:28 +0000</pubDate>

      <author>Javier Holguera</author>
      <description><![CDATA[
      <p><img alt="Ciclo de vida de aplicaciones Metro Windows 8" src="http://img.genbetadev.com/2012/08/650_1000_Figura 09 - Ciclo de vida.jpg" class="centro_sinmarco" /></p>

	<p>El <strong>ciclo de vida</strong> de las <strong>Aplicaciones Metro</strong> es bastante distinto al que ha existido en las aplicaciones en Windows hasta ahora. Si en aplicaciones clásicas tenemos, fundamentalmente, dos estados consistentes en ejecución y cierre de la aplicación, en las Aplicaciones Metro <strong>vamos a tener varios estados extra</strong>, como se puede ver en la imagen.</p>

	<p>Veamos cómo vamos a pasar de unos a los otros y qué condiciones se tienen que cumplir en cada caso.</p>

	<p><!--more--></p>

<h2>Activación (Activated)</h2>

	<p>Para que se produzca una activación la aplicación debe estar en un estado de no ejecución. Este estado se produce, por ejemplo, cuando se acaba de instalar, cuando la máquina acaba de arrancarse o tras producirse una terminación (como veremos en un punto más adelante).</p>

	<p>La <strong>activación puede producirse por varias circunstancias</strong>, como su lanzamiento a través del tile de la aplicación en la pantalla Start, o a través de la implementación de contratos como Search, File Picker, Share, etc. (veremos más sobre ello en próximos puntos). En todos los casos el resultado es el mismo, Windows activa la aplicación y ejecuta su código de carga.</p>

	<p>En ese momento la aplicación tendrá 15 segundos para completar su activación. En caso de no hacerlo <strong>Windows matará la aplicación</strong>, evitando que el usuario espere indefinidamente delante de la pantalla inicial. De este modo cada desarrollador sabe que, por diseño, su aplicación tiene que ser rápida al cargarse, evitando “abusos” frente al usuario en forma de esperas indefinidas.</p>

<h2>Suspensión (Suspending)</h2>

	<p>Las Aplicaciones Metro se ejecutan siempre a pantalla completa y Windows les cede todos los recursos que puedan necesitar. Sin embargo, en el momento en que el <strong>usuario cambia a otra aplicación</strong>, se produce el proceso de suspensión.</p>

	<p>Durante este proceso Windows espera unos segundos como margen por si el usuario decide volver a la aplicación, evitando una suspensión innecesaria. Pasado ese tiempo se envía la señal correspondiente para que la aplicación ejecute el manejador para el evento Suspending, si se ha implementado.</p>

	<p>Una vez invocado el manejador, la aplicación tendrá <strong>5 segundos para guardar su estado</strong>, pues de lo contrario Windows la matará también. Las aplicaciones suspendidas pasan a memoria y pierden el acceso a otros recursos como <span class="caps"><span class="caps">CPU</span></span> o disco. Sin embargo, en situaciones en que el sistema se encuentre escaso de memoria, Windows 8 se encargará de ir descargando las aplicaciones suspendidas de memoria.</p>

	<p>Por esta razón es necesario que toda aplicación guarde su estado en este punto del ciclo de vida, puesto que no hay garantía de permanecer indefinidamente en memoria y, en caso de ser descargada, Windows no envía ninguna señal. En definitiva, el evento de suspensión es la <strong>última oportunidad que tiene la aplicación de guardar su estado.</strong></p>

<h2>Reactivación (Resuming)</h2>

	<p>Equivalente al evento de suspensión, pero para aplicaciones que ya están suspendidas. <strong>Permitirá a la aplicación “refrescarse” antes de mostrarse al usuario</strong>, en el momento en que vuelva a primer plano.</p>

	<p>Este evento es muy importante si queremos cumplir uno de los principios de la Aplicaciones Metro: mostrarse frente al usuario como si siempre estuvieran vivas. Gestionando correctamente los eventos de suspensión y reactivación, el usuario va a tener la <strong>sensación de que la aplicación nunca ha dejado de ejecutarse</strong>.</p>

	<p>Por último, es importante tener en cuenta que la suspensión puede haber durado minutos u horas, por lo que es importante recargar cualquier información o recurso que pueda haber quedado obsoleta, como por ejemplo el estado de la red. </p>

<h2>Terminación</h2>

	<p>Este evento se produce bajo varias circunstancias, como por ejemplo si el sistema entra en un <strong>estado de carencia de recursos o si el usuario cierra la aplicación</strong> explícitamente. Como comentábamos antes, la aplicación no recibirá ninguna clase de señal o notificación para ejecutar acción alguna. Simplemente se la eliminará de la memoria.</p>

	<p>En general las aplicaciones no pueden cerrarse a sí misma, salvo bajo circunstancias muy determinadas, como detección de fugas de memoria o problemas similares. Además, está prohibido que una aplicación ofrezca al usuario un mecanismo para cerrarse; impide su aprobación en Windows Store.</p>

	<p>En Genbeta Dev | <a href="http://www.genbetadev.com/tag/programar-aplicaciones-metro-windows-8">Programar aplicaciones Metro en Windows 8</a></p>

	<p><p><div class="nota"></p>

	<p>	<p>	</p><p><img alt="Avatar de Javier Holguera" width="80" src="http://img.genbetadev.com/2012/07/FotoTwitter.png" class="derecha"/></p>Javier Holguera es desarrollador en Payvision y lleva más de 5 años trabajando con tecnologías de Microsoft en una gran variedad de proyectos. <br />

</p>

<p>Es especialista en metodologías ágiles y en estándares web relacionado con HTML5. Es miembro activo de la comunidad .NET a través de <span class="caps"></span><span class="caps"><span class="caps"><span class="caps">MADNUG</span></span></span> y colabora con medios como DotNetMania, PC Actual o Desarrolloweb.com.</p>

	<p>	<p>	</p><p>Puedes seguirle en Twitter: <a href="http://twitter.com/javierholguera">@javierholguera</a> o en su blog: <a href="http://javierholguera.com">javierholguera.com</a><br />
</p>

	<p></p><br />

</div></p></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Cliente oficial de GitHub para Windows]]></title>
      <link>http://www.genbetadev.com/sistemas-de-control-de-versiones/ciente-oficial-de-github-para-windows</link>
      <guid>http://www.genbetadev.com/sistemas-de-control-de-versiones/ciente-oficial-de-github-para-windows</guid>
      <pubDate>Sun, 27 May 2012 12:55:33 +0000</pubDate>

      <author>Txema Rodríguez</author>
      <description><![CDATA[
      <p><img alt="github para windows" src="http://img.genbetadev.com/2012/05/650_1000_clone-in-windows-button.png" class="centro" /></p>

	<p><strong>GitHub for Windows</strong> es un cliente 100% nativo que se ejecuta en Windows XP, Vista, 7 y 8. El lanzamiento de esta herramienta viene a cubrir la necesidad de simplificar la barrera de entrada que suponía Git para muchos de los usuarios de Windows que usan los repositorios de GitHub, según cifras de la compañía representan alrededor de la mitad del tráfico de la web. </p>

	<p>Quizás muchos nos vemos obligados en nuestros lugares de trabajo a utilizar entornos windows por lo que este cliente nos va a facilitar algunas de <strong>las acciones más comunes desde su interfaz gráfica</strong> con los repositorios Git, tanto locales como los alojados en GitHub.</p>

	<p><!--more--></p>

<h2>Funcionalidades sobre repositorios Git locales y remotos</h2>

	<p>Lo que más llama la atención es botón <strong>“Clone in Windows”</strong> que a partir de ahora nos encontraremos en todos los proyectos de GitHub, por supuesto cuando usemos un ordenador con Windows. Este botón nos permitirá clonar repositorios directamente desde la propia aplicación.</p>

	<p>La aplicación está diseñada usando la interfaz Metro de Windows. Nada más instalarla nos pedirá nuestro usuario de <strong>Github</strong> con lo que nos permitirá consultar y realizar las acciones más comunes sobre los repositorios que tengamos alojados o estemos siguiendo en <strong>GitHub</strong>. Tanto buscar y checkear branches, crear y publicar branches, hacer merge o borrarlos. </p>

	<p>Además buscará en nuestro equipo los repositorios locales de Git que podremos administrar desde allí también y si queremos subir a GitHub fácilmente.</p>

<h2>Implementación del cliente Windows de GitHub</h2>

	<p>La aplicación está <strong>desarrollada en C# y ha usado una gran variedad de proyectos open source</strong> para crear una herramienta sencilla para administrar nuestros repositorios den GitHub. Entre ellos se encuentre <a href="https://github.com/libgit2/libgit2">libgit2</a> que proporciona un clara y potente <span class="caps">API</span> para interactuar con repositorios Git, <a href="https://github.com/msysgit/msysgit">msysGit</a> que es una poderosa herramienta para gestionar Git desde línea de comandos que incluye por debajo la aplicación, además de la poderosa shell desarrollada por Keith Dahlby conocida como <a href="https://github.com/dahlbyk/posh-git">posh-git</a>. Y como no podía faltar hace uso de la <a href="http://developer.github.com/"><span class="caps">API</span> de GitHub v3</a> que podemos encontrar en su página de desarrolladores.</p>

	<p>Más información | <a href="http://windows.github.com/">GitHub para Windows</a><br />
Vía | <a href="http://windows.github.com/">GitHub Blog</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Api de World of Warcraft, manipular un servicio Json ]]></title>
      <link>http://www.genbetadev.com/cnet/api-de-world-of-warcraft-manipular-un-servicio-json</link>
      <guid>http://www.genbetadev.com/cnet/api-de-world-of-warcraft-manipular-un-servicio-json</guid>
      <pubDate>Mon, 21 May 2012 06:00:00 +0000</pubDate>

      <author>Juan Quijano</author>
      <description><![CDATA[
      <p><img alt="De Wow a Wp7 con Json" src="http://img.genbetadev.com/2012/05/WowToWp7-1.jpg" class="centro" /></p>

	<p>World of Warcraft, el exitoso mundo persistente de Blizzard, <strong>con sus más de 11 millones de jugadores</strong>, se ha convertido en el modelo a seguir para cualquier <span class="caps">MMO</span>.</p>

	<p>En el <a href="http://www.genbetadev.com/cnet/api-de-world-of-warcraft-consumir-un-servicio-json">artículo anterior</a> de esta mini serie, hice un ejemplo de invocar a un servicio <span class="caps">REST</span> que transmite información en Json. De una forma asíncrona, en C#, construí dos métodos que me devolvían los datos de forma bruta.</p>

	<p>Ahora voy a mostrar cómo resolví el cargar los datos en mi aplicación. <strong>Parseando la cadena Json y utilizando una librería</strong> gratuita muy útil para realizar estas operaciones de forma muy sencilla.</p>

	<p><!--more--></p>

	<p><h2>Creando  estructuras</h2><br />
Quiero hacer <strong>la recuperación de un personaje del WoW y de sus estadísticas principales</strong>. Mirando la documentación de la <span class="caps">API</span> veo que la llamada podría ser algo tal que así,</p>

<pre class="prettyprint lang-csh"><br />

string uri = &#8220;http://eu.battle.net/api/wow/character/los-errantes/bendemfalar?fields=stats&#8221;;<br />

</pre>

	<p>Osea, me traigo del reino “<em>Los Errantes</em>”, el personaje “<em>Bendemfalar</em>” y sus estadísticas. Pero, claro, <strong>esta información me va a llegar en bruto</strong> y lo que yo quiero es guardarla para poder ser utilizada más adelante. Para lo cual me hago dos clases que van a adoptar el papel de <span class="caps">POCO</span>; es decir, meros repositorios de información.</p>

<pre class="prettyprint lang-csh">
    public class Personaje<br />

    {<br />

        public double lastModified { get; set; }<br />

        public String name { get; set; }<br />

        public String realm { get; set; }<br />

        public int Clase { get; set; }<br />

        public int gender { get; set; }<br />

        public int level { get; set; }<br />

        public int achievementPoints { get; set; }<br />

    }<br />

<br />

    public class Estadistica<br />

    {<br />

        public double health { get; set; }<br />

        public string powerType { get; set; }<br />

        public double power { get; set; }<br />

        public double str { get; set; }<br />

        public double agi { get; set; }<br />

        public double sta { get; set; }<br />

        public double intelecto { get; set; }<br />

    }<br />

</pre>

	<p>He modificado ambas clases para hacerlas más pequeñas y útiles para este ejemplo. Y ya tengo los objetos en donde almacenaré la información.</p>

	<p>Pero, como soy un vago, rápidamente me doy cuenta que voy a necesitar una clase que contenga las dos anteriores para que me sea más sencillo mover la información.</p>

<pre class="prettyprint lang-csh">
    public class DatosPersonaje<br />

    {<br />

        public Personaje Personaje { get; set; }<br />

        public Estadistica Estadistica { get; set; }<br />

    }<br />

</pre>

	<p><h2>Json.Net</h2><br />
Lo malo de trabajar con Json es que <strong>su manipulación es ardua</strong>. Mucho menos que si fuera xml, pero sigue siendo bastante tostón.</p>

	<p><img alt="Json en bruto" src="http://img.genbetadev.com/2012/05/bendemfalarjson.jpg" class="centro_sinmarco" /></p>

	<p>Por suerte en CodePlex, existe un fantástico proyecto que trata justamente de una librería de facilita en gran medida el trabajo de manipulación de este formato: </p>

	<p><strong>Json.Net</strong> de @JamesNK</p>

	<p>Siguiendo los consejos del sitio CodePlex, <strong>instalo la librería, por medio de NuGet,</strong> directamente en el proyecto WP7 en donde estoy escribiendo esta práctica. Y creo una clase específica que tenga la responsabilidad de parsear la cadena de información y cargarla en la clase adecuada.</p>

<pre class="prettyprint lang-csh">
using Newtonsoft.Json;<br />

using Newtonsoft.Json.Linq;<br />

<br />

namespace Model<br />

{<br />

    public class GestorDeJson<br />

    {<br />

        public DatosPersonaje RecuperaDatosPersonaje(string jSonString)<br />

        {<br />

            DatosPersonaje datosPersonaje = new DatosPersonaje();<br />

            JObject jPersonaje = JObject.Parse(jSonString);<br />

<br />

            datosPersonaje.Personaje = JsonConvert.DeserializeObject<Personaje>(jPersonaje.ToString());<br />

            datosPersonaje.Personaje.Clase = (int)jPersonaje.SelectToken(&#8220;class&#8221;);<br />

<br />

            datosPersonaje.Estadistica =<br />

                JsonConvert.DeserializeObject<Estadistica>(jPersonaje.SelectToken(&#8220;stats&#8221;).ToString());<br />

            datosPersonaje.Estadistica.intelecto = (int)jPersonaje.SelectToken(&#8220;stats.int&#8221;);<br />

<br />

            return datosPersonaje;<br />

        }<br />

    }<br />

}<br />

</pre>

	<p>Como has visto, <strong>esta librería es una pequeña maravilla, y una auténtica joya</strong>.  Voy a analizar cada fila importante para aclarar un poco más lo que he escrito.</p>

<pre class="prettyprint lang-csh">
DatosPersonaje datosPersonaje = new DatosPersonaje();<br />

JObject jPersonaje = JObject.Parse(jSonString);<br />

</pre>

	<p>Como se puede ver, primero instancio un objeto del tipo Datos del Personaje, y justo debajo instancio un objeto <em>JObject</em>, que es de la librería, y le asigno el contenido de la cadena Json que he recogido en el <a href="http://www.genbetadev.com/cnet/api-de-world-of-warcraft-consumir-un-servicio-json">artículo anterior</a>, parseado.</p>

<pre class="prettyprint lang-csh">
datosPersonaje.Personaje = JsonConvert.DeserializeObject<Personaje>(jPersonaje.ToString());
</pre>

	<p><strong>Esta línea es magia pura</strong>. Lo que hace aquí es deserializar el objeto JObject y convertirlo en un objeto Personaje (que es uno de los dos que almaceno en DatosPersonaje). ¿Y cómo sabe Json.Net que campo va en donde? Pues comparando la clave de Json (“name:Bendemfalar”) con la propiedad de la Clase.</p>

<pre class="prettyprint lang-csh">
datosPersonaje.Personaje.Clase = (int)jPersonaje.SelectToken(&#8220;class&#8221;);
</pre>

	<p>Esta última línea es la que he utilizado para <strong>cuando el nombre del campo Json es una palabra reservada en C#</strong>, como es el caso de Class. No puedo declarar una propiedad de Personaje como Class. Por lo cual debo coger el objeto JObject y seleccionar el campo que quiero transferir a mi clase.</p>

	<p>Y, exactamente lo mismo hago con la información de estadísticas.</p>

	<p>Investigar lo que ahora puedes hacer con esta información, <strong>te lo dejo a ti</strong>.</p>

	<p>Más información | <a href="http://blizzard.github.com/api-wow-docs/">Blizzard Community Platform <span class="caps"><span class="caps">API</span></span> Documentation</a>, <a href="http://json.codeplex.com/">Json.net</a> <br />
En GenbetaDev | <a href="http://www.genbetadev.com/cnet/api-de-world-of-warcraft-consumir-un-servicio-json">Api de World of Warcraft, consumir un servicio Json</a>  <a href="http://www.genbetadev.com/desarrollo-web/como-hacer-un-escaner-para-twitter" title="">Cómo hacer un escaner para Twitter</a></p></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Api de World of Warcraft, consumir un servicio Json]]></title>
      <link>http://www.genbetadev.com/cnet/api-de-world-of-warcraft-consumir-un-servicio-json</link>
      <guid>http://www.genbetadev.com/cnet/api-de-world-of-warcraft-consumir-un-servicio-json</guid>
      <pubDate>Sun, 20 May 2012 08:31:45 +0000</pubDate>

      <author>Juan Quijano</author>
      <description><![CDATA[
      <p><img alt="De Wow a Wp7" src="http://img.genbetadev.com/2012/05/WowToWp7.jpg" class="centro" /></p>

	<p>World of Warcraft, el exitoso mundo persistente de Blizzard, con <strong>sus más de 11 millones de jugadores</strong>, se ha convertido en el modelo a seguir para cualquier <span class="caps"><span class="caps">MMO</span></span>.</p>

	<p>Su política cercana al Software Libre, en el desarrollo de extensiones para la UI del juego, <strong>ha incentivado la creación de cientos de AddOn</strong> de todo tipo de mejoras y ayudas. Cubriendo los más insospechados nichos.</p>

	<p>Para ello Blizzard, basado en el lenguaje de programación <span class="caps"><span class="caps">LUA</span></span>, ofrece a los desarrolladores una impresionante <span class="caps"><span class="caps">API</span></span> para el desarrollo en el propio juego. <strong>Y una sencilla <span class="caps"><span class="caps">API</span></span> Rest, que devuelve mensajes en formato Json</strong>. Que es la que voy a utilizar para realizar el ejemplo de lo que trata este post.<br />

<!--more--><br />

<h2>Tecnología y herramientas</h2><br />

Voy a utilizar como lenguaje de programación C#. Y para el  tratamiento de los mensajes <span class="caps"><span class="caps">JSON</span></span>, una librería open source llamada Json.Net, que es una maravilla. Pero para hacer la cosa más compleja, en vez de hacer el clásico ejemplo para consola o para webform, <strong>voy a construir el código para Windows phone 7</strong>. Lo cual implica que todas las llamadas al <span class="caps"><span class="caps">API</span></span> Rest, deberán ser <strong>asíncronas</strong>.</p>

	<p>Como buen programador .NET, mi <span class="caps"><span class="caps">IDE</span></span> es Visual Studio. En este caso la versión 2010 con el <span class="caps"><span class="caps">SDK</span></span> de desarrollo de Windows Phone 7.5. Que tiene, a mi parecer, uno de los mejores emuladores de dispositivo móvil posibles.</p>

	<p><h2><span class="caps"><span class="caps">API</span></span> Battlet.net</h2><br />

<img alt="Estadísticas" src="http://img.genbetadev.com/2012/05/estadísticas.jpg" class="centro" /></p>

	<p>Aunque parezca una perogrullada, lo primero que hago cuando me enfrento a un nuevo <span class="caps"><span class="caps">API</span></span>, <strong>es leerme su documentación</strong> y realizar los ejemplos. Así con escribir en mi navegador,</p>

	<p><a href="http://eu.battle.net/api/wow/realm/status">http://eu.battle.net/api/wow/realm/status</a>	</p>

	<p>Obtengo una respuesta codificada en Json con mucha información sobre el estado de los reinos del juego de Europa. Y, leyendo el resto de la descripción del <span class="caps"><span class="caps">API</span></span>, me hago consciente de que <strong>tengo acceso de una forma fácil y sencilla</strong> a un gran volumen de datos de mi juego favorito.</p>

	<p>Otra cosa que hay que tener en cuenta cuando desarrollo con una <span class="caps"><span class="caps">API</span></span> de terceros, <strong>son las condiciones de uso</strong>. Cuando, como y si hay que pagar. Y que puedes y no puedes hacer si quieres utilizar la herramienta.</p>

	<p>En este caso Blizzard utiliza un modelo similar al de Software Libre. Es decir, el código debe estar visible; <strong>no puedes ganar dinero de ninguna forma (ni directa, ni indirectamente)</strong>, si la aplicación utiliza los servicios del <span class="caps"><span class="caps">API</span></span>; no puedes utilizar los nombres, gráficos y colores de Blizzard; y, curioso, te recuerda que desarrollar con esta <span class="caps"><span class="caps">API</span></span> no significa que  tengas un acuerdo o contrato con ellos.</p>

	<p><h2>Llamadas asíncronas</h2><br />

Como comenté al inicio del artículo, el ejemplo lo he realizado para funcionar en un Windows Phone 7, lo cual me obliga a tener que hacer una llamada asíncrona al servicio, para recuperar el contenido en Json.</p>

	<p>Esto implica que primero voy a realizar la petición a la url y, en vez de quedarme esperando la devolución de datos, espero que se lance el evento que me avisa que se ha completado la operación.</p>

	<p>	<p><pre class="prettyprint lang-csh"><br />

private void GetPersonaje()<br />
</p>

	<p>{<br />
</p>

  string uri = http://eu.battle.net/api/wow/character/los-errantes/bendemfalar;<br />


<br />


  var webclient = new WebClient();<br />


  webclient.DownloadStringCompleted += OnDownloadStringCompleted;<br />


  webclient.DownloadStringAsync(new Uri(uri));<br />


	<p>}<br />

</p></p>

	<p>	<p>private void OnDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)<br />
</p>

	<p>{<br />
</p>

  // GestorDeJson lectorJSon = new GestorDeJson();<br />


  // lectorJSon.RecuperaDatosPersonaje(e.Result);<br />


	<p>}<br />

</pre></p></p>

	<p>Aunque del primer vistazo parece complejo, realmente no lo es. Voy a desglosarlo para que sea más fácil de entender.</p>

	<p>Lo primero que declaro es la url que voy a invocar para obtener la información.</p>

	<p><pre class="prettyprint lang-csh"><br />

string uri = http://eu.battle.net/api/wow/character/los-errantes/bendemfalar;<br />

</pre><br />

WebClient() es una clase que encapsula un cliente web completo. Sería más correcto utilizar httpWebRequest, pero es más complejo para este ejercicio.</p>

	<p><pre class="prettyprint lang-csh"><br />

var webclient = new WebClient();<br />

</pre><br />

A continuación le digo a webclient el método que debe de lanzar cuando se haya completado la operación. Recuerda que es asíncrona, así no tendré que detener la aplicación a la espera del resultado.</p>

	<p><pre class="prettyprint lang-csh"><br />

webclient.DownloadStringCompleted += OnDownloadStringCompleted;<br />

</pre><br />

Y entonces lanzo el método de carga asíncrona del WebClient, pasándole la url por parámetro. Completando la operación en cuanto construya el método que he suscrito al  evento.</p>

	<p><pre class="prettyprint lang-csh"><br />

webclient.DownloadStringAsync(new Uri(uri));<br />

</pre><br />

Cualquiera que haya trabajado con asp.net, encontrará muy conocida esta firma de método. Y familiar la forma de trabajar con el. En este caso,  he construido una clase que va a gestionar el documento Json, y en donde voy a invocar el método que va a tratar y cargar los datos en los objetos.</p>

	<p><pre class="prettyprint lang-csh"><br />
private void OnDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)<br />
</p>

	<p>{<br />
</p>

   GestorDeJson lectorJSon = new GestorDeJson();<br />


   lectorJSon.RecuperaDatosPersonaje(e.Result);<br />


	<p>}<br />
</pre></p>

	<p>Más información | <a href="http://blizzard.github.com/api-wow-docs/">Blizzard Community Platform <span class="caps"><span class="caps">API</span></span> Documentation</a>, <a href="http://msdn.microsoft.com/es-es/library/system.net.webclient(v=vs.100).aspx">WebClient</a><br />

En GenbetaDevv | <a href="http://www.genbetadev.com/desarrollo-web/como-hacer-un-escaner-para-twitter" title="">Cómo hacer un escaner para Twitter</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Sobrecargando los métodos en C#]]></title>
      <link>http://www.genbetadev.com/cnet/sobrecargando-los-metodos-en-c</link>
      <guid>http://www.genbetadev.com/cnet/sobrecargando-los-metodos-en-c</guid>
      <pubDate>Mon, 14 May 2012 06:00:00 +0000</pubDate>

      <author>Juan Quijano</author>
      <description><![CDATA[
      <p><img alt="Sobrecargas de métodos" src="http://img.genbetadev.com/2012/05/sobrecargas.jpg" class="centro" /></p>

	<p>Los lenguajes, como casi todo en este universo que tiende a la entropía, van evolucionando y ganando complejidad con el tiempo. Así nos encontramos con la paradoja de que <b>cuanto más completa es la sintaxis, más ilegible</b> se puede volver el código.</p>

	<p>Por ejemplo, la máxima que decía “<i>escribe la menor cantidad de código, que vaya lo más rápido posible</i>”, tiene un orden de prioridad menor  frente a paradigmas de programación más modernos como <strong>Clean Code o <span class="caps"><span class="caps">KISS</span></span></strong>.</p>

	<p>Por ello ahora quiero compartir <b>una técnica para facilitar la legibilidad</b> de nuestros programas y que trata de la sobrecarga de los métodos.<br />

<!--more--><br />

<h2>Qué es sobrecargar</h2><br />

Según <span class="caps"><span class="caps">MSDN</span></span>, “<em>La sobrecarga consiste en crear más de un procedimiento, constructor de instancia o propiedad en una clase con el mismo nombre y distintos tipos de argumento</em>”. Lo cual, sin un buen ejemplo, es un tanto confuso.</p>

	<p>Me pongo manos a la obra, creo un proyecto de consola y, en el inicio del programa, hago que escriba por consola el resultado de un método llamado <em>suma()</em>.<br />

<pre class="prettyprint lang-csh"><br />

using System;<br />

namespace GenbetaDevConsola<br/><br />

{<br/>
    class Program<br/>
    {<br/>
        static void Main(string[] args)<br/>
        {<br/>
            System.Console.Write(suma(1, 1));<br/>
        }<br/>
    }<br/><br />

}<br />

</pre><br />

Obviamente debo escribir el método, tal que así:<br />

<pre class="prettyprint lang-csh"><br />

private int suma(int numero1, int numero2)<br/><br />

{<br/>
  return numero1 + numero2;<br/><br />

}<br />

</pre><br />

Pero, ¿si me encuentro con que los números no son enteros si no que son más grandes?</p>

	<p>Tengo dos opciones. Una sería crear un nuevo método que se llame algo como <em>sumaDouble()</em> y que tenga dos números <em>doubles</em> por parámetros. La otra opción <strong>es sobrecargar el método suma con nuevos parámetros</strong>, pudiéndolo utilizar indistintamente en un caso o en el otro.<br />

<pre class="prettyprint lang-csh"><br />

private int suma(double numero1, double numero2)<br/><br />

{<br/>
  int numero = 0;<br/>
  Int32.TryParse((numero1 + numero2).ToString(),out numero);<br/>
  return numero;<br/><br />

}<br />

</pre><br />

Lo mejor es que Intellisense del Visual Studio me ayuda y me indica que el método <em>suma()</em> está sobrecargado y me ofrece ver la firma de cada una de ellas.</p>

	<p><img alt="intellisense" src="http://img.genbetadev.com/2012/05/intellisense.jpg" class="centro" /></p>

	<p>Es más, puedo ir añadiendo complejidad a mi método suma  aceptando más parámetros y de diferente tipo como, por ejemplo, poder sumar tres cantidades o hacer sumas booleanas.<br />

<pre class="prettyprint lang-csh"><br />

private static int suma(int numero1, int numero2, int numero3)<br/><br />

{<br/>
  return numero1 + numero2 &#8211; numero3;<br/><br />

}<br/></p>

	<p>private static int suma(Boolean numero1, Boolean numero2)<br/><br />

{<br/>
  return numero1 == numero2? 1 : 0;<br/><br />

}<br />

</pre><br />

<span class="caps"><span class="caps">NOTA</span></span>: Lo que he utilizado en la suma Booleana <strong>es una forma compacta de un condicional</strong>. Si se cumple la igualdad, devuelvo 1. Si no, devuelvo 0. No es muy legible y conozco alguno que decía que esto era “<em>evil</em>”. Pero es muy útil.</p>

	<p>Fíjate que lo importante de utilizar sobrecargas, es que encapsulo el funcionamiento de los métodos de forma que siempre llamo a <em>suma()</em>, y solo me debo preocupar de cumplimentar correctamente alguna de sus posibles firmas.</p>

	<p>Por cierto, por si alguno desconoce el concepto de firma, <span class="caps"><span class="caps">MSDN</span></span> dice: <br />

<blockquote>Los métodos se declaran en una clase o struct mediante la especificación del nivel de acceso como public o private, modificadores opcionales como abstract o sealed, el valor devuelto, el nombre del método y cualquier parámetro de método.Todos esos elementos constituyen la firma del método.</blockquote></p>

	<p><h2>Mejorando las sobrecargas</h2><br />

Pero C# sigue adelante en su evolución (realmente todo .NET) <strong>y a partir de la versión 4.0 tengo tres novedades</strong> que me han llamado mucho la atención por su utilidad.</p>

	<p>Puedo declarar un método y ponerle por defecto un valor a cada uno de sus parámetros. Por ejemplo <strong>si quiero calcular la hipotenusa</strong> puedo crear un método tal cual,<br />

<pre class="prettyprint lang-csh"><br />

public static double calculaHipotenusa<br/>
                                      (<br/>
                                        double cateto1 = 100,<br/>
                                        double cateto2 = 100,<br/>
                                        double hipotenusa = 0<br/>         
                                       )<br/><br />

{ <br/>
  return Math.Sqrt(Math.Pow(cateto1,2) + Math.Pow(cateto1,2));<br/><br />

}<br />

</pre><br />

Así puedo llamar a este método de diferentes formas de acuerdo a los datos que tenga, sin tener que rellenar obligatoriamente todos los parámetros.<br />

<pre class="prettyprint lang-csh"><br />

static void Main(string[] args)<br/><br />

{<br/>
  System.Console.Write(calculaHipotenusa());<br/>
  System.Console.Write(calculaHipotenusa(100));<br/>
  System.Console.Write(calculaHipotenusa(100, 50));<br/>
  System.Console.Write(calculaHipotenusa(cateto2:50));<br/><br />

}<br />

</pre></p>

	<p>Ahora fíjate en la última forma de llamar al método. Estoy introduciendo <strong>el nombre del parámetro que quiero cargar</strong>. Esto, que parece trivial, nos alivia de tener que construir un método sobrecargado para cada una de las firmas. Y tampoco debemos de invocar el método con todos sus parámetros, ya que solamente remito los que quiero enviándolos por su nombre.</p>

	<p>Por último, y <strong>si tienes ganas de jugar más fuerte, te puedes meter en la sobrecarga de operadores</strong>. Es decir, darle comportamientos particulares y específicos a cosas como +, -, =, etc. Así puedo hacer una suma directa de valores booleanos en una clase sin tener que construir un método con esa firma. </p>

	<p>Pero esto yo no lo he utilizado nunca y no encuentro ahora mismo donde aplicarlo.</p>

	<p>Más información | <a href="http://msdn.microsoft.com/es-es/library/ms173114.aspx">Métodos (Guía de programación de C#)</a>, <a href="http://msdn.microsoft.com/es-es/magazine/ff796223.aspx">Nuevas características de C# en .NET Framework 4</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[No te lo vas a creer, el Goto aún existe en C#]]></title>
      <link>http://www.genbetadev.com/cnet/no-te-lo-vas-a-creer-el-goto-aun-existe-en-c</link>
      <guid>http://www.genbetadev.com/cnet/no-te-lo-vas-a-creer-el-goto-aun-existe-en-c</guid>
      <pubDate>Fri, 11 May 2012 15:25:43 +0000</pubDate>

      <author>Juan Quijano</author>
      <description><![CDATA[
      <p><img alt="Portada" src="http://img.genbetadev.com/2012/05/gotoPortada.jpg" class="centro" /></p>

	<p>Tengo que reconocer que Twiter se ha convertido en <strong>una fuente de información sorprendente</strong>. Como leí en algún sitio &#8220;<em>desde que existe twiter, siempre leo en el periódico noticias antiguas</em>&#8220;.</p>

	<p>Esto viene al caso al llegarme por este medio un rumor que, al principio, no me podía creer. El rey del &#8220;<em>spaguetti code</em>&#8220;, el causante de inmenso dolor en los tiempos del <span class="caps"><span class="caps">GWBASIC</span></span>, el paradigma de lo que no se tiene que utilizar; <strong>aún vive</strong>.</p>

	<p>Y estoy hablando de <strong>la sentencia de salto absoluto <span class="caps"><span class="caps">GOTO</span></span></strong>.<br />

<!--more--><br />

Lo que parecía una broma, me ha llevado a la página de <span class="caps"><span class="caps">MSDN</span></span>, en donde he leído boquiabierto que no solamente no es un recuerdo lejano de un pasado secuencial, <strong>si no que se sigue implementado en .NET.</strong></p>

	<p>Y para comprobar que funciona, traigo un ejemplo escrito en C# con Visual Studio 11 beta. Lo cual significa que <strong>en el novísimo framework 4.5, aún se puede utilizar</strong>. </p>

<pre class="prettyprint lang-csh">
int numero = 0;
int suma = 0;
switch (numero)<br/>
  {<br/>
    case 1:<br/>
      suma += 20;<br/>
      break;<br/>
    case 2:<br/>
      suma += 30;<br/>
      goto case 1;<br/>
    case 3:<br/>
      suma += 50;<br/>
      goto case 1;<br/>
    default:<br/>
      suma = 0;<br/>
      break;<br/>
  }
</pre>

	<p><strong>Me he quedado sin palabras&#8230;</strong></p>

	<p>Más información | <a href="http://msdn.microsoft.com/es-es/library/13940fs2(v=vs.100).aspx"><span class="caps"><span class="caps">MSDN</span></span>: goto (Referencia de C#)</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Se lanza XobotOS, un Android en .NET y C#]]></title>
      <link>http://www.genbetadev.com/cnet/se-lanza-xobotos-un-android-en-net-y-c</link>
      <guid>http://www.genbetadev.com/cnet/se-lanza-xobotos-un-android-en-net-y-c</guid>
      <pubDate>Sat, 05 May 2012 15:06:03 +0000</pubDate>

      <author>Fernando Siles</author>
      <description><![CDATA[
      <p><img alt="xobotos" src="http://img.genbetadev.com/2012/05/xobotos.jpg" class="centro" /></p>

	<p>Como es sabido, <strong>Android se basa en Java y Java pertenece a Oracle</strong>. <del>De momento no ha habido hostilidades pero siempre es posible que el belicoso Larry Ellison decida un día tirar de patentes y pedir dinero a espuertas</del> Y las previsibles hostilidades entre Google y Oracle van subiendo de tono cada semana. Por eso la <strong>migración de Android a otros cimientos</strong> es algo de lo que se viene hablando hace tiempo. Pues bien, ahora la gente de <strong>Xamarin ha portado el código en Java de Android a C#</strong> (con la herramienta <a href="http://community.versant.com/Projects/html/projectspaces/db4o_product_design/sharpen.html">Sharpen</a>) y lo han hecho correr sobre <strong>.NET</strong> pero no la implementación de de Microsoft sino sobre <strong>Mono</strong> (que la misma gente de Mono había creado antes de formar la empresa). Al resultado lo han <strong>XobotOS</strong>.</p>

	<p>Este XobotOS es tan sólo un <strong>proyecto de investigación que no va a ser continuado</strong> por la gente de Xamarin pero al ser software <strong>open source con una licencia Apache</strong>, es posible que alguien (incluso la propia Google) se aproveche del gran trabajo previo realizado (millones de líneas de código portadas) para sacar <strong>un sistema operativo Android completo sin ningún atisbo de Java</strong>.</p>

	<p>Pd: en Xamarin afirman que los resultados de este XobotOS son mejores que los de Java con <strong>Dalvik</strong> (el primo hermano de la <span class="caps"><span class="caps">JVM</span></span> de Google)</p>

	<p>Vía | <a href="http://arstechnica.com/open-source/news/2012/05/xamarin-releases-xobotos-the-net-powered-version-of-android.ars">Ars Technica</a><br />

Foto | Xamarin<br />

Más info | <a href="http://blog.xamarin.com/2012/05/01/android-in-c-sharp/">Xamarin</a><br />
Descarga | <a href="https://github.com/xamarin/XobotOS">Github</a></p>      ]]></description>
      </item>
        	  <atom:link href="http://www.genbetadev.com/categoria/cnet/rss2.xml" rel="self" type="application/rss+xml" />
	</channel>

</rss>


