<?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>La Butxaca del Pollastre</title>
	<atom:link href="http://fegabe.es/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://fegabe.es/blog</link>
	<description>Tracking ideas</description>
	<lastBuildDate>Mon, 01 Feb 2010 13:48:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sesiones Google I/O 2009 con subtítulos</title>
		<link>http://fegabe.es/blog/2010/02/sesiones-google-io-2009-con-subtitulos/</link>
		<comments>http://fegabe.es/blog/2010/02/sesiones-google-io-2009-con-subtitulos/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 13:46:33 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[utilidades]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[captions]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google I/O]]></category>
		<category><![CDATA[subtitulos]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=185</guid>
		<description><![CDATA[Llevaba tiempo queriendo ver alguna de las charlas que ofreció Google en el evento anual para desarrolladores, Google I/O (Innovation in the Open).  En concreto me interesaban las charlas sobre Android, http://code.google.com/events/io/2009/sessions.html#mobile.
El problema era que estando inglés me daba bastante pereza. Así que el otro día me dio por buscar si alguien se había molestado [...]]]></description>
			<content:encoded><![CDATA[<p>Llevaba tiempo queriendo ver alguna de las charlas que ofreció Google en el evento anual para desarrolladores, Google I/O (<strong>I</strong>nnovation in the <strong>O</strong>pen).  En concreto me interesaban las charlas sobre Android, <a title="http://code.google.com/events/io/2009/sessions.html#mobile" href="http://code.google.com/events/io/2009/sessions.html#mobile">http://code.google.com/events/io/2009/sessions.html#mobile</a>.</p>
<p>El problema era que estando inglés me daba bastante pereza. Así que el otro día me dio por buscar si alguien se había molestado a redactar unos subtítulos aunque fueran en inglés&#8230; et voilà, no solo es que hubiera subtítulos sino que los ha hecho Google y se acceden integrados dentro de youtube.</p>
<p><a title="http://googlecode.blogspot.com/2009/11/captions-available-for-all-google-io.html  " href="http://googlecode.blogspot.com/2009/11/captions-available-for-all-google-io.html  ">http://googlecode.blogspot.com/2009/11/captions-available-for-all-google-io.html</a></p>
<p>En youtube existe un servicio que desconocía, captions, que se activa (cuando está disponible en el video) pulsando en la flecha inferior derecha del video y luego sobre el botón [CC]. Incluso permite traducir los subtítulos usando el servicio traductor de Google. De manera que ya no hay ninguna excusa para asistir al Google I/O en diferido.</p>
<p>Por si a alguien le interesa descargar los subtítulos (como era mi caso) existe un script para <a title="greasemonkey" href="https://addons.mozilla.org/es-ES/firefox/addon/748">greasemonkey</a> que se llama <a title="Download YouTube Captions" href="http://userscripts.org/scripts/show/50003">Download YouTube Captions</a> que permite descargarlos en formato <em>.srt</em>. También hay una aplicación de escritorio, <a title="http://sourceforge.net/projects/google2srt/" href="http://sourceforge.net/projects/google2srt/">http://sourceforge.net/projects/google2srt/</a>, aunque no la he probado.</p>
<p>Cada vez pienso más que Google ha instalado algo en nuestras cabezas para saber qué necesitamos&#8230;</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/U4Bk5rmIpic" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/U4Bk5rmIpic"></embed></object></p>
<pre style="text-align: center;"><strong>Google I/O 2009 - Writing Real-Time Games for Android</strong></pre>
<p><strong>Nota</strong>: parece que es necesario acceder a la página de youtube para poder habilitar los subtítulos del video.</p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2010/02/sesiones-google-io-2009-con-subtitulos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ejemplos Android] Torres de Hanoi II</title>
		<link>http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-ii/</link>
		<comments>http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-ii/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 22:54:24 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[proyectos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ejemplos android]]></category>
		<category><![CDATA[hanoi]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=159</guid>
		<description><![CDATA[


Día 1. Descripción del proyecto
El proyecto contiene tres clases:


HanoiGameActivity
Extiende de android.app.Activity y representa la clase principal de la aplicación. Contiene view que mostrará el escenario del juego y atenderá el evento Touch para que el usuario interactúe con la aplicación. 




HanoiGameView
Extiende de android.view.View y será la encargada de pintar el escenario, discos y controlar la [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<div>
<h1>Día 1. Descripción del proyecto</h1>
<div>El proyecto contiene tres clases:</div>
<div>
<ul>
<li><strong>HanoiGameActivity<br />
<span style="font-weight: normal;">Extiende de android.app.Activity y representa la clase principal de la aplicación. Contiene view que mostrará el escenario del juego y atenderá el evento Touch para que el usuario interactúe con la aplicación. </span></strong></li>
</ul>
</div>
<div>
<ul>
<li><strong>HanoiGameView<br />
<span style="font-weight: normal;">Extiende de android.view.View y será la encargada de pintar el escenario, discos y controlar la lógica del juego. </span></strong></li>
</ul>
</div>
<div>
<ul>
<li><strong>HanoiDiskShape<br />
<span style="font-weight: normal;">Alojada dentro de HanoiGameView, se encarga de representar los discos que se apilan en cada varilla. </span></strong></li>
</ul>
</div>
<div>También muestro una imagen con algunas medidas que harán falta introducir cuando sea necesario pintar los discos en el escenario:</div>
</div>
<p><a href="http://fegabe.es/blog/wp-content/uploads/2010/01/background_proportions.png" rel="lightbox[159]"><img class="aligncenter size-full wp-image-161" title="proporciones" src="http://fegabe.es/blog/wp-content/uploads/2010/01/background_proportions.png" alt="" width="520" height="347" /></a></p>
<h1>Día 2. Programación</h1>
<h2>HanoiGameActivity</h2>
<h3>void onCreate(Bundle savedInstanceState)</h3>
<h3><span style="font-weight: normal; font-size: 13px;">Se lanza al cargar el activity y se utiliza para inicializar y cargar la interfaz gráfica.</span></h3>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// initialize Hanoi Game</span>
		hanoiGame <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HanoiGameView<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, DEFAULT_NUMBER_OF_DISKS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Hide the window title and top bar</span>
		requestWindowFeature<span style="color: #009900;">&#40;</span><span style="color: #003399;">Window</span>.<span style="color: #006633;">FEATURE_NO_TITLE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		getWindow<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setFlags</span><span style="color: #009900;">&#40;</span>WindowManager.<span style="color: #006633;">LayoutParams</span>.<span style="color: #006633;">FLAG_FULLSCREEN</span>, 
                WindowManager.<span style="color: #006633;">LayoutParams</span>.<span style="color: #006633;">FLAG_FULLSCREEN</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
		setContentView<span style="color: #009900;">&#40;</span>hanoiGame<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>boolean onTouchEvent(MotionEvent event)</h3>
<p>Recoge el evento Touch ACTION_DOWN e pasa el control a la lógica del juego para que determine la acción pertinente. En caso que el juego haya finalizado muestra un mensaje y reinicia la partida.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> onTouchEvent<span style="color: #009900;">&#40;</span>MotionEvent event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>event.<span style="color: #006633;">getAction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> MotionEvent.<span style="color: #006633;">ACTION_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>hanoiGame.<span style="color: #006633;">onTouch</span><span style="color: #009900;">&#40;</span>event.<span style="color: #006633;">getX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, event.<span style="color: #006633;">getY</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// when game is completed, shows an alert and starts a new game</span>
&nbsp;
				Toast.<span style="color: #006633;">makeText</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;You win!!&quot;</span>, Toast.<span style="color: #006633;">LENGTH_LONG</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				hanoiGame.<span style="color: #006633;">startGame</span><span style="color: #009900;">&#40;</span>DEFAULT_NUMBER_OF_DISKS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>HanoiGameView</h2>
<h3>HanoiGameView(Context context, int _numberOfDisks)</h3>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">public</span> HanoiGameView<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span> context, <span style="color: #000066; font-weight: bold;">int</span> _numberOfDisks<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span>context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// loads the background image that contains the bottom wood and the</span>
		<span style="color: #666666; font-style: italic;">// figure of the three rods</span>
		Bitmap hanoiBackground <span style="color: #339933;">=</span> BitmapFactory.<span style="color: #006633;">decodeResource</span><span style="color: #009900;">&#40;</span>getResources<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
				R.<span style="color: #006633;">drawable</span>.<span style="color: #006633;">hanoi_background</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		setBackgroundDrawable<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapDrawable<span style="color: #009900;">&#40;</span>hanoiBackground<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		startGame<span style="color: #009900;">&#40;</span>_numberOfDisks<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>void startGame(int _numberOfDisks)</h3>
<p>inicializa el contenido de las varillas con el número de discos pasado por parámetro.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> startGame<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> _numberOfDisks<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>_numberOfDisks <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> MAX_DISKS<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span>ERROR_MAX_NUMBER_DISKS_EXCEEDED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		numberOfDisks <span style="color: #339933;">=</span> _numberOfDisks<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// create the three rod objects and fill the left one with</span>
		<span style="color: #666666; font-style: italic;">// the total number of disks</span>
&nbsp;
		leftRod <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Stack</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		middleRod <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Stack</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		rightRod <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Stack</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> diskSize <span style="color: #339933;">=</span> numberOfDisks<span style="color: #339933;">;</span> diskSize <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> diskSize<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			leftRod.<span style="color: #006633;">push</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> HanoiDiskShape<span style="color: #009900;">&#40;</span>diskSize<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>void onDraw(Canvas canvas)</h3>
<p>pinta el contenido de las tres varillas.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	@Override
	<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onDraw<span style="color: #009900;">&#40;</span><span style="color: #003399;">Canvas</span> canvas<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// draw the disks of the three rods</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// the idea is to translate the canvas to the left</span>
		<span style="color: #666666; font-style: italic;">// for each rod. inside of the loops, the canvas is translated</span>
		<span style="color: #666666; font-style: italic;">// upward for each disk.</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// some numbers to understand the translations</span>
		<span style="color: #666666; font-style: italic;">// first rod located at: x = 90px</span>
		<span style="color: #666666; font-style: italic;">// first disk located at: y = 230px</span>
		<span style="color: #666666; font-style: italic;">// distance between rods: x = 150px</span>
		<span style="color: #666666; font-style: italic;">// distance between disks: y -= 25px</span>
&nbsp;
		canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">90</span>, <span style="color: #cc66cc;">230</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		canvas.<span style="color: #006633;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>HanoiDiskShape disk <span style="color: #339933;">:</span> leftRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			disk.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		canvas.<span style="color: #006633;">restore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">150</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		canvas.<span style="color: #006633;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>HanoiDiskShape disk <span style="color: #339933;">:</span> middleRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			disk.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		canvas.<span style="color: #006633;">restore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">150</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		canvas.<span style="color: #006633;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>HanoiDiskShape disk <span style="color: #339933;">:</span> rightRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			disk.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		canvas.<span style="color: #006633;">restore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>boolean onTouch(float x, float y)</h3>
<p>comprueba sobre cual varilla se ha pulsado y llama al método actionOnTouchedRod.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> onTouch<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span> x, <span style="color: #000066; font-weight: bold;">float</span> y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">boolean</span> gameFinished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// limits to detect which rod has been touched</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> topLimit <span style="color: #339933;">=</span> <span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">int</span> bottomLimit <span style="color: #339933;">=</span> <span style="color: #cc66cc;">250</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> leftLimitLeftRod <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">int</span> rightLimitLeftRod <span style="color: #339933;">=</span> leftLimitLeftRod <span style="color: #339933;">+</span> <span style="color: #cc66cc;">150</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> rightLimitMiddleRod <span style="color: #339933;">=</span> rightLimitLeftRod <span style="color: #339933;">+</span> <span style="color: #cc66cc;">150</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">int</span> rightLimitRightRod <span style="color: #339933;">=</span> rightLimitMiddleRod <span style="color: #339933;">+</span> <span style="color: #cc66cc;">150</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>y <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> topLimit <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> y <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> bottomLimit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> leftLimitLeftRod <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> x <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> rightLimitLeftRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 				gameFinished <span style="color: #339933;">=</span> actionOnTouchedRod<span style="color: #009900;">&#40;</span>leftRod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> rightLimitLeftRod <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> x <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> rightLimitMiddleRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 				gameFinished <span style="color: #339933;">=</span> actionOnTouchedRod<span style="color: #009900;">&#40;</span>middleRod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> rightLimitMiddleRod <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> x <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> rightLimitRightRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				gameFinished <span style="color: #339933;">=</span> actionOnTouchedRod<span style="color: #009900;">&#40;</span>rightRod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// forces to redraw</span>
			invalidate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> gameFinished<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>boolean actionOnTouchedRod(Stack&lt;HanoiDiskShape&gt; touchedRod)</h3>
<p>implementa la lógica del juego recibiendo por parámetro la varila que acaba de ser pulsada.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> actionOnTouchedRod<span style="color: #009900;">&#40;</span><span style="color: #003399;">Stack</span> touchedRod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">boolean</span> gameFinished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// if there isn't any selected rod and touchedRod contains disks...</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>rodWithDiskSelected <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> touchedRod.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			touchedRod.<span style="color: #006633;">lastElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			rodWithDiskSelected <span style="color: #339933;">=</span> touchedRod<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>rodWithDiskSelected <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// there is a rod with a disk selected, so...</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// if user has touched the same rod -&amp;gt; unselect disk</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>rodWithDiskSelected.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>touchedRod<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				touchedRod.<span style="color: #006633;">lastElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">unselect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				rodWithDiskSelected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// if not, check if it's a valid move</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>touchedRod.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span>
					<span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>rodWithDiskSelected.<span style="color: #006633;">lastElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">size</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> touchedRod
							.<span style="color: #006633;">lastElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">size</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				rodWithDiskSelected.<span style="color: #006633;">lastElement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">unselect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				touchedRod.<span style="color: #006633;">push</span><span style="color: #009900;">&#40;</span>rodWithDiskSelected.<span style="color: #006633;">pop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				rodWithDiskSelected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// if all disks are in the middle or right rod, game finished!</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>middleRod.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> numberOfDisks
				<span style="color: #339933;">||</span> rightRod.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> numberOfDisks<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			gameFinished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> gameFinished<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>HanoiDiskGame</h2>
<h3><strong>HanoiDiskShape(int _size)</strong></h3>
</div>
<p>Crea un disco del tamaño pasado por parámetro.</p>
<div>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">		<span style="color: #000000; font-weight: bold;">public</span> HanoiDiskShape<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> _size<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> RoundRectShape<span style="color: #009900;">&#40;</span>diskOuterRadius, <span style="color: #000066; font-weight: bold;">null</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">unselect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">size</span> <span style="color: #339933;">=</span> _size <span style="color: #339933;">*</span> <span style="color: #cc66cc;">25</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setBounds</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">size</span>, <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>void select()</h3>
<p>Colorea el disco de un tono transparente para que se note que está seleccionado.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> select<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getPaint</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span>diskSelectedColor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>void unselect()</h3>
<p>Vuelva dejar el disco con el color por defecto.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> unselect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getPaint</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span>diskUnselectedColor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>void onDraw(Shape shape, Canvas canvas, Paint paint)</h3>
<p>Pinta el disco en el escenario.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">		@Override
		<span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onDraw<span style="color: #009900;">&#40;</span><span style="color: #003399;">Shape</span> shape, <span style="color: #003399;">Canvas</span> canvas, <span style="color: #003399;">Paint</span> paint<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			canvas.<span style="color: #006633;">save</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// translates the half of the size to the left, to draw</span>
			<span style="color: #666666; font-style: italic;">// the disk on the center of the rod</span>
			canvas.<span style="color: #006633;">translate</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>size <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			shape.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>canvas, paint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			canvas.<span style="color: #006633;">restore</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span></pre></div></div>

<h1>Anexo</h1>
<p>Hay un par de detalles que quedan fuera del código Java y faltaría mencionar.</p>
<h2>Forzar Activity en landscape</h2>
<p>Para evitar que el activity, HanoiGameActivity en nuestro caso, se gire según si el móvil está en horizontal en vertical, se puede forzar que siempre esté en modo horizontal (landscape) o vertical (portrait). Para esta aplicación nos interesa que siempre se encuentre en posición horizontal para que haya el máximo espacio para manipular los discos. Esto se consigue editando el fichero de configuración AndroidManifest.xml. Localizamos el tag activity que queremos ajustar la posición y lo modificamos añadiendo el valor:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">android<span style="color: #339933;">:</span>screenOrientation<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;landscape&quot;</span></pre></div></div>

<h2>Girar orientación emulador</h2>
<p>Por útlimo, también es posible girar la vista del emulador para que coincida con la orientación landscape que necesitamos para esta aplicación. Esto se puede hacer presionando la combinación de teclas CTRL-F11. Hay muchas más opciones disponibles en el emulador, para más info: <a href="http://developer.android.com/guide/developing/tools/emulator.html">http://developer.android.com/guide/developing/tools/emulator.html</a></p>
<h1>Código fuente completo</h1>
<p>Aquí puedes descargar el código fuente en formato .zip: <a href="http://fegabe.es/blog/wp-content/uploads/2010/01/HanoiTowers.zip">HanoiTowers.zip</a></p>
<p>También se puede encontrar en el repositorio SVN de: <a href="http://code.google.com/p/android-tutorials/">http://code.google.com/p/android-tutorials/</a>. Aunque es posible que contenga modificaciones con respecto a lo aquí mostrado.</p>
<h1>Conclusiones</h1>
<p>Más que conclusiones autocrítica. Me parece que sirve de poco copy-pastear el código si no he explicado nada. No quedo para nada satisfecho con dejarlo tal cual. Espero que el código fuente sirva a alguien aunque no será gracias a mis explicaciones porque no las hay. Para la próxima o bien hago otro desarrollo enfocando desde el principio que lo único que ofreceré será el codigo fuente sin explicaciones (que no creo que tampoco sea insuficiente) o intentaré abarbar un tema concreto (por ejemplo trabajar con las bases de datos) y en lugar de hacer una aplicación haré pequeños códigos que expliquen los conceptos relacionados al tema.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Ejemplos Android] Torres de Hanoi I</title>
		<link>http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-i/</link>
		<comments>http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-i/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 18:38:54 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[proyectos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ejemplos android]]></category>
		<category><![CDATA[hanoi]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=138</guid>
		<description><![CDATA[Introducción a la serie a.k.a. rollo
Después de mucho tiempo siguiéndole la pista al desarrollo Android, sigo con la sensación de que tengo poca práctica y muchas lagunas que me gustaría despejar. Por ese motivo empiezo en este post lo que espero sea una serie de proyectos para Android con la intención que sirvan como ejemplos [...]]]></description>
			<content:encoded><![CDATA[<h1>Introducción a la serie a.k.a. rollo</h1>
<p>Después de mucho tiempo siguiéndole la pista al desarrollo Android, sigo con la sensación de que tengo poca práctica y muchas lagunas que me gustaría despejar. Por ese motivo empiezo en este post lo que espero sea una serie de proyectos para Android con la intención que sirvan como ejemplos para aquellos que como yo queremos aprender a desarrollar aplicaciones móviles sobre esta plataforma. La idea consiste en desarrollar aplicaciones sencillas que cubran diferentes aspectos del SDK sirviendo como ejercicios de aprendizaje.</p>
<p>Este tipo de ejercicios estarán orientados a quien tenga unos conceptos básicos de programación y se haya mirado un poco sobre la plataforma Android. Seguramente no sea muy extenso en las explicaciones ya que me cuesta bastante documentar, soy más de acción. A cambio procuraré que el código sea lo más legible y sencillo posible. Cualquier duda pueden levantar la mano, aunque parece que se han quedado muchas sillas libres en esta sesión&#8230;</p>
<h1>Día 0. Introducción</h1>
<p>El ejemplo a desarrollar es el conocido juego matemático llamada las <strong>Torres de Hanoi</strong>, más rollo <a title="wikipedia" href="http://es.wikipedia.org/wiki/Torres_de_Hanoi">aquí</a>. En resumen, tres palos (rods) que albergan un montón de discos apilados dispuestos de mayor a menor diámetro. El objetivo es desplazar el montón del palo inicial a un palo diferente respetando que el disco sobre el que se coloque sea mayor que el disco desplazado. ¿No está claro verdad? eso es porque no te fuiste al enlace de la wikipedia, segundo y último <a href="http://es.wikipedia.org/wiki/Torres_de_Hanoi">intento</a>.</p>
<p>Trabajaré sobre la versión 1.5 del SDK de Android que a día de hoy aún somos un 31.0% de <a href="http://developer.android.com/resources/dashboard/platform-versions.html">pringadetes</a>.</p>
<h2>Screenshots</h2>
<p>Algunas capturas del desarrollo final:</p>

<a href='http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-i/screenshot01/' title='comienza la partida'><img width="150" height="150" src="http://fegabe.es/blog/wp-content/uploads/2010/01/screenshot01-150x150.png" class="attachment-thumbnail" alt="" title="comienza la partida" /></a>
<a href='http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-i/screenshot02/' title='durante el juego'><img width="150" height="150" src="http://fegabe.es/blog/wp-content/uploads/2010/01/screenshot02-150x150.png" class="attachment-thumbnail" alt="" title="durante el juego" /></a>
<a href='http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-i/screenshot03/' title='ganaste!!'><img width="150" height="150" src="http://fegabe.es/blog/wp-content/uploads/2010/01/screenshot03-150x150.png" class="attachment-thumbnail" alt="" title="ganaste!!" /></a>

<h2>Temas de interés</h2>
<p>Los puntos de interés que se cubrirán en el desarrollo son:</p>
<ul>
<li><em>trabajar con vistas</em></li>
<li><em>gráficos 2D, extendiendo vistas</em></li>
<li><em>modo landscape</em></li>
<li><em>rotar emulador</em></li>
<li><em>touch event</em></li>
<li><em>mostrar alerts con Toast</em></li>
<li><em>modo fullscreen</em></li>
</ul>
<p>Esto no significa que vaya a comentar en detalle  estos conceptos, explicaré cómo los he usado y poco más. No es porque no hayan pagado para entrar (que tampoco), si no que eso es lo único que conozco.</p>
<p>Para ir acabando el día 0, aquí van los recursos de referncia que utilizo para resolver mis dudas:</p>
<ul>
<li><em>el ejemplo </em><strong><em>ApiDemos</em></strong><em> que viene dentro del SDK de Android</em>. Muchas de las cosas que se me ocurren están ya implementadas de alguna manera en esta fantástica guía práctica. Ideal para conocer cómo se usa una clase o método de manera práctica.</li>
<li><strong><em>listas de correo</em></strong><em> oficiales de android,</em> <a href="http://developer.android.com/resources/community-groups.html#ApplicationDeveloperLists">http://developer.android.com/resources/community-groups.html#ApplicationDeveloperLists</a>. Seguramente que donde te encuentres atascado ya lo han estado otros.</li>
<li><a href="http://stackoverflow.com/questions/tagged/android"><strong><em>stackoverflow</em></strong></a><em>, el oráculo de Delfos para los programadores</em>. <a href="http://android-developers.blogspot.com/2009/12/hello-stack-overflow.html">Hace no mucho</a> google anunció que stackoverflow sería un lugar oficial para resolver dudas sobre Android.</li>
</ul>
<p>Ya lo último, el código será alojado el un repositorio SVN dentro del servicio de hosting de Google, aquí <a href="http://code.google.com/p/android-tutorials/">http://code.google.com/p/android-tutorials/</a>. Aquí se podrá descargar la última versión (por si hubiera correciones a lo explicado en el blog) de los ejemplos, aunque también dejaré el empaquetado del código tal cual lo haya explicado en el último post del ejemplo.</p>
<p>Ea.</p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2010/01/ejemplos-android-torres-de-hanoi-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Zombie newZ] Zombie Wars</title>
		<link>http://fegabe.es/blog/2009/12/zombie-newz-zombie-wars/</link>
		<comments>http://fegabe.es/blog/2009/12/zombie-newz-zombie-wars/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 14:42:01 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[proyectos]]></category>
		<category><![CDATA[zombies]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=101</guid>
		<description><![CDATA[Noticiaaaaaaarghh!!!
Después de que la zombificación llegara al mundo Marvel, ahora aterriza en la galaxia lejana más conocida. Parece ser que decidieron no hace mucho que la infección llegara a Star Wars en modo de novela y ahora ha aparecido la versión Z de los carteles de las películas. Con Sin el permiso de Zona Fandom [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><strong>Noticiaaaaaaarghh!!!</strong></p>
<p style="text-align: left;">Después de que la zombificación llegara al mundo <a href="http://es.wikipedia.org/wiki/Marvel_Zombies">Marvel</a>, ahora aterriza en la galaxia lejana más conocida. Parece ser que decidieron no hace mucho que la infección llegara a Star Wars en modo de novela y ahora ha aparecido la versión Z de los carteles de las películas. <span style="text-decoration: line-through;">Con</span> Sin el permiso de <a href="http://www.zonafandom.com/cine-ciencia-ficcion/star-wars-zombie">Zona Fandom</a> les linko la imagen de su post para ir completando la recopilación de Zombie newZ, el noticiero más necrofaguero.</p>
<p style="text-align: center;"><a href="http://www.zonafandom.com/cine-ciencia-ficcion/star-wars-zombie"><img class="aligncenter size-full wp-image-114" src="http://fegabe.es/blog/wp-content/uploads/2009/12/normal_starzombie1.jpg" alt="normal_starzombie1" width="289" height="432" /></a></p>
<p>Más <strong>portadas</strong> e info: <a href="http://www.zonafandom.com/cine-ciencia-ficcion/star-wars-zombie">http://www.zonafandom.com/cine-ciencia-ficcion/star-wars-zombie</a></p>
<p>PD: hace especial gracia la versión zombie de R2D2</p>
<p>PD2: de RePost a RePost y tiro porque me toca</p>
<p>PD3: ¿y androiez qué tal va? bien, gracias</p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/12/zombie-newz-zombie-wars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go, la conquista de Google</title>
		<link>http://fegabe.es/blog/2009/11/go-la-conquista-de-google/</link>
		<comments>http://fegabe.es/blog/2009/11/go-la-conquista-de-google/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 18:26:30 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[opinion]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=93</guid>
		<description><![CDATA[Google lanza un nuevo lenguaje de programación, Go. Hasta ahora era de la opinión de que no necesitaba desarrollar un lenguaje de programación propio porque ya utilizaba los existentes para introducir sus herramientas: GWT usa Java, AppEngine usan python y Java, Android también Java y C++ (usando NDK), &#8230; Ahora además esta misma semana sale [...]]]></description>
			<content:encoded><![CDATA[<p>Google lanza un nuevo lenguaje de programación, Go. Hasta ahora era de la opinión de que no necesitaba desarrollar un lenguaje de programación propio porque ya utilizaba los existentes para introducir sus herramientas: GWT usa Java, AppEngine usan python y Java, Android también Java y C++ (usando NDK), &#8230; Ahora además esta misma semana sale la noticia de que han desarrollado un protocolo llamado SPDY para sustituir al estándar HTTP reducciendo las comunicaciones a la mitad.</p>
<p>Sin duda es de agradecer que una empresa aporte nuevas herramientas y nuevos conceptos haciendo competencia a productos que parecían insuperables, véase iPhone, o en ámbitos donde han abierto el camino, Google Maps, Earth, veremos a ver Wave si consolida también, &#8230;</p>
<p>Aunque la primera reacción conservadora que me surge al oir una nueva noticia como el lanzamiento de Go es pensar: &#8220;Otra vez el listo de la clase&#8221;. Pero pasado esto me encanta que sigan ofreciendo nuevas herramientas, más incluso cuando lo hacen en ámbitos donde no se han aventurado todavía y van al margen de la competencia directa con el resto de la fauna. En las notas de prensa de Go se menciona que tiene la sencillez de lenguajes interpretados como Python, y la velocidad de los compilados como C++, ¿pretenden desbancar a Python?, ¿se plantean en el futuro sustituir a C++? En mi opinión no, y es suficiente en basarse en lo que han hecho hasta ahora: desde las entrañas de Google salta una alarma de que hay algo que se puede hacer mejor (bottom-up? [1]), comienzan a trabajar en ello, sacan una versión si consideran que tienen un producto que aporta algo al ecosistema existente, y luego a ver como va creciendo la criatura. Se trata de competir, si, pero si son capaz de ofrecer algo que es mejor y además lo liberan para que la gente hurgue por donde quiera y  si con este modelo eres capaz de quitarte clientes a la vez que creas adeptos&#8230; entonces en mi opinión esa competencia es la correcta.</p>
<p>Aunque esta manera que he explicado del proceso de generar un nuevo servicio es tan utópico como irreal. En realidad se tratan de nuevas técnicas de hacer mercado, porque al final todo se basa en obtener beneficios económicos. Y esque en lo que creo que Google va por delante, es en sus principios de que no es necesario vender un producto o servicio para sacar rendimiento. Un modelo que a los más viejos del lugar asusta y que no comprenden que conseguir fidelidad es lo que te hará arraigar en el mercado. Si eres la empresa que más vende por el motivo de que tus clientes tienen miedo a cambiarse o porque no les pica esa necesidad, es normal que al final gane la primera empresa que se acerque con algo que funciona mejor, más bonito, que demuestra estar al día y más barato.</p>
<p>La pregunta me queda es si el modelo de Google puede ser llevado por cualquier empresa o solamente por aquellas que tengan recursos de sobra. Espero que sea lo primero y que no tarde mucho en contagiarse que la competencia por excelencia sea el modelo estándar para competir.</p>
<p>Nota mental: soy convencido pro-google pero hace un tiempo que no puedo dejar de pensar en qué pasaría si Google fuera la empesa del maligno (véase monopolio, invasión extraterrestre o descendientes de los atlantes que vienen a recuperar su status). El documental de &#8216;El mundo según Google&#8217; [2] da bastante miedo y el hecho de que en el Hero no suene el despertador cuando le da por ahí [3] me hace pensar que lo que busca esta empresa es dominarnos a todos creando una dependecia extrema a sus servicios y controlándonos como ya quisiera el Gran Hermano [4]. De todas maneras disfruté mucho mientras Google nos iba conquistando y seguro me seguirá divirtiendo desde las trincheras de la revolución.</p>
<p>Nota mental 2: pronostico que Google saltará a otras industrias dando resultados como: alimenticia con GBread, GMilk; arquitectura: GHome; farmacéutica: GBreath; sexual: GWhore; entre otros.</p>
<p>Enlaces</p>
<p>[1] <a href="http://www.kirainet.com/ideas-top-down-vs-ideas-bottom-up/">http://www.kirainet.com/ideas-top-down-vs-ideas-bottom-up/</a><br />
[2] <a href="http://techtastico.com/post/google-behind-the-screen/">http://techtastico.com/post/google-behind-the-screen/</a><br />
[3] <a href="http://code.google.com/p/android/issues/detail?id=1109">http://code.google.com/p/android/issues/detail?id=1109</a><br />
[4] <a href="http://www.goodreads.com/book/show/5470.1984">http://www.goodreads.com/book/show/5470.1984</a></p>
<p>Para los que buscan algo de Go,</p>
<p>[5] Noticia de Google, <a href="http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html">http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html</a><br />
[6] The Go Programming Language Promo, <a href="http://www.youtube.com/watch?v=wwoWei-GAPo&amp;feature=youtube_gdata">http://www.youtube.com/watch?v=wwoWei-GAPo&amp;feature=youtube_gdata</a><br />
[7] Como instalar Go en ubuntu, <a href="http://despuesdegoogle.com/2009/11/13/como-instalar-go-en-ubuntu/">http://despuesdegoogle.com/2009/11/13/como-instalar-go-en-ubuntu/</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 307px; width: 1px; height: 1px;">
<h1>The Go Programming Language Promo</h1>
</div>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/11/go-la-conquista-de-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>noticias zombies</title>
		<link>http://fegabe.es/blog/2009/10/noticias-zombies/</link>
		<comments>http://fegabe.es/blog/2009/10/noticias-zombies/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 08:15:15 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[proyectos]]></category>
		<category><![CDATA[zombies]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=79</guid>
		<description><![CDATA[Últimamente parece que surgen bastantes noticias relacionadas con la temática zombie. Se nota la necesidad de un apocalipsis y ya son varios los intentos fallidos: Bill Gates no se convirtió en el Dr. Maligno con el efecto 2000, la invasión Europea de las vacas locas resultó ser un resfriado, Gaia con sus campos morfogenéticos aún [...]]]></description>
			<content:encoded><![CDATA[<p>Últimamente parece que surgen bastantes noticias relacionadas con la temática zombie. Se nota la necesidad de un apocalipsis y ya son varios los intentos fallidos: Bill Gates no se convirtió en el Dr. Maligno con el efecto 2000, la invasión Europea de las vacas locas resultó ser un resfriado, Gaia con sus campos morfogenéticos aún no se ha cansado de nosotros, a la teoría Maya le faltan efectos especiales&#8230; total, que el pueblo pide Zombies, vengan por la gripe A o por su vacuna.</p>
<p>De momento espero que esta fiebre no pase al menos hasta que se termine Androiez..</p>
<p style="text-align: center;"><strong>Noticia!</strong></p>
<h4>En un mundo devastado, sobreviven dos amigos. Quizás los últimos supervivientes. No son héroes. No son valientes. No son atractivos. Tampoco demasiado inteligentes. Como esperanza para la humanidad no es muy alentador. Se pasan la mayor parte del tiempo en el balcón, disparando a los zombis. Y el resto del tiempo… hablan. En eso ha quedado el Apocalipsis: dos tipos mediocres diciendo tonterías.</h4>
<p></p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/_XPhyGIruxs&#038;hl=es&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/_XPhyGIruxs&#038;hl=es&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>
Más: <a href="http://www.elcansancio.com/berto/llega-zombis/">http://www.elcansancio.com/berto/llega-zombis/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/10/noticias-zombies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El camino de los grandes</title>
		<link>http://fegabe.es/blog/2009/10/el-camino-de-los-grandes/</link>
		<comments>http://fegabe.es/blog/2009/10/el-camino-de-los-grandes/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 19:20:20 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[biografias]]></category>
		<category><![CDATA[historia]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=69</guid>
		<description><![CDATA[Cuando se menciona algún personaje histórico lo primero que aparece entre sus datos biográficos son los resultados de su vida por los que pasó a ocupar un lugar en la historia. Sean estos la novela que inició un género, el descubrimiento de una nueva ciencia o la mayor conquista conocida hasta el momento. Sin embargo [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando se menciona algún personaje histórico lo primero que aparece entre sus datos biográficos son los resultados de su vida por los que pasó a ocupar un lugar en la historia. Sean estos la novela que inició un género, el descubrimiento de una nueva ciencia o la mayor conquista conocida hasta el momento. Sin embargo me parecen realmente interesantes los detalles o pasos que llevaron a estas personas hasta culminar sus grandes hitos. Sin duda se trataron de mentes privilegiadas que identificaron los límites dentro de los que vivían y tuvieron la necesidad y la suerte de conseguir superarlos. Pero estas vidas también contienen detalles hermosos de cómo fueron recorriendo sus pasajes: a veces sin tener claro hacia dónde dirigirse, qué estudiar, lamentándose de que a su edad otros grandes ya habían triunfado o como fue tan importante pararse en el camino para reflexionar durante una temporada. Todos estos detalles tan humanos que permiten entender con más claridad cómo llegaron a lo más alto.</p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/10/el-camino-de-los-grandes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Productividad</title>
		<link>http://fegabe.es/blog/2009/09/productividad/</link>
		<comments>http://fegabe.es/blog/2009/09/productividad/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 18:49:34 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[trabajo]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=62</guid>
		<description><![CDATA[Buscando algunos recursos para evitar distracciones e intentar ser un poco productivo, he encontrado las siguientes técnicas que me están resultando útiles:

Usar firefox Prism, http://labs.mozilla.com/prism/
Desarrollado dentro del Mozilla Labs para firefox, Prism es un addon que permite convertir páginas web como si fueran aplicaciones de escritorio. Esto resulta interesante para transformar las típicas páginas web [...]]]></description>
			<content:encoded><![CDATA[<p>Buscando algunos recursos para evitar distracciones e intentar ser un poco productivo, he encontrado las siguientes técnicas que me están resultando útiles:</p>
<ul>
<li>Usar firefox Prism, <a href="http://labs.mozilla.com/prism/">http://labs.mozilla.com/prism/</a><br />
Desarrollado dentro del Mozilla Labs para firefox, Prism es un addon que permite convertir páginas web como si fueran aplicaciones de escritorio. Esto resulta interesante para transformar las típicas páginas web que siempre están abiertas durante el trabajo (gmail, google docs,&#8230;) y evitar distracciones al hacer imposible que se puedan abrir nuevas pestañas o hacer búsquedas en la caja de texto de google. Las aplicaciones web se convierten en aplicaciones de escritorio dejando de formar parte del navegador que todo lo sabe.</li>
</ul>
<ul>
<li>LeechBlock, <a href="http://www.proginosko.com/leechblock.html">http://www.proginosko.com/leechblock.html</a><br />
Permite configurar reglas para definir grupos de URL a las que quieres visitar durante un tiempo máximo. Así se puede filtrar páginas roba-tiempos como google reader, facebook, imdb,&#8230; y asignarles una cantidad de tiempo límite al día. Cuando se cumple el tiempo la página se bloquea. Altamente configurable</li>
</ul>
<ul>
<li>RescueTime, <a href="http://www.rescuetime.com/">http://www.rescuetime.com/</a><br />
Instalando un cliente en tu ordenador y registrándote en la web, podrás conocer a la perfección el tiempo que dedicas a cada aplicación en tu ordenador. Muy útil para averiguar en dónde pierdes más tiempo.</li>
</ul>
<ul>
<li>Minimizar barra inferior de Windows<br />
Una de las más sencillas pero que realmente funciona, evitando llevar la vista a ventanas que puedan distraer</li>
</ul>
<p><em>Referencias</em>:</p>
<p><a href="http://lifehacker.com/software/lifehacker-top-10/top-10-distraction-stoppers-311387.php">http://lifehacker.com/software/lifehacker-top-10/top-10-distraction-stoppers-311387.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/09/productividad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[androiez] Introducción</title>
		<link>http://fegabe.es/blog/2009/08/androiez-introduccion/</link>
		<comments>http://fegabe.es/blog/2009/08/androiez-introduccion/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 21:19:21 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[proyectos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[androiez]]></category>

		<guid isPermaLink="false">http://fegabe.es/blog/?p=42</guid>
		<description><![CDATA[Androiez es el primer juego que estoy desarrollando para Android. Se trata de un videojuego multijugador basado en un juego de tablero de tablero gratuito de temática zombie: Zombie Plague http://www.fortressfigures.com/zombieplague/.
Empecé a programarlo hace algunos meses y aún se encuentra en fase de desarrollo. La arquitectura de clases está casi cerrada aunque aún quiero repasar [...]]]></description>
			<content:encoded><![CDATA[<p>Androiez es el primer juego que estoy desarrollando para Android. Se trata de un videojuego multijugador basado en un juego de tablero de tablero gratuito de temática zombie: Zombie Plague <a rel="nofollow" href="http://www.fortressfigures.com/zombieplague/" target="_blank">http://www.fortressfigures.com/zombieplague/</a>.</p>
<p>Empecé a programarlo hace algunos meses y aún se encuentra en fase de desarrollo. La arquitectura de clases está casi cerrada aunque aún quiero repasar un poco el patrón MVC que he implementado porque me parece que se podría aislar un poco mejor la capa del modelo.</p>
<p>Las próximas tareas consistirán en definir formalmente los estados de la aplicación, diseñar las GUI para los tres perfiles (ZombieMaster, Humanos y Humanos Zombificados), y comenzar a implementar la lógica de juego y reglas.</p>
<p>Me gustaría decir que está a un 40% pero seguramente será algo menos, espero al menos que para finales de año alcance para tener una versión alpha que pueda distribuir a algunos testers. Con un poco de suerte me habré movido lo suficiente para encontrar gente que quiera participar en el desarrollo. Me conformaría con un diseñador gráfico y game designer si es posible.</p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/08/androiez-introduccion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World</title>
		<link>http://fegabe.es/blog/2009/08/hello-world/</link>
		<comments>http://fegabe.es/blog/2009/08/hello-world/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 18:53:20 +0000</pubDate>
		<dc:creator>fegabe</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[calor]]></category>

		<guid isPermaLink="false">http://labutxacadelpollastre.wordpress.com/?p=19</guid>
		<description><![CDATA[Ahora no escribiré, tengo mucho calor
]]></description>
			<content:encoded><![CDATA[<p>Ahora no escribiré, tengo mucho calor</p>
]]></content:encoded>
			<wfw:commentRss>http://fegabe.es/blog/2009/08/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
