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

<channel>
	<title>Ubicuos.com &#187; código</title>
	<atom:link href="http://www.ubicuos.com/tag/codigo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ubicuos.com</link>
	<description>Tecnología,Programación, Proyectos, Ciencia y Empresas</description>
	<lastBuildDate>Sat, 31 Jul 2010 07:12:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Twitteando desde la terminal</title>
		<link>http://www.ubicuos.com/2010/07/08/twitteando-desde-la-terminal/</link>
		<comments>http://www.ubicuos.com/2010/07/08/twitteando-desde-la-terminal/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 20:36:03 +0000</pubDate>
		<dc:creator>fernandomt_08</dc:creator>
				<category><![CDATA[Social / Internet]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=1595</guid>
		<description><![CDATA[No cabe duda de que twitter es la una de las redes sociales mas utilizadas en la actualidad, tanto es así que se crearon clientes para poder actualizar tu estado, y existen hasta rankings de los mejores clientes para Twitter. Pero si te quieres ver mas Geek y eres usuario de GNU/Linux aqui te explicaré [...]]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2010/07/08/twitteando-desde-la-terminal/"></a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2010%2F07%2F08%2Ftwitteando-desde-la-terminal%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2010%2F07%2F08%2Ftwitteando-desde-la-terminal%2F&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>No cabe duda de que <a href="http://twitter.com/">twitter</a> es la una de las redes sociales  mas utilizadas en la actualidad, tanto es así que se crearon clientes para  poder actualizar tu estado, y existen hasta rankings de los mejores clientes para Twitter<a href="http://conecti.ca/2010/02/01/top-10-clientes-mas-usados-en-twitter/">.</a> Pero si te quieres ver mas Geek y  eres usuario de <a href="http://www.linux.org/">GNU/Linux</a> aqui te explicaré un poco como enviar un Tweet desde la terminal, con un sencillo script.</p>
<p>Para poder Utilizar este script necesitamos instalar el paquete curl, con el siguiente comando:</p>
<blockquote><p><strong>sudo apt-get install curl</strong></p></blockquote>
<p>El paquete pesa 208 Kb aproximadamente, por lo que su instalacion es rápida.</p>
<p>Una vez Intalado ese paquete descargamos el siguiente script: <a rel="attachment wp-att-1596" href="http://www.ubicuos.com/2010/07/08/twitteando-desde-la-terminal/twitter_script-tar/">twitter_script.tar</a> le damos permisos de ejecucion con el siguiente comando:</p>
<blockquote><p><strong>chmod +x twitter</strong></p></blockquote>
<p>Y ejecutamos el script :  <strong>./twitter</strong></p>
<p>Nos pedirá el username, despues el tweet a enviar y finalmente nuestra contraseña, al enviar el mensaje lo notificará al usuario y finalmente el script termina su ejecución.</p>
<p><a id="logo" title="Twitter / Home" href="http://twitter.com/"> <img src="http://a0.twimg.com/a/1278529908/images/twitter_logo_header.png" alt="Twitter.com" width="155" height="36" /></a></p>
<p>Contáctame:</p>
[contact-form]
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2010/07/08/twitteando-desde-la-terminal/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Algoritmo de Dijkstra implementado en Ruby</title>
		<link>http://www.ubicuos.com/2010/04/09/algoritmo-de-dijkstra-implementado-en-ruby/</link>
		<comments>http://www.ubicuos.com/2010/04/09/algoritmo-de-dijkstra-implementado-en-ruby/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 21:23:44 +0000</pubDate>
		<dc:creator>Jorge</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[dijkstra]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=944</guid>
		<description><![CDATA[Algoritmo de Dijsktra El algoritmo de Dijkstra (algoritmo de caminos mínimos), es un algoritmo para la distancia más corta de un punto a cualquier otro. Su nombre se refiere a Edsger Dijkstra, quien lo describió por primera vez en 1959. La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos [...]]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2010/04/09/algoritmo-de-dijkstra-implementado-en-ruby/"></a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2010%2F04%2F09%2Falgoritmo-de-dijkstra-implementado-en-ruby%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2010%2F04%2F09%2Falgoritmo-de-dijkstra-implementado-en-ruby%2F&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p><strong>Algoritmo de Dijsktra</strong></p>
<p>El algoritmo de Dijkstra (algoritmo de caminos mínimos), es un algoritmo para la distancia más corta de un punto a cualquier otro. Su nombre se refiere a Edsger Dijkstra, quien lo describió por primera vez en 1959.</p>
<p>La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten del nodo origen y que llevan a todos los demás nodos; cuando se obtiene el camino más corto desde el nodo origen, al resto de nodos que componen el grafo, el algoritmo se detiene.</p>
<p><strong>Explicación del Algoritmo:</strong></p>
<p>Supongamos que tenemos los siguientes nodos con sus respectivas distancias entre ellos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodosd.png"><img class="alignnone size-full wp-image-945" title="nodosd" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodosd.png" alt="" width="447" height="250" /></a></p>
<p>Para este ejemplo, vamos a calcular la distancia más corta del Nodo 4 a cualquier otro.</p>
<p>Primero calcularemos las etiquetas correspondientes a cada nodo. Una etiqueta consta de dos partes: la <strong><em>distancia a cumulada</em></strong> y el <strong><em>nodo de procedencia</em></strong>.</p>
<p><strong>[acumulado, procedencia]</strong></p>
<p>Donde:</p>
<p>Distancia = distancia entre el nodo base y el nodo actual.<br />
Distancia acumulada = acumulado del nodo base + distancia<br />
Nodo de procedencia = nodo base</p>
<p>Conforme vallamos calculando las etiquetas iremos marcando los nodos para que no se nos forme un ciclo infinito.</p>
<p>Como en nuestro caso el Nodo 4 es nuestro punto de inicio, por ahora será nuestro Nodo base, lo marcamos y como no tiene distancia acumulada y nodo de procedencia su etiqueta será: [0,0].</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos1.png"><img class="alignnone size-full wp-image-946" title="nodos1" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos1.png" alt="" width="449" height="269" /></a></p>
<p><strong>Paso 1:</strong></p>
<p>Ahora buscaremos que nodos están conectados al Nodo 4, los cuales son: 1, 3, 6 y 7.</p>
<p>Calculemos la etiqueta de cada uno de los nodos conectados al Nodo base:</p>
<p><strong>Etiqueta del Nodo 1:</strong></p>
<p>Nodo actual = Nodo 1<br />
Distancia = Distancia del Nodo base al Nodo actual = 3<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 0+3 = 3<br />
Procedencia = Nodo 4</p>
<p>La etiqueta del Nodo 1 quedaría: [3, Nodo 4]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos11.png"><img class="alignnone size-full wp-image-953" title="nodos11" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos11.png" alt="" width="483" height="267" /></a></p>
<p><strong>Etiqueta del Nodo 3:</strong></p>
<p>Nodo actual = Nodo 3<br />
Distancia = Distancia del Nodo base al Nodo actual = 2<br />
Distancia acumulada =Acumulado del Nodo base + Distancia =0+2 = 2<br />
Procedencia = Nodo 4</p>
<p>La etiqueta del Nodo 3 quedaría: [2, Nodo 4]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos13.png"><img class="alignnone size-full wp-image-954" title="nodos13" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos13.png" alt="" width="481" height="266" /></a></p>
<p><strong>Etiqueta del Nodo 6:</strong></p>
<p>Nodo actual = Nodo 6<br />
Distancia = Distancia del Nodo base al Nodo actual = 1<br />
Distancia acumulada =Acumulado del Nodo base + Distancia =0+1 = 1<br />
Procedencia = Nodo 4</p>
<p>La etiqueta del Nodo 6 quedaría: [1, Nodo 4]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos16.png"><img class="alignnone size-full wp-image-955" title="nodos16" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos16.png" alt="" width="514" height="267" /></a></p>
<p><strong>Etiqueta del Nodo 7:</strong></p>
<p>Nodo actual = Nodo 7<br />
Distancia = Distancia del Nodo base al Nodo actual = 3<br />
Distancia acumulada =Acumulado del Nodo base + Distancia =0+3 = 3<br />
Procedencia = Nodo 4</p>
<p>La etiqueta del Nodo 7 quedaría: [3, Nodo 4]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos17.png"><img class="alignnone size-full wp-image-956" title="nodos17" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos17.png" alt="" width="513" height="265" /></a></p>
<p>Una vez calculadas las etiquetas de los nodos, buscaremos el Nodo que tenga la etiqueta con menor distancia acumulada y que no esté marcado, como vemos es el Nodo 6.</p>
<p>Ahora el Nodo 6 pasará a ser nuestro Nodo base y lo marcamos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos2.png"><img class="alignnone size-full wp-image-947" title="nodos2" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos2.png" alt="" width="516" height="268" /></a></p>
<p><strong>Paso 2:</strong></p>
<p>Buscamos los Nodos conectados al Nodo 6 y que NO estén marcados: 3, 5 y 7.</p>
<p>Calculemos la etiqueta de cada uno de los nodos conectados al Nodo base:</p>
<p><strong>Etiqueta del Nodo 3:</strong></p>
<p>Nodo actual = Nodo 3<br />
Distancia = Distancia del Nodo base al Nodo actual = 2<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 1+2 = 3<br />
Procedencia = Nodo 6</p>
<p>Como la distancia acumulada es mayor que la distancia acumulada que tiene establecida en su etiqueta el Nodo 3, entonces la etiqueta actual no se asigna, ya que solo buscamos etiquetas menores o iguales a la ya establecida.</p>
<p>Por tanto la etiqueta del Nodo 3 quedaría: [2, Nodo 4]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos23.png"><img class="alignnone size-full wp-image-957" title="nodos23" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos23.png" alt="" width="514" height="272" /></a></p>
<p><strong>Etiqueta del Nodo 7:</strong></p>
<p>Nodo actual = Nodo 7<br />
Distancia = Distancia del Nodo base al Nodo actual = 2<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 1+2 = 3<br />
Procedencia = Nodo 6</p>
<p>En este caso la distancia acumulada es igual que la distancia acumulada que tiene establecida en su etiqueta el Nodo 7, entonces la etiqueta actual se añade, ya que solo buscamos etiquetas menores o iguales a la ya establecida.</p>
<p>Las etiquetas del Nodo 7 quedarían: [3, Nodo 4], [3, Nodo 6]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos27.png"><img class="alignnone size-full wp-image-959" title="nodos27" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos27.png" alt="" width="514" height="287" /></a></p>
<p><strong>Etiqueta del Nodo 5:</strong></p>
<p>Nodo actual = Nodo 5<br />
Distancia = Distancia del Nodo base al Nodo actual = 3<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 1+3 = 4<br />
Procedencia = Nodo 6</p>
<p>La etiqueta del Nodo 5 quedaría: [4, Nodo 6]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos25.png"><img class="alignnone size-full wp-image-958" title="nodos25" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos25.png" alt="" width="516" height="288" /></a></p>
<p>Una vez calculadas las etiquetas de los nodos, buscaremos el Nodo que tenga la etiqueta con menor distancia acumulada y que no esté marcado, el cual ahora es el Nodo 3.</p>
<p>Ahora el Nodo 3 pasará a ser nuestro Nodo base y lo marcamos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos3.png"><img class="alignnone size-full wp-image-948" title="nodos3" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos3.png" alt="" width="517" height="288" /></a></p>
<p><strong>Paso 3:</strong></p>
<p>Buscamos los Nodos conectados al Nodo 3 y que NO estén marcados: 2 y 5.</p>
<p>Calculemos la etiqueta de cada uno de los nodos conectados al Nodo base:</p>
<p><strong>Etiqueta del Nodo 2:</strong></p>
<p>Nodo actual = Nodo 2<br />
Distancia = Distancia del Nodo base al Nodo actual = 1<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 2+1 = 3<br />
Procedencia = Nodo 3</p>
<p>La etiqueta del Nodo 2 quedaría: [3, Nodo 3]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos32.png"><img class="alignnone size-full wp-image-963" title="nodos32" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos32.png" alt="" width="514" height="287" /></a></p>
<p><strong>Etiqueta del Nodo 5:</strong></p>
<p>Nodo actual = Nodo 5<br />
Distancia = Distancia del Nodo base al Nodo actual = 3<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 2+3 = 5<br />
Procedencia = Nodo 3</p>
<p>Como la distancia acumulada es mayor que la distancia acumulada que tiene establecida en su etiqueta el Nodo 5, entonces la etiqueta actual no se asigna, ya que solo buscamos etiquetas menores o iguales a la ya establecida.</p>
<p>La etiqueta del Nodo 5 quedaría: [4, Nodo 6]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos35.png"><img class="alignnone size-full wp-image-960" title="nodos35" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos35.png" alt="" width="515" height="287" /></a></p>
<p>Ya encontradas las etiquetas de los nodos, buscaremos el Nodo que tenga la etiqueta con menor acumulado y que no esté marcado. Ahora, si nos damos cuenta los Nodos 1, 2 y 7 tienen igual distancia acumulada, cuando esto ocurre optamos por tomar cualquiera de ellos aleatoriamente como nuestro Nodo base, en este caso tomaremos el Nodo 7.</p>
<p>Ahora el Nodo 7 pasará a ser nuestro Nodo base y lo marcamos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos4.png"><img class="alignnone size-full wp-image-949" title="nodos4" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos4.png" alt="" width="515" height="290" /></a></p>
<p><strong>Paso 4:</strong></p>
<p>Buscamos los Nodos conectados al Nodo 7 y que NO estén marcados.</p>
<p>En este caso no tiene nodos conectados que no estén marcados.</p>
<p>Buscamos el Nodo que tenga la etiqueta con menor acumulado y que no esté marcado, como vemos ahora los Nodos 1 y 2 tienen igual distancia acumulada, tomamos cualquiera de ellos aleatoriamente, en este caso tomaremos el Nodo 2.</p>
<p>Ahora el Nodo 2 pasará a ser nuestro Nodo base y lo marcamos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos5.png"><img class="alignnone size-full wp-image-950" title="nodos5" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos5.png" alt="" width="518" height="285" /></a></p>
<p><strong>Paso 5:</strong></p>
<p>Buscaremos los Nodos conectados al Nodo 2 y que NO estén marcados: 1 y 5.</p>
<p>Calculemos la etiqueta de cada uno de los nodos conectados al Nodo base:</p>
<p><strong>Etiqueta del Nodo 5:</strong></p>
<p>Nodo actual = Nodo 5<br />
Distancia = Distancia del Nodo base al Nodo actual = 2<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 3+2 = 5<br />
Procedencia = Nodo 2</p>
<p>Ahora, como la distancia acumulada es mayor que la distancia acumulada que tiene establecida en su etiqueta el Nodo 5, entonces la etiqueta actual no se asigna, ya que solo buscamos etiquetas menores o iguales a la ya establecida.</p>
<p>La etiqueta del Nodo 5 quedaría: [4, Nodo 6]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos55.png"><img class="alignnone size-full wp-image-962" title="nodos55" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos55.png" alt="" width="516" height="286" /></a></p>
<p><strong>Etiqueta del Nodo 1:</strong></p>
<p>Nodo actual = Nodo 1<br />
Distancia = Distancia del Nodo base al Nodo actual = 3<br />
Distancia acumulada = Acumulado del Nodo base + Distancia = 3+3 = 3<br />
Procedencia = Nodo 2</p>
<p>Como la distancia acumulada es mayor que la distancia acumulada que tiene establecida en su etiqueta el Nodo 1, entonces la etiqueta actual no se asigna, ya que solo buscamos etiquetas menores o iguales a la ya establecida.</p>
<p>La etiqueta del Nodo 1 quedaría: [3, Nodo 4]</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos51.png"><img class="alignnone size-full wp-image-961" title="nodos51" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos51.png" alt="" width="515" height="287" /></a></p>
<p>Ahora buscaremos el Nodo que tenga la etiqueta con menor acumulado y que no esté marcado, ahora es el Nodo 1.</p>
<p>Ahora el Nodo 1 pasará a ser nuestro Nodo base y lo marcamos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos6.png"><img class="alignnone size-full wp-image-951" title="nodos6" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos6.png" alt="" width="515" height="288" /></a></p>
<p><strong>Paso 6:</strong></p>
<p>Ahora buscaremos los Nodos conectados al Nodo 1 y que NO estén marcados.</p>
<p>Como vemos no tiene nodos conectados que no estén marcados.</p>
<p>Buscamos el Nodo que tenga la etiqueta con menor acumulado y que no esté marcado, como vemos el único que queda libre es el Nodo 5.</p>
<p>Ahora el Nodo 5 pasará a ser nuestro Nodo base y lo marcamos.</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos7.png"><img class="alignnone size-full wp-image-952" title="nodos7" src="http://www.ubicuos.com/wp-content/uploads/2010/04/nodos7.png" alt="" width="515" height="287" /></a></p>
<p><strong>Paso 7:</strong></p>
<p>Buscamos los Nodos conectados al Nodo 5 y que NO estén marcados.</p>
<p>Observamos que no tiene nodos conectados que no estén marcados.</p>
<p>Ahora buscaremos el Nodo que tenga la etiqueta con menor acumulado y que no esté marcado.</p>
<p>Si nos damos cuenta ya no existen nodos sin marcar, por lo tanto hemos terminado de calcular las etiquetas a cada Nodo.</p>
<p>Las etiquetas deben ser las siguientes:</p>
<p>Nodo 1: [3,4]<br />
Nodo 2: [3,3]<br />
Nodo 3: [2,4]<br />
Nodo 4: [0,0]<br />
Nodo 5: [4,6]<br />
Nodo 6: [1,4]<br />
Nodo 7: [3,4], [3,6]</p>
<p><strong>Ejemplos.</strong></p>
<p>Ahora, si nos pidieran calcular la distancia más corta del Nodo 4 a cualquier otro (recordemos que debe ser el Nodo 4 nuestro punto de inicio, ya que a partir de él calculamos las etiquetas), lo haremos de la siguiente manera.</p>
<p>Ejemplo: calcular la ruta más corta del Nodo 4 al Nodo 5.</p>
<p>Primero nos ubicamos en el Nodo 5 y de su etiqueta ([4,6]) extraemos su procedencia y vemos que es el Nodo 6.</p>
<p>Ahora nos ubicamos en el Nodo 6 y de su etiqueta ([1,4]) extraemos su procedencia y vemos que es el Nodo 4.</p>
<p>Como el Nodo 4 es nuestro punto de inicio, podemos decir que la ruta más corta para ir del Nodo 4 al Nodo 5, es pasando por los nodos Nodo 4, Nodo 6 y Nodo 5.</p>
<p>Ejemplo: calcular la ruta más corta del Nodo 4 al Nodo 7.</p>
<p>Primero nos ubicamos en el Nodo 7, como vemos que tiene dos etiquetas primero de su etiqueta ([3,4]) extraemos su procedencia y vemos que es el Nodo 4.</p>
<p>Como el Nodo 4 es nuestro punto de inicio, podemos decir que la ruta más corta para ir del Nodo 4 al Nodo 7, es pasando por los nodos Nodo 4 y Nodo 7.</p>
<p>Ahora, de su etiqueta ([3,6]) extraemos su procedencia y vemos que es el Nodo 6.</p>
<p>Nos ubicamos en el Nodo 6 y de su etiqueta ([1,4]) extraemos su procedencia y vemos que es el Nodo 4.</p>
<p>Como el Nodo 4 es nuestro punto de inicio, podemos decir que la ruta más corta para ir del Nodo 4 al Nodo 7, es pasando por los nodos Nodo 4, Nodo 6 y Nodo 7.</p>
<p>Entonces podemos decir que la ruta más corta para ir del Nodo 4 al Nodo 7, es pasando por los nodos Nodo 4 y Nodo 7 ó por los nodos Nodo 4, Nodo 6 y Nodo 7.</p>
<p>Así, si quisiéramos calcular la ruta más corta, tomando como inicio cualquier otro nodo, primero tendríamos que obtener las etiquetas y de allí los nodos por los cual se forma la ruta.</p>
<p>Espero sea de su ayuda!</p>
<p><strong>Programa hecho en Ruby para calcular la distancia más corta de una estación a otra del metro del D.F.</strong></p>
<p><strong><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/metro.jpg"><img class="alignnone size-full wp-image-964" title="metro" src="http://www.ubicuos.com/wp-content/uploads/2010/04/metro.jpg" alt="" width="600" height="554" /></a></strong></p>
<p>Explicación de un programa hecho en Ruby para calcular la distancia más corta de una estación a otra del metro del D.F.</p>
<p>El programa cuenta con cuatro clases:</p>
<p><strong> </strong><br />
<strong>- Label</strong><br />
<strong>- Node</strong><br />
<strong>- Route</strong><br />
<strong>- Dijkstra</strong></p>
<p><strong> </strong></p>
<p><strong>La clase Label:</strong></p>
<p>La clase Label (etiqueta) cuenta con dos atributos (acumulado y procedencia) con sus respectivos métodos geters y seters, además de un constructor donde inicializamos los atributos.</p>
<p>Código:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Label
 	<span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>accumulated, provenance<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@accumulated</span> = accumulated
		<span style="color:#0066ff; font-weight:bold;">@provenance</span> = provenance
	<span style="color:#9966CC; font-weight:bold;">end</span>
  	<span style="color:#9966CC; font-weight:bold;">def</span> get_accumulated
    		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@accumulated</span>
  	<span style="color:#9966CC; font-weight:bold;">end</span>
  	<span style="color:#9966CC; font-weight:bold;">def</span> get_provenance
    		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@provenance</span>
  	<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p><strong>La clase Node:</strong></p>
<p>La clase Node (nodo) cuenta con cinco atributos con sus respectivos métodos geters y seters, además de un constructor donde inicializamos los atributos:</p>
<p>Id: que será con el cual vamos a identificar al nodo.</p>
<p>Nombre (name): que será el nombre del nodo.</p>
<p>Eiquetas (labels): que serán las etiquetas que contenga el nodo, las cuales serán objetos de la clase Label.</p>
<p>Marcado (marked): nos ayudara para ir verificando si un nodo está o no marcado.</p>
<p>Código:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;label.rb&quot;</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Node
  	<span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>id, name, accumulated, provenance, marked<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@id</span> = id
		<span style="color:#0066ff; font-weight:bold;">@name</span> = name
		<span style="color:#0066ff; font-weight:bold;">@labels</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
		lab = Label.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>accumulated, provenance<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@labels</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> lab
		<span style="color:#0066ff; font-weight:bold;">@marked</span> = marked
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_id<span style="color:#006600; font-weight:bold;">&#40;</span>id<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@id</span> = id
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_name<span style="color:#006600; font-weight:bold;">&#40;</span>name<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@name</span> = name
	<span style="color:#9966CC; font-weight:bold;">end</span>
  	<span style="color:#9966CC; font-weight:bold;">def</span> get_name
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@name</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_id
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@id</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_label<span style="color:#006600; font-weight:bold;">&#40;</span>accumulated, provenance<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@labels</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
		lab = Label.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>accumulated, provenance<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@labels</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> lab
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_accumulated
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@labels</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">get_accumulated</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_provenance
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@labels</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">get_provenance</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
 	<span style="color:#9966CC; font-weight:bold;">def</span> get_labels
    		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@labels</span>
  	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_marked<span style="color:#006600; font-weight:bold;">&#40;</span>mark<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@marked</span> = mark
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_marked
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@marked</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> clear
    		<span style="color:#0066ff; font-weight:bold;">@labels</span>.<span style="color:#9900CC;">clear</span>
    		<span style="color:#0066ff; font-weight:bold;">@labels</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> Label.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">0</span>,<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        	<span style="color:#0066ff; font-weight:bold;">@marked</span> = <span style="color:#0000FF; font-weight:bold;">false</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p><strong>La clase Route:</strong></p>
<p>La clase Route (ruta) cuenta con tres atributos con sus respectivos métodos geters y seters, además de un constructor donde inicializamos los atributos:</p>
<p>Nodo inicio (begin_node): almacena el id de algún nodo.</p>
<p>Nodo fin (end_node): almacena el id de algún nodo.</p>
<p>Distancia (distance): distancia entre el begin_node y el end_node.</p>
<p>Esta clase se encarga de almacenar la distancia entre un nodo y otro con conexión directa (nodo inicio, nodo fin, distancia).</p>
<p>Código:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Route
  	<span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>begin_node, end_node, distance<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@begin_node</span> = begin_node
		<span style="color:#0066ff; font-weight:bold;">@end_node</span> = end_node
		<span style="color:#0066ff; font-weight:bold;">@distance</span> = distance
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_begin_node<span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@begin_node</span> = node
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_end_node<span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@end_node</span> = node
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> set_distance<span style="color:#006600; font-weight:bold;">&#40;</span>distance<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0066ff; font-weight:bold;">@distance</span> = distance
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_begin_node
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@begin_node</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_end_node
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@end_node</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> get_distance
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@distance</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p><strong>La clase Dijkstra:</strong></p>
<p>En esta clase es donde desarrollaremos el Algoritmo de Dijkstra.</p>
<p>Ahora, para este ejemplo las distancias de una estación a otra es 1, estas están cargadas en un archivo de texto en forma de matriz más o menos de la siguiente manera:</p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/matriz.png"><img class="alignnone size-full wp-image-966" title="matriz" src="http://www.ubicuos.com/wp-content/uploads/2010/04/matriz.png" alt="" width="624" height="176" /></a></p>
<p>La clase cuenta con los siguientes atributos:</p>
<p>Matriz (matriz): carga la matriz almacenada en el archivo de texto.</p>
<p>Nodos (nodes): arreglo nodos creados cada una de la clase nodo, estos representan cada una de las estaciones del metro cardadas en la matriz.</p>
<p>Rutas (routes): arreglo de objetos creados de la clase Route que almacena las distancias entre una estación y otra.</p>
<p>Inicio (begin): es el nodo que tomaremos como punto de inicio.</p>
<p>Fin (end): es el nodo que tomaremos como punto final.</p>
<p>También cuenta con los siguiente métodos:</p>
<p>Genera matriz (generate_matrix): este se encarga de cargar la matriz almacenada en el archivo de texto y almacenarla en la variable matriz.</p>
<p>Carga lista (load_list): regresa un arreglo con los nodos (estaciones) almacenadas en la matriz.</p>
<p>Carga rutas (load_routes): regresa un arreglo con las distancias entre cada estación almacenadas en la matriz.</p>
<p>Ruta de inicio (begin_path): establece el punto de inicio.</p>
<p>Ruta final (end_path): establece el punto final.</p>
<p>Etiqueta menor (lower_label): busca la etiqueta con menor distancia acumulada.</p>
<p>Genera etiquetas (generate_labels): genera las etiquetas para cada nodo.</p>
<p>Nodos de la ruta corta (nodes_short_path): extrae los nodos que forma la ruta más corta.</p>
<p>Código:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;node.rb&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;route.rb&quot;</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Dijkstra
	<span style="color:#9966CC; font-weight:bold;">def</span> generate_matrix<span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#ff6633; font-weight:bold;">$matriz</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
		<span style="color:#9966CC; font-weight:bold;">for</span> i <span style="color:#9966CC; font-weight:bold;">in</span> 0...148
			<span style="color:#ff6633; font-weight:bold;">$matriz</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#CC0066; font-weight:bold;">Array</span>.<span style="color:#9900CC;">new</span>
		<span style="color:#9966CC; font-weight:bold;">end</span>
		l = <span style="color:#ff6633; font-weight:bold;">$matriz</span>.<span style="color:#9900CC;">length</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>
		<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exists</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span>
			f = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span>
			i = <span style="color:#006666;">0</span>
			f.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>linea<span style="color:#006600; font-weight:bold;">|</span>
				0.<span style="color:#9900CC;">upto</span><span style="color:#006600; font-weight:bold;">&#40;</span>l<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>j<span style="color:#006600; font-weight:bold;">|</span>
					<span style="color:#ff6633; font-weight:bold;">$matriz</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> linea.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;,&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span>j<span style="color:#006600; font-weight:bold;">&#93;</span>
				<span style="color:#9966CC; font-weight:bold;">end</span>
				i <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span>
			<span style="color:#9966CC; font-weight:bold;">end</span>
			f.<span style="color:#9900CC;">close</span>
		<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> load_list<span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span>
		generate_matrix<span style="color:#006600; font-weight:bold;">&#40;</span>file<span style="color:#006600; font-weight:bold;">&#41;</span>
		l = <span style="color:#ff6633; font-weight:bold;">$matriz</span>.<span style="color:#9900CC;">length</span>
		<span style="color:#0066ff; font-weight:bold;">@nodes</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
		<span style="color:#9966CC; font-weight:bold;">for</span> i <span style="color:#9966CC; font-weight:bold;">in</span> 1...<span style="color:#9900CC;">l</span>
			node = Node.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>i<span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>,$matriz<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#006666;">0</span>,<span style="color:#006666;">0</span>,<span style="color:#0000FF; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>
			<span style="color:#0066ff; font-weight:bold;">@nodes</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> node
		<span style="color:#9966CC; font-weight:bold;">end</span>
		load_routes<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@nodes</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> load_routes
		l = <span style="color:#ff6633; font-weight:bold;">$matriz</span>.<span style="color:#9900CC;">length</span>
		<span style="color:#0066ff; font-weight:bold;">@routes</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
		<span style="color:#9966CC; font-weight:bold;">for</span> i <span style="color:#9966CC; font-weight:bold;">in</span> 1...<span style="color:#9900CC;">l</span>
			<span style="color:#9966CC; font-weight:bold;">for</span> j <span style="color:#9966CC; font-weight:bold;">in</span> 1...<span style="color:#9900CC;">l</span>
				<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#ff6633; font-weight:bold;">$matriz</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>j<span style="color:#006600; font-weight:bold;">&#93;</span> != <span style="color:#996600;">&quot;0&quot;</span> <span style="color:#9966CC; font-weight:bold;">then</span>
					route=Route.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>i<span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>,j<span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>,$matriz<span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>j<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">to_i</span><span style="color:#006600; font-weight:bold;">&#41;</span>
					<span style="color:#0066ff; font-weight:bold;">@routes</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> route
                                 <span style="color:#9966CC; font-weight:bold;">end</span>
                         <span style="color:#9966CC; font-weight:bold;">end</span>
                 <span style="color:#9966CC; font-weight:bold;">end</span>
                 <span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@routes</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
          <span style="color:#9966CC; font-weight:bold;">def</span> node_search<span style="color:#006600; font-weight:bold;">&#40;</span>name<span style="color:#006600; font-weight:bold;">&#41;</span>
                 <span style="color:#0066ff; font-weight:bold;">@nodes</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>node<span style="color:#006600; font-weight:bold;">|</span>
                         <span style="color:#0000FF; font-weight:bold;">return</span> node <span style="color:#9966CC; font-weight:bold;">if</span> name == node.<span style="color:#9900CC;">get_name</span>
                 <span style="color:#9966CC; font-weight:bold;">end</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
          <span style="color:#9966CC; font-weight:bold;">def</span> begin_path<span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span>
                 <span style="color:#0066ff; font-weight:bold;">@begin</span> = node_search<span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
          <span style="color:#9966CC; font-weight:bold;">def</span> end_path<span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span>
                 <span style="color:#0066ff; font-weight:bold;">@end</span> = node_search<span style="color:#006600; font-weight:bold;">&#40;</span>node<span style="color:#006600; font-weight:bold;">&#41;</span>
          <span style="color:#9966CC; font-weight:bold;">end</span>
          <span style="color:#9966CC; font-weight:bold;">def</span> lower_label
                  minor = <span style="color:#006666;">0</span>
                  cond = <span style="color:#0000FF; font-weight:bold;">false</span>
                  m = <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span>
                  <span style="color:#0066ff; font-weight:bold;">@nodes</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>node<span style="color:#006600; font-weight:bold;">|</span>
                         <span style="color:#9966CC; font-weight:bold;">if</span> node.<span style="color:#9900CC;">get_accumulated</span> <span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#006666;">0</span> <span style="color:#9966CC; font-weight:bold;">and</span> !node.<span style="color:#9900CC;">get_marked</span> <span style="color:#9966CC; font-weight:bold;">then</span>
				<span style="color:#9966CC; font-weight:bold;">if</span> cond == <span style="color:#0000FF; font-weight:bold;">false</span> <span style="color:#9966CC; font-weight:bold;">then</span>
					minor = node.<span style="color:#9900CC;">get_accumulated</span>
					cond = <span style="color:#0000FF; font-weight:bold;">true</span>
					m = node.<span style="color:#9900CC;">get_id</span>
				<span style="color:#9966CC; font-weight:bold;">end</span>
                                <span style="color:#9966CC; font-weight:bold;">if</span> node.<span style="color:#9900CC;">get_accumulated</span> <span style="color:#006600; font-weight:bold;">&lt;</span> minor <span style="color:#9966CC; font-weight:bold;">and</span> !node.<span style="color:#9900CC;">get_marked</span> <span style="color:#9966CC; font-weight:bold;">then</span>
					minor = node.<span style="color:#9900CC;">get_accumulated</span>
					m = node.<span style="color:#9900CC;">get_id</span>
				<span style="color:#9966CC; font-weight:bold;">end</span>
			<span style="color:#9966CC; font-weight:bold;">end</span>
		<span style="color:#9966CC; font-weight:bold;">end</span>
		<span style="color:#9966CC; font-weight:bold;">if</span> m != <span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">1</span> <span style="color:#9966CC; font-weight:bold;">then</span>
			<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>m<span style="color:#006600; font-weight:bold;">&#93;</span>
		<span style="color:#9966CC; font-weight:bold;">else</span>
			<span style="color:#0000FF; font-weight:bold;">return</span> <span style="color:#0000FF; font-weight:bold;">nil</span>
		<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> generate_labels<span style="color:#006600; font-weight:bold;">&#40;</span>nodebase<span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#9966CC; font-weight:bold;">if</span> nodebase <span style="color:#9966CC; font-weight:bold;">then</span>
			<span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>nodebase.<span style="color:#9900CC;">get_id</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">set_marked</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span>
			<span style="color:#0066ff; font-weight:bold;">@routes</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>route<span style="color:#006600; font-weight:bold;">|</span>
				begin_node = route.<span style="color:#9900CC;">get_begin_node</span>
				end_node = route.<span style="color:#9900CC;">get_end_node</span>
				distance = route.<span style="color:#9900CC;">get_distance</span>
				<span style="color:#9966CC; font-weight:bold;">if</span> begin_node == nodebase.<span style="color:#9900CC;">get_id</span> <span style="color:#9966CC; font-weight:bold;">and</span> !@nodes<span style="color:#006600; font-weight:bold;">&#91;</span>end_node<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">get_marked</span> <span style="color:#9966CC; font-weight:bold;">then</span>
					<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>end_node<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">get_accumulated</span> == <span style="color:#006666;">0</span> <span style="color:#9966CC; font-weight:bold;">or</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span>distance<span style="color:#006600; font-weight:bold;">+</span>nodebase.<span style="color:#9900CC;">get_accumulated</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>end_node<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">get_accumulated</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">then</span>
						<span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>end_node<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">set_label</span><span style="color:#006600; font-weight:bold;">&#40;</span>distance<span style="color:#006600; font-weight:bold;">+</span>nodebase.<span style="color:#9900CC;">get_accumulated</span>,nodebase.<span style="color:#9900CC;">get_id</span><span style="color:#006600; font-weight:bold;">&#41;</span>
					<span style="color:#9966CC; font-weight:bold;">end</span>
				<span style="color:#9966CC; font-weight:bold;">end</span>
			<span style="color:#9966CC; font-weight:bold;">end</span>
			generate_labels<span style="color:#006600; font-weight:bold;">&#40;</span>lower_label<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
		<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> short_path
	    clear
	    generate_labels<span style="color:#006600; font-weight:bold;">&#40;</span>@<span style="color:#9966CC; font-weight:bold;">begin</span><span style="color:#006600; font-weight:bold;">&#41;</span>
	    routes = nodes_short_path<span style="color:#006600; font-weight:bold;">&#40;</span>@<span style="color:#9966CC; font-weight:bold;">end</span>.<span style="color:#9900CC;">get_id</span>, <span style="color:#0066ff; font-weight:bold;">@begin</span>.<span style="color:#9900CC;">get_id</span><span style="color:#006600; font-weight:bold;">&#41;</span>
	    routes = routes.<span style="color:#9900CC;">flatten</span>
	    routes = routes.<span style="color:#9900CC;">reverse</span>
	    <span style="color:#0000FF; font-weight:bold;">return</span> routes
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> nodes_short_path<span style="color:#006600; font-weight:bold;">&#40;</span>node, nodebase<span style="color:#006600; font-weight:bold;">&#41;</span>
		short_path_nodes = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
		<span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>node<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">get_labels</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>lab<span style="color:#006600; font-weight:bold;">|</span>
			<span style="color:#9966CC; font-weight:bold;">if</span> nodebase == lab.<span style="color:#9900CC;">get_provenance</span> <span style="color:#9966CC; font-weight:bold;">then</span>
				short_path_nodes <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>node<span style="color:#006600; font-weight:bold;">&#93;</span>
			<span style="color:#9966CC; font-weight:bold;">else</span>
				short_path_nodes <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#0066ff; font-weight:bold;">@nodes</span><span style="color:#006600; font-weight:bold;">&#91;</span>node<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> nodes_short_path<span style="color:#006600; font-weight:bold;">&#40;</span>lab.<span style="color:#9900CC;">get_provenance</span>, nodebase<span style="color:#006600; font-weight:bold;">&#41;</span>
			<span style="color:#9966CC; font-weight:bold;">end</span>
		<span style="color:#9966CC; font-weight:bold;">end</span>
		<span style="color:#0000FF; font-weight:bold;">return</span> short_path_nodes
	<span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">def</span> clear
	    <span style="color:#0066ff; font-weight:bold;">@nodes</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>node<span style="color:#006600; font-weight:bold;">|</span>
			node.<span style="color:#9900CC;">clear</span>
	    <span style="color:#9966CC; font-weight:bold;">end</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p><strong>¿Cómo funciona?</strong></p>
<p>El programa cuenta con un archivo llamado <em>index.rb</em>, que es donde ejecutaremos nuestro programa.</p>
<p>Primero creamos un objeto de la clase Dijkstra.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#0066ff; font-weight:bold;">@d</span>=Dijkstra.<span style="color:#9900CC;">new</span></pre></div></div>

<p>Cargamos la lista de nodos de nuestro archivo, el cual llamamos ‘metro.txt’</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">nodes=@d.<span style="color:#9900CC;">load_list</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'metro.txt'</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Establecemos nuestro punto de inicio.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#0066ff; font-weight:bold;">@d</span>.<span style="color:#9900CC;">begin_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'Potrero'</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Establecemos nuestro punto final.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#0066ff; font-weight:bold;">@d</span>.<span style="color:#9900CC;">end_path</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'Sevilla'</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Ahora, el método <strong><em>short_path</em></strong> que nos regresa los nodos que forma la ruta corta, invoca al método <em><strong>generate_labels</strong></em> al cual le pasamos como parámetro nuestro punto de inicio, calcula las etiquetas de los nodos conectados al nodo pasado como parámetro, y este se hace recursivo invocándose así mismo, pasándose como parámetro la etiqueta menor, obtenida con el método <strong><em>lower_label</em></strong>.</p>
<p>Una vez calculadas las etiquetas se invoca al método <em><strong>nodes_short_path</strong></em> que extrae los nodos en forma de matriz y en orden contrario, por eso se ocupan los métodos <em><strong>flatten</strong></em> y <em><strong>reverse</strong></em>.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">routes=@d.<span style="color:#9900CC;">short_path</span></pre></div></div>

<p>Imprimimos los nodos que forman la ruta.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">routes.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>r<span style="color:#006600; font-weight:bold;">|</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> r.<span style="color:#9900CC;">get_name</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Listo!!..</p>
<p><strong>Programa</strong></p>
<p>Pueden descagar el programa completo desde aquí:<a href="http://www.ubicuos.com/wp-content/uploads/2010/04/dijkstra_ruby.zip"></a></p>
<p><a href="http://www.ubicuos.com/wp-content/uploads/2010/04/dijkstra_rb.zip">dijkstra_rb</a></p>
<p>Espero sea de gran ayuda, no duden en comentar.. Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2010/04/09/algoritmo-de-dijkstra-implementado-en-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Leer archivo WAV en C.</title>
		<link>http://www.ubicuos.com/2009/06/29/leer-archivo-wav-en-c/</link>
		<comments>http://www.ubicuos.com/2009/06/29/leer-archivo-wav-en-c/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 05:08:39 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[música]]></category>

		<guid isPermaLink="false">http://www.ubicuos.com/?p=293</guid>
		<description><![CDATA[#include &#60;stdio.h&#62; #include &#60;stdlib.h&#62; char bufer&#91;500&#93;; typedef struct swav &#123; char Riff&#91;4&#93;; long longRiff; char Wave&#91;4&#93;; // long longWave; char Fmt&#91;4&#93;; long lonFmt; // LONGITUD DE LOS DATOS //QUE VIENEN A CONTINUACION int catego; // 2 int canales; // 2 unsigned int frecuencia; //2 int alinea; unsigned int especifico; char bloque&#91;4&#93;; long cuerpo; // LONGITUD [...]]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2009/06/29/leer-archivo-wav-en-c/"></a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F06%2F29%2Fleer-archivo-wav-en-c%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F06%2F29%2Fleer-archivo-wav-en-c%2F&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span>
<span style="color: #0000ff;">char</span> bufer<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">500</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">struct</span> swav
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">char</span> Riff<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">long</span> longRiff<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">char</span> Wave<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>			<span style="color: #666666;">// </span>
  <span style="color: #0000ff;">long</span> longWave<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">char</span> Fmt<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">long</span> lonFmt<span style="color: #008080;">;</span>			<span style="color: #666666;">// LONGITUD DE LOS DATOS </span>
  <span style="color: #666666;">//QUE VIENEN A CONTINUACION  </span>
  <span style="color: #0000ff;">int</span> catego<span style="color: #008080;">;</span>			<span style="color: #666666;">//   2  </span>
  <span style="color: #0000ff;">int</span> canales<span style="color: #008080;">;</span>			<span style="color: #666666;">//  2  </span>
  <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> frecuencia<span style="color: #008080;">;</span>	<span style="color: #666666;">//2  </span>
  <span style="color: #0000ff;">int</span> alinea<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> especifico<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">char</span> bloque<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">long</span> cuerpo<span style="color: #008080;">;</span>
  <span style="color: #666666;">// LONGITUD DEL CUERPO</span>
<span style="color: #008000;">&#125;</span> TipoWav<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span>
main <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>arch<span style="color: #008080;">;</span>
  TipoWav dato<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">long</span> nleer<span style="color: #008080;">;</span>
  <span style="color: #0000dd;">printf</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d % d &quot;</span>, <span style="color: #0000dd;">sizeof</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">sizeof</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  arch <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;iowa.wav&quot;</span>, <span style="color: #FF0000;">&quot;rb&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>arch <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
      <span style="color: #0000dd;">printf</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;NO PUDE ABRIR <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000dd;">exit</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
  <span style="color: #0000dd;">fseek</span> <span style="color: #008000;">&#40;</span>arch, <span style="color: #0000dd;">0L</span>, <span style="color: #0000ff;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000dd;">fread</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>dato, <span style="color: #0000dd;">sizeof</span> <span style="color: #008000;">&#40;</span>TipoWav<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">1</span>, arch<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  nleer <span style="color: #000080;">=</span> dato.<span style="color: #007788;">longitud</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">sizeof</span> <span style="color: #008000;">&#40;</span>TipoWav<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000dd;">printf</span> <span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;VOY A LEER % ld &quot;</span>, nleer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000dd;">fclose</span> <span style="color: #008000;">&#40;</span>arch<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2009/06/29/leer-archivo-wav-en-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Paint en Java (Programa de dibujo).</title>
		<link>http://www.ubicuos.com/2009/05/01/paint-en-java-programa-de-dibujo/</link>
		<comments>http://www.ubicuos.com/2009/05/01/paint-en-java-programa-de-dibujo/#comments</comments>
		<pubDate>Sat, 02 May 2009 00:20:19 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Ubicuos]]></category>

		<guid isPermaLink="false">http://ubicuos.com/?p=122</guid>
		<description><![CDATA[Espero que este código les sea útil a los visitantes de Ubicuos. Es un pequeño editor de gráficos con el código fuente incluido desarrollado en Java. Código fuente Editor de Gráficos en Java]]></description>
			<content:encoded><![CDATA[<div align="left" style="padding: 0px 5px 5px 0px; clear: left; float: left;"><a name="fb_share" type="button_count" share_url="http://www.ubicuos.com/2009/05/01/paint-en-java-programa-de-dibujo/"></a></div><div class="tweetmeme_button" style="float: left; margin-left: 10px;width:90px">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F05%2F01%2Fpaint-en-java-programa-de-dibujo%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.ubicuos.com%2F2009%2F05%2F01%2Fpaint-en-java-programa-de-dibujo%2F&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p>Espero que este código les sea útil a los visitantes de Ubicuos.</p>
<p>Es un pequeño editor de gráficos con el código fuente incluido desarrollado en Java.</p>
<p><a href="http://ubicuos.com/wp-content/uploads/2009/05/paint.zip">Código fuente Editor de Gráficos en Java</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ubicuos.com/2009/05/01/paint-en-java-programa-de-dibujo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
