<?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>Barail</title>
	<atom:link href="http://www.barail.es/feed/lang/es/" rel="self" type="application/rss+xml" />
	<link>http://www.barail.es</link>
	<description></description>
	<lastBuildDate>Tue, 13 Apr 2010 20:07:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutorial completo de HTML4 y CSS2 (parte 2)</title>
		<link>http://www.barail.es/internet/html4-css2-2</link>
		<comments>http://www.barail.es/internet/html4-css2-2#comments</comments>
		<pubDate>Fri, 09 Apr 2010 22:00:17 +0000</pubDate>
		<dc:creator>Rolpege</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=706</guid>
		<description><![CDATA[Visita la parte 1 de éste tutorial
En el anterior tutorial aprendimos como crear una página web y definimos HTML, CSS, W3C y AcidTest.
También aprendimos la sintaxis del HTML y su estructura básica. Finalmente aprendimos dónde escribir ésta estructura y la guardamos para poder copiarla e ir más rápida. Para seguir los tutoriales de aquí, recomiendo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.barail.es/internet/html4-css2-1">Visita la parte 1 de éste tutorial</a></p>
<p>En el anterior tutorial aprendimos como crear una página web y definimos HTML, CSS, W3C y AcidTest.</p>
<p>También aprendimos la sintaxis del HTML y su estructura básica. Finalmente aprendimos dónde escribir ésta estructura y la guardamos para poder copiarla e ir más rápida. Para seguir los tutoriales de aquí, recomiendo tenerlos todos en una carpeta que sepamos dónde está para organizarnos mejor.</p>
<p>Vale. Ahora copiaremos el archivo con la estructura básica y lo pegaremos en la carpeta con el nombre de parte2.html . También le podemos cambiar el título por Parte 2 (lo que hay entre &lt;title&gt; y &lt;/title&gt;).</p>
<p>Lo ideal sería ir siguiendo todos los códigos que voy mencionando aquí e ir poniéndolos en el archivo que hemos creado para probar por nosotros mismos ya que, aunque aquí ya mostraré como queda, lo mejor es ir copiando a mano los elementos para ir aprendiendo al ritmo que lees.</p>
<p>Empecemos:</p>
<p><strong><em><span style="text-decoration: underline;">Títulos</span></em></strong></p>
<p style="padding-left: 30px;">En HTML tenemos hasta 6 títulos diferentes según la importancia.</p>
<p style="padding-left: 30px;">Son éstos:</p>
<pre style="padding-left: 30px;" lang="html4strict">&lt;h1&gt;Título1&lt;/h1&gt;
&lt;h2&gt;Subtítulo&lt;/h2&gt;
&lt;h3&gt;Subsubtítulo&lt;/h3&gt;
&lt;h4&gt;Subsubsubtítulo&lt;/h4&gt;
&lt;h5&gt;Subsubsubsubtítulo&lt;/h5&gt;
&lt;h6&gt;Subsubsubsubsubtítulo&lt;/h6&gt;</pre>
<p style="padding-left: 30px;">Cada título es más importante que sus inferiores. El H1 suele usarse para el título de toda la página (y del sitio web en general). Por ejemplo, en Barail el h1 sería Barail.</p>
<p style="padding-left: 30px;">El código que hemos mostrado anteriormente queda más o menos así:</p>
<div style="padding-left: 30px;">
<h1>Título</h1>
<h2>Subtítulo</h2>
<h3>Subsubtítulo</h3>
<h4>Subsubsubtítulo</h4>
<h5>Subsubsubsubtítulo</h5>
<h6>Subsubsubsubsubtítulo</h6>
</div>
<p><strong><em><span style="text-decoration: underline;">Párrafos</span></em></strong></p>
<p style="padding-left: 30px;">En HTML además de títulos tenemos, por supuesto, párrafos.</p>
<p style="padding-left: 30px;">Los párrafos se escriben así:</p>
<pre style="padding-left: 30px;" lang="html4strict">&lt;p&gt;Hola, soy un párrafo&lt;/p&gt;</pre>
<p style="padding-left: 30px;">Para ver como quedan… sólo tenéis que fijaros en el texto normal de éste artículo. Son todo párrafos.</p>
<p style="padding-left: 30px;">Ahora que ya conocemos los títulos y los párrafos me gustaría añadir una cosa: todo texto en HTML debe ir dentro de un elemento de título o párrafo (o código, que los aprenderemos quizá más adelante), no podemos dejar suelto un texto normal directamente en el body.</p>
<p><strong><em><span style="text-decoration: underline;">Líneas horizontales</span></em></strong></p>
<p style="padding-left: 30px;">En HTML podemos insertar líneas horizontales con una &#8220;tag vacía&#8221; de ésta manera:</p>
<pre style="padding-left: 30px;" lang="html4strict">&lt;hr /&gt;</pre>
<p style="padding-left: 30px;">Y quedan más o menos de la siguiente manera:</p>
<hr style="padding-left: 30px;" /><strong><em><span style="text-decoration: underline;">Salto de línea</span></em></strong></p>
<p style="padding-left: 30px;">En HTML podemos insertar un salto de línea sin tener que insertar dos párrafos distintos. <strong>Atención:</strong> Los saltos de línea no sirven para sustituir a los párrafos. Sólo se deben usar si son estrictamente necesarios:</p>
<p style="padding-left: 30px;">Se escriben de la siguiente manera, en otra &#8220;tag vacía&#8221;:</p>
<pre style="padding-left: 30px;" lang="html4strict">&lt;br /&gt;</pre>
<p style="padding-left: 30px;">El resultado que dan es bastante previsible. Aun así voy a mostrar un ejemplo:</p>
<p style="padding-left: 30px;">Hola.<br />
Hola. Yo estoy debajo porque me han puesto un salto de línea.</p>
<p><strong><em><span style="text-decoration: underline;">Formateando el texto</span></em></strong></p>
<p style="padding-left: 30px;">Hay muchas maneras de formatear un texto en HTML. Nótese que éstos elementos, ya que actúan sobre un texto, deben estar dentro de un párrafo (o título…):</p>
<div style="padding-left: 30px;">

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>strong<span style="color: #ddbb00;">&amp;gt;</span>Texto fuerte<span style="color: #ddbb00;">&amp;lt;</span>/strong<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>em<span style="color: #ddbb00;">&amp;gt;</span>Texto con énfasis<span style="color: #ddbb00;">&amp;lt;</span>/em<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;</span>H<span style="color: #ddbb00;">&amp;lt;</span>sub<span style="color: #ddbb00;">&amp;gt;</span>2<span style="color: #ddbb00;">&amp;lt;</span>/sub<span style="color: #ddbb00;">&amp;gt;</span>O<span style="color: #ddbb00;">&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;</span>3<span style="color: #ddbb00;">&amp;lt;</span>sup<span style="color: #ddbb00;">&amp;gt;</span>2<span style="color: #ddbb00;">&amp;lt;</span>/sup<span style="color: #ddbb00;">&amp;gt;</span> = 9<span style="color: #ddbb00;">&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;</span>He <span style="color: #ddbb00;">&amp;lt;</span>del<span style="color: #ddbb00;">&amp;gt;</span>borrado<span style="color: #ddbb00;">&amp;lt;</span>/del<span style="color: #ddbb00;">&amp;gt;</span> un texto para <span style="color: #ddbb00;">&amp;lt;</span>ins<span style="color: #ddbb00;">&amp;gt;</span>insertar<span style="color: #ddbb00;">&amp;lt;</span>/ins<span style="color: #ddbb00;">&amp;gt;</span> otro<span style="color: #ddbb00;">&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>abbr title=&quot;Loud of laughs&quot;<span style="color: #ddbb00;">&amp;gt;</span>LOL<span style="color: #ddbb00;">&amp;lt;</span>/abbr<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>p<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>q<span style="color: #ddbb00;">&amp;gt;</span>Soy una cita<span style="color: #ddbb00;">&amp;lt;</span>/q<span style="color: #ddbb00;">&amp;gt;&amp;lt;</span>/p<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

</div>
<p style="padding-left: 30px;">Ésto muestra:</p>
<p style="padding-left: 30px;"><strong>Texto fuerte</strong></p>
<p style="padding-left: 30px;"><em>Texto con énfasis</em></p>
<p style="padding-left: 30px;">H<sub>2</sub>O</p>
<p style="padding-left: 30px;">3<sup>2</sup> = 9</p>
<p style="padding-left: 30px;">He <del>borrado</del> un texto para <ins>insertar</ins> otro.</p>
<p style="padding-left: 30px;"><abbr title="Loud of Laughs">LOL</abbr></p>
<p style="padding-left: 30px;"><q>Soy una cita</q></p>
<p><strong><em><span style="text-decoration: underline;">Más bloques de texto</span></em></strong></p>
<p style="padding-left: 30px;">Hasta ahora hemos visto los párrafos y los títulos como bloques de texto. Pero hay más:</p>
<div style="padding-left: 30px;">

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #ddbb00;">&amp;lt;</span>pre<span style="color: #ddbb00;">&amp;gt;</span>Soy un código<span style="color: #ddbb00;">&amp;lt;</span>/pre<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>address<span style="color: #ddbb00;">&amp;gt;</span>Soy una dirección<span style="color: #ddbb00;">&amp;lt;</span>/address<span style="color: #ddbb00;">&amp;gt;</span>
<span style="color: #ddbb00;">&amp;lt;</span>blockquote<span style="color: #ddbb00;">&amp;gt;</span>Soy una cita en bloque de texto<span style="color: #ddbb00;">&amp;lt;</span>/blockquote<span style="color: #ddbb00;">&amp;gt;</span></pre></div></div>

</div>
<p style="padding-left: 30px;">Ésto quedaría así:</p>
<div style="padding-left: 30px;">
<pre>Soy un código</pre>
<address>Soy una dirección</address>
<blockquote><p>Soy una cita en bloque de texto</p></blockquote>
</div>
<p style="padding-left: 30px;">Al ser éstos bloques de texto, no deben estar en ningún párrafo ya que un párrafo es también un bloque de texto.</p>
<p><strong><em><span style="text-decoration: underline;">Enlaces</span></em></strong></p>
<p style="padding-left: 30px;">En HTML podemos diferenciar tres tipos de enlaces: los enlaces absolutos, los enlaces relativos al documento y los puntos de fijación. Todos los tres tipos de enlace se escriben con la misma etiqueta: &lt;a&gt;.</p>
<p style="padding-left: 30px;">Los primeros, los enlaces absolutos, nos pueden enviar a cualquier documento de la red. Son aquellos que empiezan con http:// y contienen toda la dirección web en sí. Los relativos al documento son enlaces a otros documentos de nuestro mismo servidor, y se escriben usando de principio a nuestro documento. Por ejemplo, si queremos enlazar a un html llamado &#8220;acerca-de.html&#8221; escribiremos el enlace a &#8220;acerca-de.html&#8221;. Si está en la carpeta &#8220;informacion&#8221;, podemos escribir &#8220;informacion/acerca-de.html&#8221;. Si está en una carpeta al exterior de la carpeta que contiene nuestro documento (por ejemplo, si nuestro documento es acerca-de.html y queremos enlazar al documento anterior), escribiremos &#8220;../documento.html&#8221;. Estos ../ podemos escribirlos tantas veces como queramos para situarnos a carpetas más lejanas a la nuestra, de la misma manera que podemos acceder a carpetas que están dentro de carpetas dentro de carpetas que están dentro de carpetas (&#8230;) dentro de la carpeta dónde está nuestro documento.</p>
<p style="padding-left: 30px;">Finalmente tenemos los enlaces al mismo documento. Éstos enlaces funcionan de una manera curiosa. Primero tenemos que crear una referencia en nuestro documento, por ejemplo &#8220;conclusión&#8221; dentro de una página muy larga en el lugar dónde está nuestra conclusión. Después podríamos escribir un enlace a &#8220;#conclusión&#8221; y cuándo se pulsase, se bajaría la scrollbar de la página hasta llegar a la conclusión.</p>
<p style="padding-left: 30px;">Para los primeros dos, los absolutos y los relativos los escribiremos en el atributo href. Por ejemplo: href=&#8221;http://www.google.es/&#8221; llevaría en una ruta absoluta a Google. De la misma manera, podemos enlazar a una ruta relativa sin el http, como hemos aprendido antres.</p>
<p style="padding-left: 30px;">Para hacer los últimos podemos hacer lo siguiente. La referencia se crea rodeando a la sección a la que nos referiremos con a y un atributo name para darle nombre a la sección. Después, para acceder allí hacemos un a href normal con &#8220;#nombre-sección&#8221;</p>
<p><strong><em><span style="text-decoration: underline;">Imágenes</span></em></strong></p>
<p style="padding-left: 30px;">Las imágenes se insertan con la etiqueta vacía &lt;img /&gt;. Para decirle dónde se encuentra la imagen que queremos insertar podemos utilizar dos de los tipos de rutas que utilizamos con los enlaces: rutas absolutas o relativas al documento y las insertaremos en el atributo src. También debemos insertar una descripción de la imagen con el atributo alt que se mostrará si la imagen no puede cargarse o el navegador las tiene deshabilitadas.</p>
<p>Hasta aquí hemos aprendidos suficientes elementos de HTML para hoy.</p>
<p>Mañana aprenderemos a insertar tablas, listas y formularios. También aprenderemos acerca de las &#8220;entities&#8221; y elementos que podemos añadir al &#8220;head&#8221;, como por ejemplo las &#8220;META&#8221;. ¡Hasta la parte 3!</p>
<p><a href="http://www.barail.es/internet/html4-css2-1">Visita la parte 1 de éste tutorial</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/internet/html4-css2-2/feed/lang/es/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutorial de juego de Plataformas con Game Maker, parte 3</title>
		<link>http://www.barail.es/software/platforms-game-tutorial-game-maker-3</link>
		<comments>http://www.barail.es/software/platforms-game-tutorial-game-maker-3#comments</comments>
		<pubDate>Thu, 08 Apr 2010 22:00:29 +0000</pubDate>
		<dc:creator>Selkie</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=711</guid>
		<description><![CDATA[Saludos amigos!
Por fin, al final del último tutorial, terminamos nuestro sistema base de plataformas&#8230; así que, ¿qué nos toca hacer hoy?
Pues hoy nos toca algo más difícil aparentemente, aunque sólo hay que perderle el miedo en el caso de que nunca hayas usado código. Vamos a aprender GML, ya sabéis, Game Maker Language.
Este lenguaje nos [...]]]></description>
			<content:encoded><![CDATA[<p>Saludos amigos!</p>
<p>Por fin, al final del <a href="http://www.barail.es/software/platforms-game-tutorial-game-maker-2">último tutorial</a>, terminamos nuestro sistema base de plataformas&#8230; así que, ¿qué nos toca hacer hoy?</p>
<p>Pues hoy nos toca algo más difícil aparentemente, aunque sólo hay que perderle el miedo en el caso de que nunca hayas usado código. Vamos a aprender <strong>GML</strong>, ya sabéis, <em>Game Maker Language</em>.</p>
<p>Este lenguaje nos va a servir para programar en <em>Game Maker</em> con más posibilidades y más rapidez, y también para aprender a programar con código si nunca lo hemos hecho.</p>
<p>Lo que vamos a hacer con <strong>GML</strong> es exactamente lo mismo que en los anteriores tutoriales&#8230; pero esta vez lo haremos de otra manera, usando <strong>GML</strong>.</p>
<p>Explicaré <strong>cómo ejecutar un código GML dentro de un evento</strong>. Es como ejecutar cualquier otra acción, con un bloque, pero usaremos un bloque específico, que se encuentra en la pestaña <em>control</em> y se llama <strong><em>Execute Code</em></strong>.</p>
<p>Cuando lo pongamos, nos saldrá una pantallita como esta:</p>
<p><a href="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_codigo.png"><img class="aligncenter size-full wp-image-713" title="GML" src="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_codigo.png" alt="" width="578" height="378" /></a></p>
<p>Bueno, <strong>aquí es donde escribiremos nuestro código</strong>, y le daremos al icono del tick verde para guardarlo. Una vez sabemos hacer esto, podemos empezar a sustituir Drag &amp; Drop por GML.</p>
<p><strong>Abrimos el objeto del personaje</strong>, vamos a cambiarlo evento por evento. El primero que tenemos es <strong>Create</strong>, que es donde especificamos algunas variables.</p>
<p>Teníamos lo siguiente: <strong>Set variable <em>salto</em> to <em>0</em></strong>; <strong>Set the gravity to <em>1</em> in direction <em>270</em></strong>.</p>
<p>En GML sería así:</p>

<div class="wp_syntax"><div class="code"><pre class="gml" style="font-family:monospace;">salto <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">0</span>
<span style="font-weight: bold; color: #000000;">gravity</span> <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">1</span>
<span style="font-weight: bold; color: #000000;">gravity_direction</span> <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">270</span></pre></div></div>

<p>Usando doble barra ( // ) podemos poner <strong>comentarios, que no son interpretados en el código</strong>, así que sirven para anotaciones, explicaciones, etcétera.</p>

<div class="wp_syntax"><div class="code"><pre class="gml" style="font-family:monospace;">salto <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">0</span> <span style="font-style: italic; color: green;">// Creamos una variable llamada salto con valor inicial 0</span>
<span style="font-weight: bold; color: #000000;">gravity</span> <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">1</span> <span style="font-style: italic; color: green;">// Gravedad. Esta variable ya viene con Game Maker, le estamos dando de valor 1</span>
<span style="font-weight: bold; color: #000000;">gravity_direction</span> <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">270</span> <span style="font-style: italic; color: green;">// Esta otra variable es la dirección de la gravedad y también viene con Game Maker</span></pre></div></div>

<p>Por ahora es muy simple, aquí hemos asignado valores a algunas variables. &#8220;<em>variable = valor</em>&#8220;. Una vez hemos guardado el bloque <em>Execute Code</em>, <strong>hay que borrar los demás, para no ejecutar las acciones dos veces</strong>.</p>
<p>Ahora vamos con el evento de <strong>colisión con Muro</strong>, uno más difícil, en el que vamos a ver condiciones y funciones.</p>
<p>Sería algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="gml" style="font-family:monospace;"><span style="font-weight: bold; color: #000000;">if</span> <span style="color: #66cc66; font-weight: bold;">!</span><span style="color: navy;">place_free</span><span style="color: #000000;">&#40;</span><span style="font-weight: bold; color: #000000;">x</span><span style="color: #66cc66; font-weight: bold;">,</span><span style="font-weight: bold; color: #000000;">y</span><span style="color: #66cc66; font-weight: bold;">+</span><span style="font-weight: bold; color: #000000;">vspeed</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span> <span style="font-style: italic; color: green;">// La llave ( { ) equivale a Start of a Block</span>
<span style="font-weight: bold; color: #000000;">if</span> <span style="font-weight: bold; color: #000000;">vspeed</span> <span style="color: #66cc66; font-weight: bold;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #000000;">&#123;</span> <span style="font-style: italic; color: green;">// &gt; significa mayor que.</span>
salto <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">0</span>
<span style="color: navy;">move_contact_solid</span><span style="color: #000000;">&#40;</span><span style="color: #cc66cc;">270</span><span style="color: #66cc66; font-weight: bold;">,</span><span style="font-weight: bold; color: #000000;">vspeed</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#125;</span> <span style="font-style: italic; color: green;">// Cerrar llave ( } ) equivale a End of a Block</span>
<span style="font-weight: bold; color: #000000;">else</span><span style="color: #000000;">&#123;</span> <span style="font-style: italic; color: green;">//Esto es igual que el bloque Else</span>
<span style="color: navy;">move_contact_solid</span><span style="color: #000000;">&#40;</span><span style="color: #cc66cc;">90</span><span style="color: #66cc66; font-weight: bold;">,-</span><span style="font-weight: bold; color: #000000;">vspeed</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#125;</span>
<span style="font-weight: bold; color: #000000;">vspeed</span> <span style="color: #66cc66; font-weight: bold;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #000000;">&#125;</span></pre></div></div>

<p>Recordad que el texto después de &#8220;//&#8221; no se ejecuta, son comentarios.</p>
<p>Lo que vemos aquí son las <strong>condiciones</strong>, que <strong>se indican con la sentencia &#8220;<em>if</em>&#8220;.</strong> Tras ella se suele poner una variable y un valor, pero también vemos &#8220;!place_free(x,y+vspeed)&#8221;. Es la función place_free, negada (El símbolo de exclamación &#8220;!&#8221; sirve para negar. Por ejemplo, &#8220;variable != 0&#8243; significa que la variable no es 0).</p>
<p>Luego hay un paréntesis que contiene los <strong>argumentos</strong>. Los argumentos son datos que se proporcionan a la función para especificar lo que tiene que hacer. <strong>Son distintos para cada función y se separan con coma</strong>. Por ejemplo, en place_free, los argumentos son x,y. En este caso el primer argumento está asignado a x, por lo cuál la x será la misma que la del objeto. El segundo argumento, y, está asignado a y+vspeed, por lo que la y será la y del objeto más su velocidad vertical.</p>
<p>Otra función es <em>move_contact_solid</em>, cuyo primer argumento es la dirección. En el segundo, se indica la distancia máxima (nosotros pondremos vspeed).</p>
<p>Lo demás es lo mismo, <strong>aplicar lo que hemos aprendido</strong>. Lo que puede dar dificultad es conocer las funciones que hay que usar, pero son fáciles de adivinar.</p>
<p>Por ejemplo, queremos saber <strong>la función para ir a la siguiente room</strong>. Entonces, en el editor de código escribimos &#8220;<em>room</em>&#8220;. Dejamos el cursor quieto un rato, y nos aparecerá <strong>un pop-up con las funciones, variables o constantes</strong> que empiecen por <em>room</em>. Ahí, si sabemos algo de inglés, podremos encontrar la apropiada&#8230; <em>room_goto_next</em>. A propósito, esta función no tiene argumentos, <strong>las funciones sin argumentos no se dejan tal cuál</strong>, sino que se pone al final un paréntesis vación, &#8220;()&#8221;.</p>
<p>Sería:</p>

<div class="wp_syntax"><div class="code"><pre class="gml" style="font-family:monospace;"><span style="color: navy;">room_goto_next</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p>Podría explicar más cosas, pero sería redundante, ya <strong>hemos visto variables, condiciones y funciones</strong>&#8230; con esto basta para pasar todas las acciones de nuestro juego a GML. ¡Ya sabéis qué toca! Ago</p>
<p>Pero por si acaso&#8230; aquí está <strong>el ejemplo terminado</strong>, con algún pequeño añadido. Debería funcionar perfectamente, así que si tenéis algún problema os ruego que me lo comuniquéis. <strong>Descárgalo <a href="http://www.google.com/url?sa=D&amp;q=http%3A%2F%2Fwww.mediafire.com%2F%3Fvywht2i2wti" target="_blank">aquí</a>.</strong></p>
<p>Y el próximo día podría ser un buen momento para poner en nuestro juego&#8230;</p>
<p>¡Bueno, lo dejaré como una sorpresa!</p>
<p><strong>¡Saludos!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/software/platforms-game-tutorial-game-maker-3/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial completo de HTML4 y CSS2 (parte 1)</title>
		<link>http://www.barail.es/internet/html4-css2-1</link>
		<comments>http://www.barail.es/internet/html4-css2-1#comments</comments>
		<pubDate>Wed, 07 Apr 2010 22:00:26 +0000</pubDate>
		<dc:creator>Rolpege</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=681</guid>
		<description><![CDATA[Saludos, lector!
¿Alguna vez has deseado crear tu propia página web? ¿Quizá para enseñarla a tus amigos, o puede que algo más serio? Dan igual las razones. ¡En este artículo te enseñaré a crear tu propia página web!… ¡¡y de manera muy simple!!
Primero, un poco de conceptos.
¿Cómo la vamos a crear?
Primero de todo necesitamos saber cómo [...]]]></description>
			<content:encoded><![CDATA[<p>Saludos, lector!</p>
<p>¿Alguna vez has deseado crear tu propia página web? ¿Quizá para enseñarla a tus amigos, o puede que algo más serio? Dan igual las razones. ¡En este artículo te enseñaré a crear tu propia página web!… ¡¡y de manera muy simple!!</p>
<p>Primero, un poco de conceptos.</p>
<p><strong><em><span style="text-decoration: underline;">¿Cómo la vamos a crear?</span></em></strong></p>
<p style="padding-left: 30px;">Primero de todo necesitamos saber cómo crearemos nuestra página web. Bien, usaremos <strong>HTML</strong> para el <strong>contenido y la estructura</strong> y <strong>CSS</strong> para la <strong>presentación</strong>. Más específicamente, las versiones 4 y 2 de éstos lenguajes respectivamente.</p>
<p><strong><em><span style="text-decoration: underline;">¿HTML?</span></em></strong></p>
<p style="padding-left: 30px;">HTML (<strong><em>H</em></strong><em>yper</em><strong><em>T</em></strong><em>ext </em><strong><em>M</em></strong><em>arkup </em><strong><em>L</em></strong><em>anguag</em>e o Lenguaje de marcado de hipertexto) es el lenguaje de marcado (lenguaje de marcado es una forma de codificar el texto que, junto con el texto en sí, incorpora etiquetas o marcas que contienen información adicional acerca de la estructura del texto o su presentación) predominante para la elaboración de páginas web. Es usado para describir la estructura y el contenido en forma de texto, así como para complementar el texto con objetos tales como imágenes.</p>
<p><strong><em><span style="text-decoration: underline;">¿CSS?</span></em></strong></p>
<p style="padding-left: 30px;">CSS (<strong><em>C</em></strong><em>ascading </em><strong><em>S</em></strong><em>tyle </em><strong><em>S</em></strong><em>heet</em>s o hojas de estilo en cascada) es un lenguaje usado para definir la presentación de un documento estructurado en HTML (y otros).</p>
<p style="padding-left: 30px;">La razón principal de la existencia del CSS es separar la estructura de un texto de su presentación.</p>
<p>Creo que ya están definidos los términos más básicos a los que nos referiremos en éste tutorial. Sin embargo, creo que definir a los estándares y al W3C es también primordial.</p>
<p><strong><em><span style="text-decoration: underline;">El W3C y sus estándares</span></em></strong></p>
<p style="padding-left: 30px;">El W3C (<strong><em>W</em></strong><em>orld </em><strong><em>W</em></strong><em>ide </em><strong><em>W</em></strong><em>eb </em><strong><em>C</em></strong><em>onsortium</em> &#8211; consorcio para la web) es un consorcio internacional que produce recomendaciones para la WWW (<em>World Wide Web</em>) o simplemente web. Está dirigida por Tim Berners-Lee, el creador original de URL (<em>Uniform Resource Locator)</em>, HTTP (<em>HyperText Transfer Protocol</em> &#8211; Protocolo de transferencia de hipertexto) y HTML que son las principales tecnologías sobre las que se basa la Web.</p>
<p style="padding-left: 30px;">El W3C tiene unos estándares (o recomendaciones) que son una serie de reglas para HTML, CSS, etc. y que sirven para que todas las web estén escritas con los mismos elementos y para que todos los navegadores visualizen una web de la misma manera (Internet Explorer de Windows es famoso por no cumplirlos. Los otros navegadores los cumplen todos o casi todos).</p>
<p><strong><em><span style="text-decoration: underline;">AcidTest</span></em></strong></p>
<p style="padding-left: 30px;">Por último, como extra acerca de los estándares, os mencionaré el AcidTest. El AcidTest es un test que prueba la capacidad que tiene un navegador para cumplir los estándares. Existen tres de ellos: el 1, el 2 y el 3. Todos los navegadores intentan ser los que pasen los tests con una puntuación del 100%. Actualmente, en el último test solo alcanzan un 100% los navegadores basados en WebKit, como Safari o Google Chrome.</p>
<p style="padding-left: 30px;"><a href="http://www.acidtests.org/" target="_blank">¡Desafía a tu navegador!</a></p>
<p>Finalmente, creo que ya conocemos todos los conceptos necesarios para crear una web en HTML. Ahora voy a explicaros cómo organizaré el tutorial: Primero explicaré HTML y después le añadiremos CSS.</p>
<p>Bien, empecemos!</p>
<p><em><strong><span style="text-decoration: underline;">Objetos de HTML</span></strong></em></p>
<p style="padding-left: 30px;">HTML está compuesto por objetos (de hecho, no sé como llamarlos) muy básicos. Los elementos y los atributos.</p>
<p style="padding-left: 30px;">Los elementos se definen con etiquetas. Por ejemplo: &lt;strong&gt;Hola&lt;/strong&gt;. Hola sería un elemento de negrita. Los elementos siempre empiezan con una etiqueta de principio y una de fin. La etiqueta de principio es &lt;nombredelaetiqueta&gt; y la de fin &lt;/nombredelaetiqueta&gt;. El contenido del elemento será lo que está entre éstas dos etiquetas.</p>
<p style="padding-left: 30px;">Algunos elementos no tienen contenido, como por ejemplo las imagenes, ya que es ilogico que haya algún contenido. En éste caso se escriben así: &lt;nombredelaetiqueta /&gt; (con el espacio antes de la barra de fin).</p>
<p style="padding-left: 30px;">También tenemos los atributos. Los atributos establecen propiedades en los elementos. Por ejemplo: &lt;a href=&#8221;http://www.barail.es&#8221;&gt;Barail&lt;/a&gt;. A significa enlace. Con esta etiqueta, estamos diciendo que Barail es un enlace. Además, tiene un atributo que es href. El atributo href significa dónde dirige el enlace. Aquí vemos como se escribe un atributo:</p>
<p style="padding-left: 30px;">&lt;nombredelaetiqueta atributo=&#8221;valor&#8221;&gt;Contenido&lt;/nombredelaetiqueta&gt;.</p>
<p style="padding-left: 30px;">Como podemos comprobar, los atributos se definen sólo a la etiqueta del principio.</p>
<p>Ya sabemos qué objetos tiene un archivo HTML.</p>
<p><strong><em><span style="text-decoration: underline;">Estructura básica de un documento HTML</span></em></strong></p>
<p style="padding-left: 30px;">Todo documento HTML tiene una estructura básica, una serie de elementos obligatorios que forman los cimientos dónde vamos a trabajar.</p>
<p style="padding-left: 30px;">Ésta estructura, en HTML 4, es (en otras versiones cambia sólo la primera línea):</p>
<p style="padding-left: 30px;">
<div style="margin-left: 30px;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

</div>
<p style="padding-left: 30px;">Vamos a explicar los elementos que podemos ver aquí.</p>
<p style="padding-left: 30px;">El primer elemento, el tal DOCTYPE es especial. Lo único que debemos saber de él junto con sus contenidos es que nos dice que el archivo está escrito en HTML4 estricto (estricto significa que los elementos definidos como deprecated [no-usados o algo así sería la traducción] no se pueden usar [a diferencia de Transitional]).</p>
<p style="padding-left: 30px;">El elemento html, que es el que viene a continuación, significa que lo de dentro es html. Por supuesto es obligatorio.</p>
<p style="padding-left: 30px;">Después viene el head. En el head se establecerá la información de la página que no se muestra en su contenido. El único elemento obligatorio del head es el título de la página. El título es el texto que se muestra en cada pestaña de tu navegador o en el título de la ventana.</p>
<p style="padding-left: 30px;">Después del head se encuentra el body. Es dónde irá el contenido que se ve en una página.</p>
<p><strong><em><span style="text-decoration: underline;">¿Dónde y cómo escribiremos ésta estructura?</span></em></strong></p>
<p style="padding-left: 30px;">Ésta estructura debe ser escribida como archivo HTML (archivo con extensión .html). Para escribir archivos de éstos podemos hacerlo con cualquier <a href="http://www.barail.es/software/source-code-editors" target="_blank">editor de código fuente</a>. Una vez hemos guardado el archivo, se puede abrir con un navegador para mostrarlo en forma de página web.</p>
<p>Para finalizar, guardaremos ésta estructura en un lugar accesible. La copiaremos siempre que querramos hacer una nueva página HTML: nos ahorrará tiempo.</p>
<p>Hasta aquí la primera parte del tutorial. En la siguiente empezaremos a revisar algunos elementos HTML. ¡Hasta la próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/internet/html4-css2-1/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX y la Web 2.0</title>
		<link>http://www.barail.es/internet/ajax-web-2-0</link>
		<comments>http://www.barail.es/internet/ajax-web-2-0#comments</comments>
		<pubDate>Tue, 06 Apr 2010 22:00:42 +0000</pubDate>
		<dc:creator>Daniel Rey</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=680</guid>
		<description><![CDATA[Es bastante probable que hayáis oído hablar de &#8220;la web&#8220;. No en vano, estáis en ella. Si sois diseñadores web o lleváis un tiempo navegando por Internet, tal vez hayáis oído la palabra &#8220;web 2.0&#8220;. Y quizás os hayáis preguntado qué significa. ¿Acaso para tener la &#8220;web 2.0&#8221; tengo que pagar más a mi operador [...]]]></description>
			<content:encoded><![CDATA[<p>Es bastante probable que hayáis oído hablar de &#8220;<em>la web</em>&#8220;. No en vano, estáis en ella. Si sois diseñadores web o lleváis un tiempo navegando por Internet, tal vez hayáis oído la palabra &#8220;<strong>web 2.0</strong>&#8220;. Y quizás os hayáis preguntado qué significa. ¿Acaso para tener la &#8220;<em>web 2.0</em>&#8221; tengo que pagar más a mi operador de telefonía? No, aunque les he visto cobrar por tonterías mayores. Entonces, ¿qué es eso?</p>
<p>Hace un tiempo escribí <a href="http://www.barail.es/internet/javascript-language-future">un artículo</a> en este mismo blog, que hablaba sobre <em>Javascript</em> y su papel en el Internet de estos últimos años. En ese artículo definí los conceptos de <em>web 2.0</em> y <em>AJAX</em>, aunque no los desarrollé en profundidad. Y me siento en la obligación de hacerlo ahora, ya que me parecen muy importantes. No comentaré en profundidad los conceptos relativos a <em>Internet</em>, ya los he desarrollado en el artículo sobre <em>Javascript</em>, y no quiero repetirme en exceso.</p>
<p>Hasta hace unos años, visitar una página web significaba leer sus contenidos y saltar a otras páginas mediante hipervínculos (links). Era <em><strong>la Web</strong></em>. Pero los internautas empezaron a cansarse de eso, las empresas de e-comercio veían descender sus beneficios, hacía falta un nuevo enfoque de <em>la Web</em>.</p>
<p>Ese enfoque se llamó <strong><em>Web 2.0</em></strong>. Una <em>Web</em> más orientada a los usuarios, una <em>Web</em> en la que, en muchas ocasiones, los usuarios tienen más importancia que el propio webmaster. Ejemplos de ello son los blogs, los foros&#8230; permiten al usuario hacer algo más que leer artículos y saltar de una página a otra, algo impensable hace unos años. Tal vez el ejemplo más ilustrativo sea la <a href="http://es.wikipedia.org">Wikipedia</a>, frente a una enciclopedia tradicional. <a href="http://www.youtube.com">Youtube</a>, <a href="http://del.icio.us" target="_blank">del.icio.us</a>, <a href="http://www.digg.com">Digg</a>&#8230; nacen sitios en los que los internautas son los protagonistas. Las redes sociales (<a href="http://www.facebook.com">Facebook</a>, <a href="http://www.tuenti.com">Tuenti</a>) o los gestores de contenido (<a href="http://www.wordpress.com">Wordpress</a>, <a href="http://mybboard.net">MyBB</a>) son otros ejemplos en los que el usuario, sin necesidad de conocimientos de programación, puede hacerse un hueco en Internet y compartir su opinión con el mundo.</p>
<p>La <em>Web 2.0</em> no es una nueva versión, si no <strong>un nuevo enfoque</strong> de la concepción de la Web. Se pretendió, además, mejorar la experiencia del usuario, utilizando tecnologías como <em>Javascript</em>, <em>Flash</em>, <em>AJAX</em>&#8230;</p>
<p><strong><em>AJAX</em></strong> (<strong>A</strong>synchronous <strong>J</strong>avaScript <strong>A</strong>nd <strong>X</strong>ML, <em>Javascript Asíncrono Y XML</em>) es una fusión de tecnologías ya existentes, utilizadas en conjunto para mejorar la experiencia del usuario.</p>
<p>Empezaré por explicar cada una de sus tecnologías:</p>
<p><strong>HTML</strong> en cualquiera de sus variantes, para mostrar la página web.</p>
<p><strong>Javascript</strong>, para lograr una interactividad con el usuario sin necesidad de recargar la página. Por ejemplo, un menú desplegable, una tabla que cambia de color al pasar el ratón por encima, etc&#8230;</p>
<p>El objeto <strong><em>XMLHttpRequest</em></strong>. Este objeto de Javascript permite comunicarse con el servidor sin necesidad de regargar la página. Me explico: Normalmente, para enviar nuestros datos al servidor, por ejemplo, rellenamos un campo de texto, lo enviamos (normalmente pulsando un botón), un programa lo procesa en el servidor y nos devuelve una página HTML con el texto &#8220;<em>Datos introducidos correctamente</em>&#8221; (por ejemplo). Bueno, pues lo que hace AJAX es enviar el texto, recibir la respuesta del servidor y hacer lo que se quiera con ella (por ejemplo, mostrarla por pantalla), todo eso de forma totalmente transparente al usuario, sin recargar la página.</p>
<p>Ésta tecnología es la parte más importante, la que define AJAX. Es la primera &#8220;A&#8221; (Asíncrono). Como su propio nombre indica, <strong>la ejecución de la página no se detiene</strong> mientras se envía la información al servidor y se espera su respuesta. No aparece una ventana totalmente en blanco, el usuario puede seguir leyendo esa página o apretando botones, en lugar de esperar con los brazos cruzados a que el servidor responda su petición. Antes de esta tecnología, cada vez que el usuario hacía &#8220;algo&#8221; en una página web, que requiriese que unos datos se enviasen al servidor (o que necesitase pedir datos al servidor), la página se quedaba en blanco durante un tiempo (escasos segundos) hasta que el servidor respondía. Esto conducía a una pequeña frustración, ya que el usuario está acostumbrado a las aplicaciones de escritorio, en lo que todo es instantáneo o al menos, si no lo es, se disimula. Pero no hay forma de disimular una página en blanco durante 1 segundo.</p>
<p><strong>XML</strong>: es un lenguaje a base de etiquetas que se usa fundamentalmente para estructurar la información. En este caso, el mensaje devuelto por el servidor suele estar estructurado en <em>XML</em>.</p>
<p>AJAX permite, por ejemplo, que se pueda abrir un mensaje de correo electrónico desde la bandeja de entrada de una forma muy cómoda. Sí, sigue siendo necesario esperar un poco (recordemos que nuestro correo electrónico atraviesa medio mundo), pero mientras se carga el mensaje, la página puede mostrar un pequeño mensaje de &#8220;Cargando&#8230;&#8221;, o preparar la zona donde se va a mostrar el mensaje. Con las velocidades que tiene hoy en día Internet, prácticamente cuando la página termine de acomodar su estructura para mostrar adecuadamente el mensaje, éste ya habrá llegado.</p>
<p>AJAX ofrece otra ventaja muy importante. En una página web tradicional, cuando se envía una petición al servidor, la página en la que nos encontrabamos se descarta totalmente. Así pues, el servidor, en su respuesta, tiene que enviarnos una página completamente nueva. Esto incluye, por ejemplo (estoy pensando en abrir un mensaje en <em>GMail</em>) la barra lateral, las imágenes, la estructura general de la página, etc. Esto acentúa más el tiempo de espera, ya que se tiene que enviar más información a través de un simple cable de cobre (lo sé, algunos de vosotros tenéis fibra óptica, bien por vosotros, pero no me lo recordéis -.-). Sin embargo, cuando queremos abrir un mensaje en <em>GMail</em>, lo único que necesitamos conocer es eso, el mensaje. El resto de elementos de la página YA ESTÁN AHÍ. Así que&#8230; ¿por qué no mantenerse en la misma página, modificar un poco su estructura, esperar a que el servidor nos envíe su respuesta (que consistirá únicamente en el mensaje, lo que nos interesa), y entonces se muestre en la página? Sería maravilloso, ¿verdad? Bienvenidos al futuro, a <em>AJAX</em><em> y la Web 2.0</em>.</p>
<p>Bien, creo que ha quedado todo claro. Así pues, lo que consigue <em>AJAX</em> es comunicarse con el servidor de forma transparente al usuario, simulando una aplicación de escritorio, a las que estamos más acostumbrados. Y desde luego, consigue un efecto mucho mejor, más comodo que simplemente usar links y saltar de una página a otra. Si alguno de vosotros utilizáis <em>Flikr</em> o <em>GMail</em>, entre otros, sabréis a lo que me refiero. Ahora que ha quedado todo claro (si no, levantad la mano y preguntad ^^), unos pensamientos finales:</p>
<p><strong><em>¿AJAX es una parte de la Web 2.0? ¿La Web 2.0 surgió a partir de AJAX?</em> <span style="font-weight: normal;">Sí y no, respectivamente. La Web 2.0 en realidad surgió antes que AJAX. Blogs, foros, etc&#8230; ya existían antes de que Javascript fuese utilizado masivamente (antes incluso de que AJAX existiese). Sin embargo, AJAX ha contribuido a que la Web 2.0 sea más &#8220;cool&#8221;, más agradable de utilizar. Y, dado que la Web 2.0 consiste en que los usuarios escriban, que creen contenido, que se sientan cómodos es bastante importante.</span></strong></p>
<p>AJAX es una parte importante de la Web 2.0. No es, ni mucho menos, la única tecnología importante que permitió su aparición (también están los lenguajes de servidor, por ejemplo).</p>
<p>Tal vez todos los artículos que escribo sobre Internet os parezcan iguales, pero es que todo está relacionado. Internet es una misma realidad, lo único que intento es mirarlo desde distintos puntos de vista. El <a href="http://www.barail.es/internet/cloud-computing-future-technology">Cloud Computing</a> es uno de ellos. A su vez, el Cloud Computing se ve potenciado por las aplicaciones web, que utilizan masivamente <a href="http://www.barail.es/internet/javascript-language-future">Javascript</a> y AJAX. Y todo ello, en contraposición con las simples páginas <em>HTML</em>, forma una nueva concepción de la Web, que es lo que en conjunto es llamado &#8220;Web 2.0&#8243;.</p>
<p>Sí, ésta vez mi artículo sobre tecnología termina sin especular sobre el futuro. En este caso, el presente me parece tan asombroso que creo que tenemos para unos cuantos años. Aunque no será así, ya que la tecnología nunca descansa, y Internet aún menos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/internet/ajax-web-2-0/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial de juego de Plataformas con Game Maker, parte 2</title>
		<link>http://www.barail.es/software/platforms-game-tutorial-game-maker-2</link>
		<comments>http://www.barail.es/software/platforms-game-tutorial-game-maker-2#comments</comments>
		<pubDate>Mon, 05 Apr 2010 22:00:26 +0000</pubDate>
		<dc:creator>Selkie</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=687</guid>
		<description><![CDATA[¡Hola, amigos/as creadores/as de juegos/as!
En el último tutorial, nos quedamos un poco cortados, teníamos un objeto que caía, y lo podíamos mover. Como eso hay que terminarlo, aquí está la segunda parte del tutorial. En ésta vamos a crear un suelo, paredes, techo&#8230; hacer que el personaje salte&#8230; y también la meta, que nos lleva [...]]]></description>
			<content:encoded><![CDATA[<p>¡Hola, amigos/as creadores/as de juegos<span style="text-decoration: line-through;">/as</span>!</p>
<p>En <a href="http://www.barail.es/software/platforms-game-tutorial-game-maker-1">el último tutorial</a>, nos quedamos un poco cortados, teníamos un objeto que caía, y lo podíamos mover. Como eso hay que terminarlo, aquí está la segunda parte del tutorial. En ésta <strong>vamos a crear un suelo, paredes, techo&#8230; hacer que el personaje salte&#8230; y también la meta</strong>, que nos lleva al siguiente nivel. Sí, haremos dos niveles, de distinto tamaño&#8230; ¡ya lo veréis!</p>
<p><a href="http://www.barail.es/software/platforms-game-tutorial-game-maker-1"><em>[Continúa desde la primera parte del tutorial]</em></a></p>
<p><span style="text-decoration: underline;"><strong>4.- El suelo, las paredes y el techo</strong></span></p>
<p style="padding-left: 30px;">Ahora toca crear otro sprite, de 16&#215;16, que servirá para el objeto de los muros. No voy a deciros de nuevo cómo crear el sprite, es hora de que pongáis un poco en práctica lo que habéis aprendido hasta ahora. Al sprite lo llamé <em>Spr_Muro</em>. Ahora, como antes, creamos un objeto y le asignamos de sprite <em>Spr_Muro</em>. También marcaremos la casilla <em>solid</em>, será importante más adelante.</p>
<p style="padding-left: 30px;">A lo mejor te parece que con tener un objeto sólido ya tenemos hecho el muro, pero nada más lejos de la realidad, porque estamos ante la parte más complicada de esta entrega del tutorial&#8230;</p>
<p style="padding-left: 30px;">Abriremos el objeto del personaje y crearemos el evento <em>Collision &gt; objeto del muro</em>. Este evento se ejecuta cuando la instancia del objeto entra en contacto con una instancia del objeto que seleccionemos (en este caso, el muro). Aquí haremos las colisiones con el techo y con el suelo (que serán el mismo objeto, pero en condiciones diferentes).</p>
<p style="padding-left: 30px;"><em><span style="text-decoration: underline;"><strong>Colisión con el suelo: </strong></span></em></p>
<p style="padding-left: 60px;">Como el evento es grandecillo, os mostraré una imagen. Los bloques usados en este se encuentran todos en las pestañas <em>move</em> y <em>control</em>.</p>
<p style="padding-left: 60px;"><a href="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_colisionsuelo_1.png"><img class="aligncenter size-full wp-image-689" title="Suelo" src="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_colisionsuelo_1.png" alt="" width="246" height="231" /></a></p>
<p style="padding-left: 60px;">Explico los bloques de este evento, uno por uno:</p>
<ul>
<li><strong>If a position is collision free</strong> (Si una posición está sin colisiones): Sirve para comprobar si una posición específica provocará o no una colisión. Ahora manejaremos coordenadas (x = ancho, y = alto) y una nueva variable llamada vspeed, o velocidad vertical. Primero colocaremos un bloque llamado Check Empty que se encuentra en la pestaña control. Este bloque es una condición (como todos los bloques octogonales), por lo que puede cumplirse o no. Y lo que condiciona es que no haya una colisión con objetos en cierto punto de la room. Aquí entran las coordenadas. De X, pondremos 0, y de Y, la variable vspeed (escribimos vspeed en el cuadro de texto). Importante marcar las casillas Relative y NOT. Como marcamos la casilla NOT, se ejecutará si el lugar especificado (0,vspeed) tiene colisión. Es decir, si llegamos al suelo.</li>
<li><strong>Start of a block</strong> (Comienzo de un bloque): Es una casilla especial que sirve para la ejecución de condiciones. Las acciones que se ejecutan si la condición se cumple van después de esto.</li>
<li><strong>If vspeed is larger than 0</strong> (Si vspeed es mayor que 0): Esto comprueba que estemos cayendo, es decir, que vayamos hacia el suelo. vspeed y 0 se ponen en los campos variable y value, respectivamente.</li>
<li><strong>Start of a block</strong> (Comienzo de un bloque): Como hay una condición dentro de la anterior condición, abrimos otra vez con esta casilla. El programa nos indenta los bloques automáticamente, así que es difícil perderse.</li>
<li><strong>Move to contact in direction 270</strong> (mover y contactar en dirección 270): Este sirve para que nuestro personaje caiga al suelo correctamente y no se quede atascado. Como sabéis ya, 270º equivale a una dirección hacia abajo.</li>
<li><strong>End of a block</strong> (fin de un bloque): Cerramos la condición de que la vspeed sea mayor que 0.</li>
<li><strong>Set the vertical speed</strong> (Establecer velocidad vertical): Todo muy bonito hasta ahora, pero necesitamos parar al caer al suelo. Para ello ponemos este bloque tan majo, y establecemos la vspeed en 0, con lo cuál el personaje se detendrá.</li>
<li><strong>End of a block</strong> (fin de un bloque): Como había dos condiciones, cerramos dos veces. Esta vez es la primera condición que pusimos.</li>
</ul>
<p style="padding-left: 60px;">Por ahora, el evento se queda así. Si os fijáis, lo que hace es detener al personaje si está cayendo al suelo. Y pensaréis&#8230; ¿para qué tanta condición? Pues porque hay que distinguir que es el caso del suelo, porque usaremos el mismo objeto para suelo, paredes y techo.</p>
<p style="padding-left: 60px;">Hecho esto, podemos probarlo si queremos, antes habrá que añadir unas cuántas instancias del muro a la room.</p>
<p style="padding-left: 60px;">Y si todo está bien, ya podemos pasar al salto. ¡Porque os habréis dado cuenta de que aún no está hecho el salto! Este apartado lo incluyo en suelo, porque en el suelo hay una parte importante del salto.</p>
<p style="padding-left: 30px;"><em><span style="text-decoration: underline;"><strong>Salto</strong></span></em></p>
<p style="padding-left: 60px;">Primero planteemos el problema. Queremos que el personaje pueda saltar al pulsar un botón. Pero no puede saltar todo el rato, sólo cuando ha caído al suelo. Para esto usaremos a nuestras amigas, las variables. Bueno, una sola. Y con sólo dos valores distintos, 0 y 1 (o false y true). Estas variables de 0/1, false/true se llaman variables Booleanas.</p>
<p style="padding-left: 60px;">Para declarar una variable, lo primero es usar, en el evento Create, el bloque Set Variable, ponerle un nombre en variable y un valor inicial en value. Y nosotros la llamaremos salto, y su valor inicial será 1. Es decir, que al principio contará como que el personaje está saltando. Pero esto no es para siempre, ¿y cuándo deja de saltar? Pues al tocar el suelo. De modo que vamos al evento del suelo y añadimos otro Set Variable, esta vez poniendo la variable salto en 0. <strong>Atención</strong>, no irá al final del evento, sino justo después del segundo <em>Start of a Block</em>.</p>
<p style="padding-left: 60px;">Pero estas variables por sí solas no hacen nada. <strong>Crearemos un evento nuevo</strong>, <em>Keyboard &gt; Up</em>, siempre sin salir de nuestro objeto del personaje. El contenido de dentro será simple:</p>
<ul>
<li><strong>If salto is equal to 0</strong> (si salto es igual a 0): Obviamente, es otra condición. Comprueba que la variable salto sea 0.</li>
<li><strong>Start of a block:</strong> Ya sabéis, después de una condición&#8230;</li>
<li><strong>Set the vertical speed:</strong> Ahora pondremos una <strong><em>vspeed</em> negativa</strong>, para ir hacia arriba. -10 es buena idea.</li>
<li><strong>Set variable salto to 1:</strong> Como estamos saltando, la variable salto está activada (salto=1)</li>
<li><strong>End of a block:</strong> Abrimos un block, ahora hay que cerrarlo.</li>
</ul>
<p style="padding-left: 60px;">Esta vez he explicado menos, porque confío en que hayáis aprendido un poco del anterior evento ^^ Lo que hace este evento es comprobar si estamos saltando, y si no estamos saltando, saltamos. Cuando volvamos a caer al suelo podremos volver a saltar.</p>
<p style="padding-left: 60px;">¿Lo probamos? ¡Síii! Y de paso aprovechamos para <strong>guardar</strong>. Hemos de hacerlo a menudo&#8230; Si no, nos podemos llevar un disgusto con un corte de luz o un bloqueo del PC, y mejor no arriesgarse.</p>
<p style="padding-left: 60px;">Si vemos que funciona, podemos pasar a hacer las paredes, y finalmente el techo. Luego terminaremos, con cosas relacionadas con rooms.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;"><em><strong>Paredes</strong></em></span></p>
<p style="padding-left: 60px;">Las paredes no las programaremos en el evento de colisión con Muro, sino en los propios eventos <em>Keyboard Left</em> y <em>Keyboard Right</em>, ya que, en principio, no podemos topar con una pared si no estamos pulsando una de estas dos teclas&#8230;</p>
<p style="padding-left: 60px;">Los dos eventos tienen los mismos bloques, pero variarán algunos valores. Trabajaremos sobre el evento que teníamos, que servía para movernos&#8230; Agregaremos una condición y un bloque nuevo, explicaré para qué sirve.</p>
<p style="padding-left: 60px;"><a href="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_colisionpared.png"><img class="aligncenter size-full wp-image-690" title="Pared" src="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_colisionpared.png" alt="" width="210" height="265" /></a></p>
<ul>
<li><strong>If there&#8217;s a collision at a position</strong> (Si hay colisión en una posición): Pestaña control. Otro elemento como el que usamos antes, pero hace justo lo contrario. De todas maneras, marcaremos la casilla NOT (y Relative, también), como antes. Lo que comprobará es que no haya colisión en una posición&#8230; y esa posición es diferente en los eventos Right y Left. En el evento Right, X = 4, Y = 0. En el evento Left, X = -4, Y=0. Y esto es porque las X negativas son hacia la izquierda, y las positivas hacia la derecha.</li>
<li><strong>Start of a block</strong></li>
<li><strong>Set the horizontal speed:</strong> Esto es lo que teníamos antes. No lo explicaré de nuevo, lo dejamos como está.</li>
<li><strong>Change sprite into&#8230;:</strong> También estaba antes, y lo dejamos tal como está.</li>
<li><strong>End of a Block</strong></li>
<li><strong>Else</strong> (si no): Este es el elemento nuevo del que hablé antes, está en la pestaña <em>control</em>. Funciona como una condición, pero de manera diferente. Hay que ponerlo en algún sitio después de otra condición, y define las acciones que se ejecutarán si esa condición no se cumple. Por tanto&#8230; ahora será lo que se ejecute cuando no haya espacio libre.</li>
<li><strong>Start of a Block</strong>: Sí, funciona como una condición, hay que poner el <em>Start of a Block</em>, y también cerrarlo.</li>
<li><strong>Set the horizontal speed</strong>: ¿Y qué vamos a hacer cuando no haya espacio? Pararnos, por supuesto, así que pondremos que la <em>hspeed</em> sea igual a 0.</li>
<li><strong>End of a Block</strong></li>
</ul>
<p style="padding-left: 60px;">Y ya están terminadas las paredes. Lo que cambia de un evento a otro (<em>Left</em>~<em>Right</em>) es sólo el valor de la X en la condición inicial. Si queremos,<strong> ya podemos poner algunas paredes</strong> en nuestro nivel, guardar, y probar.</p>
<p style="padding-left: 60px;">En el caso de que todo funcione correctamente, sigue leyendo. Ahora vamos a hacer el techo y dar por finalizada la programación del objeto del personaje.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;"><em><strong>Techo</strong></em></span></p>
<p style="padding-left: 60px;">Para esto, aplicaremos lo que hemos aprendido, en el mismo evento que programamos el suelo. Es decir, en Collision &gt; Muro. Lo que añadiremos será un bloque Else, debajo del primer End of a Block, y bajo él lo siguiente:</p>
<ul>
<li><strong>Start of a Block:</strong> Como siempre con las condiciones.</li>
<li><strong>Move to contact in direction 90:</strong> Nos moveremos esta vez hacia arriba hasta tocar el techo.</li>
<li><strong>End of a Block</strong></li>
</ul>
<p style="padding-left: 60px;">Y tenemos el techo terminado. Y con esto la dura tarea de programar nuestro personaje&#8230; O quizás no. Guarda el juego y pruébalo. Para ello puedes encerrar al personaje dentro de bloques muro, con algo de espacio pero que se puedan probar las colisiones por los cuatro lados. Si todo está en orden&#8230; sigamos.</p>
<p style="padding-left: 30px;">
<p><span style="text-decoration: underline;"><strong>5.- Creando la meta</strong></span></p>
<p style="padding-left: 30px;">Ahora tenemos un personaje controlable del todo, que anda, salta, choca con paredes y techo&#8230; Pero no vamos a hacer un juego de un sólo nivel, ¿no? Para cambiar de nivel, vamos a crear un objeto que actúe como meta.</p>
<p style="padding-left: 30px;">Nuestro objeto se activará al <strong>colisionar</strong> el personaje con él, y nos llevará a la siguiente <em>room</em>, a no ser que estemos en la última&#8230; en tal caso, nos mostraría un mensaje de felicitación y cerraría el juego. Esto lo haremos con una condición y un <em>Else</em>.</p>
<p style="padding-left: 30px;">Como siempre, <strong>creamos un objeto</strong>. También sería práctico hacer un nuevo sprite para la meta, para que se distinga. Lo mejor es hacerlo de 16&#215;16 para que encaje en nuestra rejilla. Luego, se lo asignamos al objeto <em>Meta</em>.</p>
<p style="padding-left: 30px;">En el objeto <em>Meta</em> no habrá eventos&#8230; los pondremos en el objeto del personaje. Bueno, dije que quizás no estaba terminado. Abrimos pues el objeto Personaje, y creamos un evento de colisión con <em>Meta</em>.</p>
<p style="padding-left: 30px;">Dentro de él, lo dicho:</p>
<ul>
<li><strong>If next room exists</strong> (Si existe una siguiente room): Es una condición simple que se encuentra en la pestaña <em>main1</em>. Comprueba que exista la siguiente room.</li>
<li><strong>Start of a Block</strong></li>
<li><strong>Go to next room</strong> (Ir a siguiente room): Nos lleva a la siguiente room, simplemente. Podemos elegir un efecto de transición, hay muchos.</li>
<li><strong>End of a Block</strong></li>
<li><strong>Else</strong>: Ahora ponemos lo que pasará si no existe la siguiente room.</li>
<li><strong>Start of a Block</strong></li>
<li><strong>Display a Message</strong> (Mostrar un mensaje): Pestaña <em>main2</em>. Muestra una ventanita con un texto. Podemos poner algo del estilo de &#8220;Felicidades, has completado el juego&#8221;.</li>
<li><strong>End the game</strong> (Finalizar el juego): Es eso, un elemento que cierra el juego. Está en <em>main2</em>.</li>
<li><strong>End of a Block</strong></li>
</ul>
<p style="padding-left: 30px;">Con esto terminamos la programación de la meta, y ahora sí, el objeto del personaje. <strong>En esta entrega ya no tocaremos más los objetos</strong>, vamos con las rooms.</p>
<p style="padding-left: 30px;">Lo primero, pondremos una instancia de la meta, o más de una, en el primer nivel. Alcanzable, para poder pasar el nivel, si no no tiene mucho sentido. Ahora podemos probarla si queremos, como no hay otra room, nos mostrará el mensaje. Pero <strong>vamos a crear otra room</strong>, a la que he llamado <em>Segundo Nivel</em>.</p>
<p style="padding-left: 30px;">
<p><span style="text-decoration: underline;"><strong>6.- Las views</strong></span></p>
<p style="padding-left: 30px;">Ahora que ya sabemos modificar rooms, lo haremos con más soltura. Vamos a dejar la room con el <strong>tamaño por defecto, 640&#215;480</strong>. La rejilla, de 16&#215;16, y la speed de 40 (así la puse yo). Bueno&#8230; pongamos los muros, el personaje, y las metas. Ahora pulsaremos en esa pestaña que pone <strong><em>views</em></strong>. Sirve para establecer las &#8220;cámaras&#8221; que funcionarán en esa room. Nosotros usamos una ventana de 320&#215;240, así que tenemos que usar <strong>una view que siga al personaje</strong>.</p>
<p style="padding-left: 30px;">En esta screen verás cómo configurarla para tal misión.</p>
<p style="padding-left: 30px;"><a href="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_view.png"><img class="aligncenter size-full wp-image-691" title="Views" src="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_view.png" alt="" width="810" height="581" /></a></p>
<p style="padding-left: 30px;">Marcamos las casillas de <em>Enable views</em> y <em>Visible when room starts</em>. Ahora pasamos a esos cuadros con campos de texto, <em>View in room</em>, <em>Port on Screen</em> y <em>Object Following</em>.</p>
<ul>
<li><strong>View in room:</strong> Establece qué parte de la pantalla muestra la cámara. X e Y los dejamos con 0, pero <strong>en W ponemos 320, y en H, 240</strong>.</li>
<li><strong>Port on Screen:</strong> Establece el tamaño de la ventana de juego. Ponemos <strong>los mismos valores que antes en <em>View in Room</em></strong>, porque será a tamaño real.</li>
<li><strong>Object Following:</strong> Esto es lo que más nos interesa, sirve para configurar el seguimiento a un objeto. Seleccionaremos el objeto del personaje. <em>Hbor</em> y <em>Vbor</em> son los bordes que se mantendrán alrededor del objeto, yo puse <strong>160 y 96</strong>, respectivamente.</li>
</ul>
<p style="padding-left: 30px;">Ahora sí, podemos decir que el motor de nuestro juego está terminado. Podemos probarlo. <strong>¡Recuerda guardarlo!</strong> Si quieres, puedes compartirlo con los demás lectores en los comentarios de la entrada.</p>
<p><em><strong>&#8220;Tengo problemas con el tutorial. ¿Qué puedo hacer?&#8221;</strong></em></p>
<p>Revisa que tengas todo tal como dice el tutorial. Si no consigues arreglarlo, puedes preguntar en los comentarios, podría ser que el tutorial esté mal. Otra opción, tal vez más eficaz, sea descargar <a href="http://www.mediafire.com/?ncnzhmtzznm" target="_blank">el ejemplo que he hecho</a> y comparar, para ver dónde está el error.</p>
<p><em><strong>&#8220;¿Está terminado el tutorial?&#8221;</strong></em></p>
<p>El motor básico sí&#8230; pero pocos juegos de plataformas tienen sólo estas funciones&#8230; así que habrá más tutoriales en los que haremos otras cosas. Una de ellas será aprender a programar con GML, que terminará siendo más rápido, más potente e incluso más fácil.</p>
<p>Bueno, espero que os haya gustado este tutorial. Cualquier duda, aquí en los comentarios <img src='http://www.barail.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em><strong>&#8220;Hay algo que no entiendo&#8230;&#8221;</strong></em></p>
<p>Lo mejor es descargar el ejemplo y ver todo por ti mismo, porque yo no puedo subir demasiadas imágenes&#8230; y puede que algo se te trabe.</p>
<p><strong>¡Saludos!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/software/platforms-game-tutorial-game-maker-2/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¡El desafío StickNote ya ha terminado!</title>
		<link>http://www.barail.es/proyectos/sticknote-over</link>
		<comments>http://www.barail.es/proyectos/sticknote-over#comments</comments>
		<pubDate>Sun, 04 Apr 2010 22:00:34 +0000</pubDate>
		<dc:creator>Daniel Rey</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=674</guid>
		<description><![CDATA[Así es, ya ha terminado el desafío StickNote. Ahora, en teoría, deberíamos dar una semana para votar la aplicación ganadora. Pero no será necesario. Estas son las aplicaciones que se han presentado a tiempo:

Rolpege: http://sticknote.no-ip.org (va algo lento, paciencia, está en el ordenador de su casa).
Daniel: No he podido terminar a tiempo.

El código de la [...]]]></description>
			<content:encoded><![CDATA[<p>Así es, ya ha terminado el <a href="http://www.barail.es/proyectos/sticknote-social-network-soon">desafío StickNote</a>. Ahora, en teoría, deberíamos dar una semana para votar la aplicación ganadora. Pero no será necesario. Estas son las aplicaciones que se han presentado a tiempo:</p>
<ul>
<li>Rolpege: <a href="http://sticknote.no-ip.org">http://sticknote.no-ip.org</a> (va algo lento, paciencia, está en el ordenador de su casa).</li>
<li>Daniel: No he podido terminar a tiempo.</li>
</ul>
<p>El código de la aplicación de Rolpege será liberado próximamente (tenemos que acordar detalles como la licencia).</p>
<p>Estas son nuestras valoraciones sobre el desafío:</p>
<p><strong><span style="text-decoration: underline;">Rolpege</span></strong>:</p>
<p style="padding-left: 30px;">StickNote… aún recuerdo cómo empezó. Hace un mes. Daniel y yo, nos propusimos el desafío por MSN, y desde entonces no he podido parar de programar. La primera semana me la reservé para mí. Sí, Ruby ya me lo conocía un poco gracias a RGSS/2, pero no había tenido mi primer contacto con Ruby on Rails.</p>
<p style="padding-left: 30px;">Empezé a aprender gracias al libro de &#8220;Agile Web Development with Ruby on Rails&#8221;. Después realicé una mini-aplicación web para probar lo que había aprendido: esto fue el fin de semana de la primera semana. Acabé satisfactoriamente una web de chistes en un día.</p>
<p style="padding-left: 30px;">Las siguientes tres semanas las he pasado gracias a Ryan Bates y sus maravillosos Railscasts. La primera hice el sistema base: la gestión de usuarios. Las otras dos me las pasé haciendo el sistema de amigos, el de notas, el de comentarios… mientras mis queridos betatesters iban probando y comentando todo lo que hice.</p>
<p style="padding-left: 30px;">Vale, ahora las impresiones en sí. Éste mes ha sido uno de los mejores meses de mi vida. Es genial ver cuándo empiezas una cosa desde el principio y luchas y luchas hasta poder tenerlo terminado. O almenos presentable. Es genial ver cómo vas evolucionando poco a poco a nivel de aprendizaje, en éste caso de Ruby on Rails… Ha sido una experiencia enormemente fructífera, y estoy muy feliz de haber aceptado el desafío.</p>
<p><strong><span style="text-decoration: underline;">Daniel</span></strong>:</p>
<p style="padding-left: 30px;">No puedo más que quedarme impresionado ante lo que ha hecho Rolpege. Me he quedado con cara de tonto. Tenía 4 semanas, y no he sabido aprovecharlas bien. Tenía pensado aprender todo lo necesario durante la primera semana, sin embargo, aprender a utilizar Closure (y eso que creo que aún no lo domino) me llevó casi 3 semanas. Así pues, no me quedó apenas tiempo para realizar la interfaz, más aún teniendo en cuenta que era Semana Santa y no podría dedicar todo mi tiempo libre a programar.</p>
<p style="padding-left: 30px;">En resumen: sabor agridulce en esta competición, me habría gustado estar al nivel de Rolpege, me gustaría haber terminado algo, al menos la votación sería más interesante. Sin embargo, bueno, se trataba de estar entretenido, y eso lo he conseguido. La única conclusión que puedo sacar es que para la próxima vez utilizaré un lenguaje de programación (o librería) que YA conozca. Y que trataré de organizar mejor mi tiempo.</p>
<p>Esto no termina aquí, ni mucho menos. Yo (Daniel) voy a terminar mi versión de StickNote, y después liberaré el código (si alguien prefiere que libere el código ahora mismo, que lo diga, aunque está sin documentar). Además, tal y como se especificaba en las bases del &#8220;concurso&#8221;, Rolpege y yo continuaremos desarrollando la versión ganadora (la suya).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/proyectos/sticknote-over/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails</title>
		<link>http://www.barail.es/software/ruby-on-rails</link>
		<comments>http://www.barail.es/software/ruby-on-rails#comments</comments>
		<pubDate>Sat, 27 Mar 2010 22:00:15 +0000</pubDate>
		<dc:creator>Rolpege</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=660</guid>
		<description><![CDATA[Saludos, lectores!
En éste artículo veremos por encima qué es Ruby on Rails (y por supuesto, qué es Ruby) y las facilidades que ofrece entorno a PHP.
¿Qué es Ruby?

Ruby es un lenguaje de programación orientado a objetos e interpretado creado por el japonés Yukihiro Matsumoto. Está bajo las licencias libres y de código abierto GPL y [...]]]></description>
			<content:encoded><![CDATA[<p>Saludos, lectores!</p>
<p>En éste artículo veremos por encima qué es Ruby on Rails (y por supuesto, qué es Ruby) y las facilidades que ofrece entorno a PHP.</p>
<p><strong><em><span style="text-decoration: underline;">¿Qué es Ruby?</span></em></strong></p>
<p style="padding-left: 30px;"><img class="alignnone size-medium wp-image-666" title="10omzqu" src="http://www.barail.es/wp-content/uploads/2010/04/10omzqu-299x300.png" alt="" width="114" height="115" /></p>
<p style="padding-left: 30px;">Ruby es un lenguaje de programación orientado a objetos e interpretado creado por el japonés Yukihiro Matsumoto. Está bajo las licencias libres y de código abierto GPL y Licencia Pública Ruby.</p>
<p style="padding-left: 30px;">Ruby tiene una sintaxis muy simple, ideal para los que se adentran a los lenguajes de programación y tampoco es mala para los ya experimentados.</p>
<p><strong><em><span style="text-decoration: underline;">¿Qué es Ruby on Rails?</span></em></strong></p>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-667" title="24uyip4" src="http://www.barail.es/wp-content/uploads/2010/04/24uyip4.png" alt="" width="87" height="111" /></p>
<p style="padding-left: 30px;">
<p style="padding-left: 30px;">Una de las mejores razones para usar Ruby es Ruby on Rails. Ruby on Rails, conocido también como Rails a secas o <em>RoR</em> es un framework (conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular) de aplicaciones web y de código abierto.</p>
<p style="padding-left: 30px;">Ruby on Rails es bastante sencillo de utilizar, en gran parte gracias a que Ruby es bastante sencillo de utilizar también. Pero también lo es gracias a su arquitectura MVC: Modelo Vista Controlador.</p>
<p style="padding-left: 30px;">Está pensado para emfatizar <em>Convention over Configuration (CoC) y Don&#8217;t Repeat Yourself (DRY)</em>.</p>
<p style="padding-left: 30px;">Lo primero quiere decir que el programador solo necesitará establecer configuraciones para aspectos extraordinarios de su aplicación. Por ejemplo, si creamos un modelo &#8220;Usuario&#8221;, la correspondiente tabla en la base de datos se llamará &#8220;usuarios&#8221; y el programador no tendrá que especificarlo.</p>
<p style="padding-left: 30px;"><em>Don&#8217;t Repeat Yourself</em> significa que una pieza de código dentro de una aplicación nunca debería repetirse, facilitando así la modificación posterior del código. Por ejemplo, si queremos que varias clases dentro de nuestra aplicación redireccionen a alguna página determinada y muestran un mensaje, podríamos crear una función accesible para todas las clases que la quieren usar que se encarga de esto, aceptando como parámetros el mensaje a dar y el lugar dónde redireccionar. Incluso, si varias páginas redireccionan al índice, podríamos crear otra función que llama a la función de redireccionar y mostrar mensaje con los parámetros de lugar a redireccionar establecidos como índice y aceptando únicamente el mensaje a dar.</p>
<p><strong><em><span style="text-decoration: underline;">¿Qué es la arquitectura MVC?</span></em></strong></p>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-668" title="vzxbb6" src="http://www.barail.es/wp-content/uploads/2010/04/vzxbb6.png" alt="" width="560" height="265" /></p>
<p style="padding-left: 30px;">Lo siento si antes os habéis quedado con las ganas de saber qué era la arquitectura MVC, pero creo que se merece otra sección a parte.</p>
<p style="padding-left: 30px;">La arquitectura Modelo Vista Controlador es un estilo de arquitectura de software que separa los datos, la interfaz y la lógica que los controla en tres componentes distintos: el modelo, la vista y el controlador.</p>
<ul>
<li><strong>Modelo</strong>: Es el encargado de proveer de datos al controlador. En Ruby on Rails, además, es el que tiene acceso a datos en la base de datos, usando el paradigma &#8220;ActiveRecord&#8221;</li>
<li><strong>Controlador</strong>: Responde a eventos, usualmente ocasionados por el usuario, y hace peticiones al modelo o a la vista según convenga.</li>
<li><strong>Vista</strong>: Presenta a un modelo, mediante el controlador, en un formato adecuado para interactuar. Normalmente es la interfaz del usuario.</li>
</ul>
<p>Hasta aquí hemos aprendido qué es Ruby, Ruby on Rails, y la arquitectura MVC. Seguramente vuestras conclusiones serán que Ruby on Rails es utilizado para realizar aplicaciones web, de manera similar que con PHP. Así es. ¿Y si los comparamos un poco? No. PHP es un lenguaje, Ruby on Rails es un framework. Aún así, puedo deciros que PHP es más rápido y que Ruby on Rails es más productivo a la hora de programar, que los servers de PHP abundan mientras que uno de Ruby on Rails es bastante difícil de encontrar…</p>
<p>Espero que con ésta introducción a Ruby, Ruby on Rails y MVC os haya abierto el apetito a Rails, porque ahora estoy preparado para saciarlo.</p>
<p><strong><em><span style="text-decoration: underline;">Para empezar… Agile Web Development with Rails</span></em></strong></p>
<p style="padding-left: 30px;"><a href="http://pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition">Agile Web Development with Rails</a> es una buena forma de empezar con Rails. La primera parte del libro te enseña a instalarlo a tu ordenador, y después te explican paso a paso como crear una aplicación de e-Commerce mediante Rails, mientras te van introduciendo al lenguaje.</p>
<p style="padding-left: 30px;">La segunda parte del libro, te enseña ya TODO lo de Rails, y en los apéndices incluso un poco de Ruby si no sabes (aunque se recomienda saber Ruby para utilizar Ruby on Rails).</p>
<p style="padding-left: 30px;">Para aprender Rails no es necesario del todo leerse la segunda parte, pero sí es beneficioso.</p>
<p>Una vez hemos empezado… ya podemos realizar nuestras aplicaciones tranquilamente, que ya lo sabemos todo. Pero quizá queramos un poco de ayudita. ¿Cómo creo un buscador? ¿Cómo cuelgo fotos mediante Rails? Aquí es donde entran los…</p>
<p><strong><em><span style="text-decoration: underline;">Railscasts</span></em></strong></p>
<p style="padding-left: 30px;">Los <a href="http://railscasts.com/">Railscasts</a> son un conjunto de screencasts (videotutoriales) grabados todos por el magnífico <a href="http://workingwithrails.com/person/6491-ryan-bates">Ryan Bates</a> y que salen cada lunes por la mañana. Éstos screencasts te enseñan varias cosas muy útiles cómo crear un formulario de búsqueda, colgar fotos usando el plugin Paperclip, etc., etc., etc.</p>
<p style="padding-left: 30px;">Además, puedes subscribirte a los Railscasts usando cualquier aplicación que soporte los podcasts, como por ejemplo iTunes.</p>
<p>Sé que hay muchos más recursos para Rails, pero éstos son los que más útiles me han sido a mí para realizar <em>StickNote</em>, y espero que os sean igual de útiles a vosotros! <img src='http://www.barail.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/software/ruby-on-rails/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial de juego de Plataformas con Game Maker, parte 1</title>
		<link>http://www.barail.es/software/platforms-game-tutorial-game-maker-1</link>
		<comments>http://www.barail.es/software/platforms-game-tutorial-game-maker-1#comments</comments>
		<pubDate>Fri, 26 Mar 2010 22:00:17 +0000</pubDate>
		<dc:creator>Selkie</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=661</guid>
		<description><![CDATA[¡Hola amigos/as!
El otro día os enseñé el programa Game Maker y expliqué un poco su funcionamiento. También os prometí que os enseñaría a hacer un juego de plataformas con él&#8230;
Y así es, hoy vais a aprender a hacer, con Game Maker, un jueguito de una bola que se mueve y salta. Para ello os vendrán [...]]]></description>
			<content:encoded><![CDATA[<p><strong>¡Hola amigos/as!</strong></p>
<p>El otro día os enseñé el programa <a href="http://www.barail.es/software/game-maker-8-videogame-creation">Game Maker</a> y expliqué un poco su funcionamiento. También os prometí que os enseñaría a<strong> hacer un juego de plataformas con él</strong>&#8230;</p>
<p>Y así es, hoy vais a aprender a hacer, con <strong>Game Maker</strong>, un jueguito de una bola que se mueve y salta. Para ello os vendrán bien algunos conocimientos de inglés, ya que todo el programa está en inglés. Una vez hayáis descargado e instalado el programa, empezaremos con el tutorial:</p>
<p><span style="text-decoration: underline;"><strong>1.- Creando un personaje</strong></span></p>
<p style="padding-left: 30px;">Primero, crearemos un <strong>sprite</strong>. Para ello pulsamos el botón con un Pac-Man/Comecocos rojo. Es el icono de los sprites en todo el programa. Al hacer clic, saldrá una ventana, estamos creando <strong>un sprite nuevo</strong>.</p>
<p style="padding-left: 30px;"><em>¿Qué formas tenemos de crear un sprite?</em></p>
<p style="padding-left: 30px;">Pues bien, podemos hacer click en <em>Load Sprite</em> para cargar el sprite desde una imagen, o en <em>Edit Sprite</em> para hacer uno nuevo. Nosotros pulsaremos en <strong><em>Edit Sprite</em></strong>, y luego en el icono de una hoja con un símbolo de +. Así, crearemos un sprite. Como medidas, pondremos <strong>16&#215;16px</strong>.</p>
<p style="padding-left: 30px;">Ahora podemos pinchar en la lupa para aumentar el zoom y dibujar mejor. Este será el sprite del personaje mirando a la derecha. No te preocupes si no se te da bien, con cualquier monigote basta, intenta que ocupe casi todo el espacio. Luego, guardamos el sprite y lo llamamos <em>Spr_Pers_Der</em> (así lo he llamado yo, pero en realidad da lo mismo).</p>
<p style="padding-left: 30px; text-align: center;"><a href="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_sprite.png"><img class="alignnone size-medium wp-image-665" title="gm8_screen_sprite" src="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_sprite-300x216.png" alt="" width="300" height="216" /></a></p>
<p style="padding-left: 30px;">A continuación, para crear el sprite del personaje mirando a la izquierda, haremos clic derecho en el que ya tenemos y pincharemos en <strong><em>Duplicate</em></strong>. Nos saldrá una réplica del sprite. Doble clic en él, luego vamos a <strong><em>Edit Sprite</em></strong> y pulsamos en<em><strong> Transform &gt; Mirror/Flip</strong></em> (en el menú de arriba). Lo dejamos como está y le damos a <em><strong>Ok</strong></em>, se modificará el sprite y quedará mirando a la izquierda. Le pondremos de nombre <em>Spr_Pers_Izq</em>.</p>
<p style="padding-left: 30px;">Bueno, ya tenemos todos los sprites del personaje, por ahora. ¿Qué falta? <strong>Crear su objeto</strong>. Para crear un objeto, pulsamos el icono de la bola azul. Saldrá en la parte izquierda con el nombre <em>object0</em>. Podemos cambiarlo, pero nos va a dar igual.</p>
<p style="padding-left: 30px;">Para editar el objeto, hacemos <strong>doble clic en él</strong>. Ahora podemos seleccionar su sprite en el icono de lista desplegable, en la caja que pone <em>Sprite</em>. Seleccionamos un sprite del personaje, por ejemplo <em>Spr_Pers_Der</em>. <strong>¡Bien!</strong> Ahora ya tenemos <strong>un objeto que pasará a ser nuestro personaje jugable</strong>. Y toca&#8230; darle vida. Esto lo haremos, hoy, por <strong><em>Drag &amp; Drop</em></strong>, que es la vía fácil para los principiantes. <strong>En el próximo tutorial usaremos el <em>GML</em></strong>, <em>Game Maker Language</em>.</p>
<p><span style="text-decoration: underline;"><strong>2.- Movimiento básico del personaje</strong></span></p>
<p style="padding-left: 30px;">Vamos a empezar por darle <strong>gravedad</strong> al objeto. <strong>La gravedad es una aceleración</strong> del objeto, es decir, cada vez irá más rápido. Se puede elegir la dirección de la gravedad, nosotros la configuraremos hacia abajo.</p>
<p style="padding-left: 30px;">Para ello, creamos el evento <em>Create</em> (<strong><em>Add Event &gt; Create</em></strong>). Es el evento que se ejecuta cuando se crea el objeto, es decir, al inicio del nivel (en este caso). Sólo se ejecuta una vez, así que se usa para definir variables o establecer sentencias que se ejecuten desde que el objeto aparece. Dentro del evento, arrastramos el bloque de <strong><em>Set Gravity</em></strong>. Nos pedirá una dirección y una cantidad. <strong>La dirección se especifica en grados</strong>, 0 grados es derecha, 90 grados es arriba, 180 es izquierda y <strong>270 es abajo</strong>. Sí, nosotros ponemos <strong>270</strong>. Y de gravedad, por ejemplo, <strong>1</strong>.</p>
<p style="padding-left: 30px;">Con esto tenemos <strong>un objeto que cae</strong>. Muy jugable no es, precisamente, así que vamos a poner algo de interacción con el usuario, vamos a poner <strong>los movimientos a los lados</strong>.</p>
<p style="padding-left: 30px;">Creamos un evento, como antes, pero esta vez en <strong><em>Keyboard &gt; Right </em></strong>(¡<em>Keyboard</em>! No confundir con <em>Keyboard Press</em>. El evento <em>Keyboard</em> se ejecuta todo el rato mientras dure la pulsación de la tecla, el evento <em>Keyboard Press</em> sólo cuando empieza a ser pulsada). Aquí irán las acciones a ejecutar cuando se esté pulsando la tecla de dirección derecha. Por ahora, serán sólo dos bloques, aunque luego ampliaremos. Se trata del cambio de sprite y el movimiento en sí. El cambio de sprite es para que cuando nos movamos hacia la derecha, estemos mirando hacia la derecha, y el movimiento&#8230; es eso, el movimiento.</p>
<p style="padding-left: 30px;"><strong>Cambio de Sprite:</strong> En la pestaña main1, arrastramos el bloque <strong><em>Change Sprite</em></strong>, que nos pedirá seleccionar un sprite (<em>Spr_Pers_Der</em> en este caso, ya que tiene que mirar a la derecha) y una velocidad, que dejamos como está, ya que sirve sólo en sprites animados (otro día hablaremos de ello).</p>
<p style="padding-left: 30px;"><strong>Movimiento:</strong> Usaremos el bloque <strong><em>Speed Horizontal</em></strong> de la pestaña <em>move</em>, el cuál sirve para establecer la velocidad horizontal (<strong>hspeed</strong>) del objeto en cuestión, con un número. Las <strong>hspeed</strong> <strong>positivas</strong> mueven el objeto hacia la <strong>derecha</strong>, mientras que las <strong>negativas</strong> lo mueven hacia la <strong>izquierda</strong>. Por tanto, pondremos <strong>4</strong>. Esto significa que en cada <em>step</em>, o <em>frame</em>, el objeto se moverá 4 píxeles a la derecha.</p>
<p style="padding-left: 30px;">Vamos a realizar <strong>lo equivalente para la tecla izquierda</strong>. Esto será en el evento <strong><em>Keyboard &gt; Left</em></strong>, y serán los mismos bloques, pero en el de <em>Change Sprite</em> seleccionaremos el sprite <em>Spr_Pers_Izq</em>, y la hspeed no será 4, sino <strong>-4</strong> (4 píxeles a la izquierda en cada frame).</p>
<p style="padding-left: 30px;">Finalmente, creamos dos eventos: <strong><em>Keyboard Release &gt; Right</em></strong> y <strong><em>Keyboard Release &gt; Left</em></strong>. En ambos irá un único bloque: Un <strong><em>Speed Horizontal</em></strong> que ponga la hspeed a 0. Es decir, que <strong>cuando soltemos la tecla, el personaje se parará</strong>.</p>
<p style="padding-left: 30px;">El resultado de todo esto será un objeto que cae y que puede moverse a la izquierda y la derecha durante la caída&#8230;</p>
<p style="padding-left: 30px;">Llegados a este punto, puede que queramos probarlo (o no, bueno&#8230; si no te atrae la idea del personaje que cae y se mueve, lo respetaré). Antes de darle al icono de Play/Run the game, hemos de crear una room.</p>
<p><span style="text-decoration: underline;"><strong>3.- Creando nuestro primer nivel</strong></span></p>
<p style="padding-left: 30px;">Para crear una <em>room</em>, pulsamos el icono de la ventana (el que está a la derecha del icono de crear objeto). Como con los objetos y los sprites, saldrá en la parte izquierda de la pantalla, podremos cambiar su nombre (yo le puse <em>Primer nivel</em>, por motivos obvios) y modificarlo haciendo <strong>doble clic</strong>.</p>
<p style="padding-left: 30px;">Saldrá una nueva ventana con un gran área que muestra el nivel a la derecha, y muchas pestañas a la izquierda. Algo que llama la atención es <strong>la rejilla (<em>grid</em>)</strong>. Se puede cambiar su tamaño en los cuadritos de <em><strong>Snap <span style="text-decoration: underline;">X</span></strong></em> y <em><strong>Snap <span style="text-decoration: underline;">Y</span></strong></em>, lo dejaremos en <strong>16 en ambos lados</strong>.</p>
<p style="padding-left: 30px;">Ahora cambiaremos el tamaño del nivel, para ello vamos a la pestaña <strong><em>settings</em></strong>. En dicha pestaña podemos cambiar el nombre de la room, su <em>caption</em> (el mensaje que sale en la ventana del juego mientras estés en esa room), el tamaño y la velocidad. De tamaño puse <strong>320&#215;240</strong> (<strong>Ojo</strong>, mejor pon <strong>múltiplos de la rejilla</strong>, en este caso de 16. Así encajará. <strong>320 = 16&#215;20; 240 = 16&#215;15</strong>), y de velocidad 40 (Son las <em>frames</em> o <em>steps</em> que habrá en cada segundo. Afecta a la velocidad del juego, viene por defecto 30. Pon como máximo 60, depende de lo rápido que quieras el juego).</p>
<p style="padding-left: 30px; text-align: center;"><a href="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_room.png"><img class="alignnone size-medium wp-image-664" title="gm8_screen_room" src="http://www.barail.es/wp-content/uploads/2010/04/gm8_screen_room-300x233.png" alt="" width="300" height="233" /></a></p>
<p style="padding-left: 30px;">Ahora volvemos a la pestaña <strong><em>objects</em></strong> y colocamos en un lugar alto el único objeto que tenemos, el personaje. Podemos poner más de uno. Es lo que se llama <strong>instancia</strong>, que no es lo mismo que objeto.</p>
<p style="padding-left: 30px;">Para que lo entendáis mejor, imaginad que estamos en una fábrica de juguetes de plástico. Tenemos un único molde con la forma del juguete que vamos a construir, pero con él podemos crear muchos juguetes. Entonces, <strong>el molde sería el <span style="text-decoration: underline;">objeto</span>, y los juguetes creados serían las <span style="text-decoration: underline;">instancias</span></strong>. Un sólo objeto da forma a todas las instancias suyas que queramos.</p>
<p style="padding-left: 30px;">Volviendo al tema&#8230; una vez hayamos colocado una instancia del personaje, cerramos la <em>room</em>. Ahora pulsaremos en el icono del disquete para <strong>guardar nuestro juego</strong>, y&#8230; ¡Ya le podemos dar a <strong><em>Run the Game</em></strong> y probarlo! Y si todo ha ido bien, lo que veremos será&#8230; lo que dije, un objeto que cae y que podemos mover durante su caída. Puede que te hayas fijado en un pequeño inconveniente: <strong>no hay suelo</strong>. Para ello deberemos crear otro objeto y otro sprite, y es con lo que empezará la siguiente entrega de este tutorial. <strong>¡Muy pronto en <a href="http://barail.es">Barail</a>!</strong></p>
<p><strong><br />
</strong></p>
<p style="padding-left: 30px;">
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/software/platforms-game-tutorial-game-maker-1/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6 formas en las que la tecnología podría mejorar el fútbol</title>
		<link>http://www.barail.es/tecnologia/ways-technology-improve-soccer</link>
		<comments>http://www.barail.es/tecnologia/ways-technology-improve-soccer#comments</comments>
		<pubDate>Thu, 25 Mar 2010 22:00:36 +0000</pubDate>
		<dc:creator>Daniel Rey</dc:creator>
				<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=658</guid>
		<description><![CDATA[El fútbol es un deporte extraño. Aún siendo el entretenimiento más popular en Europa y Sudamérica, y con las cifras cada vez más desorbitadas que se invierten en pagar a personas que golpean muy bien un trozo de cuero, no ha sabido adaptarse al siglo XXI, ni siquiera al siglo XX.
En el fútbol, por si [...]]]></description>
			<content:encoded><![CDATA[<p>El fútbol es un deporte extraño. Aún siendo el entretenimiento más popular en Europa y Sudamérica, y con las cifras cada vez más desorbitadas que se invierten en pagar a personas que golpean muy bien un trozo de cuero, no ha sabido adaptarse al siglo XXI, ni siquiera al siglo XX.</p>
<p>En el fútbol, por si vivís en Marte y no lo sabéis, hay un árbitro, que, ayudado por dos jueces de linea, se encargan de hacer cumplir las reglas del juego. Esto sucede en todos los deportes, en todos hay reglas, en todos hay uno o más árbitros. Pero en el fútbol no cuentan con ningún tipo de ayuda. Ni siquiera se les permite ver la repetición grabada de una jugada para decidir sobre ella. Lo único que ha aportado la tecnología al arbitraje del fútbol, son los <strong>micrófonos y auriculares</strong> que llevan los árbitros y jueces de línea para comunicarse entre ellos. Nada más.</p>
<p>En otros deportes, la tecnología ha mejorado sensiblemente su desempeño y su arbitraje, por ejemplo:</p>
<ul>
<li><strong>Tenis</strong>: Si bien es cierto que hay una persona atenta a cada linea del campo, para comprobar si la pelota bota dentro o fuera, a veces se equivocan. En ese caso, si la pista es de tierra, el tenista puede reclamar, ya que se puede ver fácilmente dónde ha botado la pelota. Pero, ¿y si la pista es de hierba, o de cemento? Pues se recurre al <em><strong>Falcon Eye</strong></em> (ojo de halcón), que no es más que una serie de videocámaras dispuestas encima de la pista (como si fuesen halcones sobrevolándola). Cuando un jugador reclama, las imágenes de esas cámaras se procesan conjuntamente, formando un modelo 3-D de la pista y la bola en el momento que esta última botó. Entonces, el juez de silla sólo tiene que decir en voz alta lo que ese modelo 3-D le ha mostrado: la bola ha entrado, o ha salido.</li>
<li><strong>Baloncesto</strong>: En este deporte, los movimientos son mucho más rápidos y la cancha es mucho más pequeña, así que los jugadores están mucho más juntos. Por eso puede haber hasta 3 árbitros en la pista. Por si eso fuese poco, en la mesa de anotación (al lado de la cancha) hay un árbitro especial, llamado comisario, al que los árbitros pueden recurrir para decidir sobre jugadas polémicas. El comisario puede utilizar un invento de muy alta tecnología, llamado &#8220;<strong>vídeo</strong>&#8220;, que permite volver mágicamente atrás en el tiempo, para ver la última jugada a cámara lenta y desde distintos ángulos.</li>
</ul>
<p>Estas son las formas en las que la tecnología de este siglo puede ayudar al fútbol:</p>
<p><strong><span style="text-decoration: underline;">1.- Repetición en video</span></strong></p>
<p style="padding-left: 30px;">Ésta es sin duda la forma más básica, y de lejos la más eficaz. Utilizando varias cámaras (de forma similar a las que utilizan las televisiones), se podría conseguir las repeticiones de las jugadas dudosas, y el árbitro, o un comisario similar al del baloncesto, podría decidir. También se podría utilizar de forma similar al Falcon Eye, es decir, que sólo se utilice si los jugadores protestan una jugada. Aunque eso exigiría un cambio drástico de actitud por su parte. Me parece increible que esta medida aún no se haya puesto en práctica.</p>
<p><strong><span style="text-decoration: underline;">2.- Cámaras en las líneas</span></strong></p>
<p style="padding-left: 30px;">Así es, cámaras en las lineas de banda y de fondo. De forma similar a como se colocan los árbitros de un partido de tenis, las cámaras se podrían colocar en los corners, a una cierta altura. Estas cámaras, bien orientadas y mediante un programa informático sencillo, podrían detectar cuándo un balón sale fuera de banda o de fondo.</p>
<p><strong><span style="text-decoration: underline;">3.- Cámaras en las porterías</span></strong></p>
<p style="padding-left: 30px;">Análogo a lo anterior, dos cámaras en los ángulos de las porterías podría dejar atrás el problema de los goles fantasma.</p>
<p><strong><span style="text-decoration: underline;">4.- Más cámaras</span></strong></p>
<p style="padding-left: 30px;">Pues sí, esa es mi solución para todo: cámaras de video unidas a programas informáticos de procesamiento de imágenes. Una cámara en lo alto del estadio, con inclinación similar a las de las cámaras de televisión, podría detectar cuándo un jugador está en fuera de juego, y advertir al juez de línea. Se ha presentado recientemente un programa así para el iPhone. Es decir, que funciona en un teléfono móvil, con una cámara mediocre y una capacidad de procesamiento mediocre. Y, en caso de que la FIFA no se fíe de ordenadores, siempre puede haber árbitros analizando las imágenes de esas cámaras, en las jugadas dudosas. Las posibilidades son infinitas, y los precios que conllevarían serían más que razonables, teniendo en cuenta los millones que se despilfarran en el mundo del fútbol.</p>
<p><strong><span style="text-decoration: underline;">5.- Balón inteligente</span></strong></p>
<p style="padding-left: 30px;">Ya existen varios prototipos perfectamente funcionales. Se trata de balones con determinados sensores. Uno, por ejemplo, utiliza algo parecido al <em>GPS</em> (utilizando antenas puestas en las esquinas del campo, y triangulando sus señales, es capaz de determinar en todo momento su posición). Si se consigue que tenga la suficiente precisión, se puede utilizar para comprobar si un gol es válido o no, o si el balón ha salido del campo. En cualquier caso, aunque no tuviese tanta precisión, se podría utilizar para que las cámaras de video se orientasen hacia el balón automáticamente, sin necesidad de operarios. Otro tipo de balones inteligentes tendrán otro tipo de sensores, pero todos persiguen un mismo objetivo: permitir detectar en todo momento la posición y velocidad del balón.</p>
<p><strong><span style="text-decoration: underline;">6.- Sensores en las botas</span></strong></p>
<p style="padding-left: 30px;">De forma similar al balón inteligente, unos chips <em>GPS</em> situados en las botas (o en cualquier parte del jugador, en realidad) de todos los jugadores, podría ayudar, y mucho. En conjunción con un balón inteligente, un programa informático, sin necesidad de utilizar ni siquiera cámaras, podría saber en todo momento dónde está el balón y los 22 jugadores. De esta forma, si la precisión fuese muy buena, podría incluso sustituir completamente a un árbitro humano (salvo por las faltas). Podría saber si un delantero está en fuera de juego, podría saber en todo momento qué jugador tiene controlado el balón, etc. Podéis pensar que es un derroche, o una exageración, pero estos chips ya se usan, se utilizan en todos los partidos en los que se ofrecen estadísticas sobre la distancia recorrida por cada jugador. No voy a decir la marca de botas que tienen esos chips, pero os puedo decir que empieza por &#8220;N&#8221; y termina por &#8220;ike&#8221;.</p>
<p>Como veis, la tecnología existe, y desde luego, si algo sobra en el fútbol es dinero. Sin embargo, por alguna razón, lo unico que ha puesto en práctica la <em>FIFA</em> es darles a los árbitros unos micrófonos, para que puedan discutir si un balón ha sobrepasado una linea de cal que tienen a 30 metros de distancia, o si un jugador estaba un paso más adelantado que los demás en el preciso instante en que otro jugador dio el pase.</p>
<p>Mi opinión personal es que <strong>parte de la esencia del fútbol es crucificar a los árbitros</strong>, insultarlos para descargar la tensión acumulada de una dura semana de trabajo, o poder culpar a alguien si tu equipo, al que idolatras, ha perdido un partido. Me parece estúpido, pero es así. Otros deportes han sabido adaptarse, y por ejemplo, el baloncesto es el deporte más popular de la nación más poderosa del mundo, los EEUU. Allí no se critica a los árbitros, no se les culpa, y aún así, el deporte es popular.</p>
<p>Mientras la <em>FIFA</em> no abra los ojos, seguirá viendo como sus árbitros tendrán que salir escoltados de los partidos, y reciban amenazas de muerte, como si fuesen terroristas. Aunque bueno, los radicalismos en el fútbol, los ultras, los energúmenos que no se dan cuenta de que es un simple pasatiempo, los millones de personas que canalizan su ira y sus frustraciones sobre el mundo del fútbol, todo eso, es otro tema. Y no me corresponde a mí tratarlo. No podría ser imparcial.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/tecnologia/ways-technology-improve-soccer/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Editores de código fuente</title>
		<link>http://www.barail.es/software/source-code-editors</link>
		<comments>http://www.barail.es/software/source-code-editors#comments</comments>
		<pubDate>Wed, 24 Mar 2010 22:00:58 +0000</pubDate>
		<dc:creator>Rolpege</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.barail.es/?p=636</guid>
		<description><![CDATA[¡Saludos lectores!
Hoy en éste artículo haré un repaso a 3 editores de código fuente que personalmente me han gustado más. Pero antes…
¿Qué es un editor de código fuente?
Seguramente, si te has parado a leer este artículo es porque conoces más o menos bien el tema… pero nunca está de más explicar qué es lo que [...]]]></description>
			<content:encoded><![CDATA[<p>¡Saludos lectores!</p>
<p>Hoy en éste artículo haré un repaso a 3 editores de código fuente que personalmente me han gustado más. Pero antes…</p>
<p><span style="text-decoration: underline;"><em><strong>¿Qué es un editor de código fuente?</strong></em></span></p>
<p style="padding-left: 30px;">Seguramente, si te has parado a leer este artículo es porque conoces más o menos bien el tema… pero nunca está de más explicar qué es lo que voy a recomendar. Un editor de código fuente, es un editor de texto (¡cuidado! No confundir editor de texto con procesador de textos. Un editor de texto no permite el formateo de textos, y por lo tanto al guardar sólo guarda el contenido y no la información de cómo éste debe mostrarse… característica indispensable para cualquier archivo con código de programación dentro. Un procesador de textos [Micrsofot Office Word o OpenOffice.org Writter lo son] en cambio, está especializado en formatear el texto de miles de maneras distintas y por lo tanto, guarda la información de formato junto al texto) diseñado específicamente para editar (o crear) el código fuente de un programa (siendo el código fuente de un programa un conjunto de instrucciones que debe realizar un ordenador al ejecutar el programa).</p>
<p style="padding-left: 30px;">Los editores de código fuente pueden presentarse como aplicaciones individuales, o formando parte de un IDE (entorno de desarrollo integrado, en inglés <em>Integrated Development Environment</em>), tema que quizá extenderé en otra ocasión.</p>
<p style="padding-left: 30px;">Éstos editores pueden especializarse en un solo lenguaje de programación o incluir un conjunto de ellos. Al estar especializados en la tarea de programar, los editores ofrecen características únicas que son muy útiles al usuario, siendo la más común y básica de ellas la <em>syntax highlighting</em> es decir, resaltador (o coloreado) de sintaxis, que se encarga de mostrar de distintos colores y tipografía los distintos elementos del código fuente de un programa, como pueden ser las variables, las constantes, las palabras reservadas, etc.</p>
<p>Una vez hemos definido qué es un editor de código fuente, voy a exponer los 3 que me gustan más. Debido a que algunas características pueden ser comunes en varios editores distintos, solo definiré cualquier característica la primera vez. Es decir, ya que ya he definido que es el resaltado de sintaxis no volveré a hacerlo. También me gustaría añadir que no están ordenados por orden de mejor a peor, preferencias, etc. si no en orden alfabético.</p>
<p><span style="text-decoration: underline;"><em><strong>jEdit</strong></em></span></p>
<div id="attachment_637" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.barail.es/wp-content/uploads/2010/03/jEdit.png"><img class="size-medium wp-image-637" title="jEdit" src="http://www.barail.es/wp-content/uploads/2010/03/jEdit-300x232.png" alt="" width="300" height="232" /></a><p class="wp-caption-text">Editando una hoja de estilos de StickNote</p></div>
<p style="padding-left: 30px;">jEdit es un editor de código fuente escrito en Java. Es multiplataforma y tiene un sistema para incorporar montones de plugins en el programa.</p>
<p style="padding-left: 30px;">El programa viene con un resaltador de sintaxis para más de 130 lenguajes de programación distintos y la posibilidad de añadir más con un simple archivo XML o incluso descargarlos. Nos ofrece una lista con múltiples plugins para instalarlos y ejecutarlos con un solo click, entre los cuales se encuentran, por exemplo, uno que convierte el código que estás viendo con jEdit (incluyendo los colores) a HTML, haciendo que puedas pegar tu código con los colores y todo en cualquier página web y permitir una mejor lectura de éste.</p>
<p style="padding-left: 30px;">Voy a poneros el ejemplo de la hoja de estilos de StickNote aquí gracias al plugin (solo un pequeño fragmento):</p>
<pre style="padding-left: 30px;"><span style="color: #000000;"><span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 1 </span></span><span style="color: #0000ff;">body</span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 2 </span></span><span style="color: #000000;"><strong>{</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 3 </span></span>  <span style="color: #009966;"><strong>background</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">#</span><span style="color: #ff0000;">13006a</span> <span style="color: #006699;"><strong>url(</strong></span><span style="color: #ff00cc;">'../images/body_bg.png'</span><span style="color: #006699;"><strong>)</strong></span> <span style="color: #0099ff;"><strong>repeat-x</strong></span> <span style="color: #0099ff;"><strong>fixed</strong></span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 4 </span></span>  <span style="color: #009966;"><strong>font-family</strong></span><span style="color: #000000;"><strong>:</strong></span> Arial<span style="color: #000000;"><strong>,</strong></span> Helvetica<span style="color: #000000;"><strong>,</strong></span> sans-serif<span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #990066;"> 5 </span></span>  <span style="color: #009966;"><strong>font-size</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">11pt</span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 6 </span></span>  <span style="color: #009966;"><strong>text-align</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #0099ff;"><strong>justify</strong></span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 7 </span></span><span style="color: #000000;"><strong>}</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 8 </span></span><span style="color: #0000ff;">a</span> <span style="color: #0000ff;">img</span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;"> 9 </span></span><span style="color: #000000;"><strong>{</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #990066;">10 </span></span>  <span style="color: #009966;"><strong>border</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">0</span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">11 </span></span><span style="color: #000000;"><strong>}</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">12 </span></span><span style="color: #cc00cc;">#</span><span style="color: #cc00cc;">container</span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">13 </span></span><span style="color: #000000;"><strong>{</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">14 </span></span>  <span style="color: #009966;"><strong>background</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">#</span><span style="color: #ff0000;">fff</span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #990066;">15 </span></span>  <span style="color: #009966;"><strong>width</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">95%</span><span style="color: #000000;"><strong>;</strong></span><span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"> </span><span style="color: #cc0000;"> </span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">16 </span></span>  <span style="color: #009966;"><strong>margin</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">0px</span> <span style="color: #0099ff;"><strong>auto</strong></span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">17 </span></span>  <span style="color: #009966;"><strong>padding</strong></span><span style="color: #000000;"><strong>:</strong></span> <span style="color: #ff0000;">10px</span><span style="color: #000000;"><strong>;</strong></span>
<span style="background: #dbdbdb; border-right: solid 2px black; margin-right: 5px;"><span style="color: #000000;">18 </span></span><span style="color: #000000;"><strong>}</strong></span>
</span></pre>
<p style="padding-left: 30px;">jEdit es muy configurable y personalizable y, como hemos visto, tiene gran cantidad de características, plugins y lenguajes de programación incorporados además de ser multi plataforma. Yo considero a jEdit una opción bastante recomendable.</p>
<p style="padding-left: 30px;">Finalmente, aquí tenemos una lista más completa de todas las características que tiene incorporadas (en inglés):<a href="http://www.jedit.org/index.php?page=features"> Lista de características de jEdit</a></p>
<p style="padding-left: 30px;">Si os ha gustado éste programa, podéis descargarlo desde éste enlace. Tiene bastantes versiones para descargar ya compiladas, escoge la que se adecue a tu sistema operativo: <a href="http://www.jedit.org/index.php?page=download">Descargar jEdit</a></p>
<p><span style="text-decoration: underline;"><em><strong>Notepad++</strong></em></span></p>
<div id="attachment_639" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.barail.es/wp-content/uploads/2010/03/scrsh_multiView.gif"><img class="size-medium wp-image-639" title="Notepad++" src="http://www.barail.es/wp-content/uploads/2010/03/scrsh_multiView-300x211.gif" alt="" width="300" height="211" /></a><p class="wp-caption-text">Captura de pantalla de Notepad++</p></div>
<p style="padding-left: 30px;">Notepad++ es un editor de código fuente bastante completo que soporta varios lenguajes de programación, aunque solo se ejecuta en Windows, así que si no usas el sistema operativo de Microsoft ya te puedes ir olvidando de Notepad++.</p>
<p style="padding-left: 30px;">Es de código abierto y tiene, como todos los editores de código fuente, resaltado de sintaxis, pudiendo personalizar los colores como extra.</p>
<p style="padding-left: 30px;">Además, tiene <a href="http://notepad-plus.sourceforge.net/commun/screenshots/scrsh_autocomplete.gif">autocompletado</a> y puede editar varios documentos al mismo tiempo e incluso el mismo documento pero en varias partes distintas por ventana. (muy útil para LARGOS archivos CSS).</p>
<p style="padding-left: 30px;">También posee de un gran sistema de plugins y macros.</p>
<p style="padding-left: 30px;">En fin, si usas cualquier Windows para programar, el mejor editor de código fuente que puedas encontrar es Notepad++. Y puedes descargarlo aquí: <a href="http://notepad-plus.sourceforge.net/es/site.htm">Sitio web de Notepad++</a></p>
<p><span style="text-decoration: underline;"><em><strong>TextMate</strong></em></span></p>
<p><span style="text-decoration: underline;"><em><strong> </strong></em></span></p>
<div id="attachment_653" class="wp-caption aligncenter" style="width: 310px"><span style="text-decoration: underline;"><em><strong><em><strong><a href="http://www.barail.es/wp-content/uploads/2010/03/sticknote.png"><img class="size-medium wp-image-653" title="StickNote" src="http://www.barail.es/wp-content/uploads/2010/03/sticknote-300x189.png" alt="" width="300" height="189" /></a></strong></em></strong></em></span><p class="wp-caption-text">Editando la hoja de estilos de StickNote en TextMate</p></div>
<p><em><strong> </strong></em></p>
<p style="padding-left: 30px;">TextMate es definitivamente la <span style="text-decoration: underline;"><strong>mejor</strong></span> opción si estás usando un Mac (de hecho, me atrevería a decir que es el mejor editor de código fuente) ya que sólo funciona en los sistemas operativos de Apple.</p>
<p style="padding-left: 30px;">Aún ser un programa de pago (con 30 días de prueba), vale la pena. Ofrece, como todos los editores de código fuente, la capacidad de resaltar la sintaxis.</p>
<p style="padding-left: 30px;">Pero TextMate, además, nos permite abrir carpetas enteras y con ésto podremos explorarlas en una barrita lateral que nos sale al lado de la aplicación: muy útil si estás trabajando en un proyecto con varios archivos, ya que te lo abrirá todo en pestañas.</p>
<p style="padding-left: 30px;">TextMate ofrece también un autocompletado que se activa con Tab (si escribes if cuándo estás editando en JavaScript y pulsas Tab, te sale ésto: &#8220;if (true) {};&#8221; seleccionándose el true para que a la que escribas algo se cambie). También ofrece grabación y reproducción de macros y un <span style="text-decoration: underline;"><em><strong>EXTENSO</strong></em></span> sistema de plugins con <span style="text-decoration: underline;"><em><strong>MUCHOS</strong></em></span> plugins. Ofrece tareas que se realizarían desde la terminal para muchos lenguajes con un simple click yendo a sus plugins (siendo la mayoría ya preinstalados), llamados Bundles en TextMate, a los cuales puedes acceder desde &#8220;Bundles -&gt; {lenguaje} -&gt; {bundle}&#8221; o con un acceso de teclado que previamente habrás configurado.</p>
<p style="padding-left: 30px;">El programa es muy costumizable, pudiendo cambiar los temas entre varios de incluidos e incluso descargar más. Yo, por ejemplo, uso el tema de Railscasts (me enamoré de él cuándo lo vi) que se puede descargar aquí: <a href="http://railscasts.com/about">Página &#8220;Acerca de&#8221; de Railscasts</a>, tercer apartado &#8220;TextMate Theme&#8221;.</p>
<p style="padding-left: 30px;">Las características que he repasado aquí son muy pocas comparando con las que lleva el programa, pero es que podría hablar de él en un artículo entero… En fin, si usáis Mac, no dudáis más y poneros TextMate.</p>
<p><span style="text-decoration: underline;"><em><strong>¿Por qué no has incluido x o y editor de código fuente que me gusta más?</strong></em></span></p>
<p style="padding-left: 30px;">Es verdad. No he incluido emacs. Perdona mi pecado, señor Stallman. Pero… es que no encuentro Emacs intuitivo y no me gusta. Y aún me gusta menos hablar de cosas que no me gustan (y aún así hablo de Windows…). Tampoco he incluido vi por la misma razón.</p>
<p style="padding-left: 30px;">¿Y Eclipse? ¿Por qué no has incluido a Eclipse? Hmm… Podría haber incluido a Eclipse, pero es que Eclipse es mucho más que un editor de código fuente, es un entorno de desarrollo integrado (IDE) y creo que se merecen un artículo a parte (quizá por mi parte).</p>
<p>La conclusión a la que puedo llegar fácilmente es:</p>
<ul>
<li>Si usas Linux -&gt;jEdit o GEdit =P</li>
<li>Si usas Windows -&gt; Notepad++</li>
<li>Si usas Mac -&gt; TextMate</li>
</ul>
<p>¡Espero que os haya gustado el artículo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.barail.es/software/source-code-editors/feed/lang/es/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
