<?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>Geeks &#38; Linux Atelier! &#187; Programación para Newbies</title>
	<atom:link href="http://www.glatelier.org/category/programacion/programacion-para-newbies/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.glatelier.org</link>
	<description>El Taller de GNU/Linux..., pero Chileno!</description>
	<lastBuildDate>Sat, 11 Feb 2012 14:27:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Destripando: Instants Chile Get! – Prueba de concepto (Parte II)</title>
		<link>http://www.glatelier.org/2011/01/destripando-instants-chile-get-prueba-de-concepto/</link>
		<comments>http://www.glatelier.org/2011/01/destripando-instants-chile-get-prueba-de-concepto/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 14:10:17 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[destripando]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[instants]]></category>
		<category><![CDATA[swfextract]]></category>
		<category><![CDATA[swftools]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=8477</guid>
		<description><![CDATA[Este artículo es parte de una serie: Parte I: Destripando: Instants Chile Get! &#8211; Planificación Voy a ser honestos con ustedes, no tengo idea de qué cosa significa exactamente una «prueba de concepto». La utilizo según lo que me parece que quiere decir, &#8220;probar&#8221; si es posible dar con una pequeña prueba para luego generalizarla. [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Este artículo es parte de una serie:</p>
<ul>
<li><strong>Parte I:</strong> <a href="http://www.glatelier.org/2011/01/destripando-instants-chile-get-planificacion/">Destripando: Instants Chile Get! &#8211; Planificación</a></li>
</ul>
<p>Voy a ser honestos con ustedes, <strong>no tengo idea de qué cosa significa exactamente una «prueba de concepto»</strong>. La utilizo según lo que me parece <a id="top-1" href="#foot-1">que quiere decir</a>, &#8220;probar&#8221; si es posible dar con una pequeña prueba para luego generalizarla. Claramente el objetivo de mi aplicación, es bastante general (descargar todos los archivos y decodificarlos). Por lo que antes de comenzar a ver como descargar todos los archivos, sería más prudente descargar alguno y ver si efectivamente puedo transformarlo en un formato audible que no sea <code>swf</code>. ¿Imaginan que logro dar con una fórmula para descargar todo y finalmente resulta que no puedo hacer nada con los archivos?.</p>
<p><a href="../wp-content/uploads/2011/01/carlitox.jpg"><img class="alignleft" title="carlitox" src="../wp-content/uploads/2011/01/carlitox-200x200.jpg" alt="" width="200" height="200" /></a>Esto por supuesto, puede tener muchos acercamientos (incluso ni siquiera utilizar un prototipo), personalmente <strong>me gusta lo que pregona la metodología ágil</strong> (algún día hablaré de ello); que consiste básicamente<a id="top-2" href="#foot-2">[2]</a> en trabajar en base a iteraciones y pequeñas metas, de forma de que cada cierto intervalo corto de tiempo (cada día por ejemplo) se avance algo, aunque signifique modificar y reparar el código más de alguna vez. Esto permite tener una percepción de &#8220;ir avanzando&#8221; y no quedarse &#8220;pegado&#8221; en soluciones complejas, además darle muchísimo más dinamismo.</p>
<p>Por otra parte, <strong>me parece mucho más simple dar con una solución única y luego buscar la forma de generalizarla</strong> que desgastarse en problemas más difíciles de abordar, especialmente cuando recién nos sentamos y parece abismante la cantidad de trabajo que queremos realizar.</p>
<h2>Manos a la obra</h2>
<p><span id="more-8477"></span></p>
<h3>Descargando</h3>
<p>Lo primero, entonces será encargarnos de descargar alguno de los archivos. No sé como hacerlo en otros navegadores que no sean Firefox, pero supongo que deben tener procedimientos similares. Nos vamos a la página del <a title="Carlitox - joJÓjo" href="http://www.instants.cl/search/label/jojojo">instant</a> que queremos utilizar como prueba (sí, no podría dejar pasar a Carlitox) y luego:</p>
<ul>
<li>Nos vamos al menú Herramientas » Información de la página, o</li>
<li>Apretamos el botón derecho y escogemos &#8220;Información de la página&#8221;, o</li>
<li>(mi favorita) <code>&lt;Ctrl&gt; + &lt;i&gt;</code></li>
</ul>
<p>En los tres casos nos veremos con una pantalla más o menos así:</p>
<p><a href="http://www.glatelier.org/wp-content/uploads/2011/01/view_info_jojojo.png"><img class="aligncenter size-medium wp-image-8670" title="view_info_jojojo" src="http://www.glatelier.org/wp-content/uploads/2011/01/view_info_jojojo-543x375.png" alt="" width="543" height="375" /></a></p>
<p>Nos vamos a la pestaña &#8220;Media&#8221; buscamos el archivo y pinchamos en &#8220;Guardar como&#8221;. Por si fuera poco (y sin quererlo) <strong>descubrimos el lugar donde está almacenado</strong> (<code>http://www.axonema/instants/swf2/jojojo.swf</code>), y con bastante lógica podríamos suponer que <strong>todos</strong> los instants están guardados en una carpeta llamada <code>swf2</code>. Nuestro objetivo pues en alguna iteración ulterior será la de <strong>descargar todos los archivos</strong> con extensión <code>swf</code> de dicha carpeta.</p>
<h3>Decodificando</h3>
<p>Perfecto, ya tenemos nuestro archivo, ahora faltaría comprobar si es posible decodificarlo, <strong>una rápida búsqueda en google nos llevará a que la herramienta que permite <em>destripar</em> este tipo de archivo</strong>: <code>swftools</code>, por lo que tendremos que encargarnos de instalarla.</p>
<p>Nos desplazamos a través de la terminal al directorio donde hayamos descargado el joJÓjo y probamos <code>swfextract</code>:</p>
<p><code class="snip">swfextract jojojo.swf<br />
Objects in file jojojo.swf:<br />
[-i] 7 Shapes: ID(s) 3-9<br />
[-i] 1 MovieClip: ID(s) 1<br />
[-s] 1 Sound: ID(s) 10<br />
[-f] 1 Frame: ID(s) 0</code></p>
<p>Hm, tiene <strong>1</strong> <em>Sound</em>, que está como ID 10&#8230; extraigámoslo:</p>
<p><code class="snip">swfextract -s 10 jojojo.swf -o jojojo.mp3</code></p>
<p>(por supuesto que un <code>swfextract --help</code> ayuda bastante!)</p>
<p>¡Perfecto! Extrajimos el audio en <code>mp3</code> y funcionó sin problemas. Podríamos aprovechar de probar si es posible decodificar el <code>mp3</code> y pasarlo a <code>wav</code>. Para esta tarea, no se me ocurre nada mejor (ni más simple) que utilizar <a href="http://lame.sourceforge.net/">LAME</a>, así que lo siguiente será instalarlo.</p>
<p>En el mismo directorio, ejecutamos:</p>
<p><code class="snip">lame --decode jojojo.mp3 jojojo.wav</code></p>
<p><em>Voilà!</em></p>
<p><a id="foot-1" href="#top-1">[1]</a> Quizá &#8220;prototipo&#8221; sea el término más adecuado&#8230;</p>
<p><a id="foot-2" href="#top-2">[2]</a> En realidad es una simplificación bastante burda, pero sirve de forma académica</p>
<p><strong>Imagen:</strong></p>
<ul>
<li><a href="http://www.sxc.hu/photo/1309468">Robot</a> por <a href="http://www.sxc.hu/profile/julosstock">Julien Tromeur</a> en <a href="http://www.sxc.hu/">Stock.xchng</a></li>
</ul>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2011/01/destripando-instants-chile-get-prueba-de-concepto/" data-text="Destripando: Instants Chile Get! – Prueba de concepto (Parte II)" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-prueba-de-concepto%2F&amp;title=Destripando%3A%20Instants%20Chile%20Get%21%20%E2%80%93%20Prueba%20de%20concepto%20%28Parte%20II%29" id="wpa2a_2">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2011/01/destripando-instants-chile-get-prueba-de-concepto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Destripando: Instants Chile Get! &#8211; Planificación (Parte I)</title>
		<link>http://www.glatelier.org/2011/01/destripando-instants-chile-get-planificacion/</link>
		<comments>http://www.glatelier.org/2011/01/destripando-instants-chile-get-planificacion/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 14:40:15 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[destripando]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[instants]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=8456</guid>
		<description><![CDATA[Hace algunas semanas les presenté Instants Chile Get Improved un script de Bash, que descarga todos los instants desde instants.cl y los transforma a mp3/wav; la idea ahora, es ir siguiendo los pasos que nos llevarían a desarrollar el script. Al menos en mi percepción, lo más importante de la programación es saber abstraerse; si [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Hace algunas semanas les presenté <a href="http://www.glatelier.org/2010/12/labs-instants-chile-get-improved-descarga-todos-esos-momentos/">Instants Chile Get Improved</a> un script de Bash, que descarga todos los instants desde <a href="http://www.instants.cl/">instants.cl</a> y los transforma a mp3/wav; la idea ahora, es ir siguiendo los pasos que nos llevarían a desarrollar el script.</p>
<p>Al menos en mi percepción, lo más importante de la programación es saber abstraerse; si bien, todos los lenguajes tienen sintaxis, reglas y exigencias distintas a la hora de programar (que el &#8220;;&#8221; al final de cada línea, que la indentación, etc). Al final todos poseen ciertos denominadores comunes, como estructuras de control (<em>if</em>, <em>else</em>), bucles, iteraciones, etc. La idea de esta serie, si bien aprender algo de <a title="Wikipedia - Bash" href="https://wiki.archlinux.org/index.php/Bash">bash</a> y scripting, es también aprender técnicas y/o sugerencias para ayudar a programar un poco mejor.</p>
<p>Luego de esta introducción, comenzamos la primera parte: <strong>la planificación</strong>.</p>
<p><span id="more-8456"></span></p>
<p>La motivación de programar no es por generación espontánea, habitualmente responde a algún problema o necesidad que debe ser resuelto. En este caso no es distinto, tengo una página web, con cierto contenido que inicialmente sólo me permite escucharlo por internet. Más de alguna vez he echado de menos tener la posibilidad de contar con esos sonidos en momentos que lo ameritan, por lo que <strong>ya tengo el objetivo principal de la aplicación:</strong> descargar los <em>instants</em> de la página web.</p>
<p><img class="alignleft size-full wp-image-8233" title="Botón Instants" src="http://www.glatelier.org/wp-content/uploads/2010/12/boton.png" alt="Botón de instants" width="120" height="107" />Con esta información pues, tenemos que investigar algunas cosas; comenzando por si existe alguna <abbr title="para efectos de esta serie supondremos que no :P">aplicación similar</abbr>. Esto puede parecer obvio, pero es increíble lo difícil que es ser original. Teniendo ya este punto, nos vamos a mirar la página web en cuestión, donde una rápida mirada (botón derecho en uno los botones) veremos que son sonidos flash.</p>
<p>Con este nuevo obstáculo, veremos que nuestro simple plan se <em>complejiza</em> un poco:</p>
<ol>
<li>Descargar todos los sonidos</li>
<li>Transformarlos a mp3/wav</li>
</ol>
<p>Aunque el trabajo que vayan a realizar, <strong>parezca</strong> simple (o que en definitiva lo sea) <strong>me ha dado mejor resultado planear lo que voy a hacer antes de tirarme de cabeza a escribir el código</strong>, a la larga, <strong>ahorra tiempo</strong> y es mucho menos frustrante que empezar y darse cuenta cada 10 minutos que lo que parecía sumamente sencillo no lo era tanto.</p>
<p>Afortunadamente, mi carrera (Medicina) me obliga a ser metódico, ¿imaginan que cada vez que examinara a un paciente lo hiciera en distinto orden?</p>
<p>Sería <strong>dramático</strong> (de hecho, es uno de los típicos errores de los estudiantes de medicina cuando recién ingresan a las labores clínicas), de esa forma es muy fácil omitir cosas importantes. En cambio si uno lleva el mismo orden —independiente de cuál sea— además de memorizarlo con mayor facilidad, simplifica enormemente la tarea de ir agregando o retirando &#8220;pasos&#8221; para hacer más eficiente/efectivo el sistema.</p>
<p><a href="http://www.glatelier.org/wp-content/uploads/2010/01/programming.jpg"><img class="alignright size-full wp-image-5093" title="programming" src="http://www.glatelier.org/wp-content/uploads/2010/01/programming.jpg" alt="" width="400" height="300" /></a>Por supuesto que la herramienta a escoger no es algo que se pueda afirmar con certeza absoluta, es a conveniencia de cada persona. Para alguien podría ser útil realizar un listado (receta de cocina) lo más detallado posible, realizar un diagrama de flujo, utilizar <a href="http://es.wikipedia.org/wiki/Pseudocódigo">pseudocódigo</a>, y/o muchas más.</p>
<p>Esta fase también nos puede permitir tomar una mejor decisión sobre qué lenguaje utilizar. En ese sentido, no es lo mismo diseñar una aplicación web (php), una aplicación de escritorio (python-gtk) o un <em>script</em> simple como el que motiva esta serie.</p>
<p>Si ya contásemos con más experiencia en algún lenguaje (o en programación en general), podríamos hilar incluso más fino. Por ejemplo, si quisiéramos desarrollar alguna aplicación basada en el API de <a href="http://www.delicious.com/help/api">delicious</a>, sabríamos que debemos tratar con archivos XML. Con este antecedente, podríamos investigar qué lenguaje cuenta con mejores <abbr title="sí... el término de librerías es incorrecto!">bibliotecas</abbr><a id="top-1" href="#foot-1">[1]</a> o las que sean más fáciles de manipular para el objetivo particular que andamos buscando.</p>
<p>Por último, <strong>todo esto no es sólo válido para trabajos personales, también lo es para trabajo en equipo</strong>; invertir unas horas más fuera de los computadores para hacer un esquema de la aplicación y planificar los distintos aspectos, facilita en gran medida que cada miembro tenga claro el rol que cumplirá y no será necesario interrumpir el trabajo, sólo para descubrir que el proyecto era inviable o los estilos de los códigos causan estragos en la comprensión de las aplicaciones.</p>
<p>Lamento que esta parte haya sido tan “latera”, desde la próxima parte ya empezaremos a tipear código; diría &#8220;programar&#8221;, pero la verdad es que sería una redundancia pues ya lo empezamos a hacer ;)</p>
<p><a id="foot-1" href="#top-1">[1]</a> Por supuesto que esto es una simplificación casi absurda, dudo que exista algún lenguaje que tenga un mal soporte para <em>parsear</em> archivos XML.</p>
<p><strong>Foto:</strong></p>
<ul>
<li><a title="php code" href="http://www.sxc.hu/photo/995000">Php Code</a> por <a href="http://www.sxc.hu/profile/kakaopor">Kakao Por</a> en <a href="http://www.sxc.hu/">Stock.xchng</a></li>
</ul>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2011/01/destripando-instants-chile-get-planificacion/" data-text="Destripando: Instants Chile Get! - Planificación (Parte I)" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;linkname=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2011%2F01%2Fdestripando-instants-chile-get-planificacion%2F&amp;title=Destripando%3A%20Instants%20Chile%20Get%21%20%26%238211%3B%20Planificaci%C3%B3n%20%28Parte%20I%29" id="wpa2a_4">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2011/01/destripando-instants-chile-get-planificacion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Labs: Instants Chile Get Improved – Descarga todos esos “momentos”</title>
		<link>http://www.glatelier.org/2010/12/labs-instants-chile-get-improved-descarga-todos-esos-momentos/</link>
		<comments>http://www.glatelier.org/2010/12/labs-instants-chile-get-improved-descarga-todos-esos-momentos/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 13:00:52 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[chile]]></category>
		<category><![CDATA[instants]]></category>
		<category><![CDATA[labs]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=8232</guid>
		<description><![CDATA[Supongo que hacer una introducción a los &#8220;instants&#8221; sería un pérdida de tiempo y caracteres, pues no conocerlos sería similar a vivir fuera del planeta o bajo una piedra. Si eres alguno de los últimos (nunca faltan), paso a dar una pequeña descripción: los instants son esos pequeños momentos que por alguna razón pasaron a [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Supongo que hacer una introducción a los &#8220;instants&#8221; sería un pérdida de tiempo y caracteres, pues no conocerlos sería similar a vivir fuera del planeta o bajo una piedra.</p>
<p>Si eres alguno de los últimos (nunca faltan), paso a dar una pequeña descripción: los <em>instants</em> son esos pequeños momentos que por alguna razón pasaron a la historia, tenemos el clásico joJÓjo de Carlitox, el archi-conocido (al menos en Chile)  &#8220;¡Aer quien e&#8217; el dostor!&#8221;, el semipterno Rick Roll o el clásico &#8220;EA Sports It&#8217;s in the game&#8221;, todo ello al alcance de un botón rojo.</p>
<p>¿Cuántas veces han querido tener ese sonido en su computador o en el celular para complementar ese <em>momento</em> que también lo ameritaba? <strong>Todo ello y más</strong> luego del salto&#8230;</p>
<p><span id="more-8232"></span></p>
<p>La buena noticia es que acabo de desarrollar un pequeño script de Bash que obtiene todos, ¡sí! ¡<strong>todos</strong>! los sonidos desde <a href="http://instants.cl">instants.cl</a>. Esto no habría sido posible sin los trabajos previos de <a href="http://blog.gon.cl/post/862">Gon</a> y <a href="http://felipe.astroza.cl/news/2010/05/08/audios-de-instantsfun-es-en-mp3/">Felipe Astroza</a>.</p>
<p>Respecto a sus versiones anteriores, este script:</p>
<ul>
<li>Descarga los sonidos sólo una vez (el de Gon lo hacía dos veces)</li>
<li>El código ha sido &#8220;simplificado&#8221;</li>
<li>Utilicé Arrays (sí, de BASH) para establecer las &#8220;dependencias&#8221;</li>
<li>Mejoré un poco la interfaz y las salidas son más explicativas</li>
</ul>
<p>Si miran se podrán dar cuenta que aún hay algunas cosas que mejorar y que faltan:</p>
<ul>
<li>Utilizar un directorio temporal (en /tmp), en vez de crear una carpeta &#8220;on-the-fly&#8221; y luego eliminarla</li>
<li>Preguntar al usuario dónde descargar los sonidos</li>
<li>Dejar opcional la posibilidad de utilizar curl o wget</li>
<li>Preguntar a qué formato el usuario quiere transformar los archivos (actualmente lo hace a mp3 y wav)</li>
</ul>
<p>El script está disponible <a title="(cambiar extensión a .sh y dar permisos de ejecución)" href="http://www.glatelier.org/wp-content/uploads/2010/12/instants_cl_mp3_downloader.txt">aquí</a>, en un <a href="https://gist.github.com/667247">gist</a> de Github, o a continuación. Me gustaría detenerme en lo de &#8220;un gist&#8221; (un especie de lugar para almacenar <em>snippets</em>) , esto significa que está funcionando como repositorio (de git por supuesto), pueden descargarlo, hacer un <em>fork</em>, clonarlo y ver los logs del desarrollo y lo más interesante, pueden hacer mejoras para luego yo incluirlas en la versión definitiva.</p>
<p>Si quiere algo más simple, también lo incluyo acá (click para desplegar):</p>
<pre class="brush: bash; collapse: true; light: false; title: InstantsFunGet Improved; toolbar: true; notranslate">
#!/usr/bin/env bash
#
###############################################################################
#                                                                             #
#   (c) 2010, Pablo Olmos de Aguilera &lt;pablo[at}glatelier.org&gt;;               #
#   Based on work from Gonzalo Diaz &lt;me{at)gon.cl&gt;;                           #
#   http://gon.pastebin.com/zanh8uAq                                          #
#                                                                             #
#   Based on InstantsFunGet from Felipe Astroza &lt;felipe(at]astroza.cl&gt;        #
#   http://felipe.astroza.cl/news/2010/05/08/audios-de-instantsfun-es-en-mp3/ #
#                                                                             #
#   This program is free software: you can redistribute it and/or modify      #
#   it under the terms of the GNU General Public License as published by      #
#   the Free Software Foundation, either version 3 of the License, or         #
#   (at your option) any later version.                                       #
#                                                                             #
#   This program is distributed in the hope that it will be useful,           #
#   but WITHOUT ANY WARRANTY; without even the implied warranty of            #
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             #
#   GNU General Public License for more details.                              #
#                                                                             #
#   You should have received a copy of the GNU General Public License         #
#   along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.     #
#                                                                             #
###############################################################################

#==============================================================================
#
#          FILE:  instants_cl_mp3_downloader.sh
#
#   DESCRIPTION:  Download every 'instant' from instants.cl to a folder.
#
#      REVISION:  0.9
#==============================================================================

#
# Constants
#

SOURCE_HOST=http://www.instants.cl/search?max-results=1000

# TODO: Use mktemp
TEMP_DIR=tmp

# TODO: Ask user
COLLECTION_DIR=collection

# TODO: make optional wget or curl
# TODO: ask if the user wants to convert to wav
REQUIREMENTS=( lame wget swfextract )

function prepare() {
    for app in ${REQUIREMENTS[@]}; do
        if ! type -P ${app} &amp;&gt;/dev/null; then
            # TODO: Find a way to make bash find that swfextract is part from swftools
            [[ $app = &quot;swfextract&quot; ]] &amp;&amp; app=&quot;swftools&quot;
            not_installed=(&quot;${not_installed[@]}&quot; &quot;$app&quot;)
        fi
    done

    if [ ${#not_installed[@]} != 0 ]; then
        echo &quot;Sorry, the following apps have to be installed to run this script:&quot; &gt;&amp;2
        for required_app in ${not_installed[@]}; do
            printf &quot;   %s\n&quot; $required_app
        done
        exit 1
    fi

    mkdir -p $TEMP_DIR $COLLECTION_DIR
}

function cleanup() { rm -fr $TEMP_DIR; }
function get_swf_list() {
    echo $(cat $1 | grep swf | awk 'BEGIN {FS=&quot;\&quot;&quot;}; {print $12}');
}

function get_index() {
    wget -q $1 -O $TEMP_DIR/index
    echo &quot;$TEMP_DIR/index&quot;
}

#
# Starting Application
#

prepare

echo &quot;InstantsChileGet-Improved - (C) 2010 Pablo Olmos de Aguilera&quot;
echo &quot;Based on: InstantsChileGet - (C) 2010 Gonzalo Diaz&quot;
echo &quot;based on: InstantsFunGet - (C) 2010 Felipe Astroza&quot;
echo -n -e &quot;Reading index\r&quot;
swf_list=$(get_swf_list $(get_index $SOURCE_HOST))

# Deleting $TEMP_DIR/to_download if exists
[[ -e $TEMP_DIR/to_download ]] &amp;&amp; rm $TEMP_DIR/to_download

for swf in $swf_list; do
    echo $swf &gt;&gt; $TEMP_DIR/to_download
done

# Remove duplicated entries
swf_list=$(cat $TEMP_DIR/to_download | uniq )

TOTAL=$(echo $swf_list | wc -w)
current=1

for swf in $swf_list; do
        name=$(echo $swf | awk 'BEGIN {FS=&quot;/&quot;}; {print $6}')
        echo -e -n &quot;\r[$current of $TOTAL]\e[0K $swf =&gt; $TEMP_DIR/$name\n&quot;
        wget -q -nc $swf -P $TEMP_DIR/
        let &quot;current++&quot;
done

echo &quot;Now we are going to extract the sound...&quot;
sleep 5

current=1

for swf in $TEMP_DIR/*.swf; do
        filename=$(basename $swf)
        name=${filename%.*}
        echo -e -n &quot;\r[$current of $TOTAL]\e[0K Extracting sound from: \
        $swf =&gt; $COLLECTION_DIR/$name.mp3\n&quot;
        sound_id=$(swfextract $swf | grep Sound: | awk '{print $5}')
        swfextract -s $sound_id $swf -o $COLLECTION_DIR/$name.mp3
        lame --decode $COLLECTION_DIR/$name.mp3 $COLLECTION_DIR/$name.wav
        let &quot;current++&quot;
done

cleanup
</pre>
<p>Para los que les interese un poco más aprender algo de <em>scripting</em>, les cuento que este script contiene varias a respuestas a problemas típicos (extraer campos de una dirección, obtener el nombre sin extensión, entre otros), por lo que revisar el código les puede ser bien útil.</p>
<p>De hecho, comenzaré una serie de artículos donde iremos paso a paso desarrollando este script, desde la ideación, prueba de concepto, pseudocódigo y finalmente el código propiamente tal. Todo esto, para que podamos ir aprendido &#8220;abstracciones&#8221; y responder al <em>cómo</em> programar, más que a &#8220;aprender Bash&#8221;.</p>
<p>PS.- Este artículo va con trackbacks para ambos Felipe y Gon, espero que funcionen.</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/12/labs-instants-chile-get-improved-descarga-todos-esos-momentos/" data-text="Labs: Instants Chile Get Improved – Descarga todos esos “momentos”" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;linkname=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F12%2Flabs-instants-chile-get-improved-descarga-todos-esos-momentos%2F&amp;title=Labs%3A%20Instants%20Chile%20Get%20Improved%20%E2%80%93%20Descarga%20todos%20esos%20%E2%80%9Cmomentos%E2%80%9D" id="wpa2a_6">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/12/labs-instants-chile-get-improved-descarga-todos-esos-momentos/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Joomla, gestión de contenidos</title>
		<link>http://www.glatelier.org/2010/09/jomla-gestion-de-contenidos/</link>
		<comments>http://www.glatelier.org/2010/09/jomla-gestion-de-contenidos/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 15:00:22 +0000</pubDate>
		<dc:creator>Pablo Ignacio</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[instalacion]]></category>
		<category><![CDATA[jomla]]></category>
		<category><![CDATA[manual]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=7635</guid>
		<description><![CDATA[Este artículo fue escrito por Julian Eduardo Onoa Aguirre, bloguero del sitio Somewhere back in Linux…. Agradecemos también su diposición a celebrar con nosotros nuestro primer millón Saludos! Por estos días uno de los mejores blogs que sigo desde hace mas o menos un año llega al millón de visitas. Como blogger puedo decir que [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />
<blockquote><strong><em>Este artículo fue escrito por Julian Eduardo Onoa Aguirre, bloguero del sitio </em></strong><strong><em><a href="http://onoametal.wordpress.com/">Somewhere back in Linux…</a>. Agradecemos también su diposición a celebrar con nosotros nuestro primer millón</em></strong></p></blockquote>
<p><span style="font-family: 'trebuchet ms', sans-serif;">Saludos!</span></p>
<p><span style="font-family: 'trebuchet ms', sans-serif;">Por estos días uno de los mejores blogs que sigo desde hace mas o menos un año llega al millón de visitas. Como blogger puedo decir que llegar a este nivel no es nada sencillo, se requiere muchísimo trabajo y dedicación. Por eso para mí es un gran honor (y un placer!) poder ser partícipe de esta gran fiesta y poder contribuir con un mini-tutorial para celebrar este gran logro que <a href="http://www.glatelier.org/" target="_blank">Geeks &amp; Linux Atelier</a> festeja por lo alto. Aprovecho la oportunidad que me han dado de escribir en su sitio y les traigo un sencillo tutorial de instalacion de joomla! en Ubuntu (de hecho sirve para cualquier distribución Linux) y que espero que sea de utilidad y sobre todo que esté a la altura de los buenos tips que día a día <a href="http://www.glatelier.org/" target="_blank">Geeks &amp; Linux Atelier</a> comparte con todos nosotros. Bueno, manos a la obra&#8230;.</span></p>
<p>Para los que no saben en qué consiste <a href="http://www.joomlaspanish.org/" target="_blank">Joomla!</a>, y sin ir más allá, les dejo la descripción de Wikipedia: &#8220;Joomla! es un sistema de gestión de contenidos, y entre sus principales virtudes está la de permitir editar el contenido de un sitio web de manera sencilla. Es una aplicación de código abierto programada mayoritariamente en PHP bajo una licencia GPL. Este administrador de contenidos puede trabajar en Internet o intranets y requiere de una base de datos MySQL, así como, preferiblemente, de un servidor HTTP Apache.</p>
<p>Sin más preámbulo les voy a indicar como instalé correctamente Joomla! en mi Ubuntu Lucid.</p>
<p><span id="more-7635"></span></p>
<p>Primero que todo debes entender que Joomla! funciona sobre entornos web, y si quieres usarlo en tu equipo debes tener instalado un ambiente web. para esto primero deberás<a href="http://onoametal.wordpress.com/2010/07/11/instalando-nuestro-servidor-lamp-en-ubuntu/" target="_blank"> instalar LAMP en ubuntu</a>. Una vez lo tengas listo, abre una consola y escribe lo siguiente (en este orden):</p>
<p>mkdir joomla<br />
cd joomla<br />
wget <a href="http://joomlacode.org/gf/download/frsrelease/12649/53618/Joomla_1.5.20-Spanish-pack_completo.tar.gz" target="_blank">http://joomlacode.org/gf/download/frsrelease/12649/53618/Joomla_1.5.20-Spanish-pack_completo.tar.gz</a></p>
<p>Con este comando descargarás joomla!. Una vez termine la descarga debes extraer los archivos</p>
<p>tar xvjf Joomla_1.5.20-Spanish-pack_completo.tar.gz</p>
<p>En este momento ya puedes borrar el paquete que descargaste (ojo! No el contenido que acabas de extraer!)</p>
<p>rm -f Joomla_1.5.20-Spanish-pack_completo.tar.gz</p>
<p>Ahora mueve el contenido de joomla a tu carpeta www</p>
<p>cd ..<br />
sudo mv joomla /var/www/</p>
<p>Para que todo funcione correctamente debemos dar permisos de escritura a la carpeta donde instalaremos joomla!, el método más sencillo es</p>
<p>sudo chown -R www-data:www-data /var/www/joomla</p>
<p>Existen otros métodos pero la verdad este me pareció mucho más sencillo :).  Ahora si empecemos a instalar joomla, para esto debes ingresar a esta dirección en tu navegador web favorito</p>
<p><a href="http://localhost/joomla" target="_blank">http://localhost/joomla</a></p>
<p>Si todo está bien, deberás ver una ventana como esta, donde se te pide seleccionar el idioma de instalación:</p>
<p><img class="aligncenter size-medium wp-image-7637" title="Instalador Web de Joomla! - Google Chrome_048" src="http://www.glatelier.org/wp-content/uploads/2010/09/Instalador-Web-de-Joomla-Google-Chrome_048-600x337.jpg" alt="" width="600" height="337" />Luego hará la comprobación de tu sistema verificando que tienes todo configurado para poder trabajar con joomla! sin problemas (si en este paso tienes dudas deja un comentario!):</p>
<p><img class="aligncenter size-medium wp-image-7638" title="Instalador Web de Joomla! - Google Chrome_049" src="http://www.glatelier.org/wp-content/uploads/2010/09/Instalador-Web-de-Joomla-Google-Chrome_049-600x337.jpg" alt="" width="600" height="337" />Aceptas la licencia GNU/GPL de Joomla!</p>
<p><img class="aligncenter size-medium wp-image-7639" title="Instalador Web de Joomla! - Google Chrome_050" src="http://www.glatelier.org/wp-content/uploads/2010/09/Instalador-Web-de-Joomla-Google-Chrome_050-600x337.jpg" alt="" width="600" height="337" />Ahora crearemos la base de datos necesaria para almacenar la información de nuestro sitio, recuerda que debes ingresar los valores que asignaste cuando instalaste MySQL</p>
<p><img class="aligncenter size-medium wp-image-7640" title="Instalador Web de Joomla! - Google Chrome_051" src="http://www.glatelier.org/wp-content/uploads/2010/09/Instalador-Web-de-Joomla-Google-Chrome_051-600x337.jpg" alt="" width="600" height="337" />A continuación te solicitará la configuración FTP. En este caso no haremos nada ya que estamos usando nuestro propio equipo, no hay necesidad de esto.  Finalmente te pedirá que pongas los datos básicos del sitio que vamos a crear:</p>
<p><img class="aligncenter size-medium wp-image-7641" title="Instalador Web de Joomla! - Google Chrome_052" src="http://www.glatelier.org/wp-content/uploads/2010/09/Instalador-Web-de-Joomla-Google-Chrome_052-600x337.jpg" alt="" width="600" height="337" /></p>
<p>Bueno, y eso es todo! Luego te pedirá borrar la carpeta de instalación de instalación, lo puedes hacer con un</p>
<pre>sudo rm -r /var/www/joomla/installation</pre>
<p>Ahora refresca la pagina y listo!</p>
<p>Adicional quiero compartir con ustedes unos excelentes recursos si eres principiante como yo:</p>
<p>Video tutoriales de joomla! que realizó strOngbacker en su canal de youtube y que son bastante buenos para empezar</p>
<p>Este <a href="http://reparaciondepc.cl/blog/descargar-manual-joomla-para-principiantes-en-espanol/">manual de usuario</a> creado por reparaciondepc.cl</p>
<p>Bueno, creo que eso es todo. Y de nuevo felicitaciones a Geeks and Linux Atelier por su excelente trabajo. Espero que los 2 millones sean pronto!</p>
<p>Up the Irons! And the Geeks!</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/09/jomla-gestion-de-contenidos/" data-text="Joomla, gestión de contenidos" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;linkname=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F09%2Fjomla-gestion-de-contenidos%2F&amp;title=Joomla%2C%20gesti%C3%B3n%20de%20contenidos" id="wpa2a_8">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/09/jomla-gestion-de-contenidos/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CloudSN: integrando redes sociales en tu escritorio</title>
		<link>http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/</link>
		<comments>http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 17:13:32 +0000</pubDate>
		<dc:creator>morelio</dc:creator>
				<category><![CDATA[Arch]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Personalización]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[google reader]]></category>
		<category><![CDATA[notificaciones]]></category>
		<category><![CDATA[redes sociales]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=6827</guid>
		<description><![CDATA[CloudSN es una aplicación para Gnome que te alertará, a través de notificaciones, de nuevos correos y entradas de tus servicios sociales preferidos. Entre los servicios soportados encontramos Gmail, GoogleReader, Twittter, Identi.ca y cualquier correo IMAP o POP3. Para instalarlo en Ubuntu debemos agregar el PPA del proyecto: sudo add-apt-repository ppa:chuchiperriman/cloudsn Y para instalarlo: sudo [...]]]></description>
			<content:encoded><![CDATA[<p id="top" /><a href="httphttp://chuchiperriman.github.com/cloud-services-notifications/://" target="_blank">CloudSN</a> es una aplicación para Gnome que te alertará, a través de notificaciones, de nuevos correos y entradas de tus servicios sociales preferidos.</p>
<p>Entre los servicios soportados encontramos Gmail, GoogleReader, Twittter, Identi.ca y cualquier correo IMAP o POP3.</p>
<p><span id="more-6827"></span></p>
<p>Para instalarlo en Ubuntu debemos agregar el PPA del proyecto:<br />
<code class="snip"> sudo add-apt-repository ppa:chuchiperriman/cloudsn</code></p>
<p>Y para instalarlo:<br />
<code class="snip">sudo apt-get update &amp;&amp; sudo apt-get install cloudsn</code></p>
<p>En Arch se encuentra disponible en AUR:<br />
<code class="snip">yaourt -S cloudsn</code></p>
<p>Una vez instalado lo podrás encontrar en las aplicaciones de <em>Internet</em>, al seleccionarlo aparecerá un nuevo icono en nuestra bandeja del sistema.</p>
<p><a rel="attachment wp-att-6829" href="http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/seleccion_004-2/"><img class="aligncenter size-full wp-image-6829" title="Selección_004" src="http://www.glatelier.org/wp-content/uploads/2010/06/Selección_004.png" alt="" width="171" height="44" /></a></p>
<p>Seleccionamos nuestro nuevo icono y podremos agregar nuestras redes favoritas.</p>
<p><a rel="attachment wp-att-6830" href="http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/cloudsn_005/"><img class="aligncenter size-full wp-image-6830" title="cloudsn_005" src="http://www.glatelier.org/wp-content/uploads/2010/06/cloudsn_005.png" alt="" width="449" height="327" /></a></p>
<p><a rel="attachment wp-att-6831" href="http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/nueva-cuenta_006/"><img class="aligncenter size-full wp-image-6831" title="Nueva cuenta_006" src="http://www.glatelier.org/wp-content/uploads/2010/06/Nueva-cuenta_006.png" alt="" width="337" height="401" /></a></p>
<p>Una vez configuradas nuestras cuentas, el programa utilizará nuestro gestor de notificaciones para avisarnos de las actualizaciones de las redes configuradas.</p>
<p>Si lo preferimos podemos cambiar algunas preferencias del programa, que aunque pocas son las mínimas necesarias para su correcto funcionamiento.</p>
<p><a rel="attachment wp-att-6837" href="http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/preferencias_008/"><img class="aligncenter size-full wp-image-6837" title="Preferencias_008" src="http://www.glatelier.org/wp-content/uploads/2010/06/Preferencias_008.png" alt="" width="558" height="427" /></a></p>
<p>Ya con tu programa funcionando correctamente podrás revisar tus redes y sus actualizaciones cuando quieras solo haciendo click en el icono de CloudSN.</p>
<p><a rel="attachment wp-att-6838" href="http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/menu_007/"><img class="aligncenter size-full wp-image-6838" title="Menú_007" src="http://www.glatelier.org/wp-content/uploads/2010/06/Menú_007.png" alt="" width="271" height="72" /></a></p>
<p>No soy un activo usuario de las redes sociales, pero debo decir que este programa me gustó mucho por su sencillez y porque cumple satisfactoriamente con sus funciones. Se esperan nuevas actualizaciones donde vendría el soporte de nuevas redes entre ellas Facebook.</p>
<p>Hasta la proxima.</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/" data-text="CloudSN: integrando redes sociales en tu escritorio" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;linkname=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F06%2Fcloudsn-integrando-redes-sociales-en-tu-escritorio%2F&amp;title=CloudSN%3A%20integrando%20redes%20sociales%20en%20tu%20escritorio" id="wpa2a_10">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/06/cloudsn-integrando-redes-sociales-en-tu-escritorio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Programación Para Newbies: Fortran 6: Vectores y Arrays</title>
		<link>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/</link>
		<comments>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 13:59:52 +0000</pubDate>
		<dc:creator>Felipe Portales</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[fortran]]></category>
		<category><![CDATA[programar]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=5512</guid>
		<description><![CDATA[Acá desarrollaremos el manejo más básico de vectores y arrays (también conocidos como arreglos en español) en el lenguaje Fortran.]]></description>
			<content:encoded><![CDATA[<p id="top" />
<blockquote>Acá desarrollaremos el manejo más básico de vectores y arrays (también conocidos como arreglos en español) en el lenguaje Fortran.</p></blockquote>
<p>A muchos les puede sonar conocida la palabra vector, para algunos, es un organismo que transmite enfermedades, para otros (los más matemáticos) es una cantidad dirigida, o un elemento de una estructura algebraica conocida como espacio vectorial, por lo tanto partimos definiendo ¿qué es un vector o un array en Fortran?.</p>
<p>Básicamente un vector (o array también) es una manera de manejar una gran cantidad de datos de manera más cómoda, ¿a qué nos referimos con esto? se preguntarán algunos, bueno, más especificamente un vector es un tipo de variable, que <strong>dentro de si contiene distintos valores</strong>.</p>
<p>Por ejemplo, en matemáticas, podemos definir el vector A=(x,y,z) en el espacio de 3 dimensiones, en Fortran es muy similar (recordemos que el objetivo del lenguaje es ayudar en tareas de matemáticas, ciencia e ingeniería), podemos definir vectores con cuantas componentes queramos. Los arrays son un poco distintos, estos trabajan (por dar un par de ejemplos) en distintas dimensiones, con esto me refiero a filas, columnas, etc, estas imágenes son más explicativas:</p>
<p><span id="more-5512"></span></p>
<div id="attachment_5513" class="wp-caption aligncenter" style="width: 512px"><img class="size-medium wp-image-5513" src="http://www.glatelier.org/wp-content/uploads/2010/02/array-2d-502x375.png" alt="" width="502" height="375" /><p class="wp-caption-text">Ejemplo de un array en 2D</p></div>
<p>En cada celda del recuadro cabe un valor distinto (aunque no necesariamente) y al estar en un  array se tratan como uno solo, osea, se hacen las mismas operaciones sobre todos los elementos.</p>
<p>Un array 3D sería:</p>
<div id="attachment_5514" class="wp-caption aligncenter" style="width: 578px"><img class="size-medium wp-image-5514" src="http://www.glatelier.org/wp-content/uploads/2010/02/array-3d-568x374.png" alt="" width="568" height="374" /><p class="wp-caption-text">Ejemplo de un Array 3D</p></div>
<p>Acá cada cubo representaría un valor dentro del array. no puedo poner imágenes en 4D ya que es como imposible salirse del espacio normal xD; pero ya entendieron la idea.</p>
<p>Tenemos que introducir una cierta terminología para que estar seguros de que entendernos lo mismo:</p>
<ul>
<li><strong>Rango</strong>: número de dimensiones (1D, 2D, 3D,&#8230;)</li>
<li><strong>Extensión</strong>: número de elementos de una dimensión.</li>
<li><strong>Forma</strong>: vector de rango 1 que contiene en sus entradas la extensioń de cada dimensión.</li>
<li><strong>Tamaño</strong>: número de elementos.</li>
</ul>
<p>Hemos de saber que tenemos, nuevamente, dos tipos de arrays, estáticos y dinamicos.</p>
<p>Ahora que sabemos lo básico, veamos como trabajar con ellos:</p>
<p style="text-align: center;"><span style="text-decoration: underline;"><strong>Arrays Estáticos</strong></span></p>
<p>Reciben el nombre estático ya que <strong>SE DEBE</strong> declarar con anterioridad sus dimensiones y su extensión, siendo estas <strong>inalterables</strong>.</p>
<p>Al ser declarados como variables, su sintaxis es un poco distinta, respondiendo a su distinta naturaleza, digamos que queremos trabajar con vectores y arrays con entradas del tipo <code>real</code>, la declaración sería:</p>
<p><code>program muestra_array1<br />
real,dimension(5)::a<br />
real,dimension(7,8)::r,s<br />
real,dimension(6,9)::t<br />
real::b(7)<br />
...<br />
end program</code></p>
<p>Acá se tiene que <code>a</code> es un vector con 5 entradas, <code>b</code> es también un vector, pero de 7 entradas. <code>r</code> y <code>s</code> son arrays de 7&#215;8 y <code>t</code> es un array de 6&#215;9, <code>r</code>,<code>s</code>,<code>t</code> son de dos dimensiones.</p>
<p style="text-align: center;"><span style="text-decoration: underline;"><strong>Arrays Dinámicos</strong></span></p>
<p>A diferencia de los estáticos, la extensión de los arrays dinámicos podemos establecerla sobre la marcha, ya sea con una variable, o un valor arbitrario, para ello hacemos uso de la sentencia ALLOCATE, al declararlo sería:</p>
<p><code>program muestra_array2</code><code><br />
integer::n<br />
real,dimension(:)::a<br />
...<br />
ALLOCATE(a(n))<br />
...<br />
end program</code></p>
<p>En este caso particular, <code>a</code> es un vector con <code>n</code> entradas, la sintaxis para declarar arrays es la misma.</p>
<p>Ahora pasaremos a la manera de como trabajar, propiamente tal, con los arrays, hay una sola regla de oro: <strong>dos arrays o vectores se pueden operar, si y solo si, ambos tienen las mismas dimensiones y extensiones</strong>. Casi todo intento de operación que no cumpla esto, no es aceptable para el programa, la excepción es la multiplicación por un escalar, un escalar es una variable normal, estas al multiplicar, se &#8220;expanden&#8221; afectando a todos las entradas del array.</p>
<p>La suma, resta multiplicación y división se realizan elemento a elemento, ejemplo:</p>
<div id="attachment_5517" class="wp-caption aligncenter" style="width: 439px"><img class="size-full wp-image-5517" src="http://www.glatelier.org/wp-content/uploads/2010/02/mult.png" alt="" width="429" height="72" /><p class="wp-caption-text">Ejemplo de multiplicación de arrays</p></div>
<p>Podemos llamar a un cierto elemento de un array indicando su posición, por ejemplo, si decimos que a es el primer array mostrado en la imagen anterior <code>print*,a(1,2)</code> nos muestra el valor <code>4</code>. En dos dimensiones siempre se convoca <code>array(fila,columna)</code>.</p>
<p>Las sentencias maxval y minval buscan el valor máximo y el valor mínimo dentro del array. Ej: <code>b=maxval(a) !a b se le asigna el máximo valor dentro de a.</code></p>
<p>Finalmente, sum nos da la suma de todos los valores dentro de un array. Ejemplo <code>b=sum(a) !b es la suma de todos las entradas de a.</code></p>
<p>Bueno, estos son los aspectos más básicos del manejo de arrays en Fortran, con este post, llegamos al fin de la serie de Programación para Newbies: Fortran. Espero lo hayan disfrutado, como yo lo hice :D</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/" data-text="Programación Para Newbies: Fortran 6: Vectores y Arrays" data-count="horizontal">Tweet</a>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-6-vectores-y-arrays/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Programación Para Newbies: Fortran 5: Subprogramas</title>
		<link>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-5-subprogramas/</link>
		<comments>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-5-subprogramas/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 16:00:16 +0000</pubDate>
		<dc:creator>Felipe Portales</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[fortran]]></category>
		<category><![CDATA[subprogramas]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=5379</guid>
		<description><![CDATA[Hasta el momento, hemos aprendido a trabajar con las distintas variables, y a usar estructuras para modificar el curso que toman nuestros programas, pero cuando nos enfrentamos a programas más extensos, que algunas veces necesitan ejecutar un mismo bucle para procesar ciertos datos, pero las variables no son las mismas, no es lo más cómodo [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />
<p style="text-align: justify;">Hasta el momento, hemos aprendido a trabajar con las distintas variables, y a usar estructuras para modificar el curso que toman nuestros programas, pero cuando nos enfrentamos a programas más extensos, que algunas veces necesitan ejecutar un mismo bucle para procesar ciertos datos, pero las variables no son las mismas, no es lo más cómodo copiar y pegar las mismas instrucciones varias veces, más todavía si tenemos que estar cambiando las variables cada vez que usemos el mismo algoritmo, para esto existen los subprogramas.</p>
<p style="text-align: justify;">Un subprograma es una estructura que se agrega al final del programa y se puede invocar en cualquier parte del programa principal (perdonen que sea reiterativo con la palabra programa) indicando que variables participan dentro del subprograma, que cambios se les hacen, etc. Tenemos de dos tipos: functions y subroutines, sus diferencias son sutiles.</p>
<p style="text-align: justify;">Una function (o función en castellano), son subprogramas que tienen 0 o más argumentos (variables) y que <strong>retornan un valor en el nombre</strong>, esto significa, por lo pronto, que su invocación debe estar al lado derecho de una asignación de valor a una variable y no puede formar una sentencia aislada dentro del programa. Ejemplificando:</p>
<p style="text-align: justify;"><code>variable=funcion</code><code>(argumentos)</code></p>
<p style="text-align: justify;">siempre va a la derecha la invocación de la función. La sintaxis para crear nuestras propias funciones en Fortran es la siguiente:</p>
<p style="text-align: justify;"><span id="more-5379"></span></p>
<p style="text-align: justify;"><code>program programa_muestra<br />
... sentencias e invocaciones de la función<br />
end program</code></p>
<p style="text-align: justify;"><code>function nombre_funcion(argumentos)<br />
declaración del tipo de argumentos<br />
sentencias de la función<br />
end function</code></p>
<p style="text-align: justify;">¿Por qué meto una declaración del tipo de argumento en subprograma?, como una simple precaución, es importante que los tipos coincidan, por lo que si nos equivocamos al declarar una variable en el programa y compilamos, puede generar un error de ejecución desastroso que arruine todos nuestros datos, entonces si incluimos la declaración en el subprograma y nos equivocamos, lo más probable es que el compilador se queje y nos advierta de ello. Vamos a dar un ejemplo de una función de dos variables:</p>
<p style="text-align: justify;"><code>function mayor(aL,bL)<br />
integer::aL,bL<br />
if (aL .ge. bL) then<br />
mayor=aL<br />
else<br />
mayor=bL<br />
end if<br />
end function</code></p>
<p style="text-align: justify;">lo que hace esta función es analizar los dos valores enteros que entraron (<code>aL</code> y <code>bL</code>) y devuelve <strong>en el nombre</strong> el mayor valor entre ellos (por eso la función se llama mayor). Noten que les agregué una <code>L</code> a las variables, esto es una forma elegante de evitar un efecto similar a la contaminación cruzada en la cocina, conocido como efecto lateral (si se usan los mismos nombres que en el programa, una memoria en mal estado podría asignar nuevas direcciones a la variable original). La forma de invocarla sería:</p>
<p style="text-align: justify;"><code>variable=mayor(x,y)</code></p>
<p style="text-align: justify;">donde <code>x</code> e <code>y</code> son valores enteros.</p>
<p style="text-align: justify;">Como dije antes, las subroutines (subrutinas en castellano) son solo un poco distintas, en el sentido de que <strong>NO devuelven un valor en el nombre</strong>, sino que su invocación se hace por medio de la sentencia call. La forma en que trabajan las subrutinas nos p<strong>ermite modificar los valores que entraron como argumentos</strong>, siendo esta su característica más importante. Esta es la estructura:</p>
<p style="text-align: justify;"><code>program programa_muestra<br />
... sentencias e invocaciones de la surutina<br />
end program</code></p>
<p style="text-align: justify;"><code>subroutine nombre_subrutina(argumentos)<br />
declaración de tipo de los argumentos<br />
sentencias sobre los argumentos<br />
end subroutine</code></p>
<p style="text-align: justify;">nuevamente declaramos los tipos en el subprograma, con mayor razón por que esta vez trabajamos sobre ellos, un ejemplo similar al anterior es:</p>
<p style="text-align: justify;"><code>subroutine mayor(aL,bL)<br />
integer::aL,bL<br />
if (aL .ge. bL) then<br />
bL=aL<br />
else<br />
aL=bL<br />
end if<br />
end subroutine</code></p>
<p style="text-align: justify;">esta vez, dejamos ambos valores iguales, pero solo tomamos el mayor. La invocamos con:</p>
<p style="text-align: justify;"><code>call mayor(x,y)</code></p>
<p style="text-align: justify;">donde nuevamente <code>x</code> e <code>y</code> son nuestras variables enteras.</p>
<p style="text-align: justify;">Una pequeña observación con respecto a las subrutinas y funciones, es que los argumentos que toman los subprogramas con los que se declaran dentro del propio subprograma son relaciones uno a uno (inyectivas como decimos en matemáticas), que las variables deben conservar el orden deseado y del mismo tipo que se declararon, ya que si no se producen errores. Un ejemplo &#8220;gráfico&#8221; es:</p>
<p style="text-align: justify;"><img class="aligncenter size-medium wp-image-5384" src="http://www.glatelier.org/wp-content/uploads/2010/02/ejemplo-484x375.png" alt="" width="484" height="375" />donde la segunda llamada a la subrutina obviamente generará error. Amigos, este es el penúltimo post relacionado con Fortran, el próximo es sobre arrays y después de eso dejaría de ser programación para newbies porque ya deberían estar bien introducidos dentro del lenguaje xD</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-5-subprogramas/" data-text="Programación Para Newbies: Fortran 5: Subprogramas" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F02%2Fprogramacion-para-newbies-fortran-5-subprogramas%2F&amp;title=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%205%3A%20Subprogramas" id="wpa2a_12">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/02/programacion-para-newbies-fortran-5-subprogramas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué son los lenguajes dinámicos?</title>
		<link>http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/</link>
		<comments>http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 03:00:30 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[evaluación]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[lenguajes dinámicos]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[orientación a objetos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programar]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[terminologías]]></category>
		<category><![CDATA[tiempo de compilación]]></category>
		<category><![CDATA[tiempo de ejecución]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=5071</guid>
		<description><![CDATA[¡Hola, Lectores! Ustedes pudieron apreciar que yo uso lenguajes como PHP, Python y Ruby. Éstos tienen características especiales, por lo que se les llama &#8220;lenguajes dinámicos&#8221;. Pero, ¿cuál es la diferencia con un lenguaje estático?, más bien, ¿qué es lo que hace a estos lenguajes dinámicos? Cada lenguaje de programación tiene sus propias &#8220;terminologías&#8221;. Vale [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />¡Hola, Lectores!</p>
<p>Ustedes pudieron apreciar que yo uso lenguajes como PHP, Python y Ruby. Éstos tienen características especiales, por lo que se les llama &#8220;lenguajes dinámicos&#8221;. Pero, ¿cuál es la diferencia con un lenguaje estático?, más bien, ¿qué es lo que hace a estos lenguajes dinámicos?</p>
<p>Cada lenguaje de programación tiene sus propias &#8220;terminologías&#8221;. Vale decir, <strong>dependiendo de la manera en que cada lenguaje aborde un problema, crea un idioma para que los desarrolladores se comuniquen</strong>. Hay muchos ejemplos, pero no quiero confundirles, así es que les daré sólo uno: los lenguajes interpretados <strong>no tienen &#8220;tiempo de compilación&#8221;</strong>, porque el lenguaje <strong>no se compila</strong>. La idea es que un lenguaje de programación dinámico agregue todas estas características en tiempo de &#8220;ejecución&#8221;, no en tiempo de &#8220;compilación&#8221; o de &#8220;carga&#8221;.</p>
<p>La definición de un lenguaje dinámico es: todo aquel lenguaje que posea características que permitan alterar el curso del lenguaje de manera legítima, a través de la inyección de código o de la ejecución de funcionalidades especiales. Describiré, pues, algunas de las maneras de agregar dinamismo a un lenguaje de programación e intentaré explicarlas con pseudocódigo.</p>
<p><span id="more-5071"></span></p>
<p><a rel="attachment wp-att-5087" href="http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/php/"><img class="size-full wp-image-5087 alignright" src="http://www.glatelier.org/wp-content/uploads/2010/01/php.png" alt="Lenguaje de programación PHP" width="175" height="92" /></a></p>
<h2>1.- Evaluación de código</h2>
<p>Un lenguaje puede tener un mecanismo (una función <code>eval()</code> o una clase del tipo función) que permite &#8220;evaluar&#8221; (leer, corregir e implementar) código en el lenguaje que escribimos. Esto nos da mucha flexibilidad pero también conlleva a riesgos de seguridad, permitiendo a gente con malas intenciones escribir código que no queremos que se ejecute. Una utilidad de esto es aplicar un filtro a una función:</p>
<pre class="brush: php; title: ; notranslate">function recordsetfilter(Recordset $rs, $filter)
{
$newrs = new Recordset();
foreach($rs as $record)
{
$rec = new Record();
$rec = $record;
$rec-&amp;gt;setNombre(
eval($filter)
);
$newrs-&amp;gt;add($record)
}
return $newsrs;
}
// ... código que nos genera un Recordset

$rs = recordsetfilter($rs, 'strtoupper($this-&gt;getNombre())');
</pre>
<p>Las funciones de <strong>rango mayor</strong> son funciones que toman una o más funciones como una entrada y/o entregan una función como una salida. La misma función descrita arriba es una implementación pobre de la función <code>map()</code>, que toma <strong>una función y una lista o arreglo de elementos</strong>, y que retorna como resultado una lista con la función aplicada a cada elemento de la lista de entrada. PHP tiene una función llamada <code>usort()</code> que permite tomar una función de comparación y dependiendo de lo que esta función entregue, el algoritmo hace un ordenamiento.</p>
<h2>2.- Alteración del objeto en tiempo de ejecución</h2>
<p>Esto es un poco complejo, pero se refiere al cambio de la herencia del objeto.</p>
<p>Por ejemplo, tengo una clase <strong>automóvil</strong> que extiende a la clase <strong>vehículos</strong> y también a la clase <strong>bienes</strong>. El resultado de esta operación es que un automóvil puede ser <strong>acelerado</strong>, <strong>frenado</strong>, con el motor <strong>encendido</strong>, con el motor <strong>apagado</strong>; y además puede ser <strong>comprado</strong>, <strong>vendido</strong>, <strong>traspasado</strong> o efectuarse una <strong>tasación</strong> sobre éste.</p>
<h2>3.- Programación Funcional</h2>
<p>Me gustaría escribir un artículo completo relacionado con programación funcional. Es un tópico totalmente entretenido, aunque es difícil de comprender a la primera. La idea de la programación funcional es definir funciones matemáticas que luego se aplican sin importar su estado. Algo como esto en PHP.</p>
<pre class="brush: php; title: ; notranslate">&lt;php

$a = array(1, 2, 3, 4);
$i = 0;

foreach($a as $e)
{
$a[$i] = funcion1(funcion2($e));
$i++;
}

foreach($a as $e)
{
echo $e.' ';
}

?&gt;</pre>
<p>&#8230;puede ser escrito como esto:</p>
<pre class="brush: php; title: ; notranslate">funcion = lambda(funcion1, funcion2) { funcion1 ( funcion2 (x) ) }
destino = map(funcion(funcion1, funcion2), a)</pre>
<p>La idea es decir que <code>funcion()</code> toma como parámetros las funciones <code>funcion1()</code> y <code>funcion2()</code>, y definir que a un elemento x dado se le aplicará primero <code>funcion2()</code> y al resultado se le aplicará <code>funcion1()</code>, luego se puede mapear el arreglo a para aplicarle nuestra nueva función a cada uno de los elementos. Elementos propios de la programación funcional son los closures, las continuaciones y la reflexión de datos.</p>
<h2>4.- Macros</h2>
<p>Las macros permiten hacer introspección dentro del código y evaluación del mismo. Ruby provee la mayor parte de la funcionalidad de las macros a través de su sistema de orientación a objetos.</p>
<p><a rel="attachment wp-att-5090" href="http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/ruby/"><img class="size-full wp-image-5090 alignright" src="http://www.glatelier.org/wp-content/uploads/2010/01/ruby-e1263752984643.png" alt="" width="150" height="150" /></a></p>
<p>Recuerdo que decidí volver a utilizar Ruby cuando <a href="http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp" target="_blank">leí un artículo</a> que trataba precisamente de la diferencia entre las macros de LISP y la sintáxis natural de Ruby. (en inglés, pero fácil de leer).</p>
<p>Espero que esta densa explicación sea de utilidad para ustedes. Que les vaya bien y hasta otra entrega.</p>
<p>Ya saben, el castellano no es mi idioma nativo, así es que si tienen dudas o preguntas sobre algún párrafo, ¡háganmelas saber!</p>
<p>Auf Wiederlesen!</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/" data-text="¿Qué son los lenguajes dinámicos?" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;linkname=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fque-son-los-lenguajes-dinamicos%2F&amp;title=%C2%BFQu%C3%A9%20son%20los%20lenguajes%20din%C3%A1micos%3F" id="wpa2a_14">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/01/que-son-los-lenguajes-dinamicos/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Programación Para Newbies: Fortran 3: Estructuras de Control Condicionales</title>
		<link>http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-3-estructuras-de-control-condicionales/</link>
		<comments>http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-3-estructuras-de-control-condicionales/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 17:00:55 +0000</pubDate>
		<dc:creator>Felipe Portales</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[estructuras de control]]></category>
		<category><![CDATA[fortran]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=4961</guid>
		<description><![CDATA[Antes de empezar con lo nuevo, vamos a empezar con un pequeño repaso de lo que ya deberíamos haber aprendido. Nuestros programas ya deben hacer tareas básicas como sumar, restar, multiplicar, mostrar textos, todo de manera secuencial, un claro ejemplo de esto es el ya conocido ¡Hola Mundo!, que ya explicamos, por si olvidaron como [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Antes de empezar con lo nuevo, vamos a empezar con un pequeño repaso de lo que ya deberíamos haber aprendido.</p>
<p>Nuestros programas ya deben hacer tareas básicas como sumar, restar, multiplicar, mostrar textos, todo de manera secuencial, un claro ejemplo de esto es el ya conocido ¡Hola Mundo!, que ya explicamos, por si olvidaron como se hacía, aquí está el código fuente:</p>
<p><code>program hola<br />
print*,'¡Hola Mundo!'<br />
end program hola </code></p>
<p>o también nos pueden saludar:</p>
<p><code>program saludo<br />
character*10::nombre<br />
print*,'Ingrese por teclado su nombre:'<br />
read*,nombre<br />
print*,'Hola ',nombre<br />
end program </code></p>
<p>¿notaron que después del tipo de la variable nombre va un <code>*</code> seguido del número 10? eso es para denotar que las variables del tipo <code>character</code> declaradas en esta línea tienen un largo de 10 caracteres, si este indicador se omite se considera que la cadena de texto es de largo 1. Y así combinando las distintas sentencias y variables, podemos crear programas sencillos con distintas finalidades, ¿pero que pasa si queremos que el programa ejecute distintas opciones dependiendo de lo que pase con las variables?</p>
<p>Para eso existen las <strong>estructuras de control condicionales</strong>, el <code>if</code> y el <code>case</code>, muy distintas entre si. El nombre estructuras de control designa a distintos bucles en la programación que permiten modificar como se ejecuta el programa, dependiendo de las condiciones u orden de repetición que se le indique al programa.</p>
<p><span id="more-4961"></span>Estas funcionan de la siguiente manera, se activan cuando la condición que se les impone resulta ser verdadera, en caso contrario, se ejecuta una alternativa o se sigue adelante con el resto del programa.</p>
<p>Empecemos por la principal y más simple, el if:</p>
<p style="text-align: justify;">if significa &#8220;si es que&#8221;, por lo tanto es bien intuitivo su uso; <em>analiza una expresión, si resulta ser verdadera, entonces ejecuta este curso de acciones, en caso contrario, este otro curso</em>. La sintaxis más básica para esta estructura es la siguiente:</p>
<p style="text-align: justify;"><code>if (condición) then</code><br />
<em><code>lo que queremos que ocurra</code></em><br />
<code>end if</code></p>
<p style="text-align: justify;">Donde dice condición, va una sentencia lógica, esta debe ir siempre entre paréntesis. La forma más simple de mostrar esto es con un ejemplo e ir explicándolo:</p>
<p style="text-align: justify;"><code>program ejemplo_if<br />
integer::seleccion<br />
character*10::nombre<br />
print*,'¿es tu nombre Pablo?  [1=si, 2=no]'<br />
read*,seleccion<br />
if (seleccion==1) then<br />
print*,'¡Hola Pablo!'<br />
end if<br />
if (seleccion==2) then<br />
print*,'bah, ¿Cuál es tu nombre?'<br />
read*,nombre<br />
print*,'¡Hola ',nombre,'!'<br />
end if<br />
end program</code></p>
<p style="text-align: justify;">Este simple programa nos pregunta si nuestro nombre es Pablo, si le respondemos que no, entonces nos pregunta cual es nuestro nombre y después nos saluda.El == es el operador logico de equivalencia, aquí quiere decir si seleccion es igual a 1 o a 2 se ejecuten las distintas secuencias. También existe una opción para los entornos <code>if</code>, el <code>else</code>, este ejecuta una serie de acciones que nosotros determinamos si es que la condición original es falsa. Este va así:</p>
<p><code>if (condición) then</code><br />
<em><code>lo que queremos que ocurra si la condición es verdadera</code></em><br />
<code>else<br />
<em>lo que queremos que ocurra en caso contrario</em></code><br />
<code>end if</code></p>
<p style="text-align: justify;">usando el mismo ejemplo anterior:</p>
<p style="text-align: justify;"><code>program ejemplo_if<br />
integer::seleccion<br />
character*10::nombre<br />
print*,'¿es tu nombre Pablo?  [1=si, cualquier otro valor entero=no]'<br />
read*,seleccion<br />
if (seleccion==1) then<br />
print*,'¡Hola Pablo!'<br />
else<br />
print*,'bah, ¿Cuál es tu nombre?'<br />
read*,nombre<br />
print*,'¡Hola ',nombre,'!'<br />
end if<br />
end program</code></p>
<p style="text-align: justify;">reduce mucho el código.</p>
<p style="text-align: justify;">Si queremos realizar distintas acciones dependiendo de lo que se de en el programa, podemos anidar varios if&#8217;s dentro de otros, o también podemos usar la estructura case, la sintaxis de esta es un poco distinta pero igual es simple:</p>
<p style="text-align: justify;"><code>select case (variable a analizar)<br />
case (valor1)<br />
<em>acciones a ejecutarse si la variable toma el valor1</em><br />
case (valor2)<br />
<em>acciones a ejecutarse si la variable toma el valor2</em><br />
... así cuantas acciones queramos<br />
case default<br />
<em>acciones que se ejecutan en caso de que la variable no haya tomado ninguno de los valores antes especificados</em><br />
end select</code></p>
<p style="text-align: justify;">Tiene una trampa eso si, no se pueden usar variables del tipo <code>real</code> o <code>complex</code> para analizar con un case, deben ser o <code>integer</code>, o <code>logical</code> o <code>character</code>. Aquí tienen un ejemplo:</p>
<p style="text-align: justify;"><code>PRINT*,'¿Desea seguir analizando el polinomio dado? [1=Si, 2=No].'<br />
READ*,n<br />
SELECT CASE (n)<br />
CASE (1)<br />
PRINT*,'OK, sigo trabajando.'<br />
flag3=.FALSE.<br />
CASE (2)<br />
PRINT*,'OK, nos vemos :D'<br />
flag4=.FALSE.<br />
flag3=.FALSE.<br />
CASE default<br />
PRINT*,'¡ERROR!, ha ingresado un valor no válido.'<br />
flag3=.TRUE.<br />
END SELECT</code></p>
<p style="text-align: justify;">Aquí n es una variable entera. No les puedo dejar el programa completo ya que es muy extenso (créanme, muy extenso) y usa muchas cosas que todavía no les muestro.</p>
<p style="text-align: justify;">Para la próxima vez veremos otras estructuras, las repetitivas.</p>
<p style="text-align: justify;">
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-3-estructuras-de-control-condicionales/" data-text="Programación Para Newbies: Fortran 3: Estructuras de Control Condicionales" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;linkname=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-3-estructuras-de-control-condicionales%2F&amp;title=Programaci%C3%B3n%20Para%20Newbies%3A%20Fortran%203%3A%20Estructuras%20de%20Control%20Condicionales" id="wpa2a_16">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-3-estructuras-de-control-condicionales/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programación para Newbies: Fortran 2 &#8211; Tipos de Variables, Estructura, Sentencias y Compilando</title>
		<link>http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando/</link>
		<comments>http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 16:00:37 +0000</pubDate>
		<dc:creator>Felipe Portales</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Programación para Newbies]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[fortran]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=4869</guid>
		<description><![CDATA[Continuamos con Fortran. Vamos a introducirnos en los aspectos más básicos de la programación en este lenguaje. Tipos de Variables: Las variables son los ingredientes con los que trabajamos al programar, en Fortran existen 5 tipos de variables distintos: integer: integer es &#8220;entero&#8221; en inglés, por lo tanto las variables declaradas de este tipo son [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />
<p style="text-align: justify">Continuamos con Fortran. Vamos a introducirnos en los aspectos más básicos de la programación en este lenguaje.</p>
<p style="text-align: center"><span style="text-decoration: underline"><em><strong>Tipos de Variables:</strong></em></span></p>
<p style="text-align: justify">Las variables son los ingredientes con los que trabajamos al programar, en Fortran existen 5 tipos de variables distintos:</p>
<ol style="text-align: justify">
<li><code>integer</code>: integer es &#8220;entero&#8221; en inglés, por lo tanto las variables declaradas de este tipo son considerados números enteros, como el -1,01,2,3&#8230; o sea, <strong>sin cifras decimales</strong>. Es importante recalcar que las operaciones que se hagan entre números enteros, incluida la división, darán números enteros, por ejemplo 3+5=8, pero 3/5=0, o sea, solo conserva la parte entera del número resultante.</li>
<li><code>real</code>: Los números &#8220;reales&#8221;, no son precisamente Reales, ya que IR es continuo y algunos tienen infinitos decimales, etc, etc, por lo que son meras representaciones de estos, no fieles al extremo, sino lo suficientemente para trabajar con ellos. Existe también los reales de doble precisión</li>
<li><code>complex</code>: números complejos, se tratan como pares ordenados del tipo <em>(a,b)=a</em>+<em>ib</em> donde <em>i</em> es solución del polinomio <em>x</em>²+1=0 (raíz cuadrada de <em>-1</em>).</li>
<li><code>logical</code>: son variables binarias, o sea, solo toman dos valores posibles: verdadero (<code>.true.</code>) o falso (<code>.false.</code>)</li>
<li><code>character</code>: son variables que contienen caracteres, o sea, letras, también conocidas como cadenas de texto.</li>
</ol>
<p style="text-align: justify"><span id="more-4869"></span></p>
<p style="text-align: justify">Para usar una variable, no es necesario declararla al principio del programa, pero el compilador decide el tipo de variable basado en la letra inicial del nombre que se le de, para evitar esto, lo mejor es declarar al principio del programa el tipo de variable, esto se hace de la siguiente manera:</p>
<p style="padding-left: 30px;text-align: justify"><code>integer::k,i,j,entero,lola<br />
real::empiezo,pi<br />
pi=3.14159<br />
k=8<br />
empiezo=5.</code></p>
<p style="text-align: justify">como ven, la sintaxis para declarar variables es: <code>tipo::variable1,variable2...</code>. A los distintos tipos de variables es posible añadirles opciones, las iremos revisando en cuanto sea pertinente.</p>
<p style="text-align: justify">Los nombres de variable pueden tener una extensión máxima de 32 caracteres, pueden contener únicamente letras y números, empezando por una letra, no se distinguen entre mayúsculas y minúsculas.</p>
<p style="text-align: center"><span style="text-decoration: underline"><em><strong>Estructura de un programa en Fortran:</strong></em></span></p>
<p style="text-align: justify">Dentro de la programación en Fortran lo más primero que <strong>debemos</strong> tener en cuenta es la estructura básica del programa en si, esta va de la siguiente manera:</p>
<p style="padding-left: 30px;text-align: justify"><code>program nombredelprograma</code><br />
<em>declaración de variables<br />
sentencias, el programa en si</em><br />
<code>end program</code><br />
<em>subprogramas</em></p>
<p style="text-align: justify">Otra cosa que debemos considerar es que el computador es &#8220;tonto&#8221;, en el sentido que uno debe especificarle exactamente lo que se quiere hacer, este es un punto muy importante para tener en cuenta al empezar a programar. En Fortran, la programación es secuencial, con lo que quiero decir que el orden de los factores altera el producto, por ejemplo si escribimos:</p>
<p style="padding-left: 30px;text-align: justify"><code>k=2<br />
k=k+1<br />
print*,k</code></p>
<p style="text-align: justify">es muy distinto de poner:</p>
<p style="padding-left: 30px;text-align: justify"><code>k=k+1<br />
print*,k<br />
k=2</code></p>
<p style="text-align: justify">por lo tanto debemos organizar bien las acciones que queremos ejecutar.</p>
<p style="text-align: center"><span style="text-decoration: underline"><em><strong>Sentencias fundamentales<br />
</strong></em></span></p>
<p style="text-align: justify">Básicamente tenemos que aprender a decirle al computador que es lo que queremos que haga, y la manera que queremos que lo haga, para esto son necesarias distintas ordenes intrínsecas al lenguaje, las palabras y caracteres reservados, osea, palabras que ejecutan una acción en especial.<br />
Las más básicas son:</p>
<p style="text-align: justify;padding-left: 30px"><code>program</code>: es la sentencia inicial; se usa para nombrar el programa, por ejemplo: <code>program nombre_programa</code>.</p>
<p style="text-align: justify;padding-left: 30px"><code>end program</code>: se coloca al final, indica el fin del programa.</p>
<p style="text-align: justify;padding-left: 30px"><code>print</code>: esta sentencia nos muestra lo que viene a continuación de la coma, por ejemplo: <code>print*,k</code> nos mostrará el valor de la variable k, o <code>print*,'cadena de texto'</code> nos mostrará en pantalla &#8220;cadena de texto&#8221;.</p>
<p style="text-align: justify;padding-left: 30px"><code>read</code>: permite la entrada por teclado de una o múltiples variables, la sintaxis es: <code>read*,variable1,variable2,...</code></p>
<p style="text-align: justify;padding-left: 30px"><code>implicit none</code>: va al principio de la declaración de variables, obliga al compilador a errojar un mensaje de error y a abortar la compilación si detecta el uso de una variable que no ha sido declarada (muy útil, la uso siempre).</p>
<p style="text-align: justify;padding-left: 30px"><code>!</code>: hace que el resto de la línea sea considerada comentario, así el compilador la omite.</p>
<p style="text-align: justify;padding-left: 30px"><code>;</code>: el <code>;</code> (punto coma) se usa para terminar la línea, por ejemplo: <code>k=2 ; k=k+1 ! a la variable se le da el valor 2 y después se le suma 1</code>.</p>
<p style="text-align: justify;padding-left: 30px"><code>+,-,*,/,**</code>: suma, resta, multiplicación, división y exponenciación respectivamente.</p>
<p style="text-align: justify;padding-left: 30px"><code>=</code>: declara una variable.</p>
<p style="text-align: justify;padding-left: 30px"><code>.true. , .false.</code>: valores de verdadero o falso (sólo variables lógicas).</p>
<p style="text-align: justify">El resto de sentencias importantes las iré explicando en cuanto las usemos.</p>
<p style="text-align: justify">Les dejaré un pequeño programa para que vallan viendo cómo va la cosa:</p>
<p style="text-align: justify">
<div class="mceTemp mceIEcenter" style="text-align: justify">
<dl>
<dt><img class="size-medium wp-image-4893" src="http://www.glatelier.org/wp-content/uploads/2010/01/Pantallazo-circunferencia.f95-Fortran-gedit-504x375.png" alt="" width="504" height="375" /></dt>
<dd>Programa en Fortran</dd>
</dl>
</div>
<p style="text-align: justify">
<p style="text-align: justify">Este pequeño programa nos da el perímetro y el área que cubre una circunferencia pidiéndonos el radio.</p>
<p style="text-align: justify">Si prefieren aquí también les dejo el clásico &#8220;Hola Mundo!&#8221;:</p>
<p style="padding-left: 30px;text-align: justify"><code>program holamundo<br />
print*,'¡Hola Mundo!'<br />
end program</code></p>
<p style="text-align: justify">lo únco que deben hacer para ver su ¡hola mundo! es guardarlo en un archivo con extensión .f95 y compilarlo&#8230; OH WAIT!, todavía no les digo cómo compilar xD</p>
<p style="text-align: center"><span style="text-decoration: underline"><strong><em>Compilando un Programa</em></strong></span></p>
<p style="text-align: justify">Como supongo que ya instalaron el compilador de Fortran de GNU (gfortran), voy a dar las instrucciones para compilar su código, desde ahora nos meteremos en una terminal y lo primero será navegar hasta la localización del archivo fuente;</p>
<p style="text-align: justify">La manera más natural de compilar es usando únicamente el comando gfortran seguido del nombre del archivo, así: <code>$ gfortran nombrearchivo.f95</code> esto nos produce un ejecutable de nombre <code>a.out</code>, pero&#8230; ¿y si queremos que salga con otro nombre?, bueno simplemente con la opción <code>-o</code> se logra esto, entonces la sintaxis sería: <code>$ gfortran nombrearchivo.f95 -o nombreejecutable</code>. Y por último si solamente queremos verificar que no existan errores de sintaxis podemos usar la opción <code>-fsyntax-only</code>, en el  teminal escribimos: <code>$ gfortran -fsyntax-only archivofuente.f95</code>.</p>
<p style="text-align: justify">Eso es todo por esta semana, ¿bien extenso el post ah?.</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando/" data-text="Programación para Newbies: Fortran 2 - Tipos de Variables, Estructura, Sentencias y Compilando" data-count="horizontal">Tweet</a><p><a class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Twitter" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a><a class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Facebook" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Delicious" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a><a class="a2a_button_digg" href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Digg" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a><a class="a2a_button_meneame" href="http://www.addtoany.com/add_to/meneame?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Meneame" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/meneame.png" width="16" height="16" alt="Meneame"/></a><a class="a2a_button_google_reader" href="http://www.addtoany.com/add_to/google_reader?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Google Reader" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/reader.png" width="16" height="16" alt="Google Reader"/></a><a class="a2a_button_tumblr" href="http://www.addtoany.com/add_to/tumblr?linkurl=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;linkname=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" title="Tumblr" rel="nofollow" target="_blank"><img src="http://www.glatelier.org/wp-content/plugins/add-to-any/icons/tumblr.png" width="16" height="16" alt="Tumblr"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.glatelier.org%2F2010%2F01%2Fprogramacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando%2F&amp;title=Programaci%C3%B3n%20para%20Newbies%3A%20Fortran%202%20%26%238211%3B%20Tipos%20de%20Variables%2C%20Estructura%2C%20Sentencias%20y%20Compilando" id="wpa2a_18">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/01/programacion-para-newbies-fortran-2-tipos-de-variables-estructura-sentencias-y-compilando/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

