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

<channel>
	<title>Con G de GNU &#187; Software</title>
	<atom:link href="http://www.congdegnu.es/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.congdegnu.es</link>
	<description>aptitude install freedom</description>
	<lastBuildDate>Sat, 28 Jan 2012 19:22:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<copyright>2006-2007 </copyright>
	<managingEditor>congdegnu@gmail.com (Con G de GNU)</managingEditor>
	<webMaster>congdegnu@gmail.com (Con G de GNU)</webMaster>
	<image>
		<url>http://www.congdegnu.es/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Con G de GNU</title>
		<link>http://www.congdegnu.es</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>aptitude install freedom</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>Con G de GNU</itunes:author>
	<itunes:owner>
		<itunes:name>Con G de GNU</itunes:name>
		<itunes:email>congdegnu@gmail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.congdegnu.es/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Haz que tu sistema de ficheros &#8220;vuele&#8221; montándolo en la RAM</title>
		<link>http://www.congdegnu.es/2011/10/08/haz-que-tu-sistema-de-ficheros-vuele-montandolo-en-la-ram/</link>
		<comments>http://www.congdegnu.es/2011/10/08/haz-que-tu-sistema-de-ficheros-vuele-montandolo-en-la-ram/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 12:07:58 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[disco]]></category>
		<category><![CDATA[disco duro]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[ram]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1347</guid>
		<description><![CDATA[Hoy seré breve, o por lo menos lo intentaré. El caso es que necesitaba acceso masivo al disco duro para un procesamiento en lote de archivos de texto bastante grandes (quien me siga en twitter verá que el otro día lo mencioné ). El proble ma no eran los archivos en sí mismos ya que [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy seré breve, o por lo menos lo intentaré. El caso es que necesitaba acceso masivo al disco duro para un procesamiento en lote de archivos de texto bastante grandes (quien me siga en twitter verá que el otro día lo mencioné <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p><div class="wp-caption alignright" style="width: 168px"><img src="http://brico-garden.com/Hormigonera.jpg" alt="Hormigonera" width="158" height="161" /><p class="wp-caption-text">El ruido del disco duro era semejante al de esta maquina mezclando hormigón</p></div></p>
<p>El proble ma no eran los archivos en sí mismos ya que mediante buffers que gestiona el propios sistema operativo se consigue un rendimiento excelente, sino por la base de datos mysql. En mi caso, hacía currar a la base de datos de tal manera (con updates, inserts y selects constantes) que el disco duro parecía una hormigonera. Después de estimar el tiempo total de procesamiento en 6 horas pensé que eso le iba a hacer mucha pupa al disco duro duro (además del evidente cuello de botella) y que había que hacer algo. Entonces me dije: &#8220;Quiero almacenar los datos en algo que no haga ruido y si es posible que sea rápido&#8221; y eso amigos, es precisamente la memoria RAM. Así que vamos al tema.</p>
<p><span id="more-1347"></span>Lo bueno de usar este método es que no tienes que tocar nada ni de mysql ni de tu programa, ya que para ellos será un dispositivo de almacenamiento estándar. Ahora prepárate un café porque esto va a ser complicado.</p>
<pre>            mount -t tmpfs none /media/ramdisk</pre>
<p>Ya está, ahora tienes en el directorio /media/ramdisk montada tu memoria RAM. Por supuesto, se reserva sólo una parte ya que el sistema necesita disponer de memoria para funcionar.<br />
En mi caso, copié /var/lib/mysql a /media/ramdisk y luego un enlace simbólico para que mysql accediera a ello sin configurar nada.<br />
Si quieres saber exactamente cuanto espacio tienes puedes usar el comando:</p>
<pre>            df -h</pre>
<p>Te mostrará algo como esta línea (junto al resto de sistemas de ficheros montados)</p>
<pre>            none                  1,7G  384M  1,3G  24% /media/ramdisk</pre>
<p>Dispongo de 1,7GigaBytes de almacenamiento en memoria RAM (384 megas usados). Recueda que <strong>es muy importante</strong> guadar luego esos archivos en tu disco duro porque la memoria RAM no es  persistente y todo lo que haya se volatilizará cuando se demonte. En mi caso el tiempo de  ejecución del programa paso de unas 6 horas a poco más de 45 minutos, y  eso que mi memoria es lenta (667mhz) además de no hacer ningún ruido. Para casos o situaciones  concretas este método puede sernos muy útil, incluso he visto casos de  un servidor donde hasta los archivos estáticos (css, js, imagenes&#8230;)  estaban cargados en memoria. Si tenemos en cuenta que en un ordenador <strong>todo</strong> pasa por la memoria y que el disco duro es con diferencia el  dispositivo más lento (y delicado), se pueden obtener tiempos muy buenos  en sistemas críticos (ej. una web con millones de visitas). El problema  está cuando trabajamos con datos (que pueden cambiar, algo bastante común) y que nunca  estarán a salvo hasta que lo volquemos a un disco duro. Para esos casos ya existen las cachés que en el fondo es copiar en memoria aquellas cosas de sólo lectura mientras mientras que los cambios se guardan al momento y posteriormente se actualiza esa caché.</p>
<div class="shr-publisher-1347"></div>

<p>Entradas relacionadas:<ol><li><a href='http://www.congdegnu.es/2009/03/11/borra-tus-ficheros-de-manera-definitiva/' rel='bookmark' title='Permanent Link: Borra tus ficheros de manera definitiva'>Borra tus ficheros de manera definitiva</a> <small>Muchos somos conscientes de que borrar un archivo no implica...</small></li>
<li><a href='http://www.congdegnu.es/2009/02/08/eliminar-espacio-reservado-en-ext/' rel='bookmark' title='Permanent Link: Eliminar espacio reservado en ext'>Eliminar espacio reservado en ext</a> <small>Cuando formateamos una unidad en el sistema de ficheros ext,...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2011/10/08/haz-que-tu-sistema-de-ficheros-vuele-montandolo-en-la-ram/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NoSQL: No es oro todo lo que reluce</title>
		<link>http://www.congdegnu.es/2011/01/31/nosql-no-es-oro-todo-lo-que-reluce/</link>
		<comments>http://www.congdegnu.es/2011/01/31/nosql-no-es-oro-todo-lo-que-reluce/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 17:34:19 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[bigtable]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[datos]]></category>
		<category><![CDATA[db]]></category>
		<category><![CDATA[db2]]></category>
		<category><![CDATA[firebird]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hbase]]></category>
		<category><![CDATA[mongo]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[postresql]]></category>
		<category><![CDATA[relacional]]></category>
		<category><![CDATA[sgbd]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1247</guid>
		<description><![CDATA[Muy buenas! Seguro que más de uno ha oído hablar de las bondades de las bases de datos llamadas &#8220;nosql&#8221;. Yo también y la verdad es que me intrigaba mucho así que me puse a analizarlo fríamente. Todos los benchmarks y comentarios de la gente dan como absoluto ganadador a las &#8220;nosql&#8221;, obligando al destierro [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.congdegnu.es/wp-content/uploads/2011/01/nosql.png"><img class="size-full wp-image-1248 alignright" src="http://www.congdegnu.es/wp-content/uploads/2011/01/nosql.png" alt="NoSQL, o tal vez sí?" width="278" height="306" /></a></p>
<p>Muy buenas! Seguro que más de uno ha oído hablar de las bondades de las bases de datos llamadas &#8220;nosql&#8221;. Yo también y la verdad es que me intrigaba mucho así que me puse a analizarlo fríamente. Todos los benchmarks y comentarios de la gente dan como absoluto ganadador a las &#8220;nosql&#8221;, obligando al destierro a las bases de datos relacionales. Después de analizar qué es cada cosa y las necesidades reales he llegado a una conclusión: <strong>Nada más lejos de la realidad</strong>. Intentaré explicar lo mejor posible mis razonamientos, quizá de manera demasiado abstracta, del por qué las &#8220;nosql&#8221; no son la panacea. No obstante, esto es mi opinión y alguien puede pensar que sólo digo chorradas o que en algún aspecto estoy totalmente confundido. Si es así, me gustaría saberlo ya que mi intención siempre es aprender más y nunca imponer mis ideas. Pero siempre desde el <a href="http://www.eljueves.es/2010/12/31/troll_internet%E2%80%A6_discute_con_autor_blog.html">respeto</a> <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <span id="more-1247"></span>Lo primero de todo y de las cosas que más rabia me da es que la mayoría de los benchmarks (muchos son más bien pruebecillas que hace alguien en 10 minutos) miden sólo el <em>tiempo</em> que tarda en<em> leer n entradas o en insertar otras tantas</em>. Bien, ahí la verdad es que las <em>nosql son muy rápidas</em> pero pensemos un poco: <strong>¿qué base de datos se centra exclusivamente en esas tareas?</strong> Muy pocas y en casos muy concretos. Normalmente obtener información no es simplemente meter la mano en un cubo y sacarla sino que es algo más complejo. Esta complejidad  se trata de abordar mediante lo que las bases de datos relacionales llaman <strong>relaciones</strong>.</p>
<p>Por ejemplo, tengo una base de datos en la cual quiero saber cuanta gente es de cada país. Con<strong> una sóla consulta sql</strong> lo tengo mientras que con una nosql tengo que hacer, el mejor de los casos, <strong>tantas consultas como</strong> países haya. Ahora dime cuanto tiempo has tardado en hacer todas las consultas. A eso hay que sumarle que estás <em>acoplando</em> tu base de datos a la aplicación, ya que será la aplicación quien mediante funciones propias recorrerá y hará las tareas pertinentes (con su pérdida de eficiencia). Otro factor muy importante son las <em>técnicas y estrategias</em> con las que cuenta un <a href="http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_bases_de_datos">sgbd</a> relacional. Mediante estas técnicas es capaz de acelerar las consultas ya que, como sabe lo que quieres, trata de conseguirlo de la mejor manera posible.  Estas estrategias de optimización son imposibles en una nosql, ejecutarás todas y cada una de las consultas. De esta manera el tiempo total crecerá (en los mejores casos) de manera lineal frente al número de entradas mientras que en una relacional el crecimiento sería bastante más logarítmico.</p>
<p><div id="attachment_1250" class="wp-caption alignleft" style="width: 410px"><a href="http://www.congdegnu.es/wp-content/uploads/2011/01/completo.png"><img class="size-full wp-image-1250 " src="http://www.congdegnu.es/wp-content/uploads/2011/01/completo.png" alt="Cojunto de SGBD Relacionales" width="400" height="200" /></a><p class="wp-caption-text">Cojunto de SGBD Relacionales, los hay de todos los colores. Aunque si sabes SQL podrás manejarte con cualquiera de ellos.</p></div></p>
<p>Al usar una <strong>nosql</strong> estamos <strong>renunciando</strong> a un montón de <strong>funcionalidades</strong>. Todo aquel que haya trabajado a un nivel un poco avanzado con bases de datos relacionales será consciente de que hacer una consulta SQL tiene por qué se trivial: cuentas con un montón de posibilidades y hay que encontrar la mejor. Tenemos joins (unir tablas en base a relaciones entre ellas), conjuntos de datos (group by), un completo manejo de fechas (intervalos, sumas, restas, comparaciones&#8230;),<em> integridad de los datos, </em>transacciones, excepciones&#8230; un sin fin de posibilidades. Tarde o temprano te tocará hacer algo más que leer y escribir datos, y esa tarea la tendrá que hacer tu aplicación (java, php&#8230;). En ese momento, justo en ese momento la eficiencia de tu programa caerá por los suelos y todos los milisegundos que has creído ganar te están saliendo caros. Muy caros. Imagina una web donde quieras consultar un trayecto para un día concreto, a unas determinadas horas y que el tren (o lo que sea) pase por unas determinadas estaciones. Hacerlo con una nosql sería realmente <em>doloroso</em> y totalmente inviable.</p>
<p>También existen detalles más concretos como el que voy a comentar. Las nosql no proporcionan ninguna garantía <a href="http://es.wikipedia.org/wiki/ACID">ACID</a>. Por decirlo de manera simple, un sistema ACID cuando dice que un dato se ha guardado, se ha guardado. Ya pueden pasar cualquier cosa que no vas a perder esa información. En cambio, las nosql te pueden decir que ya han guardado el dato pero todavía lo tienen por ahí en memoria de manera temporal y si en ese momento pasa algo &#8220;extraño&#8221; (se va la luz y el ordenador para, por ejemplo) el dato puede que no se haya guardado (aunque tu pienses que si porque te lo ha &#8220;asegurado&#8221;) y en ese caso habrás perdido ese dato para siempre. Alguno pensará que esto es una chuminada pero ya me dirás que pasa si surge algún problema de este tipo cuando te ingresen la nómina <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Otro tema realmente importante es la <strong>integridad de los datos</strong>. Esto viene a ser que la información que hay en la base de datos sea útil y verídica. Por ponernos en situación, imagina que tienes una base de datos con autores y libros que han escrito.  En un determinado momento, borras a un autor pero sus libros quedan en la base de datos. ¿A quién pertenecerán ahora esos libros? Tenemos datos que no nos son útiles, sabemos que existen pero&#8230; hay muchas lagunas. Otro caso parecido es intentar meter un libro sin indicar su autor. Podemos exigir que todo libro tenga su autor a la hora de insertarlos pero nada nos permitiría saltarnos esta &#8220;restricción&#8221; en una nosql. Todo esto queda delegado a la aplicación, con todos los inconvenientes que trae. Una buena base de datos es aquella que vela por su integridad. Si unos datos no son fiables, esa información no vale nada. <strong>Los datos lo son todo en una base de datos</strong>.</p>
<p>Por supuesto no estoy diciendo que las nosql son algo que se debería quemar o guardar en un cajón ni mucho menos. Se diseñaron con un objetivo en mente y la verdad es que lo cumplen muy bien. Este objetivo es el que dije al principio y es <em>insertar muchos datos y acceder a ellos muy rápido</em>, y estos datos no deben ser complejos. <em>Facebook</em> o <em>Twitter</em> dicen que utilizan <a href="http://cassandra.apache.org/">Cassandra</a> (una base de datos tipo &#8220;nosql&#8221;) y es normal, ahora te explico. Twitter consiste en insertar mensajes y ver los últimos. Por así decirlo, vas metiendo en un cubo cientos de mensajes y lo único que haces es &#8220;ver&#8221; los que están por encima. Este es un caso donde una nosql sería lo óptimo. No hay relaciones complejas y el orden viene definido por el orden de inserción (recordemos que ordenar es de las tareas más duras en informática). En Facebook es algo diferente. No puedo decirlo a ciencia cierta, pero aseguraría que no usan (ni tienen pensado hacerlo) una nosql para toda su base de datos. Los casos ideales es en sitios como <em>el muro</em> o comentarios de fotos. El motivo es lo mismo que en caso de twitter. Para el resto, no me cabe la menor duda de que usan algun tipo de base de datos relacional.</p>
<p><div id="attachment_1251" class="wp-caption alignright" style="width: 260px"><a href="http://www.congdegnu.es/wp-content/uploads/2011/01/completo1.png"><img class="size-full wp-image-1251" src="http://www.congdegnu.es/wp-content/uploads/2011/01/completo1.png" alt="SGBD &quot;nosql&quot;" width="250" height="120" /></a><p class="wp-caption-text">Son bastantes diferentes entre sí pero genéricamente se les puede llamar &quot;nosql&quot;</p></div></p>
<p>Tarde o temprano se hace alguna <strong>relación</strong> entre los <strong>datos</strong> y si esa relación la gestiona el SGBD mucho mejor que manejarlo nosotros a mano. Sinceramente, no me imagino a Facebook haciendo 3 o 4 consultas y luego desde php comprobar las coincidencias para buscar &#8220;amigos en común&#8221; (de listas enormes). O la alternativa, que sería un trabajo mínimo en php pero una cantidad de consultas exponencial (ambas opciones son totalmente inviables). La única opción donde tendría alguna posibilidad es mediante de la redundancia de datos. Pero la redundancia sería tal que el tamaño de la base de datos sería monstruoso, y toda la velocidad que ganas por ser más rápida podrías perderla por la &#8220;distancia&#8221; tan grande que tocaría recorrer.</p>
<p>Sin embargo, todas estas limitaciones de las nosql tienen otras ventajas (además de la velocidad). Estas bases de datos son excelentes para sistemas distribuidos y ahora que todo tiende a ponerse &#8220;<a href="http://es.wikipedia.org/wiki/Computaci%C3%B3n_en_nube">en la nube</a>&#8221; se pueden aprovechar desde ese punto de vista. Eso es lo que hace que google ofrezca <a href="http://en.wikipedia.org/wiki/BigTable">BigTable</a> en <a href="http://en.wikipedia.org/wiki/Appengine">AppEngine</a> (un servicio de hosting). Sin despeintarte puedes tener funcionando un sistema distribuido en tantos nodos como quieras. Esta tarea es bastante más compljea en una db relacional, precisamente por el tema de las relaciones.</p>
<p>Podría simplificar todo esto en una frase: La diferencia entre una db relacional y una nosql es como aquel que le quita los asientos a su coche para que corra más. Correrá más, pero pierdes prestaciones.</p>
<p>Aunque más bien lo relacionaría las churras y las merinas. Se parecen pero son muy diferentes. Pues lo mismo con db relacionales y &#8220;nosql&#8221;, las dos &#8220;guardan datos&#8221; pero su finalidad es muy diferente. Y como siempre, queda a criterio del diseñador usar una herramienta u otra (o las dos a la vez).</p>
<p>Para terminar, muchos pensarán que he escogido ejemplos concretos para intentar &#8220;machacar&#8221; a las nosql. Es cierto, y el motivo es para dar a entender que una base de datos nosql no puede sutituir a una base de datos relacional si lo que tenemos son datos altamente relacionados entre sí. No existen productos milagrosos, todo tiene sus contras. No existe (ni existirá) un sistema gestor de bases de datos (ni ningún software ni cosa en el mundo) que se comporte a la perfección en cualquier situación.</p>
<p>Un saludo y espero que alguien esté es desacuerdo, para así debatir y enriquecer el post un poco <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
<div class="shr-publisher-1247"></div>

<p>Entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2011/01/31/nosql-no-es-oro-todo-lo-que-reluce/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Qué, porqué y cómo del XMPP por BOSH</title>
		<link>http://www.congdegnu.es/2010/04/10/que-porque-como-xmpp/</link>
		<comments>http://www.congdegnu.es/2010/04/10/que-porque-como-xmpp/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 09:00:09 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[binding]]></category>
		<category><![CDATA[bosh]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[mensajeria]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1164</guid>
		<description><![CDATA[Si estás leyendo esto seguro que alguna vez has utilizado un &#8220;chat&#8221;. Los encontramos de las maneras más variopintas, desde desde simples chats de dos personas (punto a punto se podría llamar), en páginas webs con decenas de personas, el ya bastante obsoletillo IRC, el malvado MSN Messenger&#8230;. alguno incluso habrá infectado a alguien con [...]]]></description>
			<content:encoded><![CDATA[<p>Si estás leyendo esto seguro que alguna vez has utilizado un &#8220;chat&#8221;. Los encontramos de las maneras más variopintas, desde desde simples chats de dos personas (punto a punto se podría llamar), en páginas webs con decenas de personas, el ya bastante obsoletillo IRC, el malvado MSN Messenger&#8230;. alguno incluso habrá infectado a alguien con un troyano el cual trae una herramienta de chat para hablar con tu víctima. Como ves, existen infinidad de herramientas y cada una con sus normas y sus características. Yo os voy a hablar del sistema definitivo, un sistema potente, estandar y sobre todo libre. Saludemos a XMPP.</p>
<p><span id="more-1164"></span></p>
<p>¿Qué es XMPP y por qué usar XMPP?</p>
<p>Es un protocolo. Como a muchos eso os dejará igual voy a tratar de explicar que es esto y te darás cuenta del por qué es necesario que sea libre.</p>
<p>En informática un protocolo son una serie de normas para que dos máquinas sean capaces de entenderse. Esto nos da la posibilidad de que dos (o más) máquinas (o programas dentro de una máquina) puedan compartir información, dialogar entre ellas, discutir y llegar a acuerdos, etc. Sí, las máquinas hablan entre ellas, y mucho. Son unas cotorras de tomo y lomo lo que pasa es que no nos damos cuenta. Nosotros sólo vemos el resultado de toda era &#8220;burocracia&#8221; entre máquinas. Aquellos que nos siguen desde hace bastante igual se acuerdan de la dramatización que hicimos sobre el protocolo DNS, pues esto es igual. Cuando dos máquinas conocen el protocolo son capaces de trabajar conjuntamente pero si una usa un protocolo extraño pues le costará encontrar otras máquinas con la que trabajar. Un símil entre protocolo y cerrado y abierto con la realidad sería el siguiente. Quieres aprender un idioma, vas a una academia donde te dan unas clases pero tienes la posibilidad de ir a la biblioteca pública y coger libros para aprenderlo mejor. También puedes buscar por internet e incluso preguntar a gente que gustosamente te ayudará (siempre y cuando no seas muy cansino claro <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ). En resumidas cuentas, nadie te pondrá trabas a que aprendas ese idioma.</p>
<p>En cambio, si quieres aprender un idioma pero para conocerlo tienes que entrar en una secta y no hay ningún libro ni persona fuera de esa secta que habla sobre el idioma pues lo vas a tener bastante complicado. Esto equivale a un protocolo cerrado.</p>
<p>Quizá te ronda por la cabeza que ¿Quién en su sano juicio querría usar un protocolo cerrado? Pues en su sano juicio supongo que muy pocos pero el problema es que los usamos sin saberlo (la ignorancia, ese gran arma de los &#8220;poderosos&#8221;). Como estamos hablando de protocolos de mensajería instantánea os voy a poner un ejemplo de este tipo que seguro que conoces: MSN Messenger. Es un protocolo cerrado y sucio. También si te hablo de uno que usa XMPP igual te suena, GTalk. Podría iniciar un flame war diciendo lo malos que son los de Microsoft y lo bien que me caen los de Google pero eso ya para otro día.</p>
<p>Una duda que puede surgir es que si el protocolo de MSN Messenger es cerrado, ¿Cómo hay tantos programas libres ajenos a la secta que lo &#8220;entienden&#8221;? En informática esto se llama ingeniería inversa. Consiste en capturar mensajes y volver a enviarlo. observar qué pasa y al cabo de muchas horas ir comprendiendo cómo funciona. Un símil sería como irte a china sin saber nada de chino. Con el tiempo acabarás aprendiendo el idioma (que remedio) relacionando palabras que dicen con acciones que hacen luego. Nunca aprenderás chino como si te explicaran la gramática y todo eso, pero acabarás aprendiendo lo suficiente como para manejarte. Y con el ejemplo de la secta, como un día se le ocurra cambiar cosas del idioma nos han fastidiado. Nos toca volver a hacer todo el trabajo.</p>
<p>Requiere de mucho más tiempo comprender un protocolo de esos que hacer un programa que use el protocolo. De ahí que sea tan importante que el protocolo sea libre, que a nadie le gusta perder el tiempo.</p>
<p>Todo esto de poner facilidades para que los demás te entiendan puede llevar a otra cuestión. ¿Y si no quiero que nadie sepa lo que estoy comunicando? Por ejemplo, yo no quiero que sepan lo que hablo con la gente. Me alegra que me hagas esa pregunta <img src='http://www.congdegnu.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
Eso no forma parte del protocolo sino del canal. No voy a explicarlo porque no viene a cuento pero la solución es usar un canal seguro que en resumidas cuentas en cifrar la información. He de decir que el que un protocolo sea cerrado no es sinónimo (ni mucho menos) de seguridad. La información viaja intacta. Mientras el protocolo cerrado de microsoft es totalmente inseguro (ya que no va cifrado) el xmpp siendo libre es totalmente seguro ya que sí va cifrado. Esto lo demostramos un día cuando crackeamos nuestro wifi y sabíamos lo que hablaba por el messenger. Eso con xmpp no hubiera sido posible (cuantas referencias estoy haciendo hoy). Creo que han quedado explicados los puntos &#8220;Qué es&#8221; y &#8220;Por qué usarlo&#8221;. Pasemos a centrarnos en XMPP.</p>
<p>Cómo funciona XMPP</p>
<p>XMPP funciona a base de enviar XML. XML es una manera estándar de enviar información y que a día de hoy está hasta en la sopa aunque, de nuevo, no nos demos cuenta. Por ejemplo, el HTML (lo de las páginas web) es XML. Voy a explicar brevemente como va esto del XML (es realmente sencillo)<br />
<code><br />
&lt;cosa atributo1=valor1&gt;Cotenido&lt;/cosa&gt;<br />
</code><br />
la palabra &#8220;cosa&#8221; se denomina tag e indica el tipo de elemento que es. El resto de campos son bastantes intuitivos. Un ejemplo real de mensaje XMPP sería el siguiente<br />
<code><br />
&lt;message from="maxpowel@wixet.com" to="prueba@wixet.com"&gt;Ey tío que pasaaaa&lt;/message&gt;<br />
</code><br />
Sobra explicarlo pero esto envía un mensaje de maxpowel@wixet.com a prueba@wixet.com con el contenido &#8220;Ey tío que pasaaa&#8221;</p>
<p>En XMPP existen 3 tipos de elementos diferentes: message, presence e iq<br />
<strong>Message: </strong>Son los mensajes que se envían los usuarios entre sí.<br />
Presence: Los eventos de presencia de usuarios. Cuando se desconectan o conectan, cuando cambian de estado, de nombre&#8230;.<br />
Iq: Sirve para enviar comandos internos. Por ejemplo para iniciar una nueva conexión, informar de errores y cosas que no tienen nada que ver con los usuarios.</p>
<p>Pero antes de poder conectarte te tienes que conectar, verdad? Eso se hace al principio (qué listo) y en este proceso el cliente y el servidor negocian a través del protocolo cómo se sincronizarán, el cifrado que usarán y todas esas cosas.</p>
<p>En el título comentaba algo de BOSH. Eso de BOSH es una pasarela para poder establecer una conexión a un servidor XMPP desde HTTP. Esto es necesario por lo siguiente.<br />
XMPP es una conexión persistente. Se mantiene la conexión desde el principio hasta el final, y mientras se envían todos los mensajes que quieran.<br />
HTTP es una conexión de petición y respuesta. Esto es que tu te conectas y haces una petición. El servidor responde y se termina la conexión.</p>
<p>Con este método haces una petición y estas a la espera de que el servidor responda y en ese momento lanzas otra. Hay otro método (polling) que consiste en enviar muchas peticiones cortitas (cada medio segundo por ejemplo) pero personalmente prefiero la primera.<br />
Esta tarea requiere de una pequeña sincronización. Esta sincronización se hace mediante un numerito que le pasamos en cada petición y que se debe ir incrementando después de cada respuesta NO vacía, luego explico que es eso.</p>
<p>Siempre debemos tener una conexión abierta hacia el servidor. Podemos conectarnos al servidor de dos maneras:<br />
Enviando una petición nuestra (por ejemplo queremos enviar un mensaje a un contacto) o escuchando (nos quedamos escuchando al servidor hasta que nos diga algo).<br />
Sólo podemos tener dos conexiones abiertas y en caso de abrir una tercera o un numero de sincronización incrementado incorrectamente provocada que finalice la sesión (el servidor nos llama violadores y nos manda a paseo).<br />
Voy a explicar qué es un mensaje vacío y la relación que tiene con el número de sincronización. El numerito en cuestión se llama RID y debe ser generado de manera aleatoria. Es importante tener un buen algoritmo que genere un número lo más difícil posible de precedir ya que teniendo el RID junto al SID (un numero que identifica la conexión y se crea en ese momento) alguien podría hacerse pasar por nosotros ya que si envias un SID y un RID correcto la cosa va a funcionar (al ser por HTTP el servidor no tiene manera de conocer de dónde viene la petición). Describo un ejemplo.</p>
<p>Inicio sesión y estoy a la escucha de un mensaje del servidor. Estoy usando una conexión.<br />
Decido que a mi amigo &#8220;Prueba&#8221; quiero saludarle así que le escribo &#8220;Hola&#8221;. Esto genera un objeto message que se envía al servidor. En este instante estoy usando dos conexiones. Si se me ocurre enviar otra cosa el servidor nos cerrará sesión y adiós muy buenas. Lo que se debe hacer en este momento es cerrar la primera conexión, que devolverá un mensaje vacío. Entonces NO tenemos que incrementar el RID.<br />
Nuestro amigo Prueba nos responde diciendo &#8220;Eyyyy&#8221; y el servidor nos lo hace saber, creando un message y a través de la conexión creada nos lo envía. Como dije antes, en HTTP una vez recibida la respuesta se finaliza la conexión. En este momento debemos lanzar una petición para escuchar pero como sí recibimos un mensaje incrementamos el RID. Si no lo hacemos ya sabes lo que pasa. Remarco que mensaje no es lo mismo que message. Message es un tipo de mensaje como también lo es presence o iq.</p>
<p>Esa es la parte complicadilla. Conceptualmente no es complejo ni mucho menos pero crear un algoritmo pues ya tiene algo de tela. Si os interesa saber más hice un plugin jQuery (en javascript) y que en apenas 200 líneas es capaz de manejar ese protocolo y facilitar manejadores de eventos. Puedes ver un poco de documentación en <a href="http://blog.wixet.com/2010/04/documentacion-de-bliblioteca-xmpp-para-jquery"></p>
<p>La página oficial donde está todo documentado es http://xmpp.org/ pero está todo en inglés. Yo he intentado explicarlo en castellano, pues hay mucha gente que no se lleva muy bien con el inglés e igual esto ayuda.</p>
<div class="shr-publisher-1164"></div>

<p>Entradas relacionadas:<ol><li><a href='http://www.congdegnu.es/2009/01/29/como-configurar-google-talk-en-pidgin/' rel='bookmark' title='Permanent Link: Como configurar Google Talk en pidgin'>Como configurar Google Talk en pidgin</a> <small>Pidgin, para el que no lo conozca, es un cliente...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2010/04/10/que-porque-como-xmpp/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Instalación de Power DNS</title>
		<link>http://www.congdegnu.es/2009/09/01/instalacion-de-power-dns/</link>
		<comments>http://www.congdegnu.es/2009/09/01/instalacion-de-power-dns/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 09:00:30 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[pdns]]></category>
		<category><![CDATA[pdns-recursor]]></category>
		<category><![CDATA[powedns]]></category>
		<category><![CDATA[recursor]]></category>
		<category><![CDATA[servidor dns]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1060</guid>
		<description><![CDATA[Saludos, hace un tiempo que dije que haría este manual y mejor tarde que nunca, no? Primero quiero venderos la moto diciendo el por qué usar pdns. Como muchos otros, yo también he luchado con BIND (el servidor dns por excelencia) y al principio era un poco reacio a cambiar simplmente por &#8220;con lo que [...]]]></description>
			<content:encoded><![CDATA[<p>Saludos, hace un tiempo que dije que haría este manual y mejor tarde que nunca, no?</p>
<p>Primero quiero venderos la moto diciendo el por qué usar pdns. Como muchos otros, yo también he luchado con BIND (el servidor dns por excelencia) <img class="alignright" src="http://www.cupfighter.net/wp-content/uploads/2009/08/powerdns_logo.jpg" alt="" width="327" height="154" />y al principio era un poco reacio a cambiar simplmente por &#8220;con lo que me ha costado controlar BIND ahora me cambio?&#8221;. Sí, todos los cambios son dolorosos (y más cuando te ha costado tanto aprender a usar algo) pero creedme si os digo que merece la pena al 100%.</p>
<p><span id="more-1060"></span></p>
<p>El principal problema de uso que le veo a BIND es la extrema dificultad de configuración. Para un experto, con el paso de tiempo se familiariza con todos esos archivos de configuración que ademas de ser muchos son complejos. Cuántas horas gastadas porque faltaba un punto y coma y cosas así&#8230;. eso descontando las horas gastadas para aprender el formato de sus archivos de configuración.</p>
<p>Con pdns para añadir un dominio no tendras mas que logearte, pinchar en añadir dominio y ya está!!! Funcionando!! Cuando lo probé por primera vez no me lo creía, tenía que ser un sueño o algo así (acostumbrado a tardar unos minutos en añadir un dominio y recargando el servicio y&#8230; que pereza).</p>
<p>Necesitaremos mysql, apache y php para tenerlo todo a funcionando. Yo voy a suponer que ese software ya esta instalado, solo queda el servidor dns.</p>
<p><span style="padding-left: 6em"> </span></p>
<pre>aptitude install pdns-server pdns-backend-mysql pdns-recursor</pre>
<p>Creamos la base de datos, en este caso usare el usuario root</p>
<pre>mysql -u root -p

create database pdns;</pre>
<p>pdns sera el nombre de la base de datos, puedes poner cualquiera.<br />
Ahora importamos el esquema de la base de base de datos.</p>
<pre>mysql -u root -p pdns &lt; /usr/share/doc/pdns-backend-mysql/mysql.sql</pre>
<p>Ahora hay que configurar un poquillo a pdns, pero solo un poco.<br />
Editamos el archivo /etc/powerdns/pdns.conf y buscamos una linea donde pone lauch= que esta comentada, entonces debajo insertamos</p>
<pre>
launch=gmysql

gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=root
gmysql-password=rootpass</pre>
<p>Cambiado los datos por los tuyos (dbname,user y password practicamente).<br />
Ahora buscamos una linea donde ponga &#8220;local-address&#8221; y ahí ponemos nuestra ip pública. Muy importante es editar en el mismo archivo &#8220;out-of-zone-additional-processing&#8221;, que aparece como comentado, ponerlo en &#8220;yes&#8221; y buscar la linea &#8220;recursor&#8221; y ponerle &#8220;127.0.0.1&#8243;. Esto es porque tenemos los dos servicios en la misma máquina, hay quienes dicen que es mejor ponerlos en máquinas diferentes pero yo de momento no voy muy sobrado de servidores jeje. En caso de que tengas hayas instalado pdns-recursor en otra máquina pues pones esa ip.<br />
Entonces, después de lo de mysql la cosa queda así</p>
<pre>
local-address=ip_publica

out-of-zone-additional-processing=yes

recursor=127.0.0.1</pre>
<p>Bien, powerdns ya está configurado así que lo reiniciamos.</p>
<pre>
/etc/init.d/pdns restart
/etc/init.d/pdns-recursor restart</pre>
<p>Para comprobar que esta funcionando probamos a hacer un telnet:</p>
<pre>telnet ipdelamaquina 53</pre>
<p>y si conecta ya está funcionando!! Si por el contrario nos dice connection refused algo hemos hecho mal&#8230;<br />
Ahora bajamos la aplicación web, pdnsadmin desde aquí</p>
<pre>http://pdnsadmin.iguanadons.net/index.php?a=files&amp;s=download&amp;cid=3&amp;fid=7</pre>
<p>Lo descomprimimos en un directorio accesible por apache (normalmente /var/www) y listo. Lo ideal es crear un servidor virtual solo para eso pero eso ya según vea cada uno.<br />
Ahora entramos desde el navegador y tiene que aparecer algo así:<br />
<img class="aligncenter size-full wp-image-1061" src="http://www.congdegnu.es/wp-content/uploads/2009/08/dns1.png" alt="dns1" />Esto es el instalador. Damos a continuar.<br />
Nos dirá que demos permisos de escritura a packages y skins. Se los damos y tambien a settings.php<br />
En el siguiente formulario, en master ip ponemos la ip pública. Los nameserver no hace falta ponerlos.<br />
Después de esto ya está! La interfaz es muy intuitiva &#8220;Add domain&#8221;, &#8220;Add subdomain&#8221;&#8230;.<br />
Ahora puedes servir tanto dominios locales como de internet, si pones como servidor DNS a tu máquina será tu servidor quien controle ese dominio. Venga, a disfrutar!</pre>
<div class="shr-publisher-1060"></div>

<p>Entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2009/09/01/instalacion-de-power-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Salon de la vergüenza creada por FFMPEG</title>
		<link>http://www.congdegnu.es/2009/08/29/salon-de-la-verguenza-creada-por-ffmpeg/</link>
		<comments>http://www.congdegnu.es/2009/08/29/salon-de-la-verguenza-creada-por-ffmpeg/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 12:54:10 +0000</pubDate>
		<dc:creator>Maxpowel</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[criminales]]></category>
		<category><![CDATA[violadores gpl]]></category>

		<guid isPermaLink="false">http://www.congdegnu.es/?p=1057</guid>
		<description><![CDATA[Buenas, he visto esta noticia en Meneame (http://meneame.net/story/salon-verguenza-empresas-violan-licencia-gpl-lgpl-ffmpeg) y con el motivo de ayudar a FFMPEG creo este post. Hay mucho criminal que viola y se aprovecha vilmente de las licencias libres. Todos esos criminales (ya sean personas o empresas) merecen toda nuestra repugna. A parte del tema legal que supone violar una licencia libre [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas, he visto esta noticia en Meneame (http://meneame.net/story/salon-verguenza-empresas-violan-licencia-gpl-lgpl-ffmpeg) y con el motivo de ayudar a FFMPEG creo este post.</p>
<p>Hay mucho criminal que viola y se aprovecha vilmente de las licencias libres. Todos esos criminales (ya sean personas o empresas) merecen toda nuestra repugna. A parte del tema legal que supone violar una licencia libre (que parece no importar a casi nadie a menos que haya billetes de por medio) es más despreciable el cómo se aprovechan y se ríen de la comunidad, que trabaja en un proyecto con su mejor intención para que luego vengan cuatro listillos y&#8230; bueno, me voy a cortar la lengua que si no&#8230; Aquí dejo el enlace a la lista.</p>
<p>http://ffmpeg.org/shame.html</p>
<p>Por suerte no uso ningún software de la lista pero en el caso de usar alguno, sin duda buscaría una alternativa a dicho software.</p>
<div class="shr-publisher-1057"></div>

<p>Entradas relacionadas:<ol><li><a href='http://www.congdegnu.es/2008/12/30/amd-libera-el-codigo-3d-de-los-chips-graficos-r600-y-r700/' rel='bookmark' title='Permanent Link: AMD libera el código 3D de los chips gráficos R600 y R700'>AMD libera el código 3D de los chips gráficos R600 y R700</a> <small>Por menéame me he enterado de esta buena noticia y...</small></li>
<li><a href='http://www.congdegnu.es/2009/02/04/compiz-sigue-vivo-y-coleando/' rel='bookmark' title='Permanent Link: Compiz sigue vivo y coleando'>Compiz sigue vivo y coleando</a> <small>A finales del 2008 empezaron a salir algunos folks de...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.congdegnu.es/2009/08/29/salon-de-la-verguenza-creada-por-ffmpeg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

