<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>El Blog de JuDelCo</title>
	<atom:link href="http://judelco.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://judelco.wordpress.com</link>
	<description>Programación, Música, Arte y chorradas varias!</description>
	<lastBuildDate>Fri, 27 Jan 2012 20:52:07 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='judelco.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/f228993b7fae2638e460bf18b24528e7?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>El Blog de JuDelCo</title>
		<link>http://judelco.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://judelco.wordpress.com/osd.xml" title="El Blog de JuDelCo" />
	<atom:link rel='hub' href='http://judelco.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Fuck yes [DJ Max Portable 2]</title>
		<link>http://judelco.wordpress.com/2012/01/15/fuck-yes-dj-max-portable-2/</link>
		<comments>http://judelco.wordpress.com/2012/01/15/fuck-yes-dj-max-portable-2/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 21:42:36 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Chorradas]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=803</guid>
		<description><![CDATA[Se aproximan cientos de horas de vicio y dolor de pulgares&#8230;. &#160; &#160; PD: Que sí, que hoy en día todos conocemos el remote joy, la ultima vez que lo usé fue hace bastantes años y estaba demasiado verde. Ahora es un gustazo. Va fluidísimo! Filed under: Chorradas, Videojuegos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=803&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Se aproximan cientos de horas de vicio y dolor de pulgares&#8230;.</p>
<p>&nbsp;</p>
<p><a href="http://judelco.files.wordpress.com/2012/01/15012012035.jpg"><img class="aligncenter size-full wp-image-804" title="JuDelCo - DJ Max Portable 2 - PC" src="http://judelco.files.wordpress.com/2012/01/15012012035.jpg?w=630&#038;h=840" alt="" width="630" height="840" /></a></p>
<p>&nbsp;</p>
<p>PD: Que sí, que hoy en día todos conocemos el remote joy, la ultima vez que lo usé fue hace bastantes años y estaba demasiado verde. Ahora es un gustazo. Va fluidísimo!</p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/chorradas/'>Chorradas</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/803/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/803/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/803/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/803/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/803/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/803/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/803/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/803/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=803&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2012/01/15/fuck-yes-dj-max-portable-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2012/01/15012012035.jpg" medium="image">
			<media:title type="html">JuDelCo - DJ Max Portable 2 - PC</media:title>
		</media:content>
	</item>
		<item>
		<title>[Opinión personal] El nacimiento de un videojuego</title>
		<link>http://judelco.wordpress.com/2012/01/03/opinion-personal-el-nacimiento-de-un-videojuego/</link>
		<comments>http://judelco.wordpress.com/2012/01/03/opinion-personal-el-nacimiento-de-un-videojuego/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 00:26:53 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=786</guid>
		<description><![CDATA[Aunque esto va más orientado realmente a la creación del proyecto de un videojuego, ¡mejor aún! Veamos, quiero hablar sobre aquellos proyectos en los que personas (generalmente jóvenes o neófitos en el tema con muchas ganas y poca experiencia) crean un &#8220;llamamiento&#8221; (ya sean diseñadores, programadores, etc) para llevar a cabo un proyecto el cual [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=786&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Aunque esto va más orientado realmente a la creación del proyecto de un videojuego, ¡mejor aún!</p>
<p>Veamos, quiero hablar sobre aquellos proyectos en los que personas (generalmente jóvenes o neófitos en el tema con muchas ganas y poca experiencia) crean un &#8220;llamamiento&#8221; (ya sean diseñadores, programadores, etc) para llevar a cabo un proyecto el cual está (generalmente) vagamente diseñado. Por ejemplo, típica persona que se apunta a un foro en el que sabe que pulula al menos gente interesada en el tema, y crea un hilo en el que busca a un número de personas (cuantas más siempre mejor, ¡claro!) a las que clasifica en categorías (va poniendo una lista categorizándolas, un grupo para los diseñadores, otro para los programadores, etc&#8230;), usando como reclamo un par de frases descriptivas de lo que quiere hacer o algún boceto, ya sea un juego shooter, un plataformas, un clonico del pacman, etc. Bien, esta persona (o personas) casi nunca cuentan con nada hecho, como mucho un par de bocetos o requisitos del juego de una forma mas o menos poco detallada. Y claro, imagino que habréis visto en qué acaba la mayoría de estos proyectos&#8230;</p>
<p>Creo que el que más lejos llegó fue uno en el que crearon una web y un foro con registro cerrado para esas personas a las que &#8220;reclutaron&#8221;. Llegaron a crear: Por parte de los diseñadores, un par de bocetos o tiras de sprites de calidad discutible. Por parte de los programadores discusiones y discusiones sobre qué lenguaje/librerias/programas/herramientas usar, con screens de esos programas para ver qué se podría llegar a hacer, y, por parte del que lo ha &#8220;organizado&#8221; todo, un par de detalles del juego de qué podría tener o algún boceto más sobre como podría ser un nivel del mismo. NADA MAS, hasta ahí he visto yo. Una vez se llega a este punto el 80% mínimo de la gente &#8220;reclutada&#8221; ha abandonado o ha desaparecido, y el resto resultante está en un caos de organización tan masivo y con tan poca documentación en la que basar su trabajo, que no pueden hacer más que esperar o intentar liar más el rizo.</p>
<p>Pues no, esto así no se hace. Aparte de la insistencia de aquellas personas a las cuales se ha de reclutar (y deben de ser de confianza o demostrar experiencia previa en otros proyectos), NO se puede crear software entre varios programadores desde cero. Es decir, reunir a un grupo de programadores (con una estructura jerarquizada o no, eso da igual) y empezar a hacer algo del cual no tienen un análisis previo hecho, es imposible, totalmente imposible.</p>
<p>Para que un proyecto salga adelante, PRIMERO debe de haberse realizado un análisis previo y definido unos requisitos del mismo lo más detallados posibles (es decir, unos documentos donde recogen qué hará el software, que no hará, y de que forma lo hará, documentar en lo posible toda la funcionalidad y capacidad del mismo). Una vez se tienen hechos (este paso SI se puede hacer entre varios, pero para ello debe haber una gran comunicación y experiencia previa por parte de los analistas involucrados), entonces hay dos salidas: O bien utilizar un engine existente (como unreal engine, cryengine, game maker, allegro, c4 engine, rpg maker, unity, o un etc muy largo&#8230;) desde el cual ya se puede comenzar con un grupo existente de personas para repartir el trabajo (ya que la base está hecha) O BIEN plantearse el diseñar el engine del videojuego desde cero, partiendo de librerías como OpenGL+SDL, XNA, o derivados (todas estarán basadas en DirectX o OpenGL, TODAS). Si se opta por lo segundo, no se puede meter a varios programadores a programar en un código inexistente desde 0 (por muy bonito que tengáis configurado el SVN o GIT). Por ello es inútil el molestarse en buscar a esas personas que te harán los gráficos, sonidos, niveles o la propia IA de los enemigos ANTES de tener creado el engine del videojuego, ya que sino estarán de brazos cruzados hasta que se tenga hecho (ya que sin el no pueden comenzar), y esto ocasionará que huyan del proyecto ya que no se les dará trabajo para hacer (si, empezarán con muchas ganas, pero a la semana se les habrá olvidado que les &#8220;reclutaste&#8221;).</p>
<p><strong>Resumiendo</strong>, los pasos correctos (a MI parecer, tened en mente que es una opinión personal) para que un proyecto salga adelante en condiciones y no se abandone a la primera de cambio son (partiendo de que eres tu el que vas a organizarlo, si eres de los que reclutan esto no tiene mucho sentido, al menos puede servirte para detectar si el barco se va a pique o no):</p>
<ul>
<li>Primero, si no tienes conocimientos previos de como realizar el proyecto, estudia, practica, haz mini-ejemplos (prototipos) básicos de lo que pensabas hacer, lee MUCHO, aprende inglés si es que no sabes ya (o estas perdido en cuanto a búsqueda de información en internet), y sobre todo no esperes que alguien haga todo el trabajo por ti y luego te lleves el reconomiento. Eso nunca pasará.</li>
<li>Segundo, no vale pensar en ese proyecto 5 min y hacer un txt o un boceto con 4 cosas que podría tener como &#8220;concepto&#8221;, NO. Pasa todas las horas que puedas creando documentación que recoja los requisitos del videojuego, qué niveles tendrá y como, su historia o argumento (si tiene), enemigos, menús, sistema de juego, HUD, nº de jugadores, etc. Todo dato que puedas aportar detallando más y más será de utilidad. (Obviamente hazlo documentándolo propiamente, nada de lenguaje &#8220;hoygan&#8221; en un txt plano.</li>
<li>Decide antes las herramientas a utilizar, recursos, webs útiles y lo más importante, el lenguaje de programación y librerías a usar (o engine). Este será el pilar #1 del juego, así que mucho cuidado con lo que elijes. Mi recomendación personal es aprender C/C++ y usar SDL+OpenGL (dejad un comentario para preguntar más detalles).</li>
<li>Una vez hecho el paso anterior, diseña y construye TU SOLO la base del engine para el juego (por eso dije lo que dije en el primer paso). No digo que creas el juego entero por ti mismo, sino que el sistema de entidades en el mapa funcione, tengas funciones para la carga de recursos (como imágenes y sonido), el bucle principal del juego, entre otras cosas y todo muy bien estructurado, ya que en esto se basará TODO. El objetivo es conseguir un engine orientado al videojuego que quieras crear Y que esté MODULARIZADO. Es decir, que si alguien modifica el código de sonido o de IA de algún enemigo, NO se tenga que modificar nada más para que el juego siga funcionando. De esta forma varios programadores podrán repartirse la tarea sin que el trabajo de uno afecte al trabajo de otro (algo fundamental).</li>
<li>Una vez tengas el engine creado, funcionando y tengas un prototipo FUNCIONAL, entonces es el momento de buscar y reclutar a gente. Muéstrale lo que tienes hecho, dí a donde quieres llegar, crea algunas demos técnicas de tu engine para que la gente se anime y se apunte al proyecto (te aseguro que teniendo esto hecho vas a notar una diferencia brutal en cuanto a la cantidad de gente dispuesta a unirse al proyecto en comparación si no hubieras tenido casi nada hecho).</li>
<li>Reparte tareas, ¿recuerdas la documentación que te dije que hicieras del juego? Gracias a ella sabrás que hace falta por hacer y podrás repartir las tareas fácilmente. Comparte esa documentación con todo el que esté involucrado en el proyecto. Así sabrán como debería ser el juego una vez acabado y podrán aportar sus trabajos pensando en ello y dando su toque personal, y NO a ciegas. Mantén a la gente motivada y todo debería acabar bien.</li>
</ul>
<p>Bueno, y esto es básicamente como se debería comenzar un proyecto en condiciones. Como he dicho, es una opinión personal basada en la lógica y en la experiencia (de lo que he visto, yo no he ido por ahí reclutando a todo un foro para terminar haciendo un hello world xD). Si queréis ahondar más en el tema, hace tiempo publiqué una entrada en la que hablaba de los motivos por los que acaban los proyectos orientados a videojuegos (haced click y leedla, es bastante interesante -&gt; <strong><a href="http://judelco.wordpress.com/2010/10/17/amateur-killers-por-que-acaban-los-proyectos/" target="_blank">Por qué acaban los proyectos</a> </strong>)</p>
<p>Por último, os dejo con un cuento de NightFox que no tiene desperdicio, con moraleja y todo. Aquí va:</p>
<p style="text-align:center;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<h4 style="text-align:center;">&#8220;El cuento del programador y la lechera&#8221;</h4>
<p>Erase una vez un chavalin que soñaba con ser programador y crear sus propios videojuegos. Había escrito algún programa y estaba lleno de ilusión. Quiso empezar con algo simple, un pong y empezó a ello. Cuando tenia algunas lineas de código escritas, pensó, un pong es muy simple, yo quiero destacar, así que se dijo, bueno, un pong quizás es demasiado fácil, que tal si hago algo mas vistoso, si, un mario, así que empezó a programar, a dibujar algunos fondos, algún sprite y cuando ya tenia eso en pantalla dijo, el mario esta muy visto, que tal si le pongo una ametralladora y que pueda disparar a los Koopas. Empezó sobre el papel a hacer diseños y pensar que estaría bien. Mientras pensó, pero claro, un toque de rol molaría, como el Pokemon, poder subir de nivel, personalizar el personaje y empezó a buscar gráficos sonidos para su homebrew. Cuando tenia mucho material reunido, su programa mostraba (solo) la pantalla de titulo y un menú pensó, bueno, como ya esta empezado, hagamos un mundo mas abierto, como GTA.</p>
<p>Entonces le visito un amigo suyo y le pregunto:<em> &#8220;oye, hay un concurso de programación de videojuegos, ¿vas a presentar tu juego?&#8221;. </em>Nuestro chavalin le contesta: <em>&#8220;¡si! Pero lo he cambiado, ahora no es un pong, es un GTA + RPG + MARIO + POKEMON + ARCADE&#8221;. </em>El amigo sonríe y le dice: <em>&#8220;Se que has aprendido mucho, pero, en dos meses, crees que seras capaz de aprender todo lo que te falta, dibujar toda esa cantidad de fondos, sprites, hacer las músicas, sonidos&#8230;&#8221;</em></p>
<p>¿Me dices que <strong>TU</strong> que hace 2 meses que programas (con suerte) harás el mismo trabajo que un equipo experto de 30 personas en 1 año?<br />
En ese momento el castillo megachachi mágico que se había montado nuestro colega en su cabecita se vino abajo y vio que lo que pretendía era una salvajada, imposible de realizar.</p>
<p><span style="text-decoration:underline;">Moraleja del cuento:</span> Si alguien se cree que el solo o un grupo de 4 o 5, harán el mismo trabajo que un equipo de profesionales en una décima parte del tiempo que lo hacen ellos, no se, cuando toquen de pies en el suelo igual se fracturan las piernas de la ostia que se pegan. Así que, <strong>sed realistas</strong>, calculad que posibilidades REALES tenéis de llevar a cabo un proyecto en el tiempo que os marquéis, hacedlo y no os desviéis de lo que tenéis proyectado. Así estaréis en ese 5% de proyectos que se terminan.</p>
<p style="text-align:center;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p style="text-align:left;"><strong>¡ Hasta la próxima entrada !</strong></p>
<p style="text-align:left;">
<br />Filed under: <a href='http://judelco.wordpress.com/category/programacion/'>Programación</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/786/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/786/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/786/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/786/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/786/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/786/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/786/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/786/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=786&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2012/01/03/opinion-personal-el-nacimiento-de-un-videojuego/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Merry Christmas 2011</title>
		<link>http://judelco.wordpress.com/2011/12/25/merry-christmas-2011/</link>
		<comments>http://judelco.wordpress.com/2011/12/25/merry-christmas-2011/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 21:12:38 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Touhou]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=779</guid>
		<description><![CDATA[Filed under: Noticias, Touhou<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=779&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://judelco.wordpress.com/2011/12/25/merry-christmas-2011/moe%20110564%20sample/" rel="attachment wp-att-780"><img class="aligncenter size-full wp-image-780" title="Merry Christmas 2011" src="http://judelco.files.wordpress.com/2011/12/moe2011056420sample.jpg?w=630&#038;h=766" alt="" width="630" height="766" /></a></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/noticias/'>Noticias</a>, <a href='http://judelco.wordpress.com/category/touhou/'>Touhou</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/779/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/779/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/779/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/779/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/779/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/779/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/779/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/779/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=779&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/12/25/merry-christmas-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/12/moe2011056420sample.jpg" medium="image">
			<media:title type="html">Merry Christmas 2011</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducción al lenguaje ensamblador IL de .NET [Parte 4]</title>
		<link>http://judelco.wordpress.com/2011/12/18/introduccion-al-lenguaje-ensamblador-il-de-net-parte-4/</link>
		<comments>http://judelco.wordpress.com/2011/12/18/introduccion-al-lenguaje-ensamblador-il-de-net-parte-4/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 16:25:14 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=770</guid>
		<description><![CDATA[[ &#60;-- Introducción al lenguaje ensamblador IL de .NET [Parte 3] ] Definiendo Métodos Una vez hemos aprendido acerca de las condiciones (saltos o ramificaciones), bucles y variables, es hora de ver en profundidad cómo son declarados los métodos en ILAsm. La forma de declarar métodos en ILAsm es muy parecida a la usada para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=770&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://judelco.wordpress.com/2011/12/17/introduccion-al-lenguaje-ensamblador-il-de-net-parte-3/" target="_blank">[ &lt;-- Introducción al lenguaje ensamblador IL de .NET [Parte 3] ]</a></p>
<h2>Definiendo Métodos</h2>
<p>Una vez hemos aprendido acerca de las condiciones (saltos o ramificaciones), bucles y variables, es hora de ver en profundidad cómo son declarados los métodos en ILAsm. La forma de declarar métodos en ILAsm es muy parecida a la usada para hacerlo en lenguajes como C# o C++, excepto algunos pequeños detalles. Bien, veamos entonces un código de ejemplo para analizar en detalle qué hemos hecho:</p>
<pre><span style="color:#008000;">//Metodos.il</span>
<span style="color:#008000;">//Pruebas creando métodos</span>

.assembly extern mscorlib {}

.assembly Metodos
{
    .ver 1:0:1:0
}
.module Metodos.exe

.method static <span style="color:#3366ff;">void</span> main() <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>
    .entrypoint

    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">10</span>
    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">20</span>
    <span style="color:#3366ff;">call</span> <span style="color:#339966;">int32</span> RealizarSuma(<span style="color:#339966;">int32</span>, <span style="color:#339966;">int32</span>)
    <span style="color:#3366ff;">call void</span> EscribirSuma(<span style="color:#339966;">int32</span>)
    <span style="color:#3366ff;">ret</span>
}

.method public static <span style="color:#339966;">int32</span> RealizarSuma(<span style="color:#339966;">int32</span>, <span style="color:#339966;">int32</span>) <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>    

    <span style="color:#3366ff;">ldarg</span>.0
    <span style="color:#3366ff;">ldarg</span>.1
    <span style="color:#3366ff;">add</span>

    <span style="color:#3366ff;">ret</span>
}
.method public static <span style="color:#3366ff;">void</span> EscribirSuma(<span style="color:#339966;">int32</span>) <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>
    <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"El resultado es: "</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::Write(<span style="color:#339966;">string</span>)

    <span style="color:#3366ff;">ldarg</span>.0
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::Write(<span style="color:#339966;">int32</span>)

    <span style="color:#3366ff;">ret</span>
}</pre>
<h6 style="text-align:center;">Figura 1.8 &#8211; Metodos.il, Definir y llamar a nuestros propios métodos</h6>
<p>Este simple programa sumará dos números (predefinidos, para simplificar el código) y mostrará el resultado. Hemos definido dos métodos aquí. Toma nota que ambos métodos son estáticos por lo que podemos acceder a ellos directamente sin crear ninguna instancia de ellos. Primero hemos cargado dos números al stack y llamado al primer método al que hemos denominado &#8216;<em>RealizarSuma</em>&#8216;, el cual estará esperando dos valores <em>int32</em> al principio del stack. Si miramos al cuerpo del método (<em>RealizarSuma</em>), veremos que su declaración luce igual que el método <em>main</em> tal y como hemos visto en ocasiones anteriores, de nuevo hemos definido la directiva .<em>maxstack</em> pero date cuenta que esta vez no hemos incluido la directiva <em>.entrypoint</em> ya que un programa únicamente puede tener un punto de entrada y, en el caso de arriba, hemos declarado ese punto en el método main (como se suele hacer). Las instrucciones <em>ldarg.0</em> y <em>ldarg.1</em> cargan los valores de los argumentos del método al stack. Entonces simplemente hemos usado la instrucción de suma (<em>add</em>) y por ultimo el método finaliza retornando al punto donde fue invocado. Date cuenta de que el método devuelve un valor de tipo <em>int32</em>, por lo que, ¿qué valor habrá devuelto?. Por supuesto, ese valor fue devuelto y ahora está disponible en el stack de evaluación una vez terminó el método su trabajo. A partir de aquí el método main vuelve a tener el control para llamar esta vez al método &#8216;<em>EscribirSuma</em>&#8216;. Este método requiere también de un parámetro de tipo <em>int32</em> y<em>,</em> ya que nuestra anterior llamada a &#8216;<em>RealizarSuma</em>&#8216; ya nos devolvió ese valor, &#8216;<em>EscribirSuma</em>&#8216; lo utilizará como parámetro. Una vez llamado al nuevo método, este escribirá en pantalla el resultado de la suma usando <em>ldarg.0</em> para cargar el argumento y usar su valor.</p>
<p>El código analizado demuestra que crear y usar métodos no es difícil en ILAsm y bueno, de momento lo es, pero los métodos también pueden recibir valores por referencia, por lo que en la siguiente sección hablaremos de ello.</p>
<p>&nbsp;</p>
<h2>Pasando variables por Referencia</h2>
<p>ILAsm soporta también el paso de parámetros por referencia ya que lo soportan también lenguajes de alto nivel en .NET. Cuando pasamos cualquier variable por referencia, no le pasamos su valor sino su dirección de memoria (puntero) para que el método pueda trabajar con ella directamente. Veamos un ejemplo de como funciona:</p>
<pre>.method static <span style="color:#3366ff;">void</span> main() <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>
    .entrypoint
    <span style="color:#3366ff;">.locals</span> init (<span style="color:#339966;">int32</span>, <span style="color:#339966;">int32</span>)

    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">10</span>
    <span style="color:#3366ff;">stloc</span>.0
    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">20</span>
    <span style="color:#3366ff;">stloc</span>.1

    <span style="color:#008000;">//Cargamos la dirección de memoria de la 1era variable</span>
    <span style="color:#3366ff;">ldloca</span> <span style="color:#0000ff;">0</span>
    <span style="color:#008000;">//Cargamos el valor de la 2ª variable</span>
    <span style="color:#3366ff;">ldloc</span>.1
    call void RealizarSuma(<span style="color:#339966;">int32</span> &amp;, <span style="color:#339966;">int32</span>)
    <span style="color:#3366ff;">ldloc</span>.0
    <span style="color:#008000;">//Cargamos la 1era variable de nuevo, pero esta vez su valor</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine(<span style="color:#339966;">int32</span>)
    <span style="color:#3366ff;">ret</span>
}
.method    public static <span style="color:#3366ff;">void</span> RealizarSuma(<span style="color:#339966;">int32</span> &amp;, <span style="color:#339966;">int32</span>) <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>
    <span style="color:#3366ff;">.locals</span>    init (<span style="color:#339966;">int32</span>)
    <span style="color:#008000;">//Buscamos en memoria y copiamos su valor</span>
    <span style="color:#3366ff;">ldarg</span>.0
    <span style="color:#3366ff;">ldind</span>.i4
    <span style="color:#3366ff;">stloc</span>.0
    <span style="color:#3366ff;">ldloc</span>.0
    <span style="color:#008000;">//Realizamos la suma</span>
    <span style="color:#3366ff;">ldarg</span>.1
    <span style="color:#3366ff;">add</span>
    <span style="color:#3366ff;">stloc</span>.0

    <span style="color:#3366ff;">ldarg</span>.0
    <span style="color:#3366ff;">ldloc</span>.0
    <span style="color:#3366ff;">stind</span>.i4

    <span style="color:#3366ff;">ret</span>
}</pre>
<h6 style="text-align:center;">Figura 1.9 &#8211; VariablesPorRef.il, Pasando variables por referencia</h6>
<p>El punto interesante en el código es el uso de algunas nuevas instrucciones como <em>ldloca</em>, la cual carga la dirección de memoria de una variable, en vez de su valor, al stack. En el método principal (<em>main</em>), hemos declarado dos variables (<em>locales</em>) y asignado unos valores (10 y 20 respectivamente). Entonces hemos cargado la dirección de memoria de la primera variable en la memoria y el valor de la segunda, para luego invocar el método &#8216;<em>RealizarSuma</em>&#8216;. Notarás que se ha usado &#8216;&amp;&#8217; con el primer parametro <em>int32</em>, lo cual significa que el valor contendrá su referencia en memoria y no su valor para poder pasar tal variable por referencia. De la misma manera, en la definición del método &#8216;RealizarSuma&#8217; encontraremos también el mismo símbolo &#8216;&amp;&#8217;. Por lo que, tenemos una variable que es pasada por referencia y una segunda variable por valor. Ahora el problema está en que tenemos que acceder a esa dirección de memoria para poder acceder a su valor y modificarlo si fuese necesario. Para solucionar esto, hemos almacenado al stack el primer argumento (el cual contiene la dirección de memoria) y utilizado la instrucción <em>ldind.i4</em>, la cual carga el valor de un entero (32 bit) al stack utilizando una dirección en memoria dada. Hemos almacenado ese valor en una variable local para que podamos reutilizarla fácilmente (o tendríamos que hacer este paso varias veces). Entonces hemos cargado esa variable local y el segundo argumento (el cual ya va por valor) al stack, sumados ambos y guardados en la misma variable local. Por ultimo tenemos algo interesante, y es modificar el valor de esa variable pasada por referencia con el valor del resultado. Para ello hemos usado la instrucción <em>ldind.i4</em>, la cual modifica el valor de una variable en la dirección de memoria indicada en el stack (es decir, lee qué dirección de memoria tiene que acceder y escribe un valor). Una vez hecho esto, para testear que todo ha ido bien, no devolveremos el resultado con el método, en vez de esto, ya que hemos almacenado el resultado en la variable pasada por referencia, usaremos en el método <em>main</em> esa misma variable para escribir el resultado utilizando el método &#8216;<em>WriteLine</em>&#8216;.</p>
<p>Esta es la forma en la que en ILAsm se utilizan variables por referencia. Hasta aquí, hemos visto formas de declarar variables, condiciones, bucles y por último métodos (con ambos tipos de parámetros). En la próxima parte entraremos de lleno con los espacios de nombre (namespaces a partir de ahora) y las clases, es decir, con la parte orientada a objetos de ILAsm.</p>
<p><strong>¡Hasta la próxima entrega!</strong></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/programacion/'>Programación</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/770/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/770/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/770/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/770/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/770/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/770/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/770/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/770/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=770&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/12/18/introduccion-al-lenguaje-ensamblador-il-de-net-parte-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducción al lenguaje ensamblador IL de .NET [Parte 3]</title>
		<link>http://judelco.wordpress.com/2011/12/17/introduccion-al-lenguaje-ensamblador-il-de-net-parte-3/</link>
		<comments>http://judelco.wordpress.com/2011/12/17/introduccion-al-lenguaje-ensamblador-il-de-net-parte-3/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 17:18:17 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=742</guid>
		<description><![CDATA[[ &#60;-- Introducción al lenguaje ensamblador IL de .NET [Parte 2] ] Declaración de Variables Las variables es uno de los pilares de cualquier lenguaje de programación y por tanto, ILAsm nos permite declararlas y usarlas. Aunque no es una tarea tan sencilla como en los lenguajes de alto nivel, usando la directiva .locals podremos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=742&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://judelco.wordpress.com/2011/12/16/introduccion-al-lenguaje-ensamblador-il-de-net-parte-2/" target="_blank">[ &lt;-- Introducción al lenguaje ensamblador IL de .NET [Parte 2] ]</a></p>
<h2>Declaración de Variables</h2>
<p>Las variables es uno de los pilares de cualquier lenguaje de programación y por tanto, ILAsm nos permite declararlas y usarlas. Aunque no es una tarea tan sencilla como en los lenguajes de alto nivel, usando la directiva <em>.locals</em> podremos definir variables. Esta directiva debería normalmente usarse al principio de cualquier método, aunque puedes poner la declaración en cualquier sitio, obviamente, antes de usarlas. Aquí tenemos un ejemplo en el que declaramos una variable, guardamos un valor en ella y luego la usamos para imprimir su valor.</p>
<pre><span style="color:#3366ff;">.locals</span> init (<span style="color:#339966;">int32</span>, <span style="color:#339966;">string</span>)
<span style="color:#3366ff;">ldc.</span>i4 <span style="color:#0000ff;">34</span>
<span style="color:#3366ff;">stloc</span>.0
<span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"Texto de ejemplo para probar la variable local"</span>
<span style="color:#3366ff;">stloc</span>.1
<span style="color:#3366ff;">ldloc</span>.0
<span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine(<span style="color:#339966;">int32</span>)
<span style="color:#3366ff;">ldloc</span>.1
<span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine(<span style="color:#339966;">string</span>)</pre>
<h6 style="text-align:center;">Figura 1.5 &#8211; Variables Locales</h6>
<p>Hemos declarado dos variables usando la directiva <em>.locals</em>, una del tipo <em>int32</em> y la otra del tipo <em>string</em>. Luego hemos cargado el número 34 del tipo<em> int32</em> en memoria y se la hemos asignado a la variable <em>local 0</em>, la cual es nuestra primera variable local. Toma nota que en ILAsm los índices empiezan por cero. Luego hemos cargado en memoria una segunda variable y se la hemos asignado a esa segunda variable local. Finalmente hemos mostrado por pantalla ambas variables. Os preguntareis para qué sirve la instrucción <em>ldloc</em>, pues bien, puede ser usada para cargar cualquier tipo de dato en memoria (enteros, coma flotante, objetos, etc&#8230;).</p>
<p>En este caso no hemos usado nombres para nuestras variables. Ya que son locales y no tenemos intención de utilizarlas fuera de nuestro método. Eso no significa que no se puedan declarar variables por su nombre. Para declarar esas variables, simplemente hazlo al igual que en otro lenguaje de alto nivel como por ejemplo <em>.locals init (int32 x, int32 y)</em>. Después podrás leer o guardar valores en esas variables usando las mismas instrucciones, pero usando sus nombres como &#8216;<em>stloc x</em>&#8216; y &#8216;<em>ldloc y</em>&#8216;. Aun así, aunque tengan sus propios nombres, podrás seguir accediendo a ellas mediante su índice. <strong>Nota:</strong> A lo largo de todos los tutoriales usaré variables sin nombre, para que te acostumbres a pensar en qué indice están guardadas tus variables.</p>
<p>Bien, ahora tienes una idea de cómo manipular variables y stacks. Por favor revisa los códigos si aún no tienes muy claro algún concepto y que, a partir de ahora, estaremos manipulando ambos con bastante frecuencia. Por ello es necesario que te familiarices con este procedimiento (definir/inicializar, guardar y leer sus valores).</p>
<p>&nbsp;</p>
<h2>Condiciones en ILAsm</h2>
<p>Las condiciones son otros de los pilares de cualquier lenguaje de programación. En los lenguajes de bajo nivel, como cualquier otro lenguaje ensamblador, las condiciones están hechas usando saltos (o ramificaciones). Tomemos un ejemplo de esto:</p>
<pre><span style="color:#3366ff;">br</span> SaltarAqui <span style="color:#008000;">//También puedes usar br.s si lo deseas</span>

<span style="color:#008000;">//El código que haya aquí será saltado después de la instrucción anterior</span>

SaltarAqui:
<span style="color:#008000;">//En cambio, estas instrucciones serán ejecutadas</span></pre>
<p>Compara esa instrucción con la instrucción &#8216;<em>goto</em>&#8216; de un lenguaje de alto nivel. ¿ Funciona igual verdad ? La instrucción saltará el punto de ejecución a la etiqueta indicada. Aquí, en ILAsm, en vez de usar <em>goto</em> usaremos <em>br</em>. Es instrucción también puede ser usada utilizando <em>br.s</em> si estás seguro de que el destino está entre los -128 y +127 bytes anteriores-posteriores a este, ya que usará un <em>int8</em> en vez de un <em>int32</em> para el offset. El ejemplo de arriba ha sido una ramificación (salto) incondicional ya que no hubo ninguna condición anterior de la instrucción que indicase lo contrario. Tomemos pues un ejemplo en el que sí contemplaremos un ejemplo con un salto condicional:</p>
<pre><span style="color:#008000;">//Saltando.il</span>
.method static <span style="color:#3366ff;">void</span> main() <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>
    .entrypoint
    <span style="color:#008000;">//Cogemos el primer valor del usuario</span>
    <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"Introduce el Primer número: "</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine (<span style="color:#339966;">string</span>)

    <span style="color:#3366ff;">call</span> <span style="color:#339966;">string</span> [mscorlib]System.Console::ReadLine ()
    <span style="color:#3366ff;">call</span> <span style="color:#339966;">int32</span> [mscorlib]System.Int32::Parse(<span style="color:#339966;">string</span>)

    <span style="color:#008000;">//Cogemos el segundo valor del usuario</span>
    <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"Introduce el Segundo número: "</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine (<span style="color:#339966;">string</span>)

    <span style="color:#3366ff;">call</span> <span style="color:#339966;">string</span> [mscorlib]System.Console::ReadLine ()
    <span style="color:#3366ff;">call</span> <span style="color:#339966;">int32</span> [mscorlib]System.Int32::Parse(<span style="color:#339966;">string</span>)

    <span style="color:#3366ff;">ble</span> Menor
        <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"El segundo número es menor que el primero."</span>
        <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine (<span style="color:#339966;">string</span>)

    <span style="color:#3366ff;">br</span> Salida

Menor:
    <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"El primer número es menor que el segundo."</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine (<span style="color:#339966;">string</span>)
Salida:
    <span style="color:#3366ff;">ret</span>
}</pre>
<h6 style="text-align:center;">Figura 1.6 &#8211; Saltando.il (solamente el método main)</h6>
<p>El código de arriba toma dos valores del usuario y entonces consulta cual de ellos es el más pequeño. La instrucción la cual requiere nuestra atención es &#8220;<em>ble Menor</em>&#8220;, la cual indica al JIT a mirar si el primer valor en el stack es menor o igual que el segundo, si así es el caso, entonces saltará a la etiqueta &#8216;<em>Menor</em>&#8216;. En el caso contrario la ejecución del programa continuará por la siguiente instrucción, sin realizar el salto, sin embargo luego se encontrará con un salto incondicional, ya que si no estuviera ahí, el programa continuaría y ejecutaría las instrucciones contenidas en la etiqueta <em>&#8216;Menor</em>&#8216;. Por ello hemos creado una nueva etiqueta llamada &#8216;<em>Salida</em>&#8216; y hemos llamado a la instrucción &#8216;<em>br Salida</em>&#8216; la cual obligará al programa a saltar a la etiqueta &#8216;<em>Salida</em>&#8216; y ejecutar la instrucción <em>ret</em>, para finalizar el método.</p>
<p>Las otras instrucciones condicionales que podemos encontrar son <em>beq</em> (==), <em>bne</em> (!= ), <em>bge</em> (&gt;= ), <em>bgt</em> (&gt;), <em>ble</em> (&lt;= ), <em>blt</em> (&lt;), además de <em>brfalse</em> y <em>brtrue</em> (para comprobar si el primer elemento del stack es cero o no respectivamente). Puedes usar cualquiera de ellas para ejecutar alguna parte de tu código y evitar (saltar) otro. Como dije antes, no tenemos la facilidad que tenemos en los lenguajes de alto nivel, por ello todo debe de ser realizado por ti mismo si tienes pensado escribir o modificar código en ILAsm.</p>
<p>&nbsp;</p>
<h2>Bucles en ILAsm</h2>
<p>Los bucles son otra parte fundamental de un lenguaje de programación. Un bucle no es otra cosa que la repetición del mismo bloque de código una vez y otra vez. Para ello la repetición del bloque dependerá de una variable a la que llamaremos índice del bucle. En el siguiente fragmento de código mostraré un ejemplo de cómo funciona un bucle básico, así que dedicale un poco de tiempo a entender cómo funcionan los bucles:</p>
<pre> .method static <span style="color:#3366ff;">void</span> main() <span style="color:#3366ff;">cil managed</span>
{
    <span style="color:#008000;">//Definimos dos variables locales</span>
    variables <span style="color:#3366ff;">.locals</span> init (<span style="color:#339966;">int32</span>, <span style="color:#339966;">int32</span>)
    .maxstack <span style="color:#0000ff;">2</span>
    .entrypoint

    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">4</span>
    <span style="color:#3366ff;">stloc</span>.0        <span style="color:#008000;">//Tope, el límite del bucle. Haremos 5 repeticiones</span>
    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">0</span>
    <span style="color:#3366ff;">stloc</span>.1        <span style="color:#008000;">//Inicializamos el índice a cero</span> 

Comienzo:
    <span style="color:#008000;">//Comprobamos si el contador del índice ha superado el límite</span>
    <span style="color:#3366ff;">ldloc</span>.1
    <span style="color:#3366ff;">ldloc</span>.0
    <span style="color:#3366ff;">bgt</span> Salida <span style="color:#008000;">//Si la segunda variable supera a la primera, entonces saltamos</span>

    <span style="color:#3366ff;">ldloc</span>.1
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine(<span style="color:#339966;">int32</span>)

    <span style="color:#008000;">//Incrementamos el contador</span>
    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">1</span>
    <span style="color:#3366ff;">ldloc</span>.1
    <span style="color:#3366ff;">add</span>
    <span style="color:#3366ff;">stloc</span>.1
    <span style="color:#3366ff;">br</span> Comienzo
Salida:
    <span style="color:#3366ff;">ret</span>
}</pre>
<h6 style="text-align:center;">Figura 1.7 &#8211; Bucles.il (solamente el método main)</h6>
<p>En C#, este código se vería de esta manera:</p>
<pre><span style="color:#3366ff;">for</span> (<span style="color:#339966;">temp</span> = <span style="color:#0000ff;">0</span>; <span style="color:#339966;">temp</span> &lt; <span style="color:#0000ff;">5</span>; <span style="color:#339966;">temp</span>++)
            <span style="color:#3366ff;">System</span>.Console.WriteLine (<span style="color:#339966;">temp</span>);</pre>
<p>Bien, examinemos el código. Primero, hemos declarado dos variables locales e inicializado la primera con un valor de 4 y la segunda con valor 0. El bucle real empieza con la etiqueta &#8216;<em>Comienzo</em>&#8216;, desde donde primero comprobaremos si el contador del indice del bucle (la variable nº2, <em>ldloc 1</em>) sobrepasa el límite impuesto por nuestra primera variable (<em>ldloc 0</em>), si ese fuera el caso, el programa saltaría a la etiqueta &#8216;<em>Salida</em>&#8216; con lo cual nuestro programa terminaría. Si no es el caso, entonces el valor será escrito por pantalla e incrementaremos ese valor para luego saltar de nuevo a la etiqueta &#8216;<em>Comienzo</em>&#8216; para comprobar de nuevo si el contador ha excedido o no el límite impuesto. Así funcionan los bucles en ILAsm (y en la mayoría de los otros lenguajes ensamblador).</p>
<p>En la próxima entrega veremos cómo definir nuestros propios métodos y utilizarlos, además de ver los dos tipos de parámetros soportados. Por valor y por referencia.</p>
<p>&nbsp;</p>
<p><strong><a href="http://judelco.wordpress.com/2011/12/18/introduccion-al-lenguaje-ensamblador-il-de-net-parte-4/" target="_blank">[ Introducción al lenguaje ensamblador IL de .NET [Parte 4] –&gt; ]</a></strong></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/programacion/'>Programación</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/742/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/742/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/742/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=742&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/12/17/introduccion-al-lenguaje-ensamblador-il-de-net-parte-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducción al lenguaje ensamblador IL de .NET [Parte 2]</title>
		<link>http://judelco.wordpress.com/2011/12/16/introduccion-al-lenguaje-ensamblador-il-de-net-parte-2/</link>
		<comments>http://judelco.wordpress.com/2011/12/16/introduccion-al-lenguaje-ensamblador-il-de-net-parte-2/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 14:17:40 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=720</guid>
		<description><![CDATA[[ &#60;-- Introducción al lenguaje ensamblador IL de .NET [Parte 1] ] El Stack de evaluación El stack de evaluación puede ser considerado como un stack normal como otro cualquiera, sin embargo este stack es únicamente usado para guardar información justo antes de ejecutar una instrucción. Sabemos que la información guardada en memoria cuando podemos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=720&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://judelco.wordpress.com/2011/12/15/introduccion-al-lenguaje-ensamblador-il-de-net/" target="_blank">[ &lt;-- Introducción al lenguaje ensamblador IL de .NET [Parte 1] ]</a></p>
<h2>El Stack de evaluación</h2>
<p>El stack de evaluación puede ser considerado como un stack normal como otro cualquiera, sin embargo este stack es únicamente usado para guardar información justo antes de ejecutar una instrucción. Sabemos que la información guardada en memoria cuando podemos tener acceso a realizar alguna operación sobre ella. Lo mismo pasa si movemos esa información a los registros en un lenguaje ensamblador antes de invocar alguna instrucción o interrupción. De la misma manera que tenemos que mover la información (en el caso del primer tutorial fue una cadena de texto) al stack antes de procesarla (para mostrar esa cadena en pantalla). Al principio de nuestro método &#8216;main&#8217; (véase figura 1.1 en la <a href="http://judelco.wordpress.com/2011/12/15/introduccion-al-lenguaje-ensamblador-il-de-net/" target="_blank">anterior entrada</a>), nos damos cuenta que tuvimos que almacenar información a lo largo de nuestro método. Por ello usamos la directiva <em>.maxstack</em>, si hubiéramos indicado la directiva con un número tres (<em>.maxstack 3</em>), entonces el JIT hubiera creado un stack con 3 celdas para su uso posterior en el método. Ojo, esto no significa que únicamente podemos cargar 3 valores en la vida de nuestro método, simplemente significa que podemos albergar 3 valores a la vez como máximo. Una vez que el método finaliza, el stack y sus valores se eliminan. Así es como funciona el recolector de Basura en .NET. Además, no hay limitación en cuanto al tipo de dato que podemos usar para almacenar en el stack. Podremos mover cualquier tipo de dato (cadenas, enteros, objetos, etc) al stack siempre que queramos.</p>
<p>Tomemos otro ejemplo que nos aclarará el concepto del stack de evaluación:</p>
<pre><span style="color:#808000;">//Sumar.il</span>
<span style="color:#808000;">//Suma dos números</span>

.assembly extern mscorlib {}

.assembly <span style="color:#3366ff;">Sumar</span>
{
    .ver 1:0:1:0
}
.module Sumar.exe

.method static <span style="color:#3366ff;">void</span> main() <span style="color:#3366ff;">cil managed</span>
{
    .maxstack <span style="color:#0000ff;">2</span>
    .entrypoint

    <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"La suma de 50 y 30 es = "</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::Write (<span style="color:#339966;">string</span>)

    <span style="color:#3366ff;">ldc</span>.i4.s <span style="color:#0000ff;">50</span>
    <span style="color:#3366ff;">ldc</span>.i4 <span style="color:#0000ff;">30</span>
    <span style="color:#3366ff;">add</span>
    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::Write (<span style="color:#339966;">int32</span>)
    <span style="color:#3366ff;">ret</span>
}</pre>
<h6 style="text-align:center;">Figura 1.3 &#8211; Sumar.il, sumando dos números predefinidos</h6>
<p>El trozo de código encima de nuestro método main es el mismo que en el ejemplo anterior, el cual ya explicamos. Únicamente ha cambiado el nombre del módulo. En este código lo importante a discutir es el <em>.maxstack 2</em>, el cual indica al JIT a preparar suficiente espacio en memoria para que podamos guardar dos valores. Entonces cargamos la cadena en el stack y la imprimimos. Lo próximo que hacemos es cargar dos enteros en memoria a la vez (usando las instrucciones <em>ldc.i4.s</em> y <em>ldc.i4</em>), usar la instrucción de suma y finalmente mostrar por pantalla el resultado entero que hemos obtenido. La instrucción de suma usada (<em>add</em>) tomará del stack de evaluación dos valores (siempre que sean encontrados), los sumará y guardará el resultado al comienzo del stack (es decir, un &#8216;push&#8217;). Justo después de la instrucción de suma, encontramos otra instrucción llamada <em>Write</em> que escribirá algo por pantalla. Este método requiere que haya un valor guardado en el stack. En este caso requerirá que sea del tipo entero. Si lo encuentra, entonces escribirá su valor por pantalla o en caso contrario levantará un error.</p>
<p>No os liéis con <em>ldc.i4.s</em> y <em>ldc.i4</em>, ambos representan un tipo de dato entero (<em>integer</em>), pero el primero es un único byte y el segundo son cuatro bytes.</p>
<p>Espero que hayáis entendido la forma de usar el stack de evaluación y como funciona. Ahora veremos los tipos de datos del lenguaje ILAsm como una parte fundamental del mismo.</p>
<h2>Tipos de Datos ILAsm</h2>
<p>&nbsp;</p>
<p>Al igual que cuando aprendes cualquier otro lenguaje, hay que hablar sobre sus tipos de datos soportados. Este caso es igual. Tómate un tiempo para observar la tabla de abajo (figura 1.4) para aprender cuales son los tipos de datos más comunes en este lenguaje, pero antes, me gustaría añadir una cosa. No hay consistencia en la definición de los tipos de datos en los diferentes lenguajes de .NET. Por ejemplo para indicar un tipo de dato entero (32 bit) en VB.NET usamos &#8216;<em>Integer</em>&#8216; pero en C# y en VC++ no es así, aunque luego ambos casos se representen usando <em>System.Int32</em>. Además, necesitamos tener en cuenta si es un tipo básico con la especificación del Lenguaje común (CLS, <a href="http://es.wikipedia.org/wiki/Infraestructura_de_lenguaje_com%C3%BAn" target="_blank">Common Language Specification</a>) o no. Como por ejemplo el tipo de dato <em>UInt32</em> no está reconocido por VB.NET por ello no es básico CLS.</p>
<p>Bien, empecemos por aprender la tabla que nos proporciona los nuevos nombres para los tipos de datos de ILAsm:</p>
<table border="1">
<tbody>
<tr>
<td><strong>Nombre en IL</strong></td>
<td><strong>Tipo Base en .NET</strong></td>
<td><strong>Significado (Descripción)</strong></td>
<td><strong>Básico CLS</strong></td>
</tr>
<tr>
<td>Void</td>
<td></td>
<td>Sin valor, solo usado como tipo de retorno</td>
<td>No</td>
</tr>
<tr>
<td>Bool</td>
<td>System.Boolean</td>
<td>Booleano</td>
<td>No</td>
</tr>
<tr>
<td>Char</td>
<td>System.Char</td>
<td>Carácter (16-bit unicode)</td>
<td>No</td>
</tr>
<tr>
<td>int8</td>
<td>System.SByte</td>
<td>Entero 1-byte (con signo)</td>
<td>No</td>
</tr>
<tr>
<td>int16</td>
<td>System.Int16</td>
<td>Entero 2-byte (con signo)</td>
<td>No</td>
</tr>
<tr>
<td>int32</td>
<td>System.Int32</td>
<td>Entero 4-byte (con signo)</td>
<td>Si</td>
</tr>
<tr>
<td>int64</td>
<td>System.64</td>
<td>Entero 8-byte (con signo)</td>
<td>Si</td>
</tr>
<tr>
<td>native int</td>
<td>System.IntPtr</td>
<td>Entero (con signo)</td>
<td>Si</td>
</tr>
<tr>
<td>unsigned int8</td>
<td>System.Byte</td>
<td>Entero 1-byte (sin signo)</td>
<td>Si</td>
</tr>
<tr>
<td>unsigned int16</td>
<td>System.UInt16</td>
<td>Entero 2-byte (sin signo)</td>
<td>Si</td>
</tr>
<tr>
<td>unsigned int32</td>
<td>System.UInt32</td>
<td>Entero 4-byte (sin signo)</td>
<td>No</td>
</tr>
<tr>
<td>unsigned int64</td>
<td>System.UInt64</td>
<td>Entero 8-byte (sin signo)</td>
<td>Si</td>
</tr>
<tr>
<td>native unsigned int</td>
<td>System.UIntPtr</td>
<td>Entero (sin signo)</td>
<td>Si</td>
</tr>
<tr>
<td>Float32</td>
<td>System.Single</td>
<td>Coma flotante de 4-byte</td>
<td>No</td>
</tr>
<tr>
<td>Float64</td>
<td>System.Double</td>
<td>Coma flotante de 8-byte</td>
<td>No</td>
</tr>
<tr>
<td>object</td>
<td>System.Object</td>
<td>Tipo objeto</td>
<td>Si</td>
</tr>
<tr>
<td>&amp;</td>
<td></td>
<td>Puntero administrado</td>
<td>Si</td>
</tr>
<tr>
<td>*</td>
<td>System.IntPtr</td>
<td>Puntero no administrado</td>
<td>Si</td>
</tr>
<tr>
<td>typedef</td>
<td>System.Typed Reference</td>
<td>Tipo especial que contiene datos y explícitamente indica su tipo</td>
<td>Si</td>
</tr>
<tr>
<td>Array</td>
<td>System.Array</td>
<td>Array</td>
<td>Si</td>
</tr>
<tr>
<td>string</td>
<td>System.String</td>
<td>Cadena de texto</td>
<td>Si</td>
</tr>
</tbody>
</table>
<h6 style="text-align:center;">Figura 1.4 &#8211; Tipos de Datos en ILAsm</h6>
<p>También tenemos abreviaciones para los tipos de datos en ILAsm como por ejemplo <em>.i4</em>, <em>.i4.s</em>, <em>.u4</em>, etc como usamos en el ejemplo anterior. Los tipos de datos mencionados en la tabla de arriba muestran los tipos de datos son reconocidos en ILAsm y además menciona cuales son tipos básicos CLS y cuales no. Entonces, teniendo en mente esa información, podremos llamar a cualquier función como esta:</p>
<pre><span style="color:#3366ff;">call</span> <span style="color:#339966;">int32</span> FuncionEjemplo (<span style="color:#339966;">string</span>, <span style="color:#339966;">int32</span>, <span style="color:#339966;">float64</span><code>) </code></pre>
<p>Lo cual significa, que la función &#8216;<em>FuncionEjemplo</em>&#8216; devuelve un valor del tipo <em>int32</em> (<em>System.Int32</em>) y toma tres valores como parámetros que son del tipo <em>string</em> (<em>System.String</em>), <em>int32</em> (<em>System.Int32</em>) y <em>float64</em> (<em>System.Double</em>) respectivamente. Toma nota que estos son datos básicos en el CLR y en ILAsm. Cuando estés interesado en tratar tipos de datos que no son básicos (definidos por el usuario) entonces el código podrá lucir como esto:</p>
<pre><span style="color:#808000;">//Código en C#</span>
ColorTranslator.ToHtml(<span style="color:#3366ff;">Color</span>);

<span style="color:#808000;">//Código en ILAsm</span>
<span style="color:#3366ff;">call instance</span> <span style="color:#339966;">string</span> [System.Drawing]System.Drawing.ColorTranslator::ToHtml(valuetype [System.Drawing]System.Drawing.Color)</pre>
<p>Toma nota que hemos definido explícitamente los tipos de dato en los parámetros y incluyendo además el espacio de nombre (<em>namespace</em>) donde el tipo de dato reside y una palabra clave que indicará al JIT que estamos referenciando a un tipo de dato no básico (<em>valuetype</em>).</p>
<p>Esto lo dejaré más claro en la próxima entrega del tutorial, donde trataremos más intensamente con los tipos de datos. También veremos una de las bases de cualquier lenguaje: Condiciones y bucles.</p>
<p>&nbsp;</p>
<p><a href="http://judelco.wordpress.com/2011/12/17/introduccion-al-lenguaje-ensamblador-il-de-net-parte-3/" target="_blank"><strong>[ Introducción al lenguaje ensamblador IL de .NET [Parte 3] &#8211;&gt; ]</strong></a></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/programacion/'>Programación</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/720/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/720/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/720/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=720&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/12/16/introduccion-al-lenguaje-ensamblador-il-de-net-parte-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducción al lenguaje ensamblador IL de .NET [Parte 1]</title>
		<link>http://judelco.wordpress.com/2011/12/15/introduccion-al-lenguaje-ensamblador-il-de-net/</link>
		<comments>http://judelco.wordpress.com/2011/12/15/introduccion-al-lenguaje-ensamblador-il-de-net/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 16:42:34 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=695</guid>
		<description><![CDATA[Introducción a los Tutoriales Lo que pretendo con esto es realizar una serie de tutoriales consecutivos sobre este tema, por lo que los próximos tutoriales se basaran en los anteriores. No pretendo que lleguéis a ser maestros escribiendo código ILAsm, más bien que obtengáis la base necesaria para que podáis desenvolveros sin mucha dificultad con el y sigáis [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=695&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introducción a los Tutoriales</h2>
<p>Lo que pretendo con esto es realizar una serie de tutoriales consecutivos sobre este tema, por lo que los próximos tutoriales se basaran en los anteriores. No pretendo que lleguéis a ser maestros escribiendo código ILAsm, más bien que obtengáis la base necesaria para que podáis desenvolveros sin mucha dificultad con el y sigáis aprendiendo por vuestra cuenta.</p>
<p>Con estos tutoriales aprenderéis la base del lenguaje ensamblador IL (tambien llamado CIL, o <a href="http://es.wikipedia.org/wiki/Common_Intermediate_Language" target="_blank">Common Intermediate Language</a>) para que podáis debuguear código en bajo nivel .NET ya compilado (desde cualquier lenguaje de alto nivel, como VB .NET, C# y otros) y así corregir fallos, añadir, quitar o cambiar características y más. Es decir, podrás editar libremente cualquier programa o librería una vez compilada de .NET. Además, usando estos conocimientos, tendrás la base para poder empezar a escribir tu propio compilador para crear un nuevo lenguaje .NET (aunque no vamos a llegar tan lejos).</p>
<p>Siempre que compilas tu código en .NET, independientemente del lenguaje que estés usando, será convertido al Lenguaje Intermedio (IL, Intermediate Language) el cual es también conocido como Lenguaje Intermedio de Microsoft (MSIL) o Lenguaje Intermedio Común (CIL). Puedes pensar que IL es como el Byte Code generado por el lenguaje Java. Si estás interesado en entender cómo .NET funciona con sus tipos de datos y cómo el código que escribes es convertido a código IL, entonces estos tutoriales sobre ILAsm te van a resultar muy útiles dándote grandes ventajas.</p>
<p>Entre estas ventajas encontramos entender qué es lo que devuelve el compilador .NET cuando compila, por lo tanto, podrás examinar el codigo traducido por el compilador y realizar los cambios que sean necesarios (aunque no es necesario en la mayoría de los casos). Además, puedes cambiar el código IL para hacer cambios que tu lenguaje de alto nivel no permitiría para aumentar el rendimiento de tu código, y también te ayudará a debuggear tu código en bajo nivel. Y como dije antes, si estás planeando escribir un compilador para .NET, entonces necesitarás entender el código ILAsm.</p>
<p>IL es el formato binario el cual el compilador devuelve una vez termina su tarea, es decir, no puede ser leido por humanos, pero al igual que otros binarios (ejecutables) tienen su lenguaje ensamblador, IL tiene tambien el suyo propio conocido como lenguaje ensamblador IL (ILAsm). El lenguaje ensamblador IL (ILAsm a partir de ahora) tiene sus propias instrucciones de la misma manera que cualquier otro lenguaje ensamblador nativo pueda tener. Por ejemplo, para sumar dos números, tienes la instrucción &#8216;add&#8217;, para restar dos números, tienes la instrucción &#8216;sub&#8217;, etc. Es obvio que el <a href="http://es.wikipedia.org/wiki/Compilaci%C3%B3n_en_tiempo_de_ejecuci%C3%B3n" target="_blank">compilador en tiempo de ejecución</a> de .NET (el JIT) no puede ejecutar código ILAsm directamente. Si tu tienes escrito código en ILAsm entonces tendrás primero que compilarlo a código IL y entonces el JIT podrá ejecutar el código.</p>
<p><span style="text-decoration:underline;">NOTA:</span> Por favor ten en cuenta que IL y ILAsm son cosas distintas. Siempre que hablaremos sobre IL, nos referiremos al código binario devuelto por el compilador de .NET mientras que cuando referenciemos a ILAsm, nos referiremos al lenguaje ensamblador de este código el cual no está en su forma binaria.</p>
<p><span style="text-decoration:underline;">NOTA2:</span> Ten en cuenta que espero que estés bastante familiarizado con .NET (incluyendo algún lenguaje de alto nivel como C# o VB.NET). En estos tutoriales no profundizaremos en todos los detalles, sino únicamente en aquellos que realmente necesitan ser explicados. Si algo te confunde, por favor házmelo saber para aclarártelo.</p>
<p>&nbsp;</p>
<h2>Introducción al Lenguaje Ensamblador IL</h2>
<p>Bien, empecemos con el propósito de estos tutoriales, la introducción al lenguaje ensamblador IL. Ten en cuenta que puedes escribir código en ILAsm en cualquier editor de texto (como notepad) y luego usar la linea de comandos (cmd) para compilar el código. El compilador en este caso es el ILAsm.exe, el cual está distribuido junto con el <a href="http://msdn.microsoft.com/en-us/library/d9kh6s92%28VS.71%29.aspx" target="_blank">SDK de .NET Framework</a>. ILAsm es un lenguaje algo duro de aprender para aquellos que siempre han programado en lenguajes de alto nivel, pero para aquellos que han programado en C o en C++ no les debería resultar demasiado complicado. En ILAsm necesitamos hacer todas las cosas manualmente, como añadir un valor al stack, administrar la memoria, etc. Piensa en ILAsm de la misma manera que cualquier otro lenguaje ensamblador con la diferencia de que en otro lenguaje estarás tratando con ejecutables nativos para Windows y con este lenguaje (ILAsm) estarás tratando con ejecutables .NET y además, este lenguaje es un poco más fácil (que otros lenguajes ensamblador) y además está orientado a objetos.</p>
<p>Empecemos con este lenguaje con nuestro primer programa de ejemplo que escribirá una frase en pantalla (en la consola). Es una tradición que en el comienzo de cada lenguaje se use un &#8220;<em>hola mundo</em>&#8221; así que vamos a hacer lo mismo:</p>
<pre><span style="color:#808000;">//Ejemplo.IL </span>
<span style="color:#808000;">//Un simple programa que imprime una cadena de texto por consola</span>

.assembly extern mscorlib {}

.assembly Ejemplo
{
    .ver 1:0:1:0
}
.module ejemplo.exe

.method static <span style="color:#3366ff;">void</span> main() <span style="color:#3366ff;">cil managed</span>
{
    .maxstack 1
    .entrypoint

    <span style="color:#3366ff;">ldstr</span> <span style="color:#339966;">"Hola mundo! Also, The Game !!!"</span>

    <span style="color:#3366ff;">call void</span> [mscorlib]System.Console::WriteLine (<span style="color:#339966;">string</span>)
    <span style="color:#3366ff;">ret</span>
}</pre>
<h6 style="text-align:center;"> Figura 1.1 &#8211; Un programa de ejemplo en ILAsm</h6>
<p>&nbsp;</p>
<p>Una vez escrito el codigo de arriba (o figura 1.1) en un simple editor de texto como notepad, guárdalo como &#8220;<em>Ejemplo.il</em>&#8220;. Ahora realizaremos nuestra primera compilación y ejecutaremos nuestro codigo. Una vez hecho esto entraremos en detalles y explicaré qué es lo que hace cada instrucción. Para compilar el código, escribe lo siguiente en una ventana de comandos (cmd):</p>
<p><a href="http://judelco.files.wordpress.com/2011/12/figura-1-2.png"><img class="aligncenter size-full wp-image-708" title="figura 1.2" src="http://judelco.files.wordpress.com/2011/12/figura-1-2.png?w=630&#038;h=341" alt="" width="630" height="341" /></a></p>
<h6 style="text-align:center;"> Figura 1.2 &#8211; Salida del programa de ejemplo. Aqui puedes ver el comando usado para compilar el código</h6>
<p>&nbsp;</p>
<p>ILAsm.exe es una herramienta utilizada por linea de comando la cual está incluida con el Framework SDK de .NET y puede ser encontrada en la carpeta &#8220;<em>&lt;carpeta_windows&gt;\Microsoft.NET\Framework\&lt;version&gt;</em>&#8220;. Si quieres puedes <a href="http://technet.microsoft.com/es-es/library/cc736637(WS.10).aspx" target="_blank">incluir esta ruta a la variable de entorno</a> Path de tu SO (por ello no he tenido que escribir la ruta completa en la figura 1.2 como podéis ver). Cuando has terminado de compilar tu archivo .IL, tendrás listo tu ejecutable (.exe) con el mismo nombre que tu archivo .IL. Puedes especificar el nombre de salida utilizando &#8220;<em>/OutPut=&lt;filename&gt;</em>&#8221; (sin comillas). Para ejecutar tu recien compilado programa, simplemente escribe el nombre de tu progama y presiona Enter. La salida del programa aparecerá ante ti. Bien, ahora nos tomaremos un tiempo para entender que es lo que hemos escrito en el código. Ten en mente que me estoy refiriendo al código de la figura 1.1</p>
<ul>
<li>Las dos primeras lineas (que empiezan por //) son comentarios. En ILAsm puedes escribir comentarios de la misma manera que en C# o C++. Para comentar múltiples líneas o un trozo de línea, puedes usar /* &#8230; */</li>
<li>Lo siguiente que hemos hecho a sido indicar al compilador que importe la librería llamada mscorlib (<em>.assembly extern mscorlib {}</em>). En ILAsm, cada linea comenzada por un punto (.) indica que la línea es una instrucción especial o una directiva. Entonces la directiva .assembly que tenemos aquí dice que vamos a usar una librería externa (la cual no está escrita por nosotros en este código, está pre-compilada).</li>
<li>La siguiente directiva .assembly define la información de nuestro archivo (<em>.assembly Ejemplo</em> &#8230;.). En nuestro caso, hemos incluido &#8220;Ejemplo&#8221; como el nombre del ensamblado y entre llaves hemos incluido informacion sobre el ensamblado de salida (nuestro .exe), en este caso hemos incluido la información de versión de nuestro programa. Podemos incluir más información sobre el ensamblado en este bloque, como la clave pública, etc.</li>
<li>La siguiente directiva indica el nombre del módulo de nuestro ensamblado (<em>.module Ejemplo.exe</em>). Como ya sabemos debe haber al menos un módulo en cada ensamblado.</li>
<li>Si seguimos hacia adelante, nos encontramos con (<em>.method static void main() cil managed</em>), la directiva .method indica que estamos definiendo un método, el cual es estático (usando la misma definición que en C#) y no retorna nada (<em>void</em>). Además, el nombre del método es &#8216;main&#8217; y no toma ningún parámetro (ya que no hay nada dentro de los paréntesis). La instrucción final &#8216;<em>cil managed</em>&#8216; indica al compilador que el código que vamos a compilar estará gestionado por nosotros (nuestro código).</li>
<li>Moviéndonos dentro del método, la primera directiva es .maxstack (<em>.maxstack 1</em>). Esta directiva es importante la cual anuncia el número máximo de objetos que podremos cargar en memoria (en el stack de evaluación en realidad). Discutiremos sobre esto extensamente en el próximo capítulo, ignóralo por el momento.</li>
<li>La directiva <em>.entrypoint</em> le indica al compilador que este método será el punto de entrada para nuestra aplicación, es decir, la primera función que será llamada una vez el programa se ejecute (que suele ser el método main).</li>
<li>La siguiente línea (<em>ldstr &#8220;Hola mundo! Also, The Game !!!&#8221;</em>) contiene la instrucción ldstr. La instrucción ldstr es usada para cargar una cadena en la memoria (o stack de evaluación). Es necesario escribir valores en el stack de evaluación antes de que puedan ser utilizados. Como he dicho antes, discutiremos sobre ello extensamente en el siguiente capítulo.</li>
<li>La siguiente instrucción (<em>call void [mscorlib]System.Console::WriteLine (string)</em>) llama (invoca) a un método que reside en la librería mscorlib. Toma nota que hemos indicado la ruta completa de este método incluyendo el tipo de retorno, los tipos de parámetros y en qué librería reside. Con esto hemos pasado la cadena de texto como parámetro, la cual no es una variable, es un tipo de dato. La instrucción anterior (<em>ldstr &#8220;Hola m&#8230;.&#8221;</em>) cargó la cadena al stack y este método la está usando para imprimirla.</li>
<li>La instrucción final (<em>ret</em>), aunque no debería ser necesario explicarla, implica retornar (terminar) el método.</li>
</ul>
<p>Leyendo las lineas de arriba, ahora deberías tener una idea de como escribir código en ILAsm, además, deberías darte cuenta de que ILAsm no es como un lenguaje .NET de alto nivel (como C#, VB, etc). De todas formas, todo el codigo que tu escribas, lo harás siguiendo una estructura de este estilo (o con pequeños cambios, cuando trabajemos con clases).</p>
<p>Para la siguiente parte del tutorial hablaremos sobre el stack de evaluación y los tipos de datos más comunes que nos encontraremos.</p>
<p><strong><a href="http://judelco.wordpress.com/2011/12/16/introduccion-al-lenguaje-ensamblador-il-de-net-parte-2/" target="_blank">[ Introducción al lenguaje ensamblador IL de .NET [Parte 2] &#8211;&gt; ]</a></strong></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/programacion/'>Programación</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/695/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/695/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/695/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/695/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/695/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/695/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/695/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=695&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/12/15/introduccion-al-lenguaje-ensamblador-il-de-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/12/figura-1-2.png" medium="image">
			<media:title type="html">figura 1.2</media:title>
		</media:content>
	</item>
		<item>
		<title>SpaceChem – Más que un juego</title>
		<link>http://judelco.wordpress.com/2011/10/14/spacechem-%e2%80%93-mas-que-un-juego/</link>
		<comments>http://judelco.wordpress.com/2011/10/14/spacechem-%e2%80%93-mas-que-un-juego/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 21:23:52 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=675</guid>
		<description><![CDATA[Source original: http://blog.darkhogg.es/2011/07/spacechem-mas-que-un-juego/ Cualquiera que sepa algo de Zachtronics Industries sabe de qué hablo cuando digo que sus juegos no son exactamente para toda la familia. Zach tiene por costumbre hacer juegos de puzzle poco convencionales, más enfocados a la resolución de problemas en general que con encontrar una solución concreta a un nivel concreto. SpaceChem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=675&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration:underline;">Source original</span>: <span class="Apple-style-span" style="font-size:13px;font-weight:normal;"><a href="http://blog.darkhogg.es/2011/07/spacechem-mas-que-un-juego/">http://blog.darkhogg.es/2011/07/spacechem-mas-que-un-juego/</a></span></p>
<p>Cualquiera que sepa algo de Zachtronics Industries sabe de qué hablo cuando digo que sus juegos no son exactamente para toda la familia. Zach tiene por costumbre hacer juegos de puzzle poco convencionales, más enfocados a la resolución de problemas en general que con encontrar una solución concreta a un nivel concreto. <a href="http://www.spacechemthegame.com/" target="_blank">SpaceChem</a> es todo eso y más.</p>
<p style="text-align:center;"><a href="http://judelco.files.wordpress.com/2011/10/2011-10-14_231309.png"><img class="aligncenter size-full wp-image-676" title="2011-10-14_231309" src="http://judelco.files.wordpress.com/2011/10/2011-10-14_231309.png?w=630&#038;h=471" alt="" width="630" height="471" /></a><span class="Apple-style-span" style="font-size:10px;font-weight:bold;">(Que no te engañe la imagen, el juego tiene una curva de dificultad fácil de tomar)</span></p>
<p>En <a href="http://www.spacechemthegame.com/" target="_blank">SpaceChem</a> debemos transformar una serie de átomos y moléculas en otros, usando para ellos <em>reactores</em>. Estos reactores contienen dos elementos mecánicos que nos permiten mover, rotar, unir, separar, etc. los elementos de entrada para transformarlos. Nuestros &#8216;<em>waldos&#8217;</em> se desplazan por el escenario siguiendo un camino concreto que nosotros mismos hacemos, ejecutando órdenes a su paso. En ciertos niveles podemos unir más de un reactor de este tipo para formar una cadena de producción.</p>
<p>Como una imagen vale más que mil palabras, digo yo que un vídeo valdrá bastante más:</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/10/14/spacechem-%e2%80%93-mas-que-un-juego/"><img src="http://img.youtube.com/vi/Gk8JwvtVs38/2.jpg" alt="" /></a></span>
<p>&nbsp;</p>
<p>Lo que hace a SpaceChem diferente de otros juegos de puzzle es la infinidad de soluciones válidas a las que se pueden llegar en un mismo nivel. Tanto que el calificativo de <em>puzzle</em> se le queda corto: En los puzzles típicamente existe una única solución correcta, o variaciones de dicha solución, que el diseñador oculta de alguna forma y nos deja la tarea de encontrarla. SpaceChem es más que eso, es un juego de <em>resolución de problemas</em>: Dadas unas herramientas (los reactores) y unos materiales (las entradas al reactor), hemos de apañárnoslas para conseguir unos productos (las salidas del reactor). No existe ninguna pista de <em>cómo</em> hemos de hacerlo, eso es justamente lo que hemos de conseguir nosotros. Nuestro objetivo no es <em>descubrir</em> la intrincada solución que pensó el diseñador, sino <em>idear</em> una nosotros mismos, que puede ser o no similar a la que dicho diseñador pensó en un principio (si es que pensó alguna). A su vez éste tipo de juegos nos da la posibilidad de medir de alguna manera cómo es nuestra solución de buena, según el número de ciclos que tarda o de símbolos usados, por ejemplo.</p>
<p>No es secreto que Zach diseña lo que él mismo llama <em>juegos para ingenieros</em>. Uno de sus juegos, <strong><a href="http://www.zachtronicsindustries.com/play-kohctpyktop/" target="_blank">KOHCTPYKTOP</a></strong>, nos introduce de lleno en la piel de un ingeniero electrónico. Por suerte para todos, los siguientes juegos que hizo no eran tanto para ingenieros, aunque conservaran ese ambiente ingenieril que define a Zach. Estoy hablando de <a href="http://www.zachtronicsindustries.com/the-codex-of-alchemical-engineering/" target="_blank">The Codex of Alchemical Engineering</a> y SpaceChem (y un poco en menor medida, de <a href="http://www.zachtronicsindustries.com/the-bureau-of-steam-engineering/" target="_blank">The Bureau of Steam Engineering</a>). SpaceChem es, en realidad, la evolución lógica de <em>The Codex</em>, tintado de química en lugar de alquimia y cambiando la mecánica fundamental de brazos mecánicos fijos a brazos mecánicos completamente móviles.</p>
<p>The Codex trabaja con un modelo de <em>bucles repetitivos</em>, donde el escenario en sí no repercute de ninguna manera en cómo se comportan los brazos. SpaceChem va un paso más allá permitiendo puntos de sincronización, toma de decisiones basadas en datos externos, sensores e incluso una cierta memoria. A todo ello sumémosle la capacidad de procesamiento paralelo que introduce el tener varios reactores funcionando al mismo tiempo, capacidad que estaba presente en The Codex hasta cierto punto, pero no de forma tan marcada.</p>
<p>A estas alturas cualquiera con un mínimo de conocimientos de programación debería saber a dónde quiero llegar. Y quien no, probablemente esa última frase le haya abierto la mente. Resulta que hay decenas de conceptos de la programación que pueden aplicarse a SpaceChem, desde cuestiones muy básicas hasta conceptos de concurrencia bastante más complejos:</p>
<ul>
<li><strong>Ejecución secuencial:</strong> Tanto en SpaceChem como en la programación, las instrucciones se ejecutan una a una, en un orden determinado y una detrás de otra.</li>
<li><strong>Bucles:</strong> En SpaceChem, el objetivo principal es producir <em>un número concreto</em> de moléculas o átomos. Generalmente las soluciones se construyen de forma que el sistema funciona correctamente de forma indefinida (no siempre es así, luego hablaré de ello). En programación igualmente existen bucles que nos permiten realizar un cierto proceso de forma indefinida. Los videojuegos y los sistemas operativos en realidad no son más que un bucle <em>casi</em> infinito (puesto que se puede terminar) que ejecuta las instrucciones adecuadas.</li>
<li><strong>Modularización de la solución:</strong> En muchísimas ocasiones nos encontramos niveles en los que se nos presenta una tarea muy complicada que podemos resolver usando tareas más sencillas. En programación esto es el día a día, y dudo que nadie sea capaz de programar bien sin realizar una buena división de tareas.</li>
<li><strong>Entrada y salida con bloqueo: </strong>Cuando en SpaceChem tratamos de ejecutar una instrucción <em>INPUT</em> y no hay nada disponible, o un <em>OUTPUT</em> y la tubería de salida está llena, automáticamente el waldo espera a poder realizar la acción. Las operaciones de entrada y salida en programación se comportan exactamente igual en la mayoría de situaciones:<em>bloquean</em> el proceso hasta que existan datos de entrada o sitio a la salida. Lo cual nos lleva al siguiente punto:</li>
<li><strong>Bloqueo mutuo:</strong> Conocido generalmente como <em>deadlock</em>, se trata de una situación en la que dos o más procesos quedan a la espera de recursos que están siendo utilizados por otro de los procesos que forman parte del bloqueo. El ejemplo en SpaceChem se puede encontrar fácilmente en el nivel <em>No Thanks Necessary</em>. Una de las entradas nos aporta N2 y O2 con probabilidades de 25% y 75% respectivamente, es decir, 3 átomos de O por cada átomo de N, con objetivo de conseguir NO3. La solución típica consiste en diseñar un reactor que tome como entrada O2/N2 y envíe átomos de O por la salida superior y de N por la inferior. Este reactor se conecta a un segundo que, a partir de átomos sencillos de O y N, forma el NO3. El problema es que la entrada, aunque a lo largo del tiempo tiende a la uniformidad, es <em>aleatoria</em>, y no podemos asumir que los elementos llegarán exactamente como pensamos (tres O por cada N). En ocasiones podemos llegar a tener 8 O y ningún N, o incluso 4 N y ningún O. Sin espaciar adecuadamente las tuberías, es muy normal que el primer reactor quede a la espera para enviar un O que ya no cabe <em>a la vez</em> que el segundo queda a la espera de un átomo de O que no hay. Ninguno de los dos reactores avanzará, por lo que ambos esperarán <em>indefinidamente</em>. En el mundo de la programación el problema es algo más complicado y generalmente ocurre porque dos procesos distintos tratan de acceder a varios recursos <em>a la vez</em> y <em>en orden inverso</em>, como dos ficheros. <a href="http://es.wikipedia.org/wiki/Bloqueo_mutuo" target="_blank">La Wikipedia lo explica muy bien</a>, mejor que yo de hecho.</li>
</ul>
<p>Estos son unos pocos ejemplos, pero hay más cosas que podemos relacionar. Por ejemplo, un reactor puede verse como un <em>proceso</em> con dos <em>hilos</em> (los waldos) que se conecta con el resto de procesos del sistema mediante <em>colas</em> (FIFOs, las tuberías).</p>
<p>Con todo esto, SpaceChem y muchos otros juegos del estilo, son algo más que juegos. Son juegos en cierta manera educativos. Te obligan a pensar de forma muy productiva, puesto que el reto que se te presenta es <em>resolver un problema</em>, con una serie de herramientas, <em>sin ningún tipo de guía</em>, algo a lo que se supone que nos enseñan a los ingenieros en general, y a los informáticos en particular.</p>
<h3><span style="text-decoration:underline;"><br />
</span></h3>
<br />Filed under: <a href='http://judelco.wordpress.com/category/noticias/'>Noticias</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/675/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=675&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/10/14/spacechem-%e2%80%93-mas-que-un-juego/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/10/2011-10-14_231309.png" medium="image">
			<media:title type="html">2011-10-14_231309</media:title>
		</media:content>
	</item>
		<item>
		<title>【東方】Tear of Girl (Cirno&#8217;s Theme Remix)</title>
		<link>http://judelco.wordpress.com/2011/09/08/tear-of-girl-cirnos-theme-remix/</link>
		<comments>http://judelco.wordpress.com/2011/09/08/tear-of-girl-cirnos-theme-remix/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 16:43:30 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Touhou]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=669</guid>
		<description><![CDATA[Bueno, he aquí una canción de touhou que yo mismo he subido en HD (no la encontraba en Youtube) Filed under: Música, Touhou, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=669&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bueno, he aquí una canción de touhou que <a href="http://www.youtube.com/user/judelco" target="_blank">yo mismo he subido</a> en HD (no la encontraba en Youtube)</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/09/08/tear-of-girl-cirnos-theme-remix/"><img src="http://img.youtube.com/vi/8X5N1iFBsmY/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/touhou/'>Touhou</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/669/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=669&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/09/08/tear-of-girl-cirnos-theme-remix/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Organización del código fuente en C++</title>
		<link>http://judelco.wordpress.com/2011/08/23/organizacion-del-codigo-fuente-en-c/</link>
		<comments>http://judelco.wordpress.com/2011/08/23/organizacion-del-codigo-fuente-en-c/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 19:21:04 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=662</guid>
		<description><![CDATA[Introducción Si bien muchos programas simples caben en un solo archivo C o Cpp, cualquier proyecto serio va a necesitar dividir el código en varios ficheros con el fin de ser manejable. Sin embargo, muchos principiantes no se dan cuenta hasta que punto esto es importante (Sobre todo por que muchos lo han intentado y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=662&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Si bien muchos programas simples caben en un solo archivo C o Cpp, cualquier proyecto serio va a necesitar dividir el código en varios ficheros con el fin de ser manejable. Sin embargo, muchos principiantes no se dan cuenta hasta que punto esto es importante (Sobre todo por que muchos lo han intentado y les ha dado más problemas que soluciones y decidieron que no merecía la pena el esfuerzo). En este artículo intentaré explicar porqué hacerlo y cómo hacerlo correctamente. Cuando sea necesario, doy une breve explicación de como trabajan los compiladores y enlazadores para ayudar a entender porque se tienen que hacer las cosas de una manera determinada.</p>
<h3>Terminología</h3>
<p>En este artículo voy a llamar a los ficheros estándar de C y C++ (normalmente con extensión .c o .cpp) “ficheros fuentes”. Esto será para distinguirlos de los “archivos de cabecera” (normalmente con extensión .h o .hpp). Esta terminología es la usada por Visual C++ y la mayoría de los libros. Ten en cuenta que esta diferencia es puramente conceptual, ambos son archivos de texto con código en el interior. Sin embargo, como se muestra en el resto del artículo, la diferencia de como se trata a unos archivos u otros es muy importante.</p>
<h2>¿Por qué dividir el código en varios archivos?</h2>
<p>La primera pregunta que los programadores novatos se hacen cuando ven un directorio lleno de archivos de código es ¿Por qué no un solo archivo? No entienden el sentido de separar el código en varios ficheros.</p>
<p>Dividir cualquier proyecto de tamaño razonable tiene algunas ventajas, siendo las más significativas las siguientes:</p>
<ul>
<li><strong>Acelerar la compilación</strong>. La mayoría de compiladores trabajan en un solo archivo a la vez. Así que si tenemos 10.000 líneas de código en un solo archivo y cambiamos una línea para compilar nuestro programa necesitamos volver a procesar y compilar 10.000 líneas de código. Sin embargo, si 10.000 líneas de código se distribuyen uniformemente en 10 archivos, si cambiamos una línea solo tendremos que volver a compilar 1000 líneas de código, ahorrando tener que compilar las 9000 líneas restantes del resto de ficheros.</li>
<li><strong>Aumenta la organización</strong>. Dividir el código en una línea lógica hará el trabajo más fácil para ti (O cualquier programador del proyecto) para encontrar variables, clases, estructuras, funciones, etc. Imagina que usas la función de búsqueda de tu editor para encontrar una parte del código, si tienes un fichero llamado juego.cpp tendrás que buscar a lo largo de todo el código, sin embargo, si tienes tu juego dividido en 4 ficheros del tipo <strong>graphics.cpp</strong>, <strong>main.cpp</strong>, <strong>audio.cpp</strong> e <strong>input.cpp</strong>, si quieres buscar algo relacionado con el sonido sabrás donde buscar reduciendo en 3/4 tu búsqueda.</li>
<li><strong>Facilita reutilizar código</strong>. Si el código está cuidadosamente dividido y los archivos son independientes unos de otros te permite reutilizarlos en otros proyecto ahorrándote mucho trabajo en el futuro. Hay muchas más cosas necesarias para poder reutilizar el código, pero sin una buena organización es difícil saber que partes van a trabajar juntas y cuales no. Por lo tanto, poner los subsistemas y clases en ficheros independientes ayuda a portar el código a otros proyectos fácilmente.</li>
<li><strong>Compartir código entre proyectos</strong>. En principio es el mismo tema que la reutilización, pero hay ocasiones que el mismo archivo se usa en varios proyectos en vez de simplemente copiar y pegar, esto facilita que si se corrigen errores o se cambia algo no se tenga que modificar cada copia del archivo y te aseguras de que ambos proyectos utilizan la última versión del código.</li>
<li><strong>Dividir las tareas entre los programadores</strong>. En proyectos grandes donde trabajan varios programadores no es factible trabajar todos en el mismo fichero, la separación de código facilita que cada uno pueda dedicarse a una parte sin interferir en las demás. Por supuesto, puede darse el caso de que dos quieran modificar el mismo archivo a la vez, para ello existen el software de control de versiones como SVN, GIT, Mercurial…</li>
</ul>
<p>Todo lo anterior son aspectos de modularidad, un elemento clave tanto en el diseño estructurado como orientado a objetos.</p>
<h2>Como hacerlo. Los Fundamentos</h2>
<p>Es probable que te estés convenciendo de que hay que dividir el código, ahora la cuestión es cómo hacerlo. Aunque algunas de las decisiones que tome serán razonablemente arbitrarias hay algunas reglas básicas que debería seguir para asegurar el trabajo.</p>
<p>En primer lugar, mirar como dividir el código en secciones. A menudo se separa en subsistemas o “módulos” como el sonido, música, gráficos, manejo de ficheros, etc. Crea nuevos ficheros con nombres significativos para saber a simple vista que contiene, a continuación mueva todo el código que pertenece al módulo a ese archivo. A veces no está claro que pertenece a cada módulo (Algunos te dirían que es por un mal diseño de su software).</p>
<p>Una vez dividido el código en archivos fuentes el siguiente paso es considerar que meter en el archivo de cabecera, en un nivel simple, lo que suele estar en la parte superior del código es un serio candidato a ir al archivo de cabecera, de ahí a que se llamen así.</p>
<p>Los archivos de cabecera suelen incluir algunas o todas de las siguientes cosas:</p>
<ul>
<li>Definición de estructuras y clases.</li>
<li>Definición de tipos (typedef).</li>
<li>Prototipos de funciones.</li>
<li>Variables Globales (ver más adelante).</li>
<li>Constantes</li>
<li>Macros #define.</li>
<li>Directivas #pragma.</li>
</ul>
<p>(Además, deberías incluir las plantillas y las funciones en línea. Esto debería quedar claro al terminar este artículo).</p>
<p>Por ejemplo, mira cualquier biblioteca estándar que venga con el compilador que uses. <strong>Stdlib.h</strong> es un buen ejemplo (<a href="http://www.koders.com/c/fid34FD5D2F1BAF8DC1EC81F8B2E7936A9BB9DAD232.aspx" target="_blank">ver aquí</a>). Te darás cuenta que tiene algunas de las cosas mencionadas en la lista de antes. Del mismo modo puedes ver que las variables globales están precedidas por el modificador <strong>extern</strong>, esto es importante, pero lo veremos más adelante.</p>
<p>En general será necesario tener un archivo de cabecera para cara archivo de código fuente, si tienes un <strong>sound.cpp</strong> tendrás un <strong>sound.h</strong>, si tienes un <strong>sprite.cpp</strong> tendrás un <strong>sprite.h</strong>. Mantener siempre el mismo orden es importante. Saber lo que va en el archivo de cabecera y lo que va en el archivo fuente.</p>
<p>Estos archivos de cabecera se convertirán en la interfaz entre los subsistemas. Al incluir (#include) un archivo de cabecera en otro archivo tendrás acceso a todas las funciones, clases y tipos declarados en ella. Por lo tanto en todos los archivos que uses sprintes probablemente tengas que incluir sprite.h en cada uno de ellos. Recuerda usar <strong>#include “sprite.h”</strong> y no <strong>#include &lt;sprite.h&gt;</strong> para que busque en el directorio del proyecto y no en la biblioteca estándar.</p>
<p>Recuerda que, en lo que al compilador se refiere, no existe ninguna diferencia entre un archivo de cabecera y un archivo de código fuente, para el compilador ambos son archivos de texto que contienen código y tratarán igual, la diferencia es puramente conceptual y para los programadores. Los archivos de cabecera deben contener la interfaz, es decir, la definición de lo que contienen los archivos de código fuentes. Estos son los que contienen las funciones, clases y demás. Esto significa que un archivo fuente utiliza otros archivos fuentes gracias a los archivos de cabecera, estos hacen de enlace entre unos y otros.</p>
<h2>Dificultades potenciales</h2>
<p>Las reglas anteriores son bastante vagas y sólo sirven como punto de partida para organizar el código. En casos sencillos, se puede producir por completo los programas de trabajo siguiendo las directrices. Sin embargo, hay algunos detalles más que han de tenerse en cuenta, y es a menudo estos detalles los que causan a los programadores noveles tanto dolor, cuando comienzan a dividir su código hasta en los archivos de cabecera y los archivos normales.</p>
<p>En mi opinión hay cuatro errores básicos de los que entran en el turbio mundo de los archivos de cabeceras definidos por el usuario:</p>
<ul>
<li>La fuente de los archivos ya no compila ya que no pueden encontrar las funciones o variables que necesitan. (Esto a menudo se manifiesta en forma de algo parecido a un “error C2065: ‘MyStruct’: identificador no declarado”. En Visual C++, aunque esto puede producir cualquier número de mensajes de error diferentes en función de exactamente lo que están tratando de referencia)</li>
<li>Dependencias cíclicas. Cuando dos encabezados tienen la necesidad de incluirse entre sí. Por ejemplo la clase sprite incluye un puntero a la criatura que representa y la clase de la criatura necesita un puntero a la clase sprite. No importa como lo hagas ambas deben ser declaradas antes de usarse, pero a la fuerza cuando una se está declarando la otra no ha sido declarada aún.</li>
<li>Duplicar las definiciones. Imagina que tienes un archivo llamado map.h que incluye los archivos sprite.h y hero.h, a su vez hero.h incluye sprite.h por lo que sprite.h se incluiría dos veces en map.h, provocando un error.</li>
<li>Duplicado las instancias de los objetos dentro del código que compila bien. Este es un error vincular, a menudo difícil de entender.</li>
</ul>
<p>Entonces, ¿cómo solucionar estos problemas?</p>
<h2>Solución problema 1</h2>
<p>Afortunadamente, estos problemas son fáciles de arreglar, y aún más fácil de evitar, una vez que las entienda.</p>
<p>El primer error, en un archivo de origen se niega a compilar porque uno de los identificadores fue declarado, es fácil de resolver. Simplemente incluye (#include) el archivo que contiene la definición del identificador que usted necesita. Si sus archivos de cabecera están organizados de forma lógica y llamado así, esto debe ser fácil. Si es necesario utilizar la estructura Sprite, entonces es probable que tenga que incluir “sprite.h” en todos los archivos que lo hace. Un error que los programadores suelen tener es asumir que es un archivo ha sido incluido porque está incluido en otro archivo ya incluido, un ejemplo.</p>
<pre><span style="color:#008000;">/* Header1.h */</span>
<span style="color:#808080;">#include "header2.h"</span>
<span style="color:#3366ff;">class</span> ClassOne { ... };

<span style="color:#008000;">/* Header2.h */</span>
<span style="color:#3366ff;">class</span> ClassTwo { ... };

<span style="color:#008000;">/* File1.cpp */</span>
<span style="color:#808080;">#include "Header1.h"</span>
ClassOne myClassOne_instance;
ClassTwo myClassTwo_instance;</pre>
<p>En este caso <strong>File1.cpp</strong> compila bien ya que incluye a <strong>Header1.h</strong> e indirectamente (a través de <strong>Header1.h</strong>) también incluye a <strong>Header2.h</strong>, pero en el futuro alguien puede decidir que <strong>Header1.h</strong> no necesita incluir a <strong>Header2.h</strong>. Esto hará que se rompa <strong>File1.cpp</strong> la próxima vez que compiles al no tener la declareción de <strong>ClassTwo</strong>.</p>
<p>La solución está en incluir siempre los archivos necesarios explícitamente en el archivo que son necesarios y no confiar en que otros archivos incluidos ya lo incluyen, esto además ayuda a entender y documentar el código pues se ve que archivos necesita ese fichero en concreto para funcionar.</p>
<h2>Solución Problema 2</h2>
<p>Las dependencias cíclicas son un problema común en la ingeniería de software. A menudo se necesita que una clase o estuctura conozca la existencia de otra y esta de la primera, esto termina con el siguiente aspecto.</p>
<pre><span style="color:#008000;">/* Parent.h */</span>
<span style="color:#808080;">#include "child.h"</span>
<span style="color:#3366ff;">class</span> Parent
{
    Child* theChild;
};

<span style="color:#008000;">/* Child.h */</span>
<span style="color:#808080;">#include "parent.h"</span>
<span style="color:#3366ff;">class</span> Child
{
    Parent* theParent;
};</pre>
<p>Dado que uno de ellos tiene que ser compilado en primer lugar, necesita alguna manera de romper el ciclo. En este caso, de hecho es bastante trivial. La estructura de <strong>Parent</strong> en realidad no necesita saber los detalles de la clase del <strong>Child</strong>, ya que sólo se almacena un puntero a una. Los punteros son casi lo mismo no importa lo que apuntan, por lo tanto no es necesario que la definición de la estructura o la clase con el fin de almacenar un puntero a una instancia de esa estructura o clase. Así que la línea <em>#include</em> no es necesario. Sin embargo, sólo tiene que sacarla para tener un “identificador no declarado” error cuando se encuentra con la palabra <strong>Child</strong>, así que tienes que dejar que el compilador saber que Child es una clase a la que desea apuntar. Esto se hace con una declaración adelantada (forward declaration), tomando la forma de una definición de clase o de clase sin un cuerpo. ejemplo:</p>
<pre><span style="color:#008000;">/* Parent.h */</span>
<span style="color:#3366ff;">class</span> Child; <span style="color:#008000;">/* Forward declaration of Child; */</span>
<span style="color:#3366ff;">class</span> Parent
{
    Child* theChild;
};</pre>
<p>Observa como sustituimos la línea #include por la declaración adelantada, igualmente podemos hacerlo en el archivo Parent.h, esto, además, ahorra tiempo de compilación ya que es un #include menos que tratar. Como solo estamos utilizando un puntero y no el tipo en sí no necesita la declaración entera. En el 99% de los casos esto se puede aplicar a uno o ambos archivos para romper las dependencias cíclicas.</p>
<p>Por supuesto, en los archivos fuentes, habrá funciones que se aplican a <strong>Parent</strong> que modifican también a <strong>Child</strong>. Por lo tanto es probable que haya que incluir <strong>Parent.h</strong> y <strong>Child.h</strong> tanto en <strong>Parent.cpp</strong> como en <strong>Child.cpp</strong></p>
<p><a href="http://judelco.files.wordpress.com/2011/08/gdarticle_cyclic1.png"><img class="aligncenter size-full wp-image-663" title="gdarticle_cyclic1" src="http://judelco.files.wordpress.com/2011/08/gdarticle_cyclic1.png?w=630" alt=""   /></a></p>
<p>Tenga en cuenta que ser capaz de eliminar completamente la dependencia no siempre es posible. Muchas de las clases y las estructuras están compuestas de otras clases y las estructuras, que es una dependencia no se puede evitar. Sin embargo, siempre que esta dependencia es de un solo sentido, el orden de compilación será fijo y no debería haber ningún problema.</p>
<h2>Solución Problema 3</h2>
<p>Duplicar definiciones en tiempo de compilación significa que un archivo de cabecera terminó incluyéndose más de una vez en un archivo en particular. Esto lleva a que una clase o estructura se define más de una vez, causando error. Lo primero que debes hacer es asegurarte de que se incluyen solo los archivos necesarios para ese código fuente en particular y quitar todo lo que no utilice.</p>
<p>Lamentablemente, esto rara vez es suficiente, ya que algunas cabeceras se incluyen otras cabeceras. Vamos a revisar un ejemplo de las anteriores, con ligeras modificaciones:</p>
<pre><span style="color:#008000;">/* Header1.h */</span>
<span style="color:#808080;">#include "header3.h"</span>
<span style="color:#3366ff;">class</span> ClassOne { ... };

<span style="color:#008000;">/* Header2.h */</span>
<span style="color:#808080;">#include "header3.h"</span>
<span style="color:#3366ff;">class</span> ClassTwo { ... };

<span style="color:#008000;">/* File1.cpp */</span>
<span style="color:#808080;">#include "Header1.h"</span>
<span style="color:#808080;">#include "Header2.h"</span>
ClassOne myClassOne_instance;
ClassTwo myClassTwo_instance;</pre>
<p>Por alguna razón tanto <strong>Header1.h</strong> como <strong>Header2.h</strong> incluyen a <strong>Header3.h</strong>, quizás <strong>ClassOne</strong> y <strong>ClassTwo</strong> se compenen con funciones de <strong>Header3.h</strong>. La razón no es importante, pero muchas veces sucede casos como estos en los que al final en <strong>File1.cpp</strong> se acaba incluyendo dos veces el mismo archivo incluso sin haber una <em>#include</em> a él en el mismo archivo, recuerda que la directiva <em>#include</em> lo que hace es, antes de compilar, copiar todo el contenido del archivo incluido en el archivo actual. así que <strong>File1.cpp</strong> quedaría de la siguiente manera.</p>
<p><a href="http://judelco.files.wordpress.com/2011/08/gdarticle_includefiles.png"><img class="aligncenter size-full wp-image-664" title="gdarticle_includefiles" src="http://judelco.files.wordpress.com/2011/08/gdarticle_includefiles.png?w=630" alt=""   /></a></p>
<p>A los efectos de la compilación, <strong>File1.cpp</strong> termina con copias de <strong>Header1.h</strong> y <strong>Header2.h</strong>, los cuales incluyen sus propias copias de <strong>Header3.h</strong>. El archivo resultante, con todas las cabeceras de expansión en línea en su archivo original, se conoce como una unidad de traducción. Debido a esta expansión en línea, todo lo declarado en <strong>Header3.h</strong> va a aparecer dos veces en esta unidad de traducción, causando un error.</p>
<p>Así que, ¿qué hacer? No se puede hacer sin <strong>Header1.h</strong> o <strong>Header2.h</strong>, ya que se necesita para acceder a las estructuras declaradas en su interior lo que necesita alguna forma de asegurar que, no importa qué, <strong>Header3.h</strong> no va a aparecer dos veces en el <strong>File1.cpp</strong> cuando se compila.</p>
<p>Si se miraba stdlib.h antes, te habrás dado cuenta las líneas en la parte superior similar a lo siguiente:</p>
<pre><span style="color:#808080;">#ifndef _INC_STDLIB</span>
<span style="color:#808080;">#define _INC_STDLIB</span></pre>
<p>Y en la parte inferior del archivo, algo así como:</p>
<pre><span style="color:#808080;">#endif</span>  <span style="color:#008000;">/* _INC_STDLIB */</span></pre>
<p>Esto es lo que se conoce como un “inclusion guard”. Viene a decir que si no está definido _INC_STDLIB defínelo, sino, ve a #endif sería similar al código cuando quieres que algo se ejecute solo una vez.</p>
<pre><span style="color:#3366ff;">static</span> <span style="color:#808080;">bool</span> done = <span style="color:#3366ff;">false</span>;
<span style="color:#3366ff;">if</span> (!done)
{
    <span style="color:#008000;">/* Do something */</span>
    done = <span style="color:#3366ff;">true</span>;
}</pre>
<p>Durante la compilación de File1.cpp, la primera vez que pide que se incluya el archivo <strong>stdlib.h</strong>, llega a la línea <em>#ifndef</em> y continúa porque “_INC_STDLIB” aún no está definida. La siguiente línea define ese símbolo y lleva a cabo la lectura en stdlib.h. Si hay otra “#include” durante la compilación de File1.cpp, leerá el cheque #ifndef y luego salta a #endif al final del archivo. Esto se debe a todo lo que entre el #ifndef y #endif se ejecuta sólo si “_INC_STDLIB” no está definido, y que se definió la primera vez que lo incluye. De esta manera, se garantiza que las definiciones en stdlib.h sólo son cada vez incluye una vez al ponerlos dentro de #ifndef / #endif.</p>
<p>Esto es trivial para aplicar a sus propios proyectos. Al comienzo de cada archivo de cabecera que usted escribe, escribe lo siguiente:</p>
<pre><span style="color:#808080;">#ifndef INC_FILENAME_H</span>
<span style="color:#808080;">#define INC_FILENAME_H</span></pre>
<p>Tenga en cuenta que el símbolo (en este caso, “INC_FILENAME_H”) tiene que ser único a través de su proyecto. Es por esto que es una buena idea de incorporar el nombre del archivo en el símbolo. No agregue un guión bajo al principio como stdlib.h tiene como identificadores precedidos por un guión bajo se supone que son reservados para “la aplicación” (es decir, el compilador, las librerías estándar, y así sucesivamente). Luego se agrega el <em>#endif / * INC_FILENAME_H * /</em> al final del archivo. El comentario no es necesario, pero le ayudará a recordar a que pertenece ese #endif.</p>
<h2>Solución Problema 4</h2>
<p>Cuando el enlazador trata de crear un archivo ejecutable (o biblioteca) de su código lo que hace es meterlo todo en un archivo objeto (.obj o .o), uno por cada archivo de código fuente y los une. El trabajo principal del enlazador es resolver los identificadores (básicamente, las variables o los nombres de funciones) y convertirlas en direcciones máquina en el archivo final. El problema surge cuando el enlazador en cuentra dos intancias o más de ese identificador en los archivos objetos, entonces no se puede determinar cual es el “correcto” para su uso. El identificador debe ser único para evitar cualquier ambigüedad, Así que ¿Cómo es que el compilador no ve que hay un identificador duplicado y el enlazador si lo ve?</p>
<p>Imagina el siguiente código:</p>
<pre><span style="color:#008000;">/* Header.h */</span>
<span style="color:#808080;">#ifndef INC_HEADER_H</span>
<span style="color:#808080;">#define INC_HEADER_H</span>
<span style="color:#808080;">int</span> my_global;
<span style="color:#808080;">#endif</span> <span style="color:#008000;">/* INC_HEADER_H */</span>

<span style="color:#008000;">/* code1.cpp */</span>
<span style="color:#808080;">#include "header1.h"</span>
<span style="color:#3366ff;">void</span> DoSomething()
{
    ++my_global;
}

<span style="color:#008000;">/* code2.cpp */</span>
<span style="color:#808080;">#include "header1.h"</span>
<span style="color:#3366ff;">void</span> DoSomethingElse()
{
    --my_global;
}</pre>
<p>La primera se compila en dos archivos objeto, probablemente llamado code1.obj y code2.obj. Recuerde que una unidad de traducción contiene una copia completa de todos los encabezados incluidos en el archivo que está compilando. Finalmente, los archivos de objetos se combinan para producir el archivo final.</p>
<p>Aquí hay una representación visual de la forma en que estos archivos (y su contenido) se combinan:</p>
<p><a href="http://judelco.files.wordpress.com/2011/08/gdarticle_linker.png"><img class="aligncenter size-full wp-image-665" title="gdarticle_linker" src="http://judelco.files.wordpress.com/2011/08/gdarticle_linker.png?w=630" alt=""   /></a></p>
<p>Note que hay dos copias de “my_global” en ese bloque final. Aunque “my_global” fue único para cada unidad de traducción (esto sería garantizada por el uso de los guardias de inclusión), que combina los archivos objeto generados por cada unidad de traducción se traduciría en que haya más de una instancia de my_global en el archivo. Esto se marca como un error, ya que el enlazador no tiene manera de saber si estos dos identificadores son en realidad una misma, o si uno de ellos era mal llamado justa y que se supone en realidad que es de 2 variables independientes. Así que hay que arreglarlo.</p>
<p>La respuesta no consiste en definir las variables o funciones en los archivos de cabecera en lugar de los archivos fuentes, donde estás seguro que se compilan solo una vez. Esto trae un nuevo problema, ¿Cómo hacer las funciones y variables visibles globalmente si no se encuentra en un archivo de cabecera? ¿De qué manera la pueden “ver” otros archivos? La respuesta es declararlas en los archivos de cabecera, pero no definirlas. Esto permite al compilador saber que la función o variable existe, pero delega el acto de de asignarle una dirección al enlazador.</p>
<p>Para hacer esto para una variable, se añade ‘<em>extern</em>‘ la palabra clave antes de su nombre:</p>
<pre><span style="color:#3366ff;">extern</span> <span style="color:#808080;">int</span> my_global;</pre>
<p>El especificador ‘<em>extern</em>‘ es como decirle al compilador que esperar hasta el tiempo de enlace para resolver la “conexión”. Y para una función, simplemente hay que poner el prototipo de función:</p>
<pre><span style="color:#808080;">int</span> SomeFunction(<span style="color:#808080;">int</span> parameter);</pre>
<p>Las funciones se consideran “extern” por defecto por lo que se acostumbra a omitir el ‘extern’ en un prototipo de función.</p>
<p>Por supuesto, estas son sólo las declaraciones de que <strong>my_global</strong> y <strong>SomeFunction</strong> existen en alguna parte. En realidad, no los creas. Todavía tiene que hacer esto en uno de los archivos de origen, de lo contrario aparecerá un error de vinculador nuevo cuando se descubre que no puede resolver uno de los identificadores a una dirección real. Así que para este ejemplo, tendría que añadir “<strong>int my_global</strong>” a cualquiera de <strong>Code1.cpp</strong> o <strong>Code2.cpp</strong>, y todo debería funcionar bien. Si se trata de una función, deberá añadir la función como su cuerpo (es decir, el código de la función) en uno de los archivos de origen.</p>
<p>La regla aquí es recordar que los archivos de cabecera define una interfaz, no una implementación. En ellas se indica que las funciones, variables y objetos existen, pero no se hace responsable de su creación. Ellos pueden decir lo que una estructura o clase debe contener, pero en realidad no debe crear instancias de esa estructura o clase. Se puede especificar los parámetros de una función y se lo devuelve, pero no cómo se obtiene el resultado. Y así sucesivamente. Esta es la razón por la que la lista de lo que puede entrar en un fichero de cabecera al principio de este artículo es importante.</p>
<p>Hay dos notables excepciones a no incluir el cuerpo de las funciones en los archivos de cabecera:</p>
<p>La primera excepción es la de funciones de la plantilla. La mayoría de los compiladores y enlazadores no puede manejar plantillas se definen en archivos diferentes a la que se utilizan en, por lo que las plantillas casi siempre es necesario definir en un encabezado para que la definición se puede incluir en todos los archivos que necesita para usarlo. Debido a la forma de plantillas se crea una instancia en el código, esto no conduce a los mismos errores que se podrían obtener mediante la definición de una función normal en un encabezado. Esto es así porque las plantillas no se compilan en el lugar de la definición, sino que se compilan, ya que son utilizados por el código en otros lugares.</p>
<p>La segunda excepción es las funciones en línea, mencionó brevemente antes. Una función en línea se ha compilado en el código, en vez de llamadas de la forma habitual. Esto significa que cualquier unidad de traducción que ‘llama “el código de una función en línea tiene que ser capaz de ver el funcionamiento interno (es decir, la puesta en práctica) de esa función con el fin de insertar el código de esa función directamente. Esto significa que un prototipo de función sencilla no es suficiente para llamar a la función en línea, lo que significa que donde quiera que normalmente sólo tiene que utilizar un prototipo de función, se necesita el cuerpo de la función general de una función en línea. Al igual que con las plantillas, esto no causa errores de vinculador como la función en línea no es realmente compilado en el lugar de la definición, pero se inserta en el lugar de la llamada.</p>
<h2>Otras Consideraciones</h2>
<p>Por lo tanto, el código está muy bien dividido en varios archivos, que le da todos los beneficios mencionados en el inicio como la velocidad de compilación de una mayor y mejor organización. ¿Hay algo más que necesitas saber?</p>
<p>En primer lugar, si estás usando la biblioteca estándar de C++ (STL) o cualquier otra biblioteca que utilice espacios de nombres, no utilice la se sentencia “using” en los archivos de cabecera pues reducirás la utilidad de los espacios de nombres casi por completo, es mejor usar el identificador del espacio de nombre en cada función u objeto que uses, así tienes la ventaja de saber a que biblioteca pertenece ese código y no tendrás problemas de superponer nombres de funciones propias que te hagan rectificar el código.</p>
<p>En segundo lugar, el uso de macros debe ser cuidadosamente controlado. Los programadores de C tienen que confiar en las macros de un montón de funcionalidades, pero los programadores de C++ debe evitarlos siempre que sea posible. Si desea una constante en C + +, utilice la palabra clave ‘const’. Si desea una función en línea en C++, utilice la palabra clave ‘inline’. Si desea una función que opera sobre los diferentes tipos utilice plantillas o sobrecarga. Pero si necesitas utilizar una macro, por alguna razón, y lo coloca en un fichero de cabecera, trate de no escribir macros que podrían interferir con el código en los archivos que se incluyen. Cuando se producen errores extraños de compilación, no quiero tener que buscar a través de todos los archivos de cabecera para ver si alguien utiliza un # define para cambiar inadvertidamente su función o sus parámetros a otra cosa. Así que siempre que sea posible, mantener las macros de cabeceras a menos que usted puede estar seguro de que no les importa que afecta a todo en el proyecto.</p>
<h3></h3>
<p><strong><span style="text-decoration:underline;">Sources:</span></strong></p>
<p><a href="http://razonartificial.com/2011/07/organizacion-del-codigo-fuente-en-cpp/">http://razonartificial.com/2011/07/organizacion-del-codigo-fuente-en-cpp/</a><br />
<a href="http://www.gamedev.net/page/reference/index.html/_/reference/programming/languages/c-and-c/organizing-code-files-in-c-and-c-r1798">http://www.gamedev.net/page/reference/index.html/_/reference/programming/languages/c-and-c/organizing-code-files-in-c-and-c-r1798</a></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/programacion/'>Programación</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/662/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/662/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/662/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=662&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/08/23/organizacion-del-codigo-fuente-en-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/08/gdarticle_cyclic1.png" medium="image">
			<media:title type="html">gdarticle_cyclic1</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/08/gdarticle_includefiles.png" medium="image">
			<media:title type="html">gdarticle_includefiles</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/08/gdarticle_linker.png" medium="image">
			<media:title type="html">gdarticle_linker</media:title>
		</media:content>
	</item>
		<item>
		<title>Umineko no Naku Koro ni OP</title>
		<link>http://judelco.wordpress.com/2011/08/15/umineko-no-naku-koro-ni-op/</link>
		<comments>http://judelco.wordpress.com/2011/08/15/umineko-no-naku-koro-ni-op/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 21:41:52 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=656</guid>
		<description><![CDATA[La BSO de esta serie es simplemente maravillosa. Si vais a ver la serie, primero ved Higurashi no Naku Koro ni antes de esta serie (estan relacionadas) &#160; Edit: Os dejo también el Opening de la Novela Visual de Umineko no Naku Koro ni, que también es increíble Filed under: Música, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=656&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La BSO de esta serie es simplemente maravillosa. Si vais a ver la serie, primero ved <strong>Higurashi no Naku Koro ni</strong> antes de esta serie (estan relacionadas)</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/08/15/umineko-no-naku-koro-ni-op/"><img src="http://img.youtube.com/vi/aCsRd0QLEzo/2.jpg" alt="" /></a></span>
<p>&nbsp;</p>
<p>Edit: Os dejo también el Opening de la Novela Visual de Umineko no Naku Koro ni, que también es increíble</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/08/15/umineko-no-naku-koro-ni-op/"><img src="http://img.youtube.com/vi/2mXl0MyYEio/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/656/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/656/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/656/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=656&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/08/15/umineko-no-naku-koro-ni-op/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Festival of Life &#8211; True Tears</title>
		<link>http://judelco.wordpress.com/2011/07/24/festival-of-life-true-tears/</link>
		<comments>http://judelco.wordpress.com/2011/07/24/festival-of-life-true-tears/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 20:56:31 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=639</guid>
		<description><![CDATA[Filed under: Música, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=639&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/07/24/festival-of-life-true-tears/"><img src="http://img.youtube.com/vi/4vp5BaJy7Fw/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/639/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=639&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/07/24/festival-of-life-true-tears/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Jump</title>
		<link>http://judelco.wordpress.com/2011/07/23/jump/</link>
		<comments>http://judelco.wordpress.com/2011/07/23/jump/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 22:17:39 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=635</guid>
		<description><![CDATA[Adoro esta canción de Laura Shigihara, creadora de la banda sonora de Plants vs Zombies (así como música para otros 20 videojuegos publicados),  podeis seguirla en su blog o en su canal de youtube &#160; Filed under: Música, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=635&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Adoro esta canción de Laura Shigihara, creadora de la banda sonora de Plants vs Zombies (así como música para otros 20 videojuegos publicados),  podeis seguirla en <a href="http://laurashigihara.bandcamp.com/">su blog</a> o en su <a href="http://www.youtube.com/user/supershigi">canal de youtube</a></p>
<p>&nbsp;</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/07/23/jump/"><img src="http://img.youtube.com/vi/rNV-lzGXnBs/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/635/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/635/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/635/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=635&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/07/23/jump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>[Wallpaper] Enorme recopilación de personajes</title>
		<link>http://judelco.wordpress.com/2011/05/04/wallpaper-enorme-recopilacion-de-personajes/</link>
		<comments>http://judelco.wordpress.com/2011/05/04/wallpaper-enorme-recopilacion-de-personajes/#comments</comments>
		<pubDate>Wed, 04 May 2011 20:53:20 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Touhou]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=619</guid>
		<description><![CDATA[A ver quien se sabe el nombre de todos !!! Este wall, tiene un GRAN numero de personajes de anime (sobre todo), videojuegos, etc&#8230; es brutal ! Filed under: Touhou, Videojuegos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=619&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A ver quien se sabe el nombre de todos !!! Este wall, tiene un GRAN numero de personajes de anime (sobre todo), videojuegos, etc&#8230; es brutal !</p>
<p style="text-align:center;"><a href="http://judelco.files.wordpress.com/2011/05/wallpaper_brutal.jpg"><img class="aligncenter size-large wp-image-620" title="Wallpaper_Brutal" src="http://judelco.files.wordpress.com/2011/05/wallpaper_brutal.jpg?w=655&#038;h=427" alt="" width="655" height="427" /></a></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/touhou/'>Touhou</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/619/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/619/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/619/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/619/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/619/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/619/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/619/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/619/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=619&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/05/04/wallpaper-enorme-recopilacion-de-personajes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/05/wallpaper_brutal.jpg?w=1024" medium="image">
			<media:title type="html">Wallpaper_Brutal</media:title>
		</media:content>
	</item>
		<item>
		<title>Sección de emuladores renovada</title>
		<link>http://judelco.wordpress.com/2011/03/27/seccion-de-emuladores-renovada/</link>
		<comments>http://judelco.wordpress.com/2011/03/27/seccion-de-emuladores-renovada/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 10:48:07 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Videojuegos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=608</guid>
		<description><![CDATA[Bueno, no pretendo ni mucho menos tener actualizado siempre con la ultima revisión los emuladores, pero nunca está de mas actualizarlos y meter algunos nuevos. Podeis descargarlos pulsando sobre las imágenes de los emuladores en cuestión. Añadir que el emulador de PS2 necesita de la BIOS de la ps2 para funcionar, en cambio el de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=608&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-609" title="game_pad" src="http://judelco.files.wordpress.com/2011/03/game_pad.jpg?w=630" alt=""   /></p>
<p>Bueno, no pretendo ni mucho menos tener actualizado siempre con la ultima revisión los emuladores, pero nunca está de mas actualizarlos y meter algunos nuevos. Podeis descargarlos pulsando sobre las imágenes de los emuladores en cuestión.</p>
<p>Añadir que el emulador de PS2 necesita de la BIOS de la ps2 para funcionar, en cambio el de GameCube/Wii o el de NintendoDS no precisa nada de eso, funcionan tal cual.</p>
<p>Son revisiones bastante recientes, aunque no las ultimas. Lo que si os puedo asegurar es que son estables y funcionales ^^</p>
<p>&nbsp;</p>
<p>Para acceder a ella podéis usar el enlace de la barra de arriba o ir directamente <strong><a href="http://judelco.wordpress.com/emuladores/">aquí</a></strong></p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/noticias/'>Noticias</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/608/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=608&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/03/27/seccion-de-emuladores-renovada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>

		<media:content url="http://judelco.files.wordpress.com/2011/03/game_pad.jpg" medium="image">
			<media:title type="html">game_pad</media:title>
		</media:content>
	</item>
		<item>
		<title>Uno de los vídeos más epics que he visto</title>
		<link>http://judelco.wordpress.com/2011/03/15/uno-de-los-videos-mas-epics-que-he-visto/</link>
		<comments>http://judelco.wordpress.com/2011/03/15/uno-de-los-videos-mas-epics-que-he-visto/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 20:50:04 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=601</guid>
		<description><![CDATA[O al menos de los que más me motivan, la música y el vídeo osom Filed under: Música, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=601&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O al menos de los que más me motivan, la música y el vídeo osom</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/03/15/uno-de-los-videos-mas-epics-que-he-visto/"><img src="http://img.youtube.com/vi/O_DoEtn2XDw/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/601/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=601&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/03/15/uno-de-los-videos-mas-epics-que-he-visto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Skygunner &#8211; Towards a Far Away Sky</title>
		<link>http://judelco.wordpress.com/2011/03/11/skygunner-towards-a-far-away-sky/</link>
		<comments>http://judelco.wordpress.com/2011/03/11/skygunner-towards-a-far-away-sky/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 20:42:12 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=599</guid>
		<description><![CDATA[Precioso Filed under: Música, Videojuegos, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=599&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Precioso</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/03/11/skygunner-towards-a-far-away-sky/"><img src="http://img.youtube.com/vi/0PT_EBzBj0I/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/599/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=599&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/03/11/skygunner-towards-a-far-away-sky/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>A Wild Homework Appears!</title>
		<link>http://judelco.wordpress.com/2011/02/28/a-wild-homework-appears/</link>
		<comments>http://judelco.wordpress.com/2011/02/28/a-wild-homework-appears/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 20:52:20 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Chorradas]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=595</guid>
		<description><![CDATA[Estudiante vs Deberes Filed under: Chorradas, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=595&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estudiante vs Deberes</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/02/28/a-wild-homework-appears/"><img src="http://img.youtube.com/vi/yX5XPo0lZVQ/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/chorradas/'>Chorradas</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/595/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=595&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/02/28/a-wild-homework-appears/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Sidology Episode 2 Trinity &#8211; Machinae Supremacy</title>
		<link>http://judelco.wordpress.com/2011/02/25/sidology-episode-2-trinity-machinae-supremacy/</link>
		<comments>http://judelco.wordpress.com/2011/02/25/sidology-episode-2-trinity-machinae-supremacy/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 20:22:34 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=591</guid>
		<description><![CDATA[Aunque los vídeos son entretenidos, los he puesto por la canción (un remix en condiciones), si queréis descargarla entera mejor desde este vídeo, que está de un todo (pero solo tiene una imagen de fondo, por eso he puesto esos vídeos) Filed under: Música<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=591&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/02/25/sidology-episode-2-trinity-machinae-supremacy/"><img src="http://img.youtube.com/vi/aOCiYSIyuXc/2.jpg" alt="" /></a></span>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/02/25/sidology-episode-2-trinity-machinae-supremacy/"><img src="http://img.youtube.com/vi/1GQMMItWo3k/2.jpg" alt="" /></a></span>
<p>Aunque los vídeos son entretenidos, los he puesto por la canción (un remix en condiciones), si queréis descargarla entera mejor desde <a href="http://www.youtube.com/watch?v=zreA7lYnXs4">este</a> vídeo, que está de un todo (pero solo tiene una imagen de fondo, por eso he puesto esos vídeos)</p>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/591/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=591&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/02/25/sidology-episode-2-trinity-machinae-supremacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
		<item>
		<title>Dream of the Shore Near Another World</title>
		<link>http://judelco.wordpress.com/2011/02/18/dream-of-the-shore-near-another-world/</link>
		<comments>http://judelco.wordpress.com/2011/02/18/dream-of-the-shore-near-another-world/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 14:43:14 +0000</pubDate>
		<dc:creator>JuDelCo</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Videojuegos]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://judelco.wordpress.com/?p=588</guid>
		<description><![CDATA[Como últimamente estoy algo ocupado, os pondré alguna canción de las buenas: &#160; Filed under: Música, Videojuegos, Videos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=588&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Como últimamente estoy algo ocupado, os pondré alguna canción de las buenas:</p>
<p>&nbsp;</p>
<span style="text-align:center; display: block;"><a href="http://judelco.wordpress.com/2011/02/18/dream-of-the-shore-near-another-world/"><img src="http://img.youtube.com/vi/ROKcr2OTgws/2.jpg" alt="" /></a></span>
<br />Filed under: <a href='http://judelco.wordpress.com/category/musica/'>Música</a>, <a href='http://judelco.wordpress.com/category/videojuegos/'>Videojuegos</a>, <a href='http://judelco.wordpress.com/category/videos/'>Videos</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/judelco.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/judelco.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/judelco.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/judelco.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/judelco.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/judelco.wordpress.com/588/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/judelco.wordpress.com/588/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/judelco.wordpress.com/588/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=judelco.wordpress.com&amp;blog=7671425&amp;post=588&amp;subd=judelco&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://judelco.wordpress.com/2011/02/18/dream-of-the-shore-near-another-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/629a185ddf3595e91eb4055b2dca7b39?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=R" medium="image">
			<media:title type="html">JuDelCo</media:title>
		</media:content>
	</item>
	</channel>
</rss>
