<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Novanebula blog - GNU/Linux</title>
    <link>http://www.novanebula.net/blog/</link>
    <description>Noticias</description>
    <dc:language>es</dc:language>
    <generator>Serendipity 1.2.1 - http://www.s9y.org/</generator>
    <pubDate>Fri, 08 Aug 2008 21:55:48 GMT</pubDate>

    <image>
        <url>http://www.novanebula.net/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Novanebula blog - GNU/Linux - Noticias</title>
        <link>http://www.novanebula.net/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Comando linux: test</title>
    <link>http://www.novanebula.net/blog/archives/103-Comando-linux-test.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/103-Comando-linux-test.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=103</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=103</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    Este comando linux tiene ciertas peculiariedades que lo alejan de su utilización en consola y lo hacen realmente útil para el programación de scripts. Seguramente el hecho más relevante que reafirma lo que acabamos de decir en la manera en la que test devuelve la información; simplemente a través de su código de retorno. O sea que después de ejecutarlo por consola no veremos absolutamente nada sólo el prompt de nuestro terminal pidiendonos que introduzcamos la siguiente orden.&lt;br /&gt;
&lt;br /&gt;
Tes es un comando para evaluar expresiones devolviendo 0 (cómo código de retornos) en el caso de que la expresión evaluada sea verdadera o un valor distinto de 0 en el caso de ser falso. Esto es la manera habitual para la shell, completamente diferente a la programación en C donde 0 es evaluado como falso y diferente de 0 como verdadero (aunque C no tiene tipos booleanos). Bueno que me estoy liando.&lt;br /&gt;
&lt;br /&gt;
El caso es que test es capaz de analizar cadenas de texto, enteros y ficheros evaluando sus propiedades para analizar lo que más nos interese de estos elementos. Así por ejemplo para cadenas es capaz de determinar si estamos ante una cadana vacia o no (-n), si su longitud es cero (-z) si es igual a otro cadena (=). Para enteros puede determinar si son iguales, mayores o menores que otro dado y para ficheros que en mi modesta opinion es donde radica uno de sus puntos puede determinar un montón de cosas como:&lt;br /&gt;
&lt;br /&gt;
       FILE1 -ef FILE2&lt;br /&gt;
              FILE1 y FILE2 son el mismo fichero en realidad (mismo inodo y dispositivo)&lt;br /&gt;
&lt;br /&gt;
       FILE1 -nt FILE2&lt;br /&gt;
              FILE1 es más reciente que el FILE2 (por la fecha de modificación)&lt;br /&gt;
&lt;br /&gt;
       FILE1 -ot FILE2&lt;br /&gt;
              FILE1 es más antiguo que FILE2&lt;br /&gt;
&lt;br /&gt;
       -b FILE&lt;br /&gt;
              FILE existe y es un fichero de bloque especial (no un fichero regular, ver mknod)&lt;br /&gt;
&lt;br /&gt;
       -c FILE&lt;br /&gt;
              FILE existe y es un dispositivo de tipo caracter (ver mknod)&lt;br /&gt;
&lt;br /&gt;
       -d FILE&lt;br /&gt;
              FILE existe y es un directorio&lt;br /&gt;
&lt;br /&gt;
       -e FILE&lt;br /&gt;
              FILE exite (sin entrar en otras consideraciones como en el caso de los otros parámetros)&lt;br /&gt;
&lt;br /&gt;
       -f FILE&lt;br /&gt;
              FILE existe y es un fichero regular&lt;br /&gt;
&lt;br /&gt;
       -g FILE&lt;br /&gt;
              FILE existe y tiene marcado el bit de GUID (id de grupo)&lt;br /&gt;
&lt;br /&gt;
       -G FILE&lt;br /&gt;
              FILE existe y es poseido por el EGUID (id de grupo efectivo)&lt;br /&gt;
&lt;br /&gt;
       -h FILE&lt;br /&gt;
              FILE existe y es un enlace simbólico (igual que el modificador -L)&lt;br /&gt;
&lt;br /&gt;
       -k FILE&lt;br /&gt;
              FILE existe y tiene marcado el bit sticky&lt;br /&gt;
&lt;br /&gt;
       -L FILE&lt;br /&gt;
              FILE existe y es un enlace simbólico (igual que el modificador -h)&lt;br /&gt;
&lt;br /&gt;
       -O FILE&lt;br /&gt;
              FILE existe y es poseido por el EUID (id de usuario efectivo)&lt;br /&gt;
&lt;br /&gt;
       -p FILE&lt;br /&gt;
              FILE existe y es una tuberia con nombre (ver &lt;a href=&quot;http://www.novanebula.net/blog/archives/2-FIFOs-en-linux.html&quot;&gt;FIFOs&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
       -r FILE&lt;br /&gt;
              FILE existe y el usuario actual tiene permiso de lectura sobre él&lt;br /&gt;
&lt;br /&gt;
       -s FILE&lt;br /&gt;
              FILE existe y tiene un tamaño mayor que cero&lt;br /&gt;
&lt;br /&gt;
       -S FILE&lt;br /&gt;
              FILE existe y es un fichero tipo socket&lt;br /&gt;
&lt;br /&gt;
       -t FD  &lt;br /&gt;
              el descriptor de fichero FD esta abierto en una terminal&lt;br /&gt;
&lt;br /&gt;
       -u FILE&lt;br /&gt;
              FILE exite y su SUID está marcado&lt;br /&gt;
&lt;br /&gt;
       -w FILE&lt;br /&gt;
              FILE existe y el usuario actual tiene permiso de escritura sobre él&lt;br /&gt;
&lt;br /&gt;
       -x FILE&lt;br /&gt;
              FILE existe y el usuario actual tiene permiso de ejecución (o busqueda) sobre él&lt;br /&gt;
&lt;br /&gt;
Además test es capaz de concatenar varias expresiones empleando AND o OR lógicos con los siguientes modificadores:&lt;br /&gt;
&lt;br /&gt;
EXPRESSION1 -a EXPRESSION2  (AND lógico)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXPRESSION1 -o EXPRESSION2 (OR lógico)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como ya he comentado antes test se emplea sobre todo en programación bash en instrucciones condicionales por acabar el articulo con un par de ejemplos que ilustraran claramente su utilización:&lt;br /&gt;
&lt;br /&gt;
file=&quot;/tmp&quot;&lt;br /&gt;
if [ -k $file ]&lt;br /&gt;
then&lt;br /&gt;
   echo &quot;El directorio /tmp tiene el bit sticky marcado&quot;;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Otro ejemplo&lt;br /&gt;
&lt;br /&gt;
cadena=&quot;hola&quot;&lt;br /&gt;
if [ $cadena = &quot;hola&quot; ]&lt;br /&gt;
then&lt;br /&gt;
        echo &quot;Hola mundo!&quot;;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Observad que en los ejemplos no hemos puesto ningún test pero es que en programación en bash y en este tipo de construcciones el corchete abierto [ es sinónimo de test (y por razones de eficiencia en un builtin (bash lo tiene incluido internamente y no llama al comando test al que emula)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 08 Aug 2008 23:40:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/103-guid.html</guid>
    
</item>
<item>
    <title>Memcache</title>
    <link>http://www.novanebula.net/blog/archives/94-Memcache.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/94-Memcache.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=94</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=94</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    Memcache es un sistema para almacenamiento de objetos en memoria que pueden ser solicitados por varios procesos, incluso en distintas máquinas y que actúa como caché para acelerar estas peticiones. Memcache ha sido diseñado de manera genérica aunque su mayor utilidad y para la que fue desarrollado inicialmente es para reducir la carga en sitios web debido a las solicitudes a base de datos que en muchos casos son innecesarias.&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;strong&gt;Memcache&lt;/strong&gt; ha sido desarrollado por &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.danga.com/&#039;);&quot;  href=&quot;http://www.danga.com/&quot;&gt;Danga Interactive&lt;/a&gt; para &lt;strong&gt;livejournal&lt;/strong&gt; en primera instancia pero luego liberado bajo licencia &lt;strong&gt;BSD&lt;/strong&gt;. Hoy en día es empleado por muchos otros sitios webs debido a su gran utilidad, entre ellos: &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.livejournal.com/&#039;);&quot;  href=&quot;http://www.livejournal.com/&quot;&gt;Livejournal&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.slashdot.org/&#039;);&quot;  href=&quot;http://www.slashdot.org/&quot;&gt;Slashdot&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.wikipedia.org/&#039;);&quot;  href=&quot;http://www.wikipedia.org/&quot;&gt;Wikipedia&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/sourceforge.net/&#039;);&quot;  href=&quot;http://sourceforge.net/&quot;&gt;SourceForge&lt;/a&gt;, &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.fotolog.com/&#039;);&quot;  href=&quot;http://www.fotolog.com/&quot;&gt;FotoLog&lt;/a&gt; y un largo etc.&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;El funcionamiento de memcache es de concepción muy sencilla. En lugar de acceder a la base de datos para solicitar determinada información primero se accede a &lt;strong&gt;memcached&lt;/strong&gt; (el servidor de memcache) a través de tcp/ip (así se puede acceder a servidores memcache en máquinas remotas o en local). Si este tiene la información la devuelve y si no debemos hacer la petición a la base de datos e introducir los datos en memcached para que puedan ser accedidos directamente la próxima vez que los necesitemos. Además cada dato introducido en memcached tiene un tiempo de expiración, tras pasar este tiempo almacenado en el servidor este se considera descartable y se borra del servidor, dejando espacio para otros objetos.&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;De una manera muy sencilla también es posible emplear varios servidores memcache, creando una cache distribuida todavía más eficiente o incluso utilizar varios niveles de caché entre máquinas locales y/o remotas.&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Memcaché está basado en &lt;strong&gt;libevent&lt;/strong&gt; una librería de notificación de eventos asíncrona que permite ejecutar callbacks cuando un determinado evento es disparado (además de eventos puede reaccionar a señales o a intervalos de tiempo específicos, más adelante quizás le dedique un post a esta librería).&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Para instalar memcached en nuestro servidor debemos bajarnos &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.danga.com/memcached/download.bml&#039;);&quot;  href=&quot;http://www.danga.com/memcached/download.bml&quot;&gt;las fuentes del sitio de Danga Interactive&lt;/a&gt;. La compilación e instalación no debería ser complicada. También es posible descargar fuentes y binario con apt-get o con el gestor de paquetes que tengamos instalado (absténganse windowzers)&lt;br /&gt;
&lt;br /&gt;
apt-get install memcached&lt;br /&gt;
&lt;br /&gt;
&amp;#160;El servidor memcached tiene unas pocas opciones en la línea de argumentos, estos son:&lt;br /&gt;
&lt;br /&gt;
-d (implicito)&lt;br /&gt;
-v (verbose)&lt;br /&gt;
-vv (más verbose)&lt;br /&gt;
-m (memoría en megas disponible para el demonio)&lt;br /&gt;
-p &lt;puerto&gt; (puerto a la escucha, por defecto 11211&lt;br /&gt;
-u &lt;usuario&gt; (usuario bajo el que se ejecuta el servidor)&lt;br /&gt;
-l &lt;ip&gt; (IP de la que se espera conexiónes, es la única medida de seguridad del servidor, el valor por defecto es escuchar comunicaciones desde cualquier ip lo cual es completamente inseguro si no se está detrás de un firewall)&lt;br /&gt;
-c &lt;numero&gt; (número máximo de conexiones simultaneas)&lt;br /&gt;
-k (activa bloqueos)&lt;br /&gt;
-M (devuelve error cuando la memoria se agota)&lt;br /&gt;
-r (limita los core dump)&lt;br /&gt;
&lt;br /&gt;
&amp;#160;El demonio toma toda la memoria especificada por el parámetro -m al principio y cuando no puede alamacenar más datos desecha aquellos accedidos menos recientemente (si no se le pasa el parámetro -M)&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
# memcached -d -m 2048 -l 10.0.0.40 -p 11211&lt;br /&gt;
&lt;br /&gt;
El comando anterior iniciará el servidor usando 2GB de memoria y escuchando conexiones desde la ip 10.0.0.40 al puerto 11211. Recordemos que es posible iniciar más servidores memcache en la misma máquina.&lt;br /&gt;
&lt;br /&gt;
Existen disponibles diversas APIs para conectarse al servidor escritas en diferentes lenguajes: &lt;strong&gt;PHP&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;PERL&lt;/strong&gt;, &lt;strong&gt;Ruby&lt;/strong&gt;, &lt;strong&gt;Java&lt;/strong&gt;, &lt;strong&gt;C&lt;/strong&gt;, &lt;strong&gt;C#&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Ejemplo en php de conexión con el servidor memcached:&lt;br /&gt;
&lt;br /&gt;
&lt;?php&lt;br /&gt;
&lt;br /&gt;
$memcache = new Memcache;&lt;br /&gt;
$memcache-&gt;connect(&#039;localhost&#039;, 11211) or die (&quot;Could not connect&quot;);&lt;br /&gt;
&lt;br /&gt;
$version = $memcache-&gt;getVersion();&lt;br /&gt;
echo &quot;Server&#039;s version: &quot;.$version.&quot;&lt;br/&gt;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
$tmp_object = new stdClass;&lt;br /&gt;
$tmp_object-&gt;str_attr = &#039;test&#039;;&lt;br /&gt;
$tmp_object-&gt;int_attr = 123;&lt;br /&gt;
&lt;br /&gt;
$memcache-&gt;set(&#039;key&#039;, $tmp_object, false, 10) or die (&quot;Failed to save data at the server&quot;);&lt;br /&gt;
echo &quot;Store data in the cache (data will expire in 10 seconds)&lt;br/&gt;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
$get_result = $memcache-&gt;get(&#039;key&#039;);&lt;br /&gt;
echo &quot;Data from the cache:&lt;br/&gt;\n&quot;;&lt;br /&gt;
&lt;br /&gt;
var_dump($get_result);&lt;br /&gt;
&lt;br /&gt;
?&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 27 Apr 2008 20:55:29 +0200</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/94-guid.html</guid>
    
</item>
<item>
    <title>traceroute y lft</title>
    <link>http://www.novanebula.net/blog/archives/82-traceroute-y-lft.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/82-traceroute-y-lft.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=82</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=82</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    Hoy comentaremos dos utilidades muy importantes para llevar a cabo un análisis del enrutamiento de paquetes en una red. Por todos es conocido la utilidad traceroute, pero lft es mucho menos conocida pero realmente más poderosa y útil.&lt;br /&gt;
&lt;br /&gt;
lft emplea paquetes TCP SYN y FIN utilizando el campo del protocolo IP &#039;time to live&#039; (tiempo de vide). lft también escucha mensajes TCP y ICMP para detectar mas información acerca de la red que está atravesando.&lt;br /&gt;
&lt;br /&gt;
lft sólo tiene un parámetro obligatorio; un nombre de servidor o una dirección IP. tft soporta muchas opciones:&lt;br /&gt;
&lt;br /&gt;
lft [-d dport] [-s sport] [-m min] [-M max] [-a ahead] [-c scatter ms] [-t timeout ms] [-l min ttl] [-q ISN]&lt;br /&gt;
         [-D device] [-H ttl] [-i] [-n] [-E] [-N] [-A] [-T] [-S] [-V] [-v] [&lt;gateway&gt; &lt;...&gt;] host:dport&lt;br /&gt;
&lt;br /&gt;
A través de esta herramienta puedes detectar problemas de red, pasarelas fallando o tomando demasiado tiempo en la respuesta por ejemplo.&lt;br /&gt;
&lt;br /&gt;
lft significa Layer Four Tracerouter.&lt;br /&gt;
&lt;br /&gt;
Prueba este comando para observar sus resultados&lt;br /&gt;
&lt;br /&gt;
# lft -E -N -V news.google.es&lt;br /&gt;
&lt;br /&gt;
Está es la página d&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/pwhois.org/lft/&#039;);&quot;  href=&quot;http://pwhois.org/lft/&quot;&gt;el projecto lft&lt;/a&gt; 
    </content:encoded>

    <pubDate>Wed, 02 Apr 2008 23:03:53 +0200</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/82-guid.html</guid>
    
</item>
<item>
    <title>Sintaxis 'Here documents'</title>
    <link>http://www.novanebula.net/blog/archives/50-Sintaxis-Here-documents.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/50-Sintaxis-Here-documents.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=50</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=50</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    &amp;#160;&amp;#160;&amp;#160;&amp;#160;Una herramienta a utilizar de nuestra shell bash es la heredoc (here document) se trata en realidad de una redirección de la entrada estándar que finaliza con una línea que contiene una palabra específica. Esta palabra ha de indicarse al comienzo utilizando el operador &#039;&lt;&lt;&#039;. Vamos a poner un ejemplo que es como mejor se aprenden las cosas:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
cat &amp;gt; holaMundo.sh &amp;lt;&amp;lt; &quot;EOF&quot;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
echo &quot;Hola mundo&quot;&lt;br /&gt;
EOF&lt;br /&gt;
bash holaMundo.sh&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
La sintaxis es la siguiente&lt;br /&gt;
&lt;br /&gt;
&lt;&lt;[-] &lt;em&gt;word&lt;/em&gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;em&gt;here-document&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;word&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Si el operador de redicción es &lt;&lt;- entonces en todas las lineas a continuación se eliminarán los tabuladores iniciales.  Permitiendo la identación del texto. &lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;em&gt;word&lt;/em&gt; no tendrá expansión de parámetros, sustitución de comandos, expansión aritmética o expansión de nombre de fichero. Si &lt;em&gt;word&lt;/em&gt; contine comillas estas serán eliminadas y el &lt;em&gt;here-document&lt;/em&gt; no tendrá expansión de parámetros, pero si no contiene comillas la expansión de parámetros ocurrirá en el &lt;em&gt;here-document&lt;/em&gt;. Por poner un ejemplo de este comportamiento&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
cat &amp;gt; test.txt  &amp;lt;&amp;lt; EOF&lt;br /&gt;
`date`&lt;br /&gt;
EOF&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
cat &amp;gt; test.txt &amp;lt;&amp;lt; &quot;EOF&quot;&lt;br /&gt;
`date`&lt;br /&gt;
EOF&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Se puede ver que el contenido del fichero test.txt es diferente en un ejemplo y en el otro.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 10 Mar 2008 21:45:30 +0100</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/50-guid.html</guid>
    
</item>
<item>
    <title>Star Wars open source y otros ASCII</title>
    <link>http://www.novanebula.net/blog/archives/47-Star-Wars-open-source-y-otros-ASCII.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/47-Star-Wars-open-source-y-otros-ASCII.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=47</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=47</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    &amp;#160;&amp;#160;&amp;#160;&amp;#160;Prueba el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
$ telnet towel.blinkenlights.nl&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Verás una de las películas de &lt;strong&gt;Star Wars&lt;/strong&gt; en &lt;strong&gt;ASCII&lt;/strong&gt; y ¡Hecha a mano!. Aquí tienes una escena de &lt;strong&gt;Matrix&lt;/strong&gt; también hecha en &lt;strong&gt;ASCII&lt;/strong&gt; pero con una librería de codificación de video, vamos que no tiene tanto merito aunque su resultado sea realmente espectacular&lt;br /&gt;
&lt;br /&gt;
&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.justbewise.net/matrix2.html&#039;);&quot;  href=&quot;http://www.justbewise.net/matrix2.html&quot;&gt;Escena matrix&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Aquí tenemos un ejemplo con la librería aalib para autenticos frikis jugando al &lt;strong&gt;Quake&lt;/strong&gt;...  ¡por consola!&lt;br /&gt;
&lt;br /&gt;
&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/0nRPoS2WDJA&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/0nRPoS2WDJA&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Por último otro truco de la vaca mugiente:&lt;br /&gt;
&lt;br /&gt;
$ apt-get install cowsay&lt;br /&gt;
$ cowsay &quot;¡Hola mundo!&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 09 Mar 2008 19:08:29 +0100</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/47-guid.html</guid>
    
</item>
<item>
    <title>egrep y grep</title>
    <link>http://www.novanebula.net/blog/archives/19-egrep-y-grep.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/19-egrep-y-grep.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=19</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    &amp;#160;&amp;#160;&amp;#160;&amp;#160;La utilidad &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.gnu.org/software/grep/&#039;);&quot;  href=&quot;http://www.gnu.org/software/grep/&quot;&gt;GNU grep&lt;/a&gt; desde su versión 2.5 ha añadido nuevas e importantes funcionalidades como son la capacidad de emplear expresiones regulares y volcar sólo las coincidencias obtenidas, salida con color y nuevas opciones para ficheros y directorios.&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Ante todo comentar que egrep en realidad ejecuta un grep -E sobre los argumentos que se le pasen, sin embargo no es un alias como algunos piensan, sino un script bash. Puedes hecharle un vistazo ejecutando:&lt;br /&gt;
&lt;br /&gt;
$ vi `which egrep`&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Lo que hace exactamente la opción -E (--extended-regexp) es evaluar la expresión a buscar con grep como si fuera una expresión regular. Esto permite búsquedas con muchas más posibilidades, buscando emails,telefonos, ips,urls etc  en un directorio o fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Existen más opciones en el comando grep que permiten evaluar expresiones regulares como -e, -G, -P&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Estos son algunos ejemplos de su utilización:&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Buscar las tablas creadas en un fichero volcado por mysqldump y la línea del fichero donde esto ocurre:&lt;br /&gt;
&lt;br /&gt;
$ grep -E -n &quot;CREATE TABLE \`([^\`]+)\`&quot; -o mysql.sql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Ver los usuarios del sistema que tienen definido el campo de información de usuario (usualmente empleado para introducir información adicional como el nombre completo o alguna descripción de la utilización del usuario)&lt;br /&gt;
&lt;br /&gt;
$ egrep &quot;[a-z]:x:[0-9]+:[0-9]+:[^:]+&quot; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Las posibilidades de este comando (unidas a las de las expresiones regulares gracias a estas opciones) son inmensas.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 04 Mar 2008 01:12:13 +0100</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/19-guid.html</guid>
    
</item>
<item>
    <title>Easter Egg en el aptitude</title>
    <link>http://www.novanebula.net/blog/archives/18-Easter-Egg-en-el-aptitude.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/18-Easter-Egg-en-el-aptitude.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=18</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    Siguiendo con nuestra mini-serie de Easter eggs (huevos de pascua) hoy le toca al turno al &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/packages.debian.org/testing/admin/aptitude&#039;);&quot;  href=&quot;http://packages.debian.org/testing/admin/aptitude&quot;&gt;aptitude&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Prueba los siguientes comandos:&lt;br /&gt;
&lt;br /&gt;
$ aptitude moo&lt;br /&gt;
&lt;br /&gt;
$ aptitude -v moo&lt;br /&gt;
&lt;br /&gt;
$ aptitude -vv moo&lt;br /&gt;
&lt;br /&gt;
$ aptitude -vvv moo&lt;br /&gt;
&lt;br /&gt;
$ aptitude -vvvv moo&lt;br /&gt;
&lt;br /&gt;
$ aptitude -vvvvv moo&lt;br /&gt;
&lt;br /&gt;
$ aptitude -vvvvvv moo&lt;br /&gt;
&lt;br /&gt;
Estos chicos se estas pasando... 
    </content:encoded>

    <pubDate>Sun, 02 Mar 2008 23:03:28 +0100</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/18-guid.html</guid>
    
</item>
<item>
    <title>Easter Egg en el APT</title>
    <link>http://www.novanebula.net/blog/archives/14-Easter-Egg-en-el-APT.html</link>
            <category>GNU/Linux</category>
    
    <comments>http://www.novanebula.net/blog/archives/14-Easter-Egg-en-el-APT.html#comments</comments>
    <wfw:comment>http://www.novanebula.net/blog/wfwcomment.php?cid=14</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.novanebula.net/blog/rss.php?version=2.0&amp;type=comments&amp;cid=14</wfw:commentRss>
    

    <author>nospam@example.com (Abraham Covelo)</author>
    <content:encoded>
    &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.debian.org/doc/manuals/apt-howto/&#039;);&quot;  href=&quot;http://www.debian.org/doc/manuals/apt-howto/&quot;&gt;APT&lt;/a&gt; es el sistema de actualización/instalación de paquetes para sistemas tipo &lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.debian.org/&#039;);&quot;  href=&quot;http://www.debian.org/&quot;&gt;Debian&lt;/a&gt;. APT son las siglas de Advanced Package Tool.&lt;br /&gt;
&lt;br /&gt;
Para ver este &#039;Easter Egg&#039; (huevo de pascua) sigue los siguientes pasos:&lt;br /&gt;
&lt;br /&gt;
Inicia sesión como root (bueno en realidad no se precisa ser root para ver este truco, lo puedes hacer con un usuario normal con shell)&lt;br /&gt;
&lt;br /&gt;
Ejecuta:&lt;br /&gt;
# apt-get moo&lt;br /&gt;
&lt;br /&gt;
Verás esta obra de arte ASCII&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
         (__)&lt;br /&gt;
         (oo)&lt;br /&gt;
   /------\/&lt;br /&gt;
  / |    ||&lt;br /&gt;
 *  /\---/\&lt;br /&gt;
    ~~   ~~&lt;br /&gt;
....&quot;Have you mooed today?&quot;...&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
XD es buenisimo&lt;br /&gt;
&lt;br /&gt;
Prueba ahora a ejecutar&lt;br /&gt;
&lt;br /&gt;
#apt-get&lt;br /&gt;
&lt;br /&gt;
Sin ningún parametro aparece un listado de ayuda con todas las opciones disponibles para el comando apt-get, pero en su última linea a modo de firma se puede leer&lt;br /&gt;
&lt;br /&gt;
This APT has Super Cow Powers&lt;br /&gt;
&lt;br /&gt;
(Este APT tiene Super Poderes Vacunos)&lt;br /&gt;
&lt;br /&gt;
XDDDDDD&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 01 Mar 2008 01:28:47 +0100</pubDate>
    <guid isPermaLink="false">http://www.novanebula.net/blog/archives/14-guid.html</guid>
    
</item>

</channel>
</rss>