<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Windows Phone y .NET</title>
	<atom:link href="http://tecnologia.rafaserna.es/feed/" rel="self" type="application/rss+xml" />
	<link>http://tecnologia.rafaserna.es</link>
	<description>Blog sobre tecnologia, programacion, y demas, enfocado a WP7 y Azure</description>
	<lastBuildDate>Sat, 16 Mar 2013 18:00:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Megathon 2013</title>
		<link>http://tecnologia.rafaserna.es/2013/03/16/megathon-2013/</link>
		<comments>http://tecnologia.rafaserna.es/2013/03/16/megathon-2013/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 18:00:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[Windows Phone 8]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2013/03/16/megathon-2013/</guid>
		<description><![CDATA[Un año más, vuelve el Hackathon multiciudad simultáneo. El Megathon, durante el fin de semana del 12 al 14 de abril. Este año se va a cambiar la dinámica del concurso. Por un lado se podrá desarrollar aplicaciones tanto para Windows 8 como para Windows Phone 8, los premios se incrementan, pero seguro que el [...]]]></description>
			<content:encoded><![CDATA[<p><img title="dn144953.Megathon2013(es-es,MSDN.10)" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="dn144953.Megathon2013(es-es,MSDN.10)" src="http://tecnologia.rafaserna.es/files/2013/03/dn144953.Megathon2013es-esMSDN.10.png" width="496" height="229" /></p>
<p>Un año más, vuelve el Hackathon multiciudad simultáneo. El Megathon, durante el fin de semana del 12 al 14 de abril.</p>
<p>Este año se va a cambiar la dinámica del concurso. Por un lado se podrá desarrollar aplicaciones tanto para Windows 8 como para Windows Phone 8, los premios se incrementan, pero seguro que el buen ambiente y el buen rollo durante todo el fin de semana se va a mantener respecto al pasado año.</p>
<p>Yo, en esta ocasión, tengo el gran honor de estar como mentor en la sede de Salamanca. Los chicos del club .NET de la universidad de Salamanca, USAL, han querido que este con ello intentando ayudar en todo lo que pueda. Eso sí, estoy convencido que los ganadores globales del Megathon este año saldrán de Salamanca. No os quepa duda!!!!!</p>
<p>Otra de las cosas que este año han cambiado ha sido la formación. Muchos opinaron que el pasado año, combinar la formación con el tiempo para desarrollar fue algo estresante. En muchas ocasiones los mentores se encontraron dando charlas al limbo ya que todo el personal estaba dale que te dale a programar, lo digo por experiencia. En esta ocasión los chicos de DPE España, han tenido la gran idea de realizar unas formaciones online, los días previos al megathon.</p>
<p>Por lo tanto entre el próximo día 20 de Marzo y el 11 de Abril podéis “disfrutar” de sesiones de formación tanto de programación en Windows 8, Windows Phone, Azure y Team Foundation Services.</p>
<p>Si queréis mas información, no dudéis en acudir a la web habilitada para tal efecto en la web de Microsoft España.</p>
<p align="center"><a href="http://www.microsoft.es/megathon"><font size="4">www.microsoft.es/megathon</font></a></p>
<p>Allí encontrareis las bases, las ciudades, recursos de formación, etc., etc.….</p>
<p>Nos vemos en el MEGATHON!!!!</p>
<p> <a style="border-top-style: none; border-left-style: none; border-top-color: #fff; border-bottom-style: none; border-bottom-color: #fff; border-right-style: none; text-decoration: none; border-right-color: #fff; border-left-color: #fff" href="http://msdn.microsoft.com/es-es/dn144953" target="_blank"><img title="Pie" style="display: block" border="0" alt="" src="http://www.microsoft.com/spain/msdn/windows8/pie-registro-hackathon.jpg" width="700" height="139" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2013/03/16/megathon-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trials en Windows Phone.</title>
		<link>http://tecnologia.rafaserna.es/2013/02/19/trials-en-windows-phone/</link>
		<comments>http://tecnologia.rafaserna.es/2013/02/19/trials-en-windows-phone/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 11:25:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[probar]]></category>
		<category><![CDATA[pruebas]]></category>
		<category><![CDATA[trial]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2013/02/19/trials-en-windows-phone/</guid>
		<description><![CDATA[Si, lo sé. Gestionar que nuestra aplicación tenga o no capacidad de prueba no deja de ser algo muy trivial. Pero, de cosas triviales siempre se aprende algo… Lo primero que debemos de hacer es controlar de alguna forma si nuestra aplicación esta en modo trial o no. Para ello usaremos la clase LicenseInformation contenida [...]]]></description>
			<content:encoded><![CDATA[<p>Si, lo sé. Gestionar que nuestra aplicación tenga o no capacidad de prueba no deja de ser algo muy trivial. Pero, de cosas triviales siempre se aprende algo…</p>
<p>Lo primero que debemos de hacer es controlar de alguna forma si nuestra aplicación esta en modo trial o no. Para ello usaremos la clase LicenseInformation contenida en el espacio de nombres Microsoft.Phone.MarketPlace.</p>
<p>Algún habido lector, habrá pensado, …..MarketPlace?, pero si eso suena a viejuno. Pues si, aunque con la aparición de Windows Phone 8 y el uso de WinRT existe un nuevo espacio de nombres para cualquier tipo de consulta relacionada con estos menesteres, concretamente Windows.ApplicationModel.Store, la clase LicenseInformation que deriva de dicho namespace no se puede usar en Windows Phone 7.x por lo que la mejor forma para hacer este trozo de código totalmente compatible tanto con Windows Phone 7.x como con Windows Phone 8, es usar la clase LicenseInformation de Microsoft.Phone.Marketplace.</p>
<p>Bueno, entonces está claro. Ahora, ¿cual debería de ser la mejor implementación?. Obviamente no quiero sentar cátedra pero siendo un poquito costosa, hablando de rendimiento, la labor de comprobar si nuestra aplicación es o no una versión de prueba. Lo suyo seria realizar esta consulta una sola vez y “archivar” esta información en algún lugar accesible.</p>
<p>Para ello, una de las mejores formas es disponer en nuestro fichero App.xaml.cs de una variable publica y estatica la cual implemente guarde dicha información.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">bool</span> isTrial;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">bool</span> IsTrial
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">   <span style="color: #0000ff">get</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">   {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">      <span style="color: #0000ff">return</span> isTrial;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">   }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Así mismo dispondremos de un procedimiento el cual comprobará mediante la clase LicenseInformation comentada anteriormente, si es o no, nuestra aplicación una versión de prueba. Le llamaremos por ejemplo CheckLicense.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> CheckLicense()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">   LicenseInformation license = <span style="color: #0000ff">new</span> Microsoft.Phone.Marketplace.LicenseInformation();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">   isTrial = license.IsTral();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Ok, perfecto. Simplemente implementamos la clase LicenseInformation y comprobamos su método isTrial, el cual nos devuelve un booleano indicándonos el estado.</p>
<p>Ahora debemos de lanzar en el lugar y momento correcto, el código anterior. Dos son los lugares en donde deberemos de lanzarlo. Por un lado el evento Launching de nuestra aplicación. De esta forma cada vez que lanzamos la aplicación comprobamos el valor. </p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> Application_Launching(<span style="color: #0000ff">object</span> sender, LaunchingEventArgs e)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    CheckLicense();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>El otro punto sería el evento Activated. ¿Para que?, si nuestra aplicación no va a cambiar su estado constantemente. Pues básicamente para poder controlar de forma correcta que se haya podido adquirir la aplicación de forma completa mediante un enlace colocado en nuestra aplicación o cuando nuestra aplicación esta suspendida. De esta manera al volver a activarla desde el estado de tombstoning recogemos el valor de forma correcta y actuamos en consecuencia.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> Application_Activated(<span style="color: #0000ff">object</span> sender, ActivatedEventArgs e)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    CheckLicense();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Perfecto ya tenemos controlado el acceso a la comprobación solamente en dos puntos, accediendo a la información en cualquier momento sin consumo de recurso alguno. </p>
<p>Vamos a plantear una pantalla muy sencilla la cual, recoja este valor y realice una serie de acciones.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid</span> <span style="color: #ff0000">Margin</span>=<span style="color: #0000ff">&quot;0,0,0,0&quot;</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid.RowDefinitions</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;</span><span style="color: #800000">RowDefinition</span> <span style="color: #ff0000">Height</span>=<span style="color: #0000ff">&quot;Auto&quot;</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">RowDefinition</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;</span><span style="color: #800000">RowDefinition</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">RowDefinition</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid.RowDefinitions</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span> <span style="color: #ff0000">Grid</span>.<span style="color: #ff0000">Row</span>=<span style="color: #0000ff">&quot;0&quot;</span> <span style="color: #ff0000">Text</span>=<span style="color: #0000ff">&quot;Trial version example&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">VerticalAlignment</span>=<span style="color: #0000ff">&quot;Top&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Margin</span>=<span style="color: #0000ff">&quot;12,12,0,12&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">FontSize</span>=<span style="color: #0000ff">&quot;42&quot;</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">&lt;/</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">&lt;</span><span style="color: #800000">StackPanel</span> <span style="color: #ff0000">Grid</span>.<span style="color: #ff0000">Row</span>=<span style="color: #0000ff">&quot;1&quot;</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;</span><span style="color: #800000">Button</span> <span style="color: #ff0000">Content</span>=<span style="color: #0000ff">&quot;action A&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Margin</span>=<span style="color: #0000ff">&quot;0,130,0,0&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">HorizontalAlignment</span>=<span style="color: #0000ff">&quot;Center&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Width</span>=<span style="color: #0000ff">&quot;350&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Command</span>=<span style="color: #0000ff">&quot;{Binding ActionACommand}&quot;</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Button</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;</span><span style="color: #800000">Button</span> <span style="color: #ff0000">Content</span>=<span style="color: #0000ff">&quot;action B&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">HorizontalAlignment</span>=<span style="color: #0000ff">&quot;Center&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Width</span>=<span style="color: #0000ff">&quot;350&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Command</span>=<span style="color: #0000ff">&quot;{Binding ActionBCommand}&quot;</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Button</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;</span><span style="color: #800000">Button</span> <span style="color: #ff0000">Content</span>=<span style="color: #0000ff">&quot;purchase complete version&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Margin</span>=<span style="color: #0000ff">&quot;0,130,0,0&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">HorizontalAlignment</span>=<span style="color: #0000ff">&quot;Center&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Visibility</span>=<span style="color: #0000ff">&quot;{Binding TrialVersion,
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                                Converter={StaticResource BoolToVisibility}}&quot;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Width</span>=<span style="color: #0000ff">&quot;350&quot;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">                    <span style="color: #ff0000">Command</span>=<span style="color: #0000ff">&quot;{Binding PurchaseCommand}&quot;</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Button</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">&lt;/</span><span style="color: #800000">StackPanel</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span></pre>
</pre>
<p>Obviamente (faltaría más) todo nuestro XAML usa una ViewModel de MVVM para realizar toda la lógica de nuestra pagina. Como podéis ver disponemos de 3 sencillos botones. El ultimo de los botones usa un converter para convertir la propiedad TrialVersion de nuestra ViewModel en el correspondiente valor de la enumeración System.Windows.Visibility.</p>
<p>Veamos ahora nuestra ViewModel por partes.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> VMMainPage : VMBase
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">bool</span> trialVersion = <span style="color: #0000ff">true</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    Lazy&lt;DelegateCommand&gt; actionACommand;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    Lazy&lt;DelegateCommand&gt; actionBCommand;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    Lazy&lt;DelegateCommand&gt; purchaseCommand;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">public</span> VMMainPage()
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">this</span>.trialVersion = App.IsTrial;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        ........
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">public</span> <span style="color: #0000ff">bool</span> TrialVersion
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">get</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">            <span style="color: #0000ff">return</span> <span style="color: #0000ff">this</span>.trialVersion;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    ...........
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    ...........
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Hemos creado una variable privada la cual en el momento de instanciar nuestra ViewModel toma el valor de la variable estática contenida en nuestro App.xaml.cs. Por otro lado hemos creado las variables privadas de los DelegateCommands que usaremos a continuación.</p>
<p>Podemos ver también la propiedad publica TrialVersion, que hemos usado en nuestra vista para visualizar o no, a través del converter, el botón de purchase o compra de la aplicación.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> ActionACommandExecute()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        MessageBox.Show(&quot;<span style="color: #8b0000">Action A</span>&quot;);
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> ActionBCommandExecute()
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        MessageBox.Show(&quot;<span style="color: #8b0000">Action B</span>&quot;);
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">private</span> <span style="color: #0000ff">bool</span> ActionBCommandCanExecute()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        <span style="color: #0000ff">return</span> !<span style="color: #0000ff">this</span>.trialVersion;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }</pre>
</pre>
<p>Ahora vemos la implementación de los comandos asignados a los dos primeros botones. Estos simplemente muestran un mensaje en pantalla (esto lo deberíamos de hacer con un servicio, pero bueno para no complicar mas las cosas…) En la inicialización del primero de ellos, no hemos asignado nada a la función de retorno del CanExecute, pero si en el caso del segundo botón. </p>
<p>En el ejemplo dejamos el primer botón accesible a cualquiera de los dos tipos de estado de la aplicación, mientras que el segundo botón, estará deshabilitado si la aplicación está en versión Trial. Para ello retornamos el valor contrario a la variable privada isTrial como respuesta en el CanExecute de este segundo botón.</p>
<p>El resultado hasta el momento de nuestro pequeño ejemplo es el siguiente:</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/TrialAndComplete_5F00_469D3DDA.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="TrialAndComplete" border="0" alt="TrialAndComplete" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/TrialAndComplete_5F00_thumb_5F00_20D3EAEC.png" width="382" height="358" /></a></p>
<p>La mejor forma de dirigir al usuario a comprar la versión completa de nuestra aplicación es utilizar el lanzador MarketPlaceDetailTask, como podemos ver en la implementación del comando que ejecuta nuestro tercer botón.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> PurchaseCommandExecute()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        MarketplaceDetailTask market = <span style="color: #0000ff">new</span> MarketplaceDetailTask();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        market.Show();
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }</pre>
</pre>
<p>Así de sencillo. Simplemente instanciamos el lanzador y lo ejecutamos con su método Show. La clase MarketplaceDetailTask dispone de una propiedad denominada ContentIdentifier, la cual acepta un valor string que representa el ID del producto del cual queremos mostrar sus características para proceder a la compra. Si este valor no es asignado o es asignado un valor nulo, el lanzador muestra los datos de la aplicación la cual le ha llamado.</p>
<p>Lamentablemente si la aplicación no esta publicada, ya estemos ejecutando en el emulador o en un dispositivo físico, la llamada al método show de la clase nos lanzara un error como el que vemos a continuación. Es algo que debemos de tener en cuenta.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/MarketPlaceDetailTask_5F00_7EF7EC8D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="MarketPlaceDetailTask" border="0" alt="MarketPlaceDetailTask" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/MarketPlaceDetailTask_5F00_thumb_5F00_657FC386.png" width="179" height="313" /></a></p>
<p>Bueno, pues llegados a este punto ya sabemos como controlar si nuestra aplicación esta en versión trial o versión completa. Como de forma muy sencilla poder gestionarlo con MVVM y como poder realizar la compra mostrando la correspondiente pagina de la Windows Phone Store de nuestra aplicación. Pero, ¿como podemos probar para dar valores según nos convenga a la variable IsTrial de nuestro App.xaml.cs? </p>
<p>Ya que si ejecutamos la aplicación tal y como la tenemos hasta el momento al leer el valor del método isTrial, de la clase LicenseInformation, este siempre nos devuelve false.</p>
<p>Para ello existen principalmente dos formas, que cada uno usa según le parezcan. Por un lado podríamos detectar si estamos en modo debug y preguntar si queremos ejecutar en modo trial o en modo full. </p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> CheckLicenseWithQuestion()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#<span style="color: #0000ff">if</span> DEBUG
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">string</span> message = &quot;<span style="color: #8b0000">Pulsa 'OK' para simular el modo trial. Pulsa 'Cancel' para ejecutar la aplicación en modo normal.</span>&quot;;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">if</span> (MessageBox.Show(message, &quot;<span style="color: #8b0000">Debug Trial</span>&quot;,MessageBoxButton.OKCancel) == MessageBoxResult.OK)
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        isTrial = <span style="color: #0000ff">true</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">else</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">        isTrial = <span style="color: #0000ff">false</span>;
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#<span style="color: #0000ff">else</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    LicenseInformation license = <span style="color: #0000ff">new</span> Microsoft.Phone.Marketplace.LicenseInformation();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    isTrial = license.IsTrial();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#endif
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>En el código anterior hemos modificado nuestro procedimiento CheckLicense para que, mediante el uso de directivas de compilación condicional, en el caso de que estemos compilando en modo debug, nos lance una pregunta para elegir el modo de prueba de la aplicación. Activado o desactivado. En el caso de que estemos compilando en versión release, directamente se comprobara el modo de ejecución a través de la clase LicenseInformation. El resultado seria el siguiente:</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/TrialWithQuestion_5F00_0CF68FF1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="TrialWithQuestion" border="0" alt="TrialWithQuestion" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/TrialWithQuestion_5F00_thumb_5F00_7D26D51F.png" width="244" height="212" /></a></p>
<p>Pero este método solo funcionara en aplicaciones para Windows Phone 7.x, ya que la llamada al método Show, de nuestro MessageBox, en Windows Phone 8 no se puede hacer hasta que no se ha inicializado el elemento RootVisual de nuestra aplicación. Es decir para poder usar este método en WP8, no es posible indicar la llamada en el evento Launching, sino que lo deberemos de invocar en el evento CompleteInitializePhoneApplication, tras la asignación del RootVisual.</p>
<p>Esto trae mas problemas, ya que si llamamos en ese lugar al procedimiento CheckLicense, nuestra ViewModel principal ya a sido creada por lo que ya hemos recogido los valores de la propiedad IsTrial, sin haberla dado el valor que queremos. La implementación en este caso debe de ser diferente y deberíamos de comprobar los valores de dicha propiedad sobrescribiendo el evento OnNavigatedTo de nuestra pagina principal.</p>
<p>Otra forma seria seguir implementando el procedimiento CheckLicense como hasta el momento, y simplemente en el modo debug activar siempre el modo trial.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> CheckLicense()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#<span style="color: #0000ff">if</span> DEBUG
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    isTrial = <span style="color: #0000ff">true</span>;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#<span style="color: #0000ff">else</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    LicenseInformation license = <span style="color: #0000ff">new</span> Microsoft.Phone.Marketplace.LicenseInformation();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    isTrial = license.IsTrial();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#endif
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Esto tiene un gran inconveniente y es que para poder probar la versión completa, deberemos de compilar en modo release, perdiendo todo lo que el modo debug nos aporta. Para solventar este problema podríamos crear en Visual Studio una nueva configuración de compilación. Para ello debemos de dirigirnos al menú “Build &gt; Configuration Manager”. Dentro de él, seleccionamos del combo “Active solution configuration”, el valor “&lt;New…&gt;”.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ConfigurationManager_5F00_40422D80.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="ConfigurationManager" border="0" alt="ConfigurationManager" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ConfigurationManager_5F00_thumb_5F00_77A83EAE.png" width="472" height="129" /></a></p>
<p>En la nueva pantalla que se abre, indicaremos un nombre para la nueva configuración, por ejemplo “Debug Trial” e indicaremos que queremos copiar todos los valores de la configuración ya existente “Debug”.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ConfigurationManager2_5F00_5C8F6FA0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="ConfigurationManager2" border="0" alt="ConfigurationManager2" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ConfigurationManager2_5F00_thumb_5F00_0D42774C.png" width="338" height="181" /></a></p>
<p>Una vez creada esta nueva configuración vamos a otorgarla una valor necesario para nuestro cometido. Para ello, entraremos en las propiedades de nuestro proyecto y en la pestaña de “Build” seleccionaremos la nueva configuración que acabamos de crear, en este caso “Debug Trial”.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ProjectConfiguration_5F00_1244B4FB.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="ProjectConfiguration" border="0" alt="ProjectConfiguration" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ProjectConfiguration_5F00_thumb_5F00_70E50F5E.png" width="504" height="129" /></a></p>
<p>Una vez seleccionada, solamente deberemos de añadir en la casilla de “Conditional compilation symbols:” la palabra “TRIAL” precedida de un punto y como para separarla de las que ya existen. Ojo en el ejemplo indico la palabra Trial, pero obviamente podríamos usar la que quisiéramos.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ProjectConfiguration2_5F00_673CA128.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="ProjectConfiguration2" border="0" alt="ProjectConfiguration2" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/ProjectConfiguration2_5F00_thumb_5F00_2CE12B47.png" width="484" height="104" /></a></p>
<p>Con nuestra nueva configuración ya creada y parame trizada a nuestro gusto, tan solo nos resta modificar definitivamente nuestro procedimiento para adecuarle a los nuevos cambios.</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 750px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> CheckLicense()
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#<span style="color: #0000ff">if</span> TRIAL
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    isTrial = <span style="color: #0000ff">true</span>;
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#<span style="color: #0000ff">else</span>
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    LicenseInformation license = <span style="color: #0000ff">new</span> Microsoft.Phone.Marketplace.LicenseInformation();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    isTrial = license.IsTrial();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">#endif
</pre>
<pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Como vemos la directiva de compilación condicional, ahora busca la palabra “TRIAL” en vez de genéricamente “DEBUG” como anteriormente. Ahora cuando queramos ejecutar en modo debug versión trial, seleccionaremos una opción de compilación, en el caso de compilar en modo debug en versión completo, seleccionaremos otra. Según nos convenga en cada caso.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/Execute_5F00_31E368F6.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Execute" border="0" alt="Execute" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rserna/Execute_5F00_thumb_5F00_37BE0C8F.png" width="249" height="104" /></a></p>
<p>Ya tenemos todo nuestro código implementado. Como comento al principio esta es una de las muchas formas de realizar la gestión de las versiones trial de nuestras aplicaciones. </p>
<p>Pero una cosa es segura, cualquier aplicación de pago que se precie de disponer si o si de una versión Trial. Los datos aportados por la Windows Phone Store lo indican. Las aplicaciones con versiones trial son descargadas 70 veces mas que las que no las tienen. Con una media de un 10% de conversiones a versión completa. Lo que representa un 10 veces más ingresos que una aplicación que no disponga de versión trial.</p>
<p>Aquí os dejo el enlace a un ejemplo de código que muestra todo lo que he comentado hasta el momento.</p>
<p><iframe height="120" src="https://skydrive.live.com/embed?cid=C5A73FD5793017E9&amp;resid=C5A73FD5793017E9%214853&amp;authkey=ANMRakY1y-5PGNI" frameborder="0" width="98" scrolling="no"></iframe></p>
<p>Para cualquier cosa, ya sabéis donde estoy….&#160; </p>
<p>A pasarlo bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2013/02/19/trials-en-windows-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I APP YOU</title>
		<link>http://tecnologia.rafaserna.es/2013/02/01/i-app-you/</link>
		<comments>http://tecnologia.rafaserna.es/2013/02/01/i-app-you/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 09:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Concurso]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2013/02/01/i-app-you/</guid>
		<description><![CDATA[Una vez mas vuelve el concurso semanal por excelencia de aplicaciones para Windows Phone de la mano de Microsoft Ibérica. A partir de hoy mismo, 1 de febrero y hasta el 15 de Mayo. Se sorteara una XBOX 360 por semana para todo aquel que desarrolle y publique en la Windows Phone Store una aplicación. [...]]]></description>
			<content:encoded><![CDATA[<p>Una vez mas vuelve el concurso semanal por excelencia de aplicaciones para Windows Phone de la mano de Microsoft Ibérica. A partir de hoy mismo, 1 de febrero y hasta el 15 de Mayo. Se sorteara una XBOX 360 por semana para todo aquel que desarrolle y publique en la Windows Phone Store una aplicación. </p>
<p><a href="http://www.microsoft.com/spain/iappyou/" target="_blank"><img title="300x250-iapp" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="300x250-iapp" src="http://tecnologia.rafaserna.es/files/2013/01/300x250-iapp.jpg" width="240" height="267" /></a></p>
<p>Pero este año disponemos de otra categoría. Y es que también cualquier persona que desarrolle y suba una aplicación para Windows 8, también tendrá su propio sorteo de otra XBOX 360 por semana.</p>
<p>La adjudicación de premios es por riguroso sorteo entre todos los participantes en la promoción, 1 premio para Windows Phone y otro para Windows 8. En esta ocasión no existirá ni jurado ni calificación de la aplicación, quien mas suerte tenga será quien se lleve el gato al agua.</p>
<p>A parte de esto si durante el transcurso de esta promoción es activada una subscripción a Windows Azure, podrás ganar una subscripción a MSDN.</p>
<p>Un aliciente mas para desarrollar……</p>
<p>Suerte a todos.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2013/02/01/i-app-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desarrollo en Windows 8 y Windows Phone 8 en C# y XAML</title>
		<link>http://tecnologia.rafaserna.es/2013/01/15/desarrollo-en-windows-8-y-windows-phone-8-en-c-y-xaml/</link>
		<comments>http://tecnologia.rafaserna.es/2013/01/15/desarrollo-en-windows-8-y-windows-phone-8-en-c-y-xaml/#comments</comments>
		<pubDate>Tue, 15 Jan 2013 14:10:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Libros]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[libro]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2013/01/15/desarrollo-en-windows-8-y-windows-phone-8-en-c-y-xaml/</guid>
		<description><![CDATA[Bueno, pues lo que comenzó hace ya medio año, y que tuvimos una pequeña previa recientemente, ya es una realidad. Hoy 15 de Enero de 2013, ya esta disponible para su compra nuestro mega libro de desarrollo en C# y XAML. Recuerdo ahora mismo las muchas conversaciones que Yeray y yo hemos mantenido sobre la [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, pues lo que comenzó hace ya medio año, y que tuvimos una <a href="http://www.campusmvp.com/catalogo/Product-Introducci%C3%B3n-al-desarrollo-en-Windows-8-y-Windows-Phone-8-(PDF)_171.aspx" target="_blank">pequeña previa</a> recientemente, ya es una realidad. Hoy 15 de Enero de 2013, ya esta disponible para su compra nuestro mega libro de desarrollo en C# y XAML.</p>
<p>Recuerdo ahora mismo las muchas conversaciones que Yeray y yo hemos mantenido sobre la escritura de este libro. Sobre disponer en español de una buena fuente de información sobre la programación en estas plataformas siguiendo un patrón de diseño especifico, en este caso MVVM y trabajando siempre con buenas practicas.</p>
<p>Lo que en su momento iba a ser algo sencillo, de distracción para el verano, se fue convirtiendo poco a poco en un mastodonte que no hacia mas que crecer en contenido. Seguramente a ambos nos hubiera gustado contar mas cosas en el libro. Por ejemplo por falta de tiempo nos hemos dejado en el tintero cosas como la gestión de procesos en Background, la gestión de trials, el In-app purchase, y muchos mas etcéteras que seguro poco a poco irán viendo la luz en nuestros respectivos blogs…</p>
<p>Pues nada, lo dicho, <a href="http://www.campusmvp.com/catalogo/Product-Desarrollo-en-Windows-8-y-Windows-Phone-8-con-XAML-y-C_163.aspx" target="_blank">aquí</a> podéis adquirir nuestro nuevo libraco y a empezar a degustarlo poquito a poquito, que tiene su miga.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2013/01/Desarrollo-Windows-8-350.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Desarrollo-Windows-8-350" border="0" alt="Desarrollo-Windows-8-350" src="http://tecnologia.rafaserna.es/files/2013/01/Desarrollo-Windows-8-350_thumb.jpg" width="259" height="451" /></a></p>
<p>Por cierto, gracias a la colaboración de Nokia España, todos los que compréis el libro el primer mes, entrareis en el sorteo de un flamante Nokia Lumia 820, una subscripción al WP Dev Center, componentes de Telerik y alguna cosilla más. </p>
<p>Con lo que no podéis dejar pasar esta oportunidad. <a href="http://www.campusmvp.com/catalogo/Product-Desarrollo-en-Windows-8-y-Windows-Phone-8-con-XAML-y-C_163.aspx" target="_blank">ALE A COMPRAR</a>…..</p>
<p>Antes de terminar, quiero dejar aquí constancia de los agradecimientos expresados por mi parte en el libro. Nunca podre expresar todo lo que mi familia me ha ayudado para poder llegar hasta aquí, por lo que esto es otra pequeña gota de gratitud.</p>
<p><em>“Cuando hace ya unos cuantos meses, Yeray y yo decidimos escribir este libro, jamás me hubiera imaginado que fuera a ser una de las tareas más costosas de todo cuanto he realizado hasta el momento. Todo el tiempo que he dedicado en su escritura, se lo he tenido que robar al sueño y por supuesto a mi familia. Por esa razón, solo puedo agradecer a mi mujer Susana y a mi hija Celia, su inmensa paciencia al verme un día sí&#160; y otro también pegado al portátil, sin dedicarlas en los últimos meses el tiempo que ambas se merecen. Gracias por vuestro apoyo constante y por creer tanto en mí&quot;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2013/01/15/desarrollo-en-windows-8-y-windows-phone-8-en-c-y-xaml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nuevo libro de desarrollo para Windows 8 y Windows Phone 8</title>
		<link>http://tecnologia.rafaserna.es/2012/11/14/nuevo-libro-de-desarrollo-para-windows-8-y-windows-phone-8/</link>
		<comments>http://tecnologia.rafaserna.es/2012/11/14/nuevo-libro-de-desarrollo-para-windows-8-y-windows-phone-8/#comments</comments>
		<pubDate>Wed, 14 Nov 2012 10:00:00 +0000</pubDate>
		<dc:creator>tecnologia</dc:creator>
				<category><![CDATA[Libros]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[mvvm]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2012/11/14/nuevo-libro-de-desarrollo-para-windows-8-y-windows-phone-8/</guid>
		<description><![CDATA[Desde hace tiempo, estoy un poco alejado del mundanal ruido de blogs, twitter y demás. La razón no ha sido otra que hacer posible un deseo que tenia desde hace mucho tiempo, escribir un libro. Antes de nada, que se que nadie lee los post hasta el final. Aquí esta el enlace para que lo [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace tiempo, estoy un poco alejado del mundanal ruido de blogs, twitter y demás. La razón no ha sido otra que hacer posible un deseo que tenia desde hace mucho tiempo, escribir un libro. Antes de nada, que se que nadie lee los post hasta el final. Aquí esta el enlace para que lo podáis comprar YA.  Hace tiempo, nos propusimos el amigo Yeray y yo, que teníamos que escribir algo juntos. Sinceramente jamás creí que me iba a costar tanto poder plasmar en papel todos los conocimientos que tengo en mi cabeza, por que amigos una cosa es escribir un blog y otra muy distinta escribir un libro. Pero bueno, después de muchas horas de trabajo y muchas horas de sueño perdido, junto con la ayuda de dos cracks, Ibón Landa, nuestro colaborador incansable y José Manuel Alarcón, nuestro editor convencido, este libro puede estar en la calle.    Os presento “Introducción al desarrollo en Windows 8 y Windows Phone 8”, este “mini” libro consta de 190 paginas en las que abordamos una introducción a las herramientas de desarrollo para ambos sistemas, descripción de conceptos de programación basados en el patrón Model View ViewModel (MVVM), el lenguaje visual XAML, los principales elementos de una interfaz visual tanto para Windows 8 como para Windows Phone 8 y por ultimo una explicación detallada de que pasos debemos seguir para publicar nuestras aplicaciones tanto en la Windows Store como en la Windows Phone Store. Pero aquí no acaba la cosa, esto es solo un pequeño aperitivo, es la avanzadilla de algo mucho mas grande, es simplemente una introducción del libro “Desarrollo en Windows 8 y Windows Phone 8”. Un libraco de casi 500 paginas con el que pretendemos guiar a cualquier desarrollador en las nuevas características de programación para ambos sistemas.  Pero para esto aun tenemos que esperar un poco mas. Eso si gracias a Krasis Press, todo aquel que adquiera el libro de introducción, el cual solo esta disponible en versión PDF, dispondrá de un cupón de descuento del importe total si decides comprar el libro grande. Así que os lo vuelvo a recordar. COMPRAD MI LIBRO, que aunque esto no lo hayamos hecho para salir de pobres (bueno nunca se sabe), al menos nos queremos tomar alguna que otra caña a vuestra salud. Por ultimo, desde aquí quiero agradecer el inmenso trabajo de mi compañero de fatigas, Josué Yeray, sin mi aportación es muy probable que el libro en algún momento estuviera de todos modos en la calle, pero sin la suya este proyecto jamás hubiera llegado a su fin. En mis años de juventud en el colegio recuerdo haber plantado mas de 1 árbol. Tengo una mujer estupenda y una hija que es un autentico regalo y un sol de niña. Acabo de escribir y publicar un libro. Si, ya me puedo morir en paz.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2012/11/14/nuevo-libro-de-desarrollo-para-windows-8-y-windows-phone-8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>El modelo de plantilla de proyecto HTML5 en Windows Phone 8 y II</title>
		<link>http://tecnologia.rafaserna.es/2012/11/03/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8-y-ii/</link>
		<comments>http://tecnologia.rafaserna.es/2012/11/03/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8-y-ii/#comments</comments>
		<pubDate>Sat, 03 Nov 2012 16:43:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2012/11/03/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8-y-ii/</guid>
		<description><![CDATA[Esto mas que una entrada como dios manda, es simplemente una advertencia en toda regla, sobre un gravísimo error en esta plantilla. Si alguno de vosotros a intentado usarla, podrá ver que tanto el método InvokeScript como el evento ScriptNotify no funcionan. Es mas si en el código HTML que cargamos en nuestro WebBrowser tenemos [...]]]></description>
			<content:encoded><![CDATA[<p>Esto mas que una entrada como dios manda, es simplemente una advertencia en toda regla, sobre un gravísimo error en esta plantilla.</p>
<p>Si alguno de vosotros a intentado usarla, podrá ver que tanto el método <em>InvokeScript</em> como el evento <em>ScriptNotify</em> no funcionan. Es mas si en el código HTML que cargamos en nuestro <em>WebBrowser</em> tenemos cualquier tipo de código de script, este tampoco funcionará.</p>
<p>En mi anterior post os había comentado que nuestro <em>WebBrowser</em> tenia por defecto deshabilitada la opción de cargar y ejecutar cualquier tipo de script, pero que simplemente indicando a <em><strong>true</strong></em> la propiedad <em>IsScriptEnabled</em> de dicho control, todo funcionaria.</p>
<p>Bueno, pues como todos habréis visto en la plantilla que Visual Studio nos crea, una de las primeras líneas de código, concretamente en el evento <em>Loaded</em> del <em>WebBrowser</em>, viene pre escrito concretamente esto</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> Browser_Loaded(<span class="kwrd">object</span> sender, RoutedEventArgs e)
{
    <span class="rem">// Add your URL here</span>
    Browser.Navigate(<span class="kwrd">new</span> Uri(MainUri, UriKind.Relative));
    Browser.IsScriptEnabled = <span class="kwrd">true</span>;
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Con lo que ya nos podemos imaginar que la comentada propiedad <em>IsScriptEnabled</em>, esta perfectamente indicada.</p>
<p>Pues bien, <u>este código no funciona</u> ya que dicha propiedad debemos de indicarla o cambiar su valor antes de realizar la navegación para que surta efecto. Para solventar este problema simplemente deberemos de establecer la propiedad a <strong><em>true</em></strong> directamente en las propiedades del control dentro del código XAML. </p>
<pre class="csharpcode">&lt;phone:WebBrowser x:Name=<span class="str">&quot;Browser&quot;</span>
            HorizontalAlignment=<span class="str">&quot;Stretch&quot;</span>
            VerticalAlignment=<span class="str">&quot;Stretch&quot;</span>
            Loaded=<span class="str">&quot;Browser_Loaded&quot;</span>
            IsScriptEnabled=<span class="str">&quot;True&quot;</span>
            NavigationFailed=<span class="str">&quot;Browser_NavigationFailed&quot;</span> /&gt;</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Es una opción, existen otras, pero quizás sea la mas sencilla.</p>
<p>Comencé diciendo que era un error gravísimo y así me lo parece, ya que cualquier neófito puede pasarse mucho tiempo hasta que descubra que todo su código no funciona simplemente por un error de bulto de quien a diseñado esta plantilla. </p>
<p>Bueno esperemos que dentro de no mucho la corrijan. Pero de momento basta con saberlo y poder solucionar el problema..</p>
<p>Bueno seguiré hablando en sucesivas entradas de la programación HTML dentro de Windows Phone, aunque pueda perder amigos por el camino…… ;-(&#160; </p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2012/11/03/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8-y-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El modelo de plantilla de proyecto HTML5 en Windows Phone 8</title>
		<link>http://tecnologia.rafaserna.es/2012/11/01/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8/</link>
		<comments>http://tecnologia.rafaserna.es/2012/11/01/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 16:49:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[WinS]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/2012/11/01/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8/</guid>
		<description><![CDATA[Una de las nuevas características que incorpora Windows Phone 8, es el flamante nuevo navegador Internet Explorer 10 en su versión móvil. Según nos cuenta el equipo de producto, este es una versión no muy alejada, (otros dicen que es exactamente la misma), que su hermano mayor la versión de escritorio incorporada en Windows 8. [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las nuevas características que incorpora Windows Phone 8, es el flamante nuevo navegador Internet Explorer 10 en su versión móvil. Según nos cuenta el equipo de producto, este es una versión no muy alejada, (otros dicen que es exactamente la misma), que su hermano mayor la versión de escritorio incorporada en Windows 8. <a href="http://www.wpcentral.com/internet-explorer-10-windows-phone">Aquí</a> tenéis un pequeño repaso de dicho navegador desde wpcentral.com</p>
<p>Bueno la cuestión es, que el nuevo SDK de Windows Phone 8, incorpora una nueva plantilla de proyecto la cual se denomina “<em>Windows Phone HTML5 App</em>”.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-1.png"><img title="Sin título-1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Sin título-1" src="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-1_thumb.png" width="446" height="236" /></a></p>
<p>Esta plantilla no es mas que una pagina de Windows Phone, con un componente <em>WebBrowser</em> incorporado, una serie de eventos de la misma ya creados y una carpeta denominada HTML en donde nos encontramos con una estructura de web básica.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-2.png"><img title="Sin título-2" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Sin título-2" src="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-2_thumb.png" width="258" height="227" /></a></p>
<p>Disponemos de la posibilidad de interactuar desde la web que se visualiza en el <em>WebBrowser</em>, con nuestro sistema a través del evento <em>ScriptNotify</em>, y desde nuestra aplicación con la pagina web usando el método <em>InvokeScript</em>. </p>
<p>Vamos a poner un ejemplo muy sencillo. Realizaremos algunos cambios en el código creado por la plantilla para mostrar el control <em>WebBrowser</em>, un <em>textbox</em> y un simple boton. La idea es mostrar en la web incrustada en el <em>WebBrowser</em> lo que le indiquemos en el <em>textbox</em> y mostrar un <em>MessageBox </em>de Windows Phone cuando interactuemos con la web.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-4.png"><img title="Sin título-4" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Sin título-4" src="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-4_thumb.png" width="491" height="266" /></a></p>
<p>&#160;</p>
<p>Y nuestro código HTML que mostraremos en el<em> WebBrowser</em> tendrá una pinta como esta:</p>
<pre class="csharpcode"><span class="kwrd">&lt;!</span><span class="html">DOCTYPE</span> <span class="attr">html</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">html</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">head</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">meta</span> <span class="attr">http-equiv</span><span class="kwrd">=&quot;Content-Type&quot;</span> <span class="attr">content</span><span class="kwrd">=&quot;text/html; charset=UTF-8&quot;</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">link</span> <span class="attr">rel</span><span class="kwrd">=&quot;stylesheet&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;text/css&quot;</span> <span class="attr">href</span><span class="kwrd">=&quot;/html/css/phone.css&quot;</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">title</span><span class="kwrd">&gt;</span>Windows Phone<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>

      <span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">=&quot;text/javascript&quot;</span><span class="kwrd">&gt;</span>
        <span class="kwrd">function</span> IncorporarTexto(data) {
          container.innerText = data;
        }
      <span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">head</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">body</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">=&quot;container&quot;</span><span class="kwrd">&gt;</span>
        El texto Aquí.
      <span class="kwrd">&lt;/</span><span class="html">div</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">body</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">html</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Ahora simplemente deberemos de llamar al método <em>InvokeScript</em> desde el evento <em>Click</em> de nuestro botón, pasando como parámetro al script de la pagina web el texto contenido en el <em>TextBox</em>, de la siguiente forma.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> Boton1_Click(<span class="kwrd">object</span> sender, System.Windows.RoutedEventArgs e)
{
<span class="kwrd">    if</span> (loadCompleted == <span class="kwrd">true</span>)
    {
        Browser.InvokeScript(<span class="str">&quot;IncorporarTexto&quot;</span>,TextBox1.Text);
    }
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Vemos en el anterior trozo de código que disponemos de una variable para controlar si la pagina esta totalmente cargada o no, ya que el método <em>InvokeScript</em> solo funcionará de forma correcta cuando el HTML a cargar en el <em>WebBrowser</em> haya terminado totalmente de cargarse. Para ello podremos controlar esto subscribiéndonos al evento <em>LoadCompleted</em> de nuestro <em>WebBrowser</em>.</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> Browser_LoadCompleted(<span class="kwrd">object</span> sender, </pre>
<pre class="csharpcode">                               System.Windows.Navigation.NavigationEventArgs e)
{
    loadCompleted = <span class="kwrd">true</span>;
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Ok, perfecto ya sabemos como podemos interactuar desde nuestra aplicación y desde nuestro código C# en los scripts de nuestra pagina web que acabamos de cargar. </p>
<p>Solamente una cosa mas, nuestro componente <em>WebBrowser</em> por defecto tiene deshabilitada la capacidad de ejecutar scripts en el código HTML que se carga. Para poder habilitar dicha capacidad debemos de indicar a <em><strong>true</strong></em> la propiedad <em>IsScriptEnabled</em> de dicho componente <em>WebBrowser</em>.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-7.png"><img title="Sin título-7" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Sin título-7" src="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-7_thumb.png" width="207" height="375" /></a></p>
<p>La siguiente opción que hemos comentado es la capacidad del código HTML cargado por el componente <em>WebBrowser</em> para interactuar con nuestro sistema, mediante el control del evento <em>ScriptNotify</em> del propio <em>WebBrowser</em>.</p>
<p>Vamos a modificar nuestro código HTML, para crear una nueva función en JavaScript e incorporar un botón que dispare dicha función.</p>
<pre class="csharpcode"><span class="kwrd">&lt;!</span><span class="html">DOCTYPE</span> <span class="attr">html</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">html</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">head</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">meta</span> <span class="attr">http-equiv</span><span class="kwrd">=&quot;Content-Type&quot;</span> <span class="attr">content</span><span class="kwrd">=&quot;text/html; charset=UTF-8&quot;</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">link</span> <span class="attr">rel</span><span class="kwrd">=&quot;stylesheet&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;text/css&quot;</span> <span class="attr">href</span><span class="kwrd">=&quot;/html/css/phone.css&quot;</span> <span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">title</span><span class="kwrd">&gt;</span>Windows Phone<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>

      <span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">=&quot;text/javascript&quot;</span><span class="kwrd">&gt;</span>
        <span class="kwrd">function</span> IncorporarTexto(data) {
          container.innerText = data;
        }

        <span class="kwrd">function</span> SaludarAlTelefono() {
          <span class="kwrd">var</span> texto = <span class="str">&quot;Hola WP8 desde JS&quot;</span>;
          window.external.notify(texto);
        }

      <span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">head</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">body</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">=&quot;container&quot;</span><span class="kwrd">&gt;</span>
        El texto Aquí.
      <span class="kwrd">&lt;/</span><span class="html">div</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">hr</span><span class="kwrd">/&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">button</span> <span class="attr">onClick</span><span class="kwrd">=&quot;SaludarAlTelefono()&quot;</span><span class="kwrd">&gt;</span>Saludar<span class="kwrd">&lt;/</span><span class="html">button</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">body</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">html</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Como podemos ver para realizar esta acción usamos el objeto de JavaScript, <em>window.external</em>, concretamente el método <em>notify</em>, el cual es el encargado de disparar el evento <em>ScriptNotify</em> del <em>WebBrowser</em>. </p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">void</span> Browser_ScriptNotify(<span class="kwrd">object</span> sender,
                   Microsoft.Phone.Controls.NotifyEventArgs e)
{
    MessageBox.Show(e.Value);
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Dentro de los argumentos que nos entrega el evento, disponemos de la propiedad <em>Value</em>, que nos trae el valor del parámetro que hayamos indicado en la instrucción de JavaScript.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-8.png"><img title="Sin título-8" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Sin título-8" src="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-8_thumb.png" width="221" height="401" /></a></p>
<p>Los ejemplos que he puesto son muy simples, pero las posibilidades son enormes. Ahora viene lo bueno. <u>Todo el mundo debería de saber que esto ya lo podíamos hacer con Windows Phone 7.5</u>, hasta aquí no existe absolutamente nada nuevo que incorpore Windows Phone 8. Si es verdad que quizás esta característica del control WebBrowser no era muy conocida, pero como os comento no hay nada nuevo.</p>
<p>¿Cual es entonces la función real de esta plantilla? Pues sinceramente lo desconozco. Tal vez el equipo de producto quiso hacer creer que igual que en Windows 8 disponemos de un tipo de programación en JavaScript, en Windows Phone 8, también lo tendríamos. Pero no, nada de WinJS a la vista.</p>
<p>Bueno realmente tengo que decir que lo novedoso de todo esto es la incorporación de IE10 al sistema. Es de suponer que con esta versión del navegador vamos a poder explotar en un grado muy alto todas las capacidades que HTML5 incorpora. Podéis desde el propio emulador acceder a <a href="http://ie.microsoft.com/testdrive">http://ie.microsoft.com/testdrive</a> y ver todos los test que IE10 en su versión móvil pasa con muy buena nota.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-3.png"><img title="Sin título-3" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Sin título-3" src="http://tecnologia.rafaserna.es/files/2012/11/Sin-ttulo-3_thumb.png" width="433" height="315" /></a></p>
<p align="left">Así mismo en la documentación del SDK de Windows Phone 8, en la sección en la que se habla de este tipo de plantilla, se nos indica que consultemos la <a href="http://msdn.microsoft.com/library/hh673549.aspx">guía para desarrolladores de Internet Explorer 10</a>, para poder sacar todo el potencial que los desarrolladores HTML disponen en Windows Phone 8.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2012/11/01/el-modelo-de-plantilla-de-proyecto-html5-en-windows-phone-8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>El emulador en Windows Phone 8 SDK e Hyper-V</title>
		<link>http://tecnologia.rafaserna.es/2012/10/30/el-emulador-en-windows-phone-8-sdk-e-hyper-v/</link>
		<comments>http://tecnologia.rafaserna.es/2012/10/30/el-emulador-en-windows-phone-8-sdk-e-hyper-v/#comments</comments>
		<pubDate>Tue, 30 Oct 2012 17:54:19 +0000</pubDate>
		<dc:creator>tecnologia</dc:creator>
				<category><![CDATA[Windows Phone 8]]></category>
		<category><![CDATA[Emulador]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[Hyper-V]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/?p=442</guid>
		<description><![CDATA[Como todos ya seguro que sabréis, y si no lo sabéis ya os lo digo yo que para eso estoy aquí, el recién estrenado SDK para Windows Phone 8 solo es posible instalarlo en maquinas con sistemas operativos de 64bits. ¿Cual es el motivo?, bueno pues seguramente que serán muchos, pero uno de ellos es [...]]]></description>
			<content:encoded><![CDATA[<p>Como todos ya seguro que sabréis, y si no lo sabéis ya os lo digo yo que para eso estoy aquí, el recién estrenado SDK para Windows Phone 8 solo es posible instalarlo en maquinas con sistemas operativos de 64bits.</p>
<p>¿Cual es el motivo?, bueno pues seguramente que serán muchos, pero uno de ellos es que el nuevo emulador para testear nuestras aplicaciones, no es un emulador al uso tal y como lo teníamos en Windows Phone 7.5, sino que es una imagen del S.O. virtualizada a través de la tecnología Hyper-V de Microsoft y esta tecnología solo es compatible con sistemas de 64 bits como podéis ver en <a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=3512" target="_blank">sus requerimientos</a>.</p>
<p>Esto para mi significa una gran ventaja con respecto al emulador de anteriores versiones. Por un lado le dota de mayor estabilidad y un mayor rendimiento, por otro lado el lanzar varios emuladores al mismo tiempo se hace una tarea bastante mas sencilla que antes, la gestión de las imágenes de nuestros Windows Phone emulados ahora son gestionables y no como antes que eran un simple fichero y a veces teníamos que pegarnos con los ficheros de sesión que se quedaban colgados y demás…</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_0.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_0" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_0_thumb.png" border="0" alt="Emulator_WP8_0" width="244" height="191" /></a></p>
<p>Bueno, pues manos a la obra y vamos a disponernos a lanzar nuestro flamante emulador y ver in situ todo su potencial.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_1" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_1_thumb.png" border="0" alt="Emulator_WP8_1" width="345" height="241" /></a></p>
<p>Vaya la primera en la frente, Visual Studio me advierte gentilmente que quizás no tenga habilitado en la BIOS el soporte para la virtualización por hardware, necesario para lanzar Hyper-V y por consiguiente el emulador.</p>
<p>Pero lo primero seria comprobar si nuestro sistema es capaz de ejecutar Hyper-V y si tenemos el Hardware necesario para ello. Os recuerdo que necesitamos que nuestra maquina ejecute la <a href="http://es.wikipedia.org/wiki/Virtualizaci%C3%B3n#Virtualizaci.C3.B3n_por_.28Hardware.29" target="_blank">virtualización asistida de Hardware</a>, <a href="http://en.wikipedia.org/wiki/Second_Level_Address_Translation" target="_blank">SLAT</a> (Second Level Address Translation) y <a href="http://en.wikipedia.org/wiki/Data_Execution_Prevention" target="_blank">DEP</a> (Hardware-based Data Execution Prevention).</p>
<p>Si esto te suena a chino y no tienes ni remota idea de que estoy hablando lo mejor es descargarnos esta pequeña utilidad de Microsoft, llamada <a href="http://technet.microsoft.com/en-us/sysinternals/cc835722" target="_blank">Coreinfo</a> para comprobar todos estos requerimientos.</p>
<p>Simplemente tras descargarnos Coreinfo, lo ejecutamos en la línea de comandos con permisos de administrador, con el parámetro –v</p>
<pre class="csharpcode">C:\&gt; Coreinfo.exe -v</pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->Esto nos mostrara una serie de datos de capacidades de nuestro procesador.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_6.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_6" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_6_thumb.png" border="0" alt="Emulator_WP8_6" width="494" height="126" /></a></p>
<p>Debemos de asegurarnos de tener un asterisco, en las 2 ultimas características, capacidad de virtualización por hardware y SLAT presente.y que nos indique que el Hypervisor está presente.</p>
<p>Por ultimo debemos de hacer otra comprobación, en este caso ejecutando Coreinfo sin ningún tipo de parámetro de entrada.</p>
<pre class="csharpcode">C:\&gt; Coreinfo.exe</pre>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } -->Entre todas las características que nos presenta debemos de buscar la opción NX, la cual nos dirá si disponemos de la capacidad de DEP (Hardware-base Data Executivo Prevención) o no, con un asterisco.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_7.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_7" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_7_thumb.png" border="0" alt="Emulator_WP8_7" width="439" height="196" /></a></p>
<p>Una vez comprobado todo, debemos de saber que tenemos que tener un asterisco en las 3 características comentadas y ver que Hypervisor esta presente, si esto no es así ya podemos ir pensando en comprar otro ordenador o simplemente olvidarnos de probar nuestras aplicaciones en el emulador de Windows Phone 8.</p>
<p>Si tenemos la suerte de contar con todos estos requisitos, simplemente deberemos de ir a la BIOS de nuestro sistema y activar la virtualización por hardware que normalmente viene deshabilitada. En mi caso simplemente tengo que ir a la sección de características de la CPU dentro de mi BIOS y activarlo:</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/WP_000453.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="WP_000453" src="http://tecnologia.rafaserna.es/files/2012/09/WP_000453_thumb.png" border="0" alt="WP_000453" width="423" height="318" /></a></p>
<p>Solo una cosita mas, una vez comprobado nuestro sistema y activado en la BIOS la opción de virtualización, deberemos de añadir nuestro usuario de Windows al grupo de administradores de Hyper-V, para evitarnos posibles problemas de permisos y demás a la hora de asignar hardware al emulador.  Para ello simplemente iremos al administrador de equipos y en la sección de usuarios asignaremos el nuestro al grupo administradores de Hyper-V.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_4" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_4_thumb.png" border="0" alt="Emulator_WP8_4" width="475" height="212" /></a></p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_3" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_3_thumb.png" border="0" alt="Emulator_WP8_3" width="477" height="252" /></a></p>
<p>Bueno, pues listos, una vez realizados estos pasos, la próxima vez que ejecutemos la depuración en el emulador, nos mostrara el aviso de ejecución con permisos elevados, si es que no ejecutamos ya Visual Studio con permisos de administrador.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_9.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_9" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_9_thumb.png" border="0" alt="Emulator_WP8_9" width="327" height="172" /></a></p>
<p>Aquí nuestro flamante emulador listo para comenzar a probar nuestras aplicaciones para Windows Phone 8.</p>
<p><a href="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_10.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="Emulator_WP8_10" src="http://tecnologia.rafaserna.es/files/2012/09/Emulator_WP8_10_thumb.png" border="0" alt="Emulator_WP8_10" width="250" height="408" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2012/10/30/el-emulador-en-windows-phone-8-sdk-e-hyper-v/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Prepar&#225;ndonos para el #MegathonW8 y III &#8211; Conocimientos &#8220;muy b&#225;sicos&#8221; de Team Foundation.</title>
		<link>http://tecnologia.rafaserna.es/2012/08/13/preparndonos-para-el-megathonw8-y-iii-conocimientos-muy-bsicos-de-team-foundation/</link>
		<comments>http://tecnologia.rafaserna.es/2012/08/13/preparndonos-para-el-megathonw8-y-iii-conocimientos-muy-bsicos-de-team-foundation/#comments</comments>
		<pubDate>Mon, 13 Aug 2012 18:15:08 +0000</pubDate>
		<dc:creator>tecnologia</dc:creator>
				<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Control de codigo]]></category>
		<category><![CDATA[MegathonW8]]></category>
		<category><![CDATA[Team Foundation Services]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/?p=423</guid>
		<description><![CDATA[Bueno y muchos de vosotros seguro que dicen, y esto de Team Foundation que demonios tiene que ver con el Megathon de Windows 8?, bueno pues lo primero es que conocer esta herramienta nunca esta de mas y lo segundo que uno de los requisitos para poder optar al premio nacional, es que el código [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno y muchos de vosotros seguro que dicen, y esto de Team Foundation que demonios tiene que ver con el Megathon de Windows 8?, bueno pues lo primero es que conocer esta herramienta nunca esta de mas y lo segundo que uno de los requisitos para poder optar al premio nacional, es que el código fuente del proyecto <a href="http://megathonwindows8.azurewebsites.net/2012/07/25/bases-megathon-windows-8/" target="_blank">debe de estar alojado</a> en este repositorio de código para que los jueces lo puedan descargar y revisar (punto 8.6 de las bases), y claro a Redmond te querrás ir ¿verdad?.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS1" src="http://tecnologia.rafaserna.es/files/2012/08/TFS1.jpg" border="0" alt="TFS1" width="351" height="80" /></p>
<p>Se lo que estas pensando, pues que los mentores me ayuden a subirlo y punto pelota. Pues no amigo no, lo tienes claro, aquí cada uno se guisa las alubias el solito, que los que os vais a ir a Redmond sois vosotros colegas….. Y además si los equipos deben de estar formados por un máximo de 4 personas, ¿como pensáis intercambiaros el código que vayáis generando?, ¿copiando y pegando carpetas?, venga hombre… Como os oiga algún MVP de estos de ALM que andan por aquí os corren a gorrazos.</p>
<p>Pero lo primero es lo primero, ¿que demonios es eso de Team Fundation?, Bueno pues exactamente <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/team-foundation-server/overview" target="_blank">Team Foundation Server</a> o <a href="http://www.tfspreview.com/" target="_blank">Team Foundation Service</a> que es a fin de cuentas lo mismo pero en su versión en la nube y es lo que nos piden que usemos, comúnmente conocido como TFS, es un producto que ofrece herramientas colaborativas, administración y planificación de proyectos, automatización de ejecución de test, integración continua y un magnifico repositorio de código fuente.</p>
<p>Nosotros de momento y para ese fin de semana solamente necesitaremos controlar de una forma muy básica el gestor de código fuente. En nuestro caso, la sede de Santander hemos creado una cuenta común para todos los asistentes al Megathon de nuestra sede, con lo que una vez creados los equipos iremos dando acceso a los usuarios a los diferentes proyectos creados.</p>
<p>Pero bueno si queréis vosotros mismos ir creando vuestros proyectos y demás, Team Foundation Services están aun en versión Preview con lo que de momento todos sus servicios son totalmente gratuitos, simplemente abriendo su web, <a href="http://www.tfspreview.com" target="_blank">TFSPreview.com</a> y creando una cuenta dispondréis al momento de todo.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS2" src="http://tecnologia.rafaserna.es/files/2012/08/TFS2.png" border="0" alt="TFS2" width="401" height="176" /></p>
<p>De momento lo primero que debemos de hacer es agregar nuestra cuenta de Team Foundation Services recién creada a nuestro Visual Studio. Funciona tanto para las versiones Express que ya comentamos como descargarlas e instalarlas como obviamente las versiones full de pago, lo único que como es de suponer en las versiones Express las opciones de integración son mas limitadas.</p>
<p>Para ello, abriremos nuestro Visual Studio 2012 Express para Windows 8 y nos conectaremos con el servicio de Team Foundation Services, en el menú superior en “Equipo &gt; Conectar a Team Foundation Server” o sacando el add-in de Team Explorer en “Ver &gt; Team Explorer”. Usaremos esta segunda opción, ya que de esta manera tendremos a mano la pestaña de Team Explorer para realizar los siguientes procesos.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS2" src="http://tecnologia.rafaserna.es/files/2012/08/TFS2.jpg" border="0" alt="TFS2" width="355" height="90" /></p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS3" src="http://tecnologia.rafaserna.es/files/2012/08/TFS3.jpg" border="0" alt="TFS3" width="357" height="135" /></p>
<p><em>Nota: Tiene narices, que en el anterior post, os comente que mejor instalarse la versión en Ingles, pues me acabo de dar cuenta que yo me la he instalado en español, jeje, donde dije digo digo Diego…..</em></p>
<p>Una vez que tengamos la pestaña de Team Explorer deberemos de conectarnos propiamente al servidor de TFS, para ello pulsaremos sobre conectar con Team Foundation Server.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS4" src="http://tecnologia.rafaserna.es/files/2012/08/TFS4.jpg" border="0" alt="TFS4" width="351" height="263" /></p>
<p>Tras esto deberemos de añadir nuestro servidor, si es que no lo tenemos ya, para ello pulsaremos sobre el botón “Servidores”</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS5" src="http://tecnologia.rafaserna.es/files/2012/08/TFS5.jpg" border="0" alt="TFS5" width="378" height="110" /></p>
<p>Dentro de la sección de agregar o quitar servidores, procederemos a agregar uno nuevo, pulsando Agregar.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS6" src="http://tecnologia.rafaserna.es/files/2012/08/TFS6.jpg" border="0" alt="TFS6" width="383" height="109" /></p>
<p>Ahora debemos de introducir la dirección de nuestro servidor. En nuestro caso, la sede de Santander hemos creado un servidor de Team Foundation Services bajo el nombre de Nuberos (<a href="http://www.nuberos.es/Paginas/default.aspx" target="_blank">Nuberos.Net</a> es el nombre del grupo de usuarios de .Net en Cantabria, organizador del Hackaton en Santander), por lo que nuestro servidor es “nuberos.tfspreview.com” Como podéis ver una vez introducido el dominio *.tfspreview.com el sistema detecta que es una instancia de TFS en la nube y no nos solicita mas datos de configuración.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS7" src="http://tecnologia.rafaserna.es/files/2012/08/TFS7.jpg" border="0" alt="TFS7" width="381" height="235" /></p>
<p>Tras pulsar el botón de Aceptar, Visual Studio nos solicita que hagamos login con una cuenta con la cual tengamos permisos sobre algún elemento que se encuentre en ese servidor. En nuestro caso cada participante nos dirá su dirección de email, la cual debe de ser un Windows Live ID.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS8" src="http://tecnologia.rafaserna.es/files/2012/08/TFS8.jpg" border="0" alt="TFS8" width="385" height="226" /></p>
<p>Bueno pues una vez creado el servidor, simplemente cerramos la pantalla de gestión de servidores.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS9" src="http://tecnologia.rafaserna.es/files/2012/08/TFS9.jpg" border="0" alt="TFS9" width="446" height="190" /></p>
<p>Seleccionamos el servidor que acabamos de crear y nos aparecerán aquellos proyectos creados en dicho servidor para los cuales tengamos algún tipo de permiso de acceso. En el caso de los participantes, deberían de tener cada uno de ellos el proyecto por el cual van a trabajar, pelear y sudar… <img src='http://tecnologia.rafaserna.es/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS10" src="http://tecnologia.rafaserna.es/files/2012/08/TFS10.jpg" border="0" alt="TFS10" width="381" height="277" /></p>
<p>Seleccionamos el proyecto y ya tenemos conectado nuestro Visual Studio Express a Team Foundation Services. Podemos ver que la pestaña de “Team Explorer”, ya ha cambiado y nos propone nuevas opciones.</p>
<p><em>Nota: Conectar la versión full de Visual Studio, es básicamente igual.</em></p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS11" src="http://tecnologia.rafaserna.es/files/2012/08/TFS11.jpg" border="0" alt="TFS11" width="319" height="259" /></p>
<p>Bueno pues una vez conectado a TFS, lo que procederemos a hacer es a “Proteger” nuestro código fuente, vamos a lo que se llama hacer un check-in. Con ello dejaremos nuestro código en el servidor, para que este a disposición de cualquier miembro del equipo, y de esta forma también comenzar a gestionar el ciclo de vida de nuestro código fuente.</p>
<p>Lo primero que debemos de hacer para esto es asignar nuestra solución a ese proyecto de Team Foundation Server al que nos acabamos de conectar. Para ello con el proyecto que hayamos creado, deberemos de pulsar sobre el con el botón derecho, en el “Explorador de soluciones”, y seleccionaremos la opción “Agregar solución al control de código fuente”</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS12" src="http://tecnologia.rafaserna.es/files/2012/08/TFS12.jpg" border="0" alt="TFS12" width="325" height="289" /></p>
<p>Si aun no hemos creado nuestro proyecto, otra opción es a la hora de crearle, indicarle que le vamos a añadir al control de código de Team Foundation Server.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS13" src="http://tecnologia.rafaserna.es/files/2012/08/TFS13.jpg" border="0" alt="TFS13" width="456" height="281" /></p>
<p>En nuestro caso, al ser el primero que vamos a añadir código al repositorio, le debemos de indicar en que carpeta lo vamos a colocar, si por ejemplo ya disponemos de una carpeta en donde nos indican que dejemos el código deberíamos de seleccionarla. Como digo en este caso crearemos dentro del repositorio una carpeta, la llamaremos “RamaPrincipal” y dentro de esa carpeta colocaremos el proyecto.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS14" src="http://tecnologia.rafaserna.es/files/2012/08/TFS14.jpg" border="0" alt="TFS14" width="322" height="323" /></p>
<p>Y ya como ultimo paso, es hacer el Check-in (Proteger) de nuestro proyecto. Para ello, simplemente pulsando de nuevo sobre el proyecto en el “Explorador de soluciones”, pulsamos sobre la opción “Proteger” o “CheckIn”.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS15" src="http://tecnologia.rafaserna.es/files/2012/08/TFS15.jpg" border="0" alt="TFS15" width="320" height="315" /></p>
<p>Nos aparece una pantalla en la que nos indica que ficheros son los que se van a proteger y nos muestra una serie de opciones mas, de momento simplemente le damos una descripción o comentario al proceso y pulsamos sobre el botón “Proteger”.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS16" src="http://tecnologia.rafaserna.es/files/2012/08/TFS16.jpg" border="0" alt="TFS16" width="171" height="330" /></p>
<p>Con esto ya tenemos nuestro código en el repositorio central, a partir de ahora cada cambio que vayamos haciendo en el proyecto, lo que deberemos de hacer es ir realizando diferentes chekins o protecciones, según avancemos.</p>
<p>Una opción que teníamos disponible en nuestra pestaña de “Team Explorer” es la de “Explorador de código fuente”. Al pulsar esta opción se abre dicho explorador pudiendo ver las carpetas creadas, en nuestro caso solo una “RamaPrincipal” y lo que tenemos en cada carpeta.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS18" src="http://tecnologia.rafaserna.es/files/2012/08/TFS18.jpg" border="0" alt="TFS18" width="451" height="157" /></p>
<p>Si por ejemplo otro compañero del equipo ya ha creado su proyecto y queremos descargárnoslo, lo único que debemos de hacer es pulsar sobre la carpeta “RafaPrincipal” y seleccionar el proyecto que nos queremos descargar y añadir en nuestra solución, botón derecho y seleccionar la opción “Obtener la ultima versión”.</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="TFS19" src="http://tecnologia.rafaserna.es/files/2012/08/TFS19.jpg" border="0" alt="TFS19" width="280" height="258" /></p>
<p>Una vez hecho esto, ya disponemos de los últimos cambios que los demás integrantes del equipo van haciendo a sus proyectos o a los ficheros que van modificando de nuestro mismo proyecto.</p>
<p>Con estas nociones muy básicas como os digo podemos gestionar de una manera muy sencilla la integración de Visual Studio Express con el repositorio en la nube de TFS, Team Foundation Services.</p>
<p><em>Nota: Este mini tutorial, no pretendo que sea ni con mucho algo avanzado, mi única intención es la de que gente que jamás se a topado con TFS y el control de código pueda desenvolverse medianamente los días que dure el Hackaton. Se que algunas de las cosas que digo no son muy ortodoxas, tampoco soy ningún experto en ALM, bueno básicamente no soy experto en nada, con lo que si queréis de verdad aprender a usar TFS y saber mas de la gestión del ciclo de vida de las aplicaciones os recomiendo encarecidamente que acudáis a los blogs de monstruos como </em><a href="http://geeks.ms/blogs/elbruno/default.aspx" target="_blank"><em>El Bruno</em></a><em>, </em><a href="http://geeks.ms/blogs/lfraile/" target="_blank"><em>Luis Fraile</em></a><em>, </em><em>o compañía.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2012/08/13/preparndonos-para-el-megathonw8-y-iii-conocimientos-muy-bsicos-de-team-foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prepar&#225;ndonos para el #MegathonW8 y II &#8211; Instalando las herramientas de desarrollo.</title>
		<link>http://tecnologia.rafaserna.es/2012/08/10/preparndonos-para-el-megathonw8-y-ii-instalando-las-herramientas-de-desarrollo/</link>
		<comments>http://tecnologia.rafaserna.es/2012/08/10/preparndonos-para-el-megathonw8-y-ii-instalando-las-herramientas-de-desarrollo/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 08:37:24 +0000</pubDate>
		<dc:creator>tecnologia</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[Blend]]></category>
		<category><![CDATA[Express]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://tecnologia.rafaserna.es/?p=397</guid>
		<description><![CDATA[Una vez que ya tenemos nuestro flamante Windows 8 instalado en nuestro disco duro virtual, según los pasos del primer capitulo de esta guía. Lo que debemos de hacer es instalarnos las herramientas para poder crear nuestros proyectos. Todo en la vida es una cuestión de decisiones y este paso no iba a ser diferente [...]]]></description>
			<content:encoded><![CDATA[<p>Una vez que ya tenemos nuestro flamante Windows 8 instalado en nuestro disco duro virtual, según los pasos <a href="http://tecnologia.rafaserna.es/2012/08/10/preparndonos-para-el-megathonw8-y-i-instalacin-de-windows-8-en-un-vhd/" target="_blank">del primer capitulo</a> de esta guía. Lo que debemos de hacer es instalarnos las herramientas para poder crear nuestros proyectos.</p>
<p><img title="vs2012Logo" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/vs2012Logo.jpg" border="0" alt="vs2012Logo" width="361" height="151" /></p>
<p>Todo en la vida es una cuestión de decisiones y este paso no iba a ser diferente al resto. Tenemos dos opciones, o instalarnos la versión completa de Visual Studio o instalarnos las versiones express mas reducidas en capacidades, pero gratis.</p>
<p>En este caso, voy a describir los pasos para instalarnos las herramientas de desarrollo express, ya que para los asistentes al Megathon quizás sean mas que suficientes para lo que van ha hacer, y no solo eso ya que para muchos desarrolladores que lo que quieren es trastear un poco en sus casas y de vez en cuando desarrollar una pequeña aplicación o web es mas que suficiente. Y ojo no nos olvidemos son GRATIS.</p>
<p>Bueno, pues manos a la obra. De momento y hasta que no llegue el <a href="http://www.visualstudiolaunch.com/" target="_blank">12 de Septiembre</a> día en el que oficialmente será liberada la versión final de Visual Studio 2012, deberemos de instalarnos las versiones Release Candidate. Pero bueno funcionan razonablemente bien.</p>
<p>Nota: Si eres un agraciado poseedor de una subscripción MSDN, tendrás las versiones finales de Visual Studio el día 15 de Agosto.</p>
<p>Las versiones express como ya he comentado se caracterizan por ser versiones de Visual Studio limitadas en su funcionalidad, por lo que en este caso la versión que nos vamos a descargar solo nos permite crear aplicaciones para Windows 8 estilo <span style="text-decoration: line-through;">Metro</span> (ups… ) UI Style, tanto en C# como en JavaScript.</p>
<p>Nos dirigimos al <a href="http://www.microsoft.com/visualstudio/11/es-es/products/express" target="_blank">sitio web</a> de los productos express de Visual Studio.</p>
<p><img title="Web Express" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/Web-Express.jpg" border="0" alt="Web Express" width="456" height="192" /></p>
<p>A parte de poder buscar y leer mucha información sobre esta familia de productos, nos debemos de dirigir al sitio de descargar de Visual Studio 2012, que encontraremos en la parte inferior en la sección “Visual Studio Express 2012 para Windows 8” o en <a href="http://www.microsoft.com/visualstudio/11/es-es/downloads#express-win8" target="_blank">este enlace</a>.</p>
<p><img title="Web Express 2" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/Web-Express-2.jpg" border="0" alt="Web Express 2" width="457" height="204" /></p>
<p>Seleccionaremos el idioma en el que queremos obtener nuestro producto e iniciamos la descarga e instalación con un instalador web o la descarga para su posterior instalación de una imagen de disco en formato ISO.</p>
<p><em><strong>Nota</strong>: Cada uno obviamente podrá hacer lo que le venga en gana, pero mi recomendación es que os instaléis Visual Studio en la lengua de Shakespeare, usease en ingles. Por una razón muy sencilla, por suerte o por desgracia, la mayoría de información, tutoriales, libros, etc.. sobre programación y sobre .NET, </em><a href="http://www.campusmvp.com/krasis-press.htm" target="_blank"><em>salvo muy agradables y honrosas excepciones</em></a><em>, están escritos en ingles con lo que si el IDE le tenemos en español muchas veces es complicado saber que o donde nos indican que debemos de realizar tal o cual cosa. Además que leches, así aprendéis (aprendemos) un poco de ingles…..</em></p>
<p>Una vez descargado, la instalación no tienen ninguna ciencia, siguiente, siguiente y poco mas. En algunos casos puede llegar a ser un poco tedioso y largo, todo depende del ordenador de destino, pero bueno todo se arregla con un poco de paciencia.</p>
<p><img title="start2" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/start2.jpg" border="0" alt="start2" width="271" height="352" /></p>
<p>Tras realizar la instalación ya disponemos de nuestro flamante Visual Studio 2012 Express, presto y dispuesto para que le meamos el diente y nos pongamos a programar como locos….</p>
<p><img title="Create" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/Create.png" border="0" alt="Create" width="424" height="244" /></p>
<p>Uno de los nuevos requisitos para crear una aplicación para Windows 8, es la adquisición de una licencia de desarrollo para el sistema, esta licencia es gratuita y se pueden obtener tantas como se precisen, simplemente registrándonos con nuestro correo de Windows Live ID. Se adjudican licencias por equipo, por lo que si instalamos Visual Studio en otro ordenador deberemos de obtener la licencia otra vez.</p>
<p><img title="License" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/License.png" border="0" alt="License" width="341" height="253" /></p>
<p>Junto con Visual Studio Express, se instalan como no podía ser de otra forma el SDK de desarrollo para Windows 8, que viene con unos cuantos ejemplos para poder ir practicando, de todas formas en <a href="http://code.msdn.microsoft.com/windowsapps/" target="_blank">la web de MSDN</a> disponemos de una sección con un montón de aplicaciones de ejemplo y también podemos descargarnos los <a href="http://msdn.microsoft.com/en-us/jj206431.aspx" target="_blank">Virtual Labs de Windows 8</a> para poder ir adquiriendo conocimientos.</p>
<p>Otra cosa mas que se instala junto a Visual Studio Express, es la aplicación para diseñar nuestros proyectos, Microsoft Blend para Visual Studio, herramienta que quizás un día de estos daré un rápido repaso para explicar por encima su uso. Pero bueno básicamente nos ayudara a crear de una manera mucho mas sencilla el UI de nuestras aplicaciones.</p>
<p><img title="Blend" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" src="http://tecnologia.rafaserna.es/files/2012/08/Blend.png" border="0" alt="Blend" width="315" height="354" /></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnologia.rafaserna.es/2012/08/10/preparndonos-para-el-megathonw8-y-ii-instalando-las-herramientas-de-desarrollo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
