<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planeta GULTij</title>
	<link rel="self" href="http://planet.gultij.org/atom.xml"/>
	<link href="http://planet.gultij.org"/>
	<id>http://planet.gultij.org/atom.xml</id>
	<updated>2016-06-27T19:50:06+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry xml:lang="es-ES">
		<title type="html">alwayslast.bash</title>
		<link href="http://blog.alvarezp.org/2016/06/21/alwayslast-bash/"/>
		<id>http://blog.alvarezp.org/?p=3394</id>
		<updated>2016-06-22T00:31:58+00:00</updated>
		<content type="html">&lt;p&gt;Este script permite poner en un archivo las últimas N líneas de una salida. Por ejemplo, &lt;code&gt;ping [...] | alwayslast.bash FILE 10&lt;/code&gt; permitiría que FILE tuviera las últimas 10 líneas de la salida de ping.&lt;/p&gt;
&lt;p&gt;This script allows for a file to have the las N lines of an output. For example, &lt;code&gt;ping [...] | alwayslast.bash FILE 10&lt;/code&gt; would make FILE always have the last 10 lines from the output of ping.&lt;/p&gt;
&lt;pre&gt;#!/bin/bash

if [ &quot;$#&quot; -ne 2 ]; then
 echo &quot;Usage: $0 output_file maxlines&quot;
 exit 2
fi

FILE=&quot;$1&quot;
MAXLINES=&quot;$2&quot;

START=0
LINES=1

while IFS= read -r NEWLINE; do
 BUFFER[START]=&quot;$NEWLINE&quot;

 TEMPFILE=$(mktemp)
 trap -- 'rm &quot;$TEMPFILE&quot;' EXIT INT TERM

 for INDEX in $(seq &quot;$((START+1))&quot; &quot;$((LINES-1))&quot;) $(seq 0 &quot;$START&quot;); do
 printf '%s\n' &quot;${BUFFER[$INDEX]}&quot;
 done &amp;gt; &quot;$TEMPFILE&quot;

 chmod --reference=&quot;$FILE&quot; &quot;$TEMPFILE&quot;
 mv &quot;$TEMPFILE&quot; &quot;$FILE&quot;
 trap -- EXIT INT TERM

 LINES=&quot;$((LINES+1))&quot;
 if [ &quot;$LINES&quot; -gt &quot;$MAXLINES&quot; ]; then
 LINES=&quot;$MAXLINES&quot;
 fi
 START=&quot;$(((START + 1) % MAXLINES))&quot;
done
&lt;/pre&gt;
&lt;p&gt;Gracias a &lt;a href=&quot;https://dualbus.me/&quot;&gt;Eduardo Bustamante&lt;/a&gt; por sus correcciones.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Feed al podcast Dr. IPv6</title>
		<link href="http://blog.alvarezp.org/2016/06/03/feed-al-podcast-dr-ipv6/"/>
		<id>http://blog.alvarezp.org/?p=3383</id>
		<updated>2016-06-03T23:49:57+00:00</updated>
		<content type="html">&lt;div id=&quot;attachment_3376&quot; class=&quot;wp-caption alignright&quot;&gt;&lt;a href=&quot;https://twitter.com/lactf&quot;&gt;&lt;img class=&quot;wp-image-3376 size-medium&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2016/06/lactf-logo-300x300.png&quot; alt=&quot;LAC-TF es la Fuerza de Trabajo de IPv6 en la región de Latinoamérica y el Caribe&quot; width=&quot;300&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;LAC-TF es la Fuerza de Trabajo de IPv6 en la región de Latinoamérica y el Caribe&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Dr. IPv6 es un podcast en español preparado por &lt;a title=&quot;Perfil de LAC-TF en Twitter&quot; href=&quot;https://twitter.com/lactf&quot;&gt;LAC-TF&lt;/a&gt; y dirigido por &lt;a title=&quot;Blog de Alejandro Acosta en LACNIC&quot; href=&quot;http://www.labs.lacnic.net/site/blog/3960&quot;&gt;Alejandro Acosta&lt;/a&gt; en el que se busca a especialistas para contestar preguntas que tenga la comunidad sobre &lt;a title=&quot;Artículo en Wikipedia sobre IPv6&quot; href=&quot;https://es.wikipedia.org/wiki/IPv6&quot;&gt;IPv6&lt;/a&gt;. Puedes enviar tus preguntas a &lt;a title=&quot;Envíanos tus pregunas a dr.ipv6@lacnic.net&quot; href=&quot;mailto:dr.ipv6@lacnic.net&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;dr.ipv6@lacnic.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Debido a que el podcast aún no tiene un feed &lt;a title=&quot;Artículo en Wikipedia sobre RSS&quot; href=&quot;https://es.wikipedia.org/wiki/RSS&quot;&gt;RSS&lt;/a&gt;, sólo los audios, decidí hacer un feed para poder agregar este útil e intersante podcast a mi Rhythmbox y AntennaPod.&lt;/p&gt;
&lt;p&gt;Aquí lo comparto con ustedes. Se actualiza cada hora según lo que se publique en la &lt;a title=&quot;Página de Dr. IPv6 en el portal de LACNIC&quot; href=&quot;http://portalipv6.lacnic.net/dripv6es/&quot;&gt;página oficial de Dr. IPv6&lt;/a&gt;, extrayendo los metadatos y convirtiéndola en formato RSS. Siéntete en la libertad de usarlo para agregar Dr. IPv6 al &amp;#8220;podcatcher&amp;#8221; de tu preferencia.&lt;/p&gt;
&lt;p&gt;La dirección de los feeds:&lt;/p&gt;
&lt;p&gt;Dr. IPv6 en formato Ogg: &lt;a href=&quot;http://blog.alvarezp.org/dripv6/feed-ogg/feed.xml&quot; target=&quot;_blank&quot;&gt;http://blog.alvarezp.org/dripv6/feed-ogg/feed.xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dr. IPv6 en formato MP3: &lt;a href=&quot;http://blog.alvarezp.org/dripv6/feed-mp3/feed.xml&quot; target=&quot;_blank&quot;&gt;http://blog.alvarezp.org/dripv6/feed-mp3/feed.xml&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Actualización sobre cointoss en Bash para evitar azar cargado</title>
		<link href="http://blog.alvarezp.org/2016/05/16/actualizacion-sobre-cointoss-en-bash-para-evitar-azar-cargado/"/>
		<id>http://blog.alvarezp.org/?p=3331</id>
		<updated>2016-05-17T00:40:28+00:00</updated>
		<content type="html">&lt;p&gt;Hace unas 3 semanas publiqué una nota personal para implementar &amp;#8220;cosstoin&amp;#8221; en Bash:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cointoss() {
    # Probability is $1/$2, for example, cointoss 3 5
    # will hit 60% of the time. Defaults to 1/2 if no
    # arguments are supplied.
    [ $((RANDOM % ${2-2})) -lt ${1-1} ];
}&lt;/pre&gt;
&lt;p&gt;&lt;span id=&quot;more-3331&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Actualización&lt;/h2&gt;
&lt;p&gt;Sin embargo, como bien me lo indica &lt;a title=&quot;Página de Eduardo Bustamante&quot; href=&quot;https://dualbus.me&quot;&gt;dualbus&lt;/a&gt;, este &lt;em&gt;volado&lt;/em&gt; está cargado cuando la cantidad de caras en la moneda, el denominador (indicado por $2), no es múltiplo de 2. Y me hace llegar la implementación para azar balanceado que greybot recomienda en #bash en Freenode:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;rand() {
    local max=$((32768 / $1 * $1)) r
    while (( (r=$RANDOM) &amp;gt;= max ))
    do
        :
    done
    echo $(( r % $1 ))
} ## Returns unbiased random number from 0 to ($1-1) inclusive, $1 &amp;lt;= 32768&lt;/pre&gt;
&lt;p&gt;La razón es sencilla: cuando se invoca la variable RANDOM en Bash, regresa un valor entero entre 0 y 32,767. Estos 32,768 posibles valores no se pueden dividir exactamente en N grupos cuando N no es múltiplo de 2; siempre quedan algunos grupos con más valores posibles. La &amp;#8220;carga&amp;#8221; cambia según el denominador.&lt;/p&gt;
&lt;p&gt;La única manera de evitar este efecto es que si RANDOM cae en valores sobrantes, se repita la invocación a la variable RANDOM. De esta manera se garantiza el balanceo de la distribución probabilística, aunque no sea posible garantizar que el resultado se logre siempre en menos de K intentos.&lt;/p&gt;
&lt;h3&gt;Ejemplo cuando el denominador es 3&lt;/h3&gt;
&lt;p&gt;Si queremos dividir los 32,768 valores en 3 grupos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X mod 3 == 0 lo cumplen 10,923 valores: 0, 3, 6&amp;#8230; 32,763 y 32,766.&lt;/li&gt;
&lt;li&gt;X mod 3 == 1 lo cumplen 10,923 valores: 1, 4, 7&amp;#8230; 32,764 y 32,767.&lt;/li&gt;
&lt;li&gt;X mod 3 == 2 lo cumplen sólo 10,922 valores: 2, 5, 8&amp;#8230; y 32,765.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El 32,768 ya no forma parte del conjunto de resultados de RANDOM. Esto significa que hay una desventaja para X mod 3:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X mod 3 == 0: 33.3343506%&lt;/li&gt;
&lt;li&gt;X mod 3 == 1: 33.3343506%&lt;/li&gt;
&lt;li&gt;X mod 3 == 2: 33.3312988%&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La diferencia es de 0.0030518% entre extremos, un incremento de 0.009156%.&lt;/p&gt;
&lt;p&gt;Si ejecutamos 1,000,000 de veces &lt;code&gt;cointoss 1 3&lt;/code&gt;, espero un hit 33.3&amp;#8230;% de las veces (más/menos el error causado por el azar). El resultado medido 5 veces cae entre 33.27% y 33.38%. El valor esperado cae dentro de lo medido.&lt;/p&gt;
&lt;h3&gt;Ejemplo cuando el denominador es 24,576 (forzando el bug)&lt;/h3&gt;
&lt;p&gt;¿Qué pasa si llamamos &lt;code&gt;cointoss 16384 24576&lt;/code&gt;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;X mod 24576 == 0 lo cumplen 2 valores: 0 y 24,576.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 1 lo cumplen 2 valores: 1 y 24,577.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 2 lo cumplen 2 valores: 2 y 24,578.&lt;/li&gt;
&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;li&gt;X mod 24576 == 8190 lo cumplen 2 valores: 8190, 32766.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 8191 lo cumplen 2 valores: 8191, 32767.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 8192 lo cumple 1 valor: 8192.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 8193 lo cumple 1 valor: 8193.&lt;/li&gt;
&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;li&gt;X mod 24576 == 24573 lo cumple 1 valor: 24573.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 24574 lo cumple 1 valor: 24574.&lt;/li&gt;
&lt;li&gt;X mod 24576 == 24575 lo cumple 1 valor: 24575.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entonces, para los grupos de 2 valores, la probabilidad de salir es de 0.0061035%, mientras que para los grupos de 1 valor, la probabilidad de salir es de 0.0030518, una diferencia de 0.0030518%, ¡pero un incremento de 200%!&lt;/p&gt;
&lt;p&gt;Si ejecutamos 1,000,000 de veces &lt;code&gt;cointoss 16384 24576&lt;/code&gt;, espero un hit 66.6&amp;#8230;% de las veces (más/menos el error causado por el azar). El resultado medido 5 veces cae entre 74.95% y 75.07%. ¡El valor esperado no cae dentro de lo medido!&lt;/p&gt;
&lt;p&gt;De nuevo, gracias a &lt;a title=&quot;Página de Eduardo Bustamante&quot; href=&quot;https://dualbus.me&quot;&gt;dualbus&lt;/a&gt; por el apunte.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Cointoss en Bash</title>
		<link href="http://blog.alvarezp.org/2016/04/22/cointoss-en-bash/"/>
		<id>http://blog.alvarezp.org/?p=3308</id>
		<updated>2016-04-22T21:56:53+00:00</updated>
		<content type="html">&lt;pre class=&quot;code&quot;&gt;cointoss() {
    # Probability is $1/$2, for example, cointoss 3 5
    # will hit 60% of the time. Defaults to 1/2 if no
    # arguments are supplied.
    [ $((RANDOM % ${2-2})) -lt ${1-1} ];
}&lt;/pre&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Ayúdanos a ayudarte</title>
		<link href="http://blog.alvarezp.org/2016/03/30/ayudanos-a-ayudarte/"/>
		<id>http://blog.alvarezp.org/?p=3255</id>
		<updated>2016-03-30T21:05:30+00:00</updated>
		<content type="html">&lt;p&gt;Estimado compañero de chat:&lt;/p&gt;
&lt;p&gt;Alguien te ha enviado a esta publicación porque consideró que necesitabas una guía para preguntar más eficazmente en nuestro canal de chat. No creas que no queremos ayudarte sino que hay ciertas explicaciones que nos toca repetir frecuentemente para facilitar la participación de los usuarios que nos visitan por primera vez o sólo ocasionalmente.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3255&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 class=&quot;western&quot;&gt;Antes, un poco de contexto&lt;/h1&gt;
&lt;p&gt;Por algún motivo algunos usuarios perciben el canal como un lugar dedicado al soporte, pero este no es el caso. Las recomendaciones que presentamos a continuación se comprenderán mejor si enfatizamos la distinción entre &lt;em&gt;sala de charla&lt;/em&gt; y &lt;em&gt;departamento de soporte&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;En un departamento de soporte se pueden atender solicitudes en todo momento porque hay roles y horarios dedicados con sueldo a la atención al usuario. Directa o indirectamente, el usuario paga y mantiene ese soporte y por eso existe. Esto permite una atención expedita y personalizada. Son personas cuyo trabajo diario es guiar usuarios pacientemente a la resolución de problemas.&lt;/p&gt;
&lt;p&gt;En cambio, el propósito de nuestro canal es la charla casual. El soporte es sólo uno de los diversos temas aceptables. Quienes platicamos somos profesionales como tú que no estamos dedicados al soporte. Esto significa que no estamos al pendiente de la ventana de chat. De repente encontrarás alguien al que le gusta dedicarse más al chat, pero aún es un voluntario.&lt;/p&gt;
&lt;p&gt;Lo cierto es que procuramos ayudar cuando se puede. ¡Bienvenido!&lt;/p&gt;
&lt;p&gt;Dicho lo anterior, permítenos hacerte algunas recomendaciones que te ayudarán a esquivar los patrones inconvenientes más comunes de los participantes nuevos y ocasionales. No pretendemos ofender; sólo buscamos poder ayudarte &lt;em&gt;mientras &lt;/em&gt;nosotros continuamos con nuestro trabajo diario.&lt;/p&gt;
&lt;h1 class=&quot;western&quot;&gt;Entra con tiempo disponible&lt;/h1&gt;
&lt;p&gt;Para nosotros, es muy común revisar la pantalla de chat a eso a las 6:15 p. m. y ver lo siguiente:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;[&lt;strong&gt;2:30p&lt;/strong&gt;] * nuevo (~nuevo@example.net) se ha unido a #canal
[&lt;strong&gt;2:30p&lt;/strong&gt;] &amp;lt;nuevo&amp;gt; &lt;strong&gt;hola&lt;/strong&gt;
[&lt;strong&gt;2:33p&lt;/strong&gt;] * nuevo se ha ido de #canal&lt;/pre&gt;
&lt;p&gt;A veces ocurre que nos damos cuenta casi 4 horas después de que un usuario nuevo entró y salió.&lt;/p&gt;
&lt;p&gt;Comprendemos que es normal y humano que al ver un canal sin líneas de texto, se perciba como &lt;em&gt;muerto&lt;/em&gt; y que es inútil preguntar. Sin embargo, esperar solamente 3 minutos antes de abandonar el canal no da ni siquiera oportunidad de ver el mensaje. Cuando estamos muy pocos fácilmente pueden pasar horas antes de que alguien vea un mensaje.&lt;/p&gt;
&lt;p&gt;La realidad es que mientras hacemos nuestras labores diarias la ventana de chat está escondida. Las ventanas que usualmente tenemos activas son aquellas de nuestras herramientas de trabajo, no las de chat. Y si estamos en una reunión de trabajo, comiendo, durmiendo, cenando con nuestra familia, etc. nos es imposible enterarnos del chat.&lt;/p&gt;
&lt;p&gt;En resumen, es poco probable estar viendo la pantalla de chat en el momento exacto en que un usuario entra.&lt;/p&gt;
&lt;p&gt;Recuerda que para poder ayudar a alguien que tiene urgencia y prisa alguien tendrá que dejar de lado su actividad actual. La actitud de urgencia en usuarios nuevos es mal vista en IRC, porque significa que se menosprecia el tiempo de los demás participantes.&lt;/p&gt;
&lt;h1 class=&quot;western&quot;&gt;Usa un cliente de escritorio o aplica &lt;i&gt;Pin&lt;/i&gt; en el navegador&lt;/h1&gt;
&lt;p&gt;Hemos notado que abandonar rápido el canal también se da porque es que latoso tener abierta una ventana de navegador. Incluso, es fácil cerrarla por accidente.&lt;/p&gt;
&lt;p&gt;Por eso nosotros no usamos IRC a través del nevagador. En su lugar, usamos un cliente de IRC como &lt;a href=&quot;https://es.wikipedia.org/wiki/X-Chat&quot;&gt;XChat&lt;/a&gt;, &lt;a href=&quot;https://es.wikipedia.org/wiki/Irssi&quot;&gt;irssi&lt;/a&gt;, &lt;a href=&quot;https://es.wikipedia.org/wiki/BitchX&quot;&gt;BitchX&lt;/a&gt;, &lt;a href=&quot;https://es.wikipedia.org/wiki/ChatZilla&quot;&gt;Chatzilla&lt;/a&gt;, &lt;a href=&quot;https://es.wikipedia.org/wiki/Pidgin_(software)&quot;&gt;Pidgin&lt;/a&gt;, &lt;a href=&quot;https://es.wikipedia.org/wiki/Konversation&quot;&gt;Konversation&lt;/a&gt;, etc. Así, puedes dejar tu ventana de chat abierta en fondo. Además, estos clientes emiten una notificación cuando alguien te menciona y resalta esa línea para una fácil distinción visual.&lt;/p&gt;
&lt;p&gt;Como alternativa, algunos navegadores soportan la función &lt;em&gt;Pin&lt;/em&gt;. Esto evita que una pestaña de navegador se cierre por equivocación. Usualmente la encuentras haciendo clic derecho sobre la pestaña.&lt;/p&gt;
&lt;h1 class=&quot;western&quot;&gt;Pregunta directamente&lt;/h1&gt;
&lt;p&gt;Es muy común ver preguntas como esta:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;¿Alguien ha usado Audacity?&lt;/strong&gt;
&amp;lt;voluntario&amp;gt; Hola nuevo. Yo lo uso más o menos.
&amp;lt;nuevo&amp;gt; &lt;strong&gt;Hola voluntario. ¿Por qué truena tanto?&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;Esto es mal visto. El usuario que más comúnmente hace esta pregunta busca un experto para resolver un problema complejo o necesita ser llevado de la mano hacia una respuesta. En ambos casos esto toma &lt;em&gt;mucho tiempo&lt;/em&gt;. Precisamente, en el ejemplo, ambas preguntas hechas son vagas y no permiten llegar a ningún lado.&lt;/p&gt;
&lt;p&gt;Estrictamente hablando, la respuesta es “no sé”. Causas puede haber muchas y cada una se resolvería por alguien con distinto perfil:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Causa&lt;/th&gt;
&lt;th&gt;Quién podría resolver&lt;/th&gt;
&lt;th&gt;Dificultad de diagnóstico&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compilación incorrecta&lt;/td&gt;
&lt;td&gt;Integrador o distribuidor&lt;/td&gt;
&lt;td&gt;Difícil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Falta de una librería&lt;/td&gt;
&lt;td&gt;Integrador o distribuidor&lt;/td&gt;
&lt;td&gt;Difícil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Falta de espacio en disco o RAM&lt;/td&gt;
&lt;td&gt;Tú mismo&lt;/td&gt;
&lt;td&gt;Fácil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Falta de red&lt;/td&gt;
&lt;td&gt;Tú mismo&lt;/td&gt;
&lt;td&gt;Fácil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Falla de &lt;em&gt;hardware&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Tú mismo&lt;/td&gt;
&lt;td&gt;Difícil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug en el programa&lt;/td&gt;
&lt;td&gt;Autor del programa&lt;/td&gt;
&lt;td&gt;Difícil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Problema de permisos&lt;/td&gt;
&lt;td&gt;Según el caso&lt;/td&gt;
&lt;td&gt;Según el caso&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Preguntar directamente permite que todo el canal vea tu pregunta completa desde tu primera intervención sin necesidad de que alguien te lleve de la mano.&lt;/p&gt;
&lt;p&gt;Ejemplos de preguntas que difícilmente te van a llevar a algo (observa el uso de la palabra &amp;#8220;alguien&amp;#8221;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#8220;¿Hay alguien aquí que me pueda ayudar?&amp;#8221;&lt;/li&gt;
&lt;li&gt;&amp;#8220;¿Alguien ha manejado X/Y/Z?&amp;#8221;&lt;/li&gt;
&lt;li&gt;&amp;#8220;¿Alguien ha logrado compilar el kernel antes?&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Decíamos que estas preguntas son mal vistas: se distingue que el usuario espera un diálogo individual con algún voluntario para propósitos de soporte o incluso &lt;em&gt;consultoría&lt;/em&gt;. Para que un voluntario te dedique tiempo él debe dejar alguna de sus actividades de lado. Aunque sin intención, el usuario está manifestando una falta de respeto al tiempo de otros. (Ver la sección &lt;em&gt;Antes, un poco de contexto&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Lo más probable es que alguien ignore la pregunta, desafortunadamente, incluso cuando haya alguien que pueda ayudarte.&lt;/p&gt;
&lt;p&gt;Y no es que no queramos apoyar o resolver dudas sin cobrar, sino que preferimos que las cosas ocurran de otra manera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Que todos se enteren de tu pregunta desde el principio para que si alguien puede y quiere ayudar, así lo haga.&lt;/li&gt;
&lt;li&gt;Que todos se enteren de la conversación completa, pues a todos nos sirve como experiencia.&lt;/li&gt;
&lt;li&gt;Que todos se enteren de la solución.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mejor, lanza tu pregunta directamente y de manera concreta y así la vemos todos desde el principio.&lt;/p&gt;
&lt;h1 class=&quot;western&quot;&gt;&lt;em&gt;Haz&lt;/em&gt;&lt;em&gt; la tarea&lt;/em&gt; antes de preguntar&lt;/h1&gt;
&lt;p&gt;Por &lt;em&gt;hacer la tarea&lt;/em&gt; nos referimos a tu propia labor de búsqueda, investigación y estudio; incluso, a hacer el intento de que funcione lo que pretendes hacer.&lt;/p&gt;
&lt;p&gt;Es muy común esto:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;Hola. ¿Cómo cambio permisos en un archivo en Linux?&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;Hay decenas de páginas que ofrecen respuestas directas a esta pregunta. Están a una búsqueda de distancia. No necesitas de nuestra ayudar para ir a Google y buscar:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;cambio de permisos en linux&lt;/pre&gt;
&lt;p&gt;Entonces la mayoría lo interpretará como que te dio flojera buscar.&lt;/p&gt;
&lt;p&gt;Sin embargo, tal vez el problema no era que no hayas buscado y encontrado la información, sino que leíste y no sabes cómo hacer eso de “&lt;code class=&quot;western&quot;&gt;chmod&lt;/code&gt;” que todas las páginas mencionan. Entonces tu pregunta no fue conveniente. Mejor pregunta directamente y con contexto:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;Hola. Quiero cambiar los permisos en un archivo pero&lt;/strong&gt;
&amp;lt;nuevo&amp;gt; &lt;strong&gt;todas las páginas dicen algo de &quot;chmod&quot;, pero ¿cómo hago eso?&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;Entonces sabemos que debemos guiarte a entrar a la Terminal.&lt;/p&gt;
&lt;p&gt;O tal vez no entiendes lo de los permisos, lo del “&lt;code&gt;664&lt;/code&gt;” y “&lt;code&gt;ug=rw&lt;/code&gt;”. Entonces pregunta:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;Hola. Quiero cambiar los permisos en un archivo pero&lt;/strong&gt;
&amp;lt;nuevo&amp;gt; &lt;strong&gt;me está costando trabajo entender lo del &quot;664&quot; y el &quot;ug=rw&quot;.&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;Hay muchas otras páginas que explican eso claramente, así que seguramente no te daremos un tutorial personalizado, pero sí una liga a una página que consideremos decente y clara. Léela. Lo que pasa es que no sabemos si no le entiendes a nada o si tienes una duda en específico.&lt;/p&gt;
&lt;p&gt;La siguiente pregunta nos permite darte una respuesta concreta sin emplear mucho tiempo, al menos un sí o un no:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;Hola. Me está costando trabajo entender lo del &quot;664&quot; y el&lt;/strong&gt;
&amp;lt;nuevo&amp;gt; &lt;strong&gt;&quot;ug=rw&quot;. En un canal me mandaron a esta página: http://.../&lt;/strong&gt;
&amp;lt;nuevo&amp;gt; &lt;strong&gt;¿Entonces 660 significa &quot;ug=rwx&quot;?&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;Esta pregunta nos da aún más contexto para ayudarte. No sabemos qué pasó en tu proceso de entendimiento, pero te podemos ayudar diciéndote que estás equivocado y que &lt;code class=&quot;western&quot;&gt;660&lt;/code&gt; equivale a &lt;code class=&quot;western&quot;&gt;ug=rw&lt;/code&gt;, no a &lt;code class=&quot;western&quot;&gt;ug=rwx&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Y con eso seguramente saldrán dudas muy específicas.Poco a poco irás corrigiendo y comprendiendo correctamente cómo funcionan los permisos. No es lo mismo que explicarte todo desde cero.&lt;/p&gt;
&lt;h1&gt;Sé paciente al esperar una respuesta&lt;/h1&gt;
&lt;p&gt;Una regla general en IRC es que sólo conteste quien sepa la respuesta, pueda ayudar, o dicho más generalmente, quien pueda y quiera contribuir con la conversación. Procuramos evitar dos situaciones en específico. La primera es generar ruido innecesario:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;¿Alguien sabe si Chromium tiene una opción para abrir URLs
&lt;/strong&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;desde la línea de comandos?&lt;/strong&gt;
&amp;lt;voluntario2&amp;gt; No, sorry.
&amp;lt;voluntario3&amp;gt; Yo no sé.
&amp;lt;voluntario4&amp;gt; Nel.
&amp;lt;voluntario5&amp;gt; Yo no pero tal vez alguien más sepa.
&amp;lt;voluntario6&amp;gt; Usa --new-window. Es una opción no documentada.
&amp;lt;voluntario7&amp;gt; Ni yo.
&amp;lt;voluntario8&amp;gt; Ya somos 7 que no sabemos.
&lt;/pre&gt;
&lt;p&gt;Visualmente se pierde la respuesta de &lt;code&gt;voluntario6&lt;/code&gt; entre tanto ruido para todos, incluso para quienes leen de golpe los últimos mensajes del canal.&lt;/p&gt;
&lt;p&gt;La segunda, y más importante, es evitar que un &amp;#8220;no sé&amp;#8221; se malinterprete como &amp;#8220;nadie sabe&amp;#8221;:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;¿Alguien sabe si Chromium tiene una opción para abrir URLs
&lt;/strong&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;desde la línea de comandos?&lt;/strong&gt;
&amp;lt;voluntario1&amp;gt; No, sorry.
&amp;lt;voluntario2&amp;gt; Yo no sé.
&amp;lt;nuevo&amp;gt; &lt;strong&gt;Bueno, muchas gracias de todos modos.&lt;/strong&gt;
* nuevo se ha ido de #canal
&amp;lt;voluntario3&amp;gt; Usa --new-window... uhh, ya se fue.&lt;/pre&gt;
&lt;h1&gt;Pregunta con contexto&lt;/h1&gt;
&lt;p&gt;Mencionábamos en la sección &lt;em&gt;Pregunta directamente&lt;/em&gt; cómo las preguntas vagas no llevan a ningún lado debido a la amplitud de sus alcances.&lt;/p&gt;
&lt;p&gt;Por eso, parte de preguntar en concreto es incluir brevemente el contexto de la pregunta. Por ejemplo:&lt;/p&gt;
&lt;pre class=&quot;western&quot;&gt;&amp;lt;nuevo&amp;gt; &lt;strong&gt;Hola. Audacity me manda mucho el error&lt;/strong&gt;
&amp;lt;nuevo&amp;gt; &lt;strong&gt;&quot;Imposible escribir a archivo&quot; y luego truena.&lt;/strong&gt;
&amp;lt;voluntario1&amp;gt; nuevo, ¿ya revisaste que tu disco duro tenga espacio?
&amp;lt;voluntario2&amp;gt; nuevo, ¿no tienes problemas de permisos?
&amp;lt;voluntario3&amp;gt; nuevo, ¿con qué usuario lo estás ejecutando?&lt;/pre&gt;
&lt;p&gt;El mensaje de error, además de dar un punto de partida, ofrece una idea de por dónde comenzar a atacar el problema.&lt;/p&gt;
&lt;h1 class=&quot;western&quot;&gt;Respeta el tema del canal&lt;/h1&gt;
&lt;p&gt;¿Entrarías a un canal de leyes preguntando sobre ingeniería de aviones? No. De la misma manera, nuestro canal tiene un tema central.&lt;/p&gt;
&lt;p&gt;Un truco: en el espacio de texto por donde hablas puedes mandar el texto &lt;code class=&quot;western&quot;&gt;/topic&lt;/code&gt; (con diagonal al inicio). El canal de chat te va a contestar inmediatamente con el tema del canal. A veces ahí ponemos avisos y ligas a páginas útiles que contestan preguntas frecuentes.&lt;/p&gt;
&lt;h1&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;Todos hemos sido usuarios nuevos y hemos pasado por lo mismo. Los voluntarios del canal no sólo tenemos identificados estos patrones de comportamiento sino que &lt;em&gt;comprendemos&lt;/em&gt; por qué suceden. Todos fuimos usuarios nuevos alguna vez y hemos pasado por lo mismo. Ahora que somos un poco más experimentados observamos que nuestros errores se repiten en otros usuarios nuevos. Es simplemente que juzgar a partir de la evaluación de condiciones inmediatas simplemente forma parte de nuestra evolución como seres humanos.&lt;/p&gt;
&lt;p&gt;Gracias por leer hasta aquí, sinceramente, y de nuevo, &lt;strong&gt;bienvenido a nuestro canal&lt;/strong&gt;.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Fechas para próximos Raspberry Pi Bootcamps en Cuernavaca</title>
		<link href="http://kwame.informatux.net/?p=805"/>
		<id>http://kwame.informatux.net/?p=805</id>
		<updated>2016-03-28T19:26:51+00:00</updated>
		<content type="html">&lt;p&gt;Después de nuestro 1er Raspberry Pi Bootcamp en Cuernavaca, ya tenemos la lista de las siguientes fechas, aquí la lista&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abril 16, 2016&lt;/li&gt;
&lt;li&gt;Abril 30, 2016&lt;/li&gt;
&lt;li&gt;Mayo 14, 2016&lt;/li&gt;
&lt;li&gt;Mayo 28, 2016&lt;/li&gt;
&lt;li&gt;Junio 11, 2016&lt;/li&gt;
&lt;li&gt;Junio 25, 2016&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para recibir más información nos puedes escribir a raspi@informatux.net&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;El Raspberry Pi es una computadora de bajo costo de el tamaño de una tarjeta de crédito que se conecta a un monitor o televisión y utiliza un teclado y ratón común.&lt;br /&gt;
Este dispositivo aunque pequeño da la oportunidad a gente de toda edad de explorar una plataforma computacional aparte de permitir el aprendizaje de una manera sencilla e interactiva de programación con lenguages como Scratch y Python.&lt;br /&gt;
Es capaz de hacer cualquier tarea que una computadora de escritorio o laptop, desde navegar internet hasta reproducir video de alta definición.&lt;/p&gt;
&lt;p&gt;Por su fácil manejo, el Raspberry Pi ha sido utilizado en diversos proyectos, ha sido utilizado en proyectos para crear dispositivos musicales, sensores de movimiento y estaciones meteorológicas.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Fechas+para+pr%C3%B3ximos+Raspberry+Pi+Bootcamps+en+Cuernavaca+http%3A%2F%2Fis.gd%2FVGGjtM&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Fechas+para+pr%C3%B3ximos+Raspberry+Pi+Bootcamps+en+Cuernavaca+http%3A%2F%2Fis.gd%2FVGGjtM&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Caddeus 0.4</title>
		<link href="http://blog.alvarezp.org/2016/03/20/caddeus-0-4/"/>
		<id>http://blog.alvarezp.org/?p=3291</id>
		<updated>2016-03-20T20:00:08+00:00</updated>
		<content type="html">&lt;p&gt;He liberado &lt;a title=&quot;Caddeus 0.4&quot; href=&quot;https://github.com/alvarezp/caddeus/releases/tag/v0.4&quot;&gt;Caddeus 0.4&lt;/a&gt;. &lt;a title=&quot;Caddeus&quot; href=&quot;https://github.com/alvarezp/caddeus&quot;&gt;Caddeus&lt;/a&gt; es un archivo GNUmakefile ya preparado con orientación a la calidad estricta de programas hechos en C.&lt;/p&gt;
&lt;p&gt;Cuenta con un ejecutor de pruebas óptimo, banderas CFLAGS estrictas, revisión automática de código con Cppcheck, análisis estático con Clang y búsqueda de fugas de memoria con Valgrind, en caso de encontrar estas herramientas instaladas en el sistema.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Raspberry Pi Bootcamp – presentación UNIVAC</title>
		<link href="http://kwame.informatux.net/?p=794"/>
		<id>http://kwame.informatux.net/?p=794</id>
		<updated>2016-03-16T01:11:07+00:00</updated>
		<content type="html">&lt;div class=&quot;&quot;&gt;
&lt;div class=&quot;_1mf _1mj&quot;&gt;&lt;span&gt;&lt;span&gt;El día de hoy tuvimos la oportunidad de estar en la UNIVAC con alumnos de ingeniería para presentar el Raspberry Pi Bootcamp a celebrarse este próximo Sábado 19 de Marzo en Cuernavaca. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;_1mf _1mj&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;_1mf _1mj&quot;&gt;Para recibir más información nos puedes escribir a kwame@informatux.net&lt;/div&gt;
&lt;div class=&quot;_1mf _1mj&quot;&gt;&lt;img class=&quot;alignleft size-medium wp-image-795&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5677-300x200.jpg&quot; alt=&quot;IMG_5677&quot; width=&quot;300&quot; height=&quot;200&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-796&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5678-150x150.jpg&quot; alt=&quot;IMG_5678&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-797&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5679-150x150.jpg&quot; alt=&quot;IMG_5679&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-798&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5680-150x150.jpg&quot; alt=&quot;IMG_5680&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-799&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5688-150x150.jpg&quot; alt=&quot;IMG_5688&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-800&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5690-150x150.jpg&quot; alt=&quot;IMG_5690&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-801&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5700-150x150.jpg&quot; alt=&quot;IMG_5700&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt; &lt;img class=&quot;alignleft size-thumbnail wp-image-802&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/IMG_5701-150x150.jpg&quot; alt=&quot;IMG_5701&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+%E2%80%93+presentaci%C3%B3n+UNIVAC+http%3A%2F%2Fis.gd%2FZ0LIX0&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+%E2%80%93+presentaci%C3%B3n+UNIVAC+http%3A%2F%2Fis.gd%2FZ0LIX0&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Raspberry Pi Bootcamp – Zero demo</title>
		<link href="http://kwame.informatux.net/?p=787"/>
		<id>http://kwame.informatux.net/?p=787</id>
		<updated>2016-03-09T02:50:11+00:00</updated>
		<content type="html">&lt;p&gt;El Raspberry Pi es una computadora de bajo costo de el tamaño de una tarjeta de crédito que se conecta a un monitor o televisión y utiliza un teclado y ratón común. &lt;img class=&quot;size-thumbnail wp-image-785 alignright&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/20151228_160635-150x150.jpg&quot; alt=&quot;20151228_160635&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;br /&gt;
Este dispositivo aunque pequeño da la oportunidad a gente de toda edad de explorar una plataforma computacional aparte de permitir el aprendizaje de una manera sencilla e interactiva de programación con lenguages como Scratch y Python.&lt;br /&gt;
Es capaz de hacer cualquier tarea que una computadora de escritorio o laptop, desde navegar internet hasta reproducir video de alta definición.&lt;/p&gt;
&lt;p&gt;Por su fácil manejo, el Raspberry Pi ha sido utilizado en diversos proyectos, ha sido utilizado en proyectos para crear dispositivos musicales, sensores de movimiento y estaciones meteorológicas.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignleft wp-image-789&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/tabla-rasp.png&quot; alt=&quot;tabla-rasp&quot; width=&quot;509&quot; height=&quot;250&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+%E2%80%93+Zero+demo+http%3A%2F%2Fis.gd%2FA206OQ&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+%E2%80%93+Zero+demo+http%3A%2F%2Fis.gd%2FA206OQ&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Raspberry Pi Bootcamp – Camera board</title>
		<link href="http://kwame.informatux.net/?p=783"/>
		<id>http://kwame.informatux.net/?p=783</id>
		<updated>2016-03-08T04:12:10+00:00</updated>
		<content type="html">&lt;p&gt;&lt;span&gt;&lt;img class=&quot;alignleft size-thumbnail wp-image-785&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/20151228_160635-150x150.jpg&quot; alt=&quot;20151228_160635&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;Hablando del Raspberry Pi, sin importar su tamaño, es un equipo de cómputo totalmente completo. En este curso vamos a ver como conectar el Raspberry Pi para hacer uso de sus funciones básicas. Vas a aprender cómo interactuar con el Pi y como interactuar con su hardware. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Algunos de los conceptos que vamos a trabajar son:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Utilizar las funciones básicas del Raspberry Pi&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Conocer las capacidades del Raspberry Pi&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Instalar la versión más reciente de Raspbian &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Configurar el Raspberry Pi para poder interactuar con él localmente y de &lt;/span&gt; &lt;span&gt;manera remota por medio de VNC y SSH&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Comandos básicos de BASH para interactuar con Raspbian &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Programación con Scratch&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Usar la Raspberry Pi Cam para crear un timelapse&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Utilizar la interfaz GPIO en el Raspberry Pi para poder controlar hardware&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Para más información favor de escribir a &lt;a href=&quot;mailto:kwame@informatux.net&quot; target=&quot;_blank&quot;&gt;kwame@informatux.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+%E2%80%93+Camera+board+http%3A%2F%2Fis.gd%2F5KlN7s&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+%E2%80%93+Camera+board+http%3A%2F%2Fis.gd%2F5KlN7s&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Raspberry Pi Bootcamp en Cuernavaca</title>
		<link href="http://kwame.informatux.net/?p=776"/>
		<id>http://kwame.informatux.net/?p=776</id>
		<updated>2016-03-04T04:00:57+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img class=&quot;alignleft size-thumbnail wp-image-778&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2016/03/PiZero-150x150.jpg&quot; alt=&quot;PiZero&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;El próximo 19 de Marzo del 2016 se llevará a cabo el Raspberry Pi Bootcamp.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Este curso está enfocado para aquellas personas que quieran explorar las posibilidades y capacidades del Raspberry Pi.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;El curso no asume que los participantes tienen previa experiencia en programación o Linux, sin embargo, un poco de conocimiento de Linux y conocimiento del lenguage de programación Python sería de gran ayuda.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Si no cuentas con conocimiento previo de Linux o Python no te preocupes, en este curso se encuentran secciones que abarcan los pasos básicos de uso de Linux y Python.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Hablando del Raspberry Pi, sin importar su tamaño, es un equipo de cómputo totalmente completo. En este curso vamos a ver como conectar el Raspberry Pi para hacer uso de sus funciones básicas. Vas a aprender cómo interactuar con el Pi y como interactuar con su hardware.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;El objetivo de este curso es realizar 2 proyectos:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span&gt;El primer proyecto te enseñará como utilizar Python para hacer uso de la cámara y crear un timelapse&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;El segundo proyecto está enfocado a controlar leds utilizando los pines GPIO, todo por medio de Python, utilizando el módulo GPIOZero para Python.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span&gt;El tiempo apróximado de este curso es de 7 horas.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Hardware provisto para usar durante el curso:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Raspberry Pi 2 Modelo B&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Raspberry Pi Camera Board&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Capacitive Touch Sensor Hat&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Protoboard&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Leds y resistencias&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Teclado y mouse&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Monitor&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Más informes en kwame@informatux.net&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+en+Cuernavaca+http%3A%2F%2Fis.gd%2Fyk7neW&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi+Bootcamp+en+Cuernavaca+http%3A%2F%2Fis.gd%2Fyk7neW&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">GPIO Zero: a friendly Python API for physical computing – Raspberry Pi</title>
		<link href="http://kwame.informatux.net/?p=774"/>
		<id>http://kwame.informatux.net/?p=774</id>
		<updated>2016-02-11T21:17:27+00:00</updated>
		<content type="html">&lt;blockquote&gt;&lt;p&gt;Physical computing is one of the most engaging classroom activities, and it’s at the heart of most projects we see in the community. From flashing lights to IoT smart homes, the Pi’s GPIO pins make programming objects in the real world accessible to everybody. Some three years ago, Ben Croston created a Python library called RPi.GPIO, […]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Source: &lt;em&gt;&lt;a href=&quot;https://www.raspberrypi.org/blog/gpio-zero-a-friendly-python-api-for-physical-computing/&quot;&gt;GPIO Zero: a friendly Python API for physical computing &amp;#8211; Raspberry Pi&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=GPIO+Zero%3A+a+friendly+Python+API+for+physical+computing+%E2%80%93+Raspberry+Pi+http%3A%2F%2Fis.gd%2Fa9n8q5&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=GPIO+Zero%3A+a+friendly+Python+API+for+physical+computing+%E2%80%93+Raspberry+Pi+http%3A%2F%2Fis.gd%2Fa9n8q5&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Raspberry Pi: Weather Monitoring Project Outline and Resources</title>
		<link href="http://kwame.informatux.net/?p=770"/>
		<id>http://kwame.informatux.net/?p=770</id>
		<updated>2016-01-19T18:08:49+00:00</updated>
		<content type="html">&lt;p&gt;Un buen video acerca de como crear una estación meteorológica con Raspberry Pi&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi%3A+Weather+Monitoring+Project+Outline+and+Resources+http%3A%2F%2Fis.gd%2FCHV11X&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Raspberry+Pi%3A+Weather+Monitoring+Project+Outline+and+Resources+http%3A%2F%2Fis.gd%2FCHV11X&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">generate_timedivisions() para PostgreSQL</title>
		<link href="http://blog.alvarezp.org/2015/09/17/generate_timedivisions-para-postgresql/"/>
		<id>http://blog.alvarezp.org/?p=3243</id>
		<updated>2015-09-18T06:47:27+00:00</updated>
		<content type="html">&lt;p&gt;En PostgreSQL, supongamos que queremos generar todos los períodos mensuales entre &amp;#8216;2015-09-12 23:50:00&amp;#8217; y &amp;#8216;2015-11-22 00:20:00&amp;#8217; con corte al inicio del día 8.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3243&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Se puede crear la siguiente función:&lt;/p&gt;
&lt;pre class=&quot;source&quot;&gt;&lt;code&gt;
CREATE OR REPLACE FUNCTION generate_timedivisions(ts_start timestamp, ts_end timestamp, period varchar, period_offset interval = '0') RETURNS TABLE(tr_start timestamp, tr_end timestamp) AS $$
DECLARE
    end_of_test_interval timestamp;
BEGIN
    SELECT date_trunc(period, ts_start) + ('1 ' || period)::interval + period_offset INTO end_of_test_interval;
    WHILE end_of_test_interval &amp;lt; ts_end LOOP
        RETURN QUERY SELECT ts_start, end_of_test_interval;
        ts_start = end_of_test_interval;
        end_of_test_interval := ts_start + ('1 ' || period)::interval;
    END LOOP;
    RETURN QUERY SELECT ts_start, ts_end;
END;
$$ LANGUAGE plpgsql;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Y usarla de esta manera:&lt;/p&gt;
&lt;pre class=&quot;source&quot;&gt;&lt;code&gt;
-- Obsérvese que se usa '7 day' y no '8 day' por las siguientes razones:
-- 1. los días comienzan a contarse con 1.
-- 2. el último parámetro es 'interval'
-- 3. Se pide el corte al *inicio* del día 8.
SELECT * from generate_timedivisions('2015-09-12 23:50:00', '2015-11-22 00:20:00', 'month', '7 day');

      tr_start       |       tr_end        
---------------------+---------------------
 2015-09-12 23:50:00 | 2015-10-08 00:00:00
 2015-10-08 00:00:00 | 2015-11-08 00:00:00
 2015-11-08 00:00:00 | 2015-11-22 00:20:00
&lt;/code&gt;&lt;/pre&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">How to Shrink an LVM Volume [Wiki] | NDCHost</title>
		<link href="http://kwame.informatux.net/?p=766"/>
		<id>http://kwame.informatux.net/?p=766</id>
		<updated>2015-09-16T13:28:45+00:00</updated>
		<content type="html">&lt;p&gt;The following steps will show you how to shrink an LVM volume. In this example we will be shrinking volume VolGroup00-LogVol00 down to 20GB. &lt;strong&gt;Note:&lt;/strong&gt; This can and will cause data loss if performed improperly or on a volume that you attempt to shrink below the current volume usage. With that said, the steps are as follows:&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;Source: &lt;em&gt;&lt;a href=&quot;https://www.ndchost.com/wiki/server-administration/shrink-lvm-volume&quot;&gt;How to Shrink an LVM Volume [Wiki] | NDCHost&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=How+to+Shrink+an+LVM+Volume+%5BWiki%5D+%7C+NDCHost+http%3A%2F%2Fis.gd%2FXFMXrj&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=How+to+Shrink+an+LVM+Volume+%5BWiki%5D+%7C+NDCHost+http%3A%2F%2Fis.gd%2FXFMXrj&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Asiste al Software Freedom Day Tijuana 2015</title>
		<link href="http://blog.alvarezp.org/2015/09/07/asiste-al-software-freedom-day-tijuana-2015/"/>
		<id>http://blog.alvarezp.org/?p=3236</id>
		<updated>2015-09-08T01:12:13+00:00</updated>
		<content type="html">&lt;p&gt;¡Nos vemos el sábado 19 de septiembre de 2015 en el &lt;a href=&quot;http://sfd.gultij.org/&quot;&gt;Software Freedom Day Tijuana 2015&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;En este evento tendremos por primera vez dos salas con actividades simultáneas. ¡Será como un minicongreso! Tendremos los talleres mencionados y un área de demostraciones donde podrás interactuar de primera mano con los programas de Software Libre.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3236&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Conoce todos los detalles y regístrate en &lt;a href=&quot;http://sfd.gultij.org/&quot;&gt;http://sfd.gultij.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como siempre, te pido que nos ayudes a pasar la voz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dale &amp;#8216;Invitar&amp;#8217; y &amp;#8216;Compartir&amp;#8217; a tus amigos al &lt;a href=&quot;https://www.facebook.com/events/131618730515970/&quot;&gt;evento en Facebook&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Dale &amp;#8216;Retweet&amp;#8217; al &lt;a href=&quot;https://twitter.com/gultij/status/640983613744500737&quot;&gt;post en Twitter&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Infinitas gracias a nuestros expositores, voluntarios y patrocinadores.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.alvarezp.org/wp-content/uploads/2015/09/sfd-flyer-50.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-3237&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2015/09/sfd-flyer-50.jpg&quot; alt=&quot;sfd-flyer-50&quot; width=&quot;825&quot; height=&quot;638&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">10 Job Interview Questions for Linux System Administrators | Linux.com</title>
		<link href="http://kwame.informatux.net/?p=753"/>
		<id>http://kwame.informatux.net/?p=753</id>
		<updated>2015-08-03T17:01:01+00:00</updated>
		<content type="html">&lt;blockquote&gt;&lt;p&gt;&lt;img class=&quot;alignleft size-medium wp-image-755&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2015/08/questions-flickr-cc-300x201.jpg&quot; alt=&quot;questions-flickr-cc&quot; width=&quot;300&quot; height=&quot;201&quot; /&gt;   SysAdmins of all experience levels can benefit from brushing up on their job interview skills if they want to find and land a great new job.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Source: &lt;em&gt;&lt;a href=&quot;https://www.linux.com/news/featured-blogs/200-libby-clark/842913-10-job-interview-questions-for-linux-sysadmins&quot;&gt;10 Job Interview Questions for Linux System Administrators | Linux.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=10+Job+Interview+Questions+for+Linux+System+Administrators+%7C+Linux.com+http%3A%2F%2Fis.gd%2FbvPGEp&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=10+Job+Interview+Questions+for+Linux+System+Administrators+%7C+Linux.com+http%3A%2F%2Fis.gd%2FbvPGEp&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Crecimiento y declive de la comunidad</title>
		<link href="http://blog.alvarezp.org/2015/07/28/crecimiento-y-declive-de-la-comunidad/"/>
		<id>http://blog.alvarezp.org/?p=3224</id>
		<updated>2015-07-29T01:45:48+00:00</updated>
		<content type="html">&lt;p&gt;En el grupo de Facebook &lt;a href=&quot;https://www.facebook.com/groups/gultij/10153387106906049&quot;&gt;Gultij &amp;#8211; Grupo de Usuarios de GNU/Linux de Tijuana&lt;/a&gt;, Gustavo pregunta lo siguiente. He traducido las citas que originalmente estaban en inglés.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Momentum de las comunidades del software libre:&lt;/p&gt;
&lt;p&gt;Veo un post en los grupos de OpenSuSE que dice algo así como:&lt;/p&gt;
&lt;p&gt;«Googleé grupos de usuarios de Linux en mi región y encontré que la mayoría de los sitios no han sido actualizados en años. ¿Comenzó a morir Linux mientras estuve ausente?»&lt;/p&gt;
&lt;p&gt;Y una de las respuestas, que me pareció acertada:&lt;/p&gt;
&lt;p&gt;«Sí, la comunidad es una sombra de lo que alguna vez fue. El Código Abierto y la tecnología ya no es tan padre y la nube es un enorme parásito adjuntado a la comunidad Open Source.»&lt;/p&gt;
&lt;p&gt;Me parece acertada la última línea. ¿Se ha vuelto la comunidad FLOSS simplemente un producto / mercancía para los intereses de otras compañías o proyectos, mas allá de la temática filosófica? ¿Qué opinan?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span id=&quot;more-3224&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Primero hay que detectar las falacias, y en la pregunta original hay una grave. No es lógico implicar &amp;#8220;sitios de los GUL sin actualizar →  Linux comienza a morir&amp;#8221;, esa es una conclusión un tanto melodramática.&lt;/p&gt;
&lt;p&gt;Lo que sí es cierto es que la comunidad se ha transformado. No es que la comunidad venga a menos sino que se ha transformado gracias al surgimiento de otras fuentes de información centralizadas en la nube. Al tener un alcance mayor, es más fácil encontrar respuestas de mayor calidad en estos foros; es natural. En otras palabras, la comunidad global se ha fortalecido y &lt;em&gt;algunas&lt;/em&gt; comunidades locales presentan declives.&lt;/p&gt;
&lt;p&gt;El beneficio de los GUL locales es menor en apariencia pero sólo lo es en cuanto al GUL como fuente de información. Hay otros beneficios más difíciles de apreciar y &lt;a href=&quot;https://twitter.com/mhcornejo&quot;&gt;Mario H. Cornejo&lt;/a&gt; los describe muy bien en la publicación &lt;a href=&quot;http://www.developeando.com/2015/07/presentar-en-un-grupo-de-usuarios.html&quot;&gt;Presentar en un grupo de usuarios&lt;/a&gt; de su blog &lt;a href=&quot;http://www.developeando.com/&quot;&gt;Developeando&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sin embargo, a pesar de este surgimiento de información centralizada, modificar nuestro consumo hacia la nube nos hace dependientes de la misma (y en consecuencia de E. U. A. y el dólar), en lugar de ejercer la libertad de nuestro propio cómputo. No estoy lanzando culpas: los costos y el mercado dirigen parte de este movimiento, pero la disculpa no elimina la realidad.&lt;/p&gt;
&lt;p&gt;Hay que diferenciar &lt;em&gt;audiencia&lt;/em&gt; de &lt;em&gt;comunidad&lt;/em&gt;. Hay que diferenciar a quienes buscan en el grupo de usuarios como mera fuente de información (la &lt;em&gt;audiencia&lt;/em&gt;, que &lt;em&gt;consume&lt;/em&gt; el valor del grupo) de quienes aportan con trabajo, participación, código y contenido original (la &lt;em&gt;comunidad&lt;/em&gt;, que&lt;em&gt; genera&lt;/em&gt; el valor del grupo).&lt;/p&gt;
&lt;p&gt;El perfil de la gente que genera valor es diferente del perfil de la gente que lo consume. No resulta sorpresivo que —salvo algunas excepciones— la mayoría de la gente que genera valor también está presente en el canal de IRC &lt;a href=&quot;irc://irc.freenode.net/#gultij&quot;&gt;#gultij&lt;/a&gt; en la red Freenode.&lt;/p&gt;
&lt;p&gt;He visto —en otros lugares— que la gente dice &amp;#8220;¿cuándo es la siguiente presentación?&amp;#8221; pero nadie dice &amp;#8220;yo ofrezco este tema&amp;#8221;. Eso no es comunidad, eso es audiencia. Con esto me refiero a que los sitios Web de los LUG no se actualizan solos; algún humano debe generar el contenido (de preferencia original, no sólo enlaces a blogs).&lt;/p&gt;
&lt;p&gt;Al final del día, el éxito de los GUL depende únicamente de la gente. Si la gente no aporta con trabajo a un GUL, éste automáticamente se desvanece. Es muy fácil:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si pocos trabajan para el GUL, la densidad de trabajo es muy alta y los frutos de la comunidad son bajos; los voluntarios se desmotivan y se van.&lt;/li&gt;
&lt;li&gt;Aunque haya actividad, si no se da la apariencia de dicha actividad, los externos no la perciben (como ocurre en la pregunta original) y no participan; entonces el trabajo se mantiene concentrado en unos cuantos&amp;#8230; y ver punto anterior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, a la pregunta original —la que fue citada por Gustavo— yo contestaría: &lt;em&gt;los grupos de usuarios de tu área comenzaron a morir &lt;strong&gt;debido&lt;/strong&gt; a que estuviste ausente&lt;/em&gt;.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Software Freedom Day, Tijuana 2015</title>
		<link href="http://blog.alvarezp.org/2015/07/15/software-freedom-day-tijuana-2015/"/>
		<id>http://blog.alvarezp.org/?p=3217</id>
		<updated>2015-07-15T14:39:55+00:00</updated>
		<content type="html">&lt;p&gt;La fecha para el Software Freedom Day Tijuana 2015 está establecida. Será el sábado 19 de septiembre de 2015.&lt;/p&gt;
&lt;p&gt;¡Bienvenidos presentadores! Envía tu propuesta antes del 31 de julio a &lt;a href=&quot;http://sfd.gultij.org/&quot;&gt;http://sfd.gultij.org/&lt;/a&gt;&lt;/p&gt;
&lt;div id=&quot;attachment_3218&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://sfd.gultij.org/&quot;&gt;&lt;img class=&quot;size-full wp-image-3218&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2015/07/11696628_831478116959232_8320109755700117617_o.png&quot; alt=&quot;Regístrate en http://sfd.gultij.org/&quot; width=&quot;1200&quot; height=&quot;800&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;¡Comparte tus conocimientos! Regístrate en &lt;a href=&quot;http://sfd.gultij.org/&quot;&gt;http://sfd.gultij.org/&lt;/a&gt; y presenta en el Software Freedom Day, Tijuana 2015&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Flash plugin update on Debian 8</title>
		<link href="http://kwame.informatux.net/?p=749"/>
		<id>http://kwame.informatux.net/?p=749</id>
		<updated>2015-06-29T17:55:11+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img class=&quot;alignleft size-thumbnail wp-image-758&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2015/06/flash-logo-150x126.png&quot; alt=&quot;flash-logo&quot; width=&quot;150&quot; height=&quot;126&quot; /&gt;   Just a quick reminder on how to upgrade your flash-plugin install in Debian 8&lt;/p&gt;
&lt;p&gt;update-flashplugin-nonfree &amp;#8211;install&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Flash+plugin+update+on+Debian+8+http%3A%2F%2Fis.gd%2FbOqnFi&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Flash+plugin+update+on+Debian+8+http%3A%2F%2Fis.gd%2FbOqnFi&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">A veces un “if” es más barato</title>
		<link href="http://blog.alvarezp.org/2015/05/21/a-veces-un-if-es-mas-barato/"/>
		<id>http://blog.alvarezp.org/?p=3135</id>
		<updated>2015-05-22T00:27:50+00:00</updated>
		<content type="html">&lt;p&gt;En &lt;a href=&quot;https://www.facebook.com/groups/31167573201/permalink/10152852189008202/&quot;&gt;una interesante discusión&lt;/a&gt; en el &lt;a href=&quot;https://www.facebook.com/groups/31167573201/&quot;&gt;grupo de Facebook&lt;/a&gt; de la &lt;a href=&quot;http://tjnet.org/&quot;&gt;Comunidad .NET Tijuana&lt;/a&gt; surgió el tema de las microoptimizaciones, en particular el uso de evaluación en corto circuito y el ahorro de &lt;code&gt;if&lt;/code&gt;s &amp;#8220;que son muy costosos al CPU&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Mi último argumento:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A lo que iba es que el short-circuit, si bien te puede ahorrar ifs, también puede darte sorpresas como brincarse validaciones de seguridad. Ha ocurrido en otros lenguajes. Yo prefiero un if explicito, que en realidad no es nada caro al CPU, a menos que no diseñes bien tus condiciones.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Entonces el autor original hace un planteamiento: ¿Cuál de los dos siguientes programas es más rápido?&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3135&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Programa X:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; 1000; i++)
{
    if (x &amp;gt;= 10)
    {
        x = 0;
    }
    else
    {
        x++;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Programa Y:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;int y = 0;
for (int i = 0; i &amp;lt; 1000; i++)
{
    y = (y + 1) % 10;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A simple vista podría parecer que el programa X, el que tiene &lt;code&gt;if&lt;/code&gt;s, es más complejo: son más líneas y se divide el flujo del programa.&lt;/p&gt;
&lt;p&gt;Pero, como siempre, la respuesta no es tan sencilla. Entonces se abre la caja de pandora. Para poder contestar sin experimentación se requiere de un conocimiento profundo y preciso de varios comportamientos que influyen en el rendimiento de un programa. Lo mejor que podemos hacer es el experimento.&lt;/p&gt;
&lt;h2&gt;¿En realidad importa?&lt;/h2&gt;
&lt;p&gt;Compilaré los siguientes programas en C:&lt;/p&gt;
&lt;p&gt;Programa X:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;#define LIMIT 1000
int main(void) {
    int x = 0;
    for (int i = 0; i &amp;lt; LIMIT; i++)
    {
        if (x &amp;gt;= 10)
        {
            x = 0;
        }
        else
        {
            x++;
        }
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Programa Y:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;#define LIMIT 1000
int main(void) {
    int y = 0;
    for (int i = 0; i &amp;lt; LIMIT; i++)
    {
        y = (y + 1) % 10;
    }
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Veamos cuál es más rápido:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ c99 -o x x.c
$ c99 -o y y.c
$ time ./x

real	0m0.001s
user	0m0.000s
sys	0m0.001s
$ time ./y

real	0m0.001s
user	0m0.000s
sys	0m0.001s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Háganle caso al renglón &lt;em&gt;user&lt;/em&gt;. En realidad no importa a cuál le hagan caso, los resultados de los dos programas son iguales.&lt;/p&gt;
&lt;p&gt;Evidentemente ¡ambos programas son demasiado rápidos siquiera para ser medidos &lt;em&gt;a pesar de que se trata de 1,000 iteraciones&lt;/em&gt;! Es decir, si hay una diferencia, es claro que ésta es menor a 1 ms. Realmente no nos importa.&lt;/p&gt;
&lt;p&gt;Sin embargo, si estamos programando un sistema de manejo masivo de información (como un DBMS), esto podría resultar en una diferencia considerable. Por eso estos sistemas se escriben en C. En esos casos no sólo basta saber si importa, sino &lt;em&gt;qué tanto&lt;/em&gt; importa.&lt;/p&gt;
&lt;h2&gt;Aumentemos el límite a 1,000,000&lt;/h2&gt;
&lt;p&gt;Qué bueno que definí el límite en una línea independiente, así puedo usar &lt;code&gt;sed&lt;/code&gt; para modificar los archivos y que quede de manifiesto en la salida que pego a continuación.&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ sed -i -re 's/^#define LIMIT.*$/#define LIMIT 1000000/' x.c y.c
$ 
$ cat x.c
#define LIMIT 1000000
int main(void) {
    int x = 0;
    for (int i = 0; i &amp;lt; LIMIT; i++)
    {
        if (x &amp;gt;= 10)
        {
            x = 0;
        }
        else
        {
            x++;
        }
    }
    return 0;
}

$ cat y.c
#define LIMIT 1000000
int main(void) {
    int y = 0;
    for (int i = 0; i &amp;lt; LIMIT; i++)
    {
        y = (y + 1) % 10;
    }
    return 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nuestra modificación funcionó. El límite quedó a 1,000,000. Compilemos:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ c99 -o x x.c
$ c99 -o y y.c&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Compila correctamente. ¿Cómo quedaron los tiempos?&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ time ./x

real	0m0.005s
user	0m0.005s
sys	0m0.000s
$ time ./y

real	0m0.012s
user	0m0.012s
sys	0m0.000s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se asoma una ligera tendencia a favor del programa X. Sin embargo es prácticamente negligible. ¡Estamos hablando de 7 ns de diferencia por iteración!&lt;/p&gt;
&lt;h2&gt;Probemos con 1,000,000,000 de iteraciones&lt;/h2&gt;
&lt;p&gt;Sin embargo, los números aún son muy chicos como para tener suficiente resolución. Cualquier pequeño efecto pasajero sobre la máquina nos podría perjudicar en la medición. Una manera barata de mejorar esto es aumentando a 1,000,000,000 de iteraciones.&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ sed -i -re 's/^#define LIMIT.*$/#define LIMIT 1000000000/' x.c y.c;
$ c99 -o x x.c
$ c99 -o y y.c
$ time ./x

real	0m2.737s
user	0m2.735s
sys	0m0.000s
$ time ./y

real	0m8.827s
user	0m8.816s
sys	0m0.000s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ya se observan valores más medibles: la diferencia es de 6 ns por iteración. Esta diferencia radica en que entre más iteraciones, los efectos de la carga del programa desde disco (o caché de disco), segmentación de memoria e inicialización de las librerías se reducen en comparación.&lt;/p&gt;
&lt;h2&gt;Niveles de optimización en los compiladores&lt;/h2&gt;
&lt;p&gt;GCC soporta varios niveles de optimización ¡y vaya que tienen efecto! ¿Qué pasa si medimos el tiempo de ejecución de los programas con 1,000,000,000 de iteraciones utilizando diferentes niveles de &lt;em&gt;mágicas optimizaciones&lt;/em&gt; del compilador?&lt;/p&gt;
&lt;p&gt;Para compilarlos probaremos las banderas &lt;code&gt;-O0&lt;/code&gt;, &lt;code&gt;-O1&lt;/code&gt;, &lt;code&gt;-O2&lt;/code&gt;, &lt;code&gt;-O3&lt;/code&gt;, &lt;code&gt;-Ofast&lt;/code&gt; y &lt;code&gt;-Os&lt;/code&gt;. Por ejemplo, para compilar con el nivel de optimización 1, usaríamos la siguiente instrucción:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ c99 -O1 -o x x.c&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estos son los resultados, medidos en segundos:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel -O&lt;/th&gt;
&lt;th&gt;X&lt;/th&gt;
&lt;th&gt;Y&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;2.734&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.806&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;td&gt;1.450&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.339&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;fast&lt;/th&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;s&lt;/th&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Dos observaciones interesantes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;En &lt;code&gt;-O1&lt;/code&gt;, el programa Y funciona más rápido que el programa X.&lt;/li&gt;
&lt;li&gt;A partir de &lt;code&gt;-O2&lt;/code&gt; ¡el tiempo se desploma a cero!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pero no todo es tan simple&amp;#8230;&lt;/p&gt;
&lt;h2&gt;Los compiladores son muy astutos, parte 1&lt;/h2&gt;
&lt;p&gt;Comparemos el código generado por &lt;code&gt;-O0&lt;/code&gt; contra el código generado por &lt;code&gt;-O2&lt;/code&gt; para el programa X:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ c99 &lt;strong&gt;-O0&lt;/strong&gt; -o x x.c
$ gdb -batch -ex 'file x' -ex 'disassemble main'
Dump of assembler code for function main:
   0x00000000004004ed &amp;lt;+0&amp;gt;:	push   %rbp
   0x00000000004004ee &amp;lt;+1&amp;gt;:	mov    %rsp,%rbp
   0x00000000004004f1 &amp;lt;+4&amp;gt;:	movl   $0x0,-0x8(%rbp)
   0x00000000004004f8 &amp;lt;+11&amp;gt;:	movl   $0x0,-0x4(%rbp)
   0x00000000004004ff &amp;lt;+18&amp;gt;:	jmp    0x400518 &amp;lt;main+43&amp;gt;
   0x0000000000400501 &amp;lt;+20&amp;gt;:	cmpl   $0x9,-0x8(%rbp)
   0x0000000000400505 &amp;lt;+24&amp;gt;:	jle    0x400510 &amp;lt;main+35&amp;gt;
   0x0000000000400507 &amp;lt;+26&amp;gt;:	movl   $0x0,-0x8(%rbp)
   0x000000000040050e &amp;lt;+33&amp;gt;:	jmp    0x400514 &amp;lt;main+39&amp;gt;
   0x0000000000400510 &amp;lt;+35&amp;gt;:	addl   $0x1,-0x8(%rbp)
   0x0000000000400514 &amp;lt;+39&amp;gt;:	addl   $0x1,-0x4(%rbp)
   0x0000000000400518 &amp;lt;+43&amp;gt;:	cmpl   $0x3b9ac9ff,-0x4(%rbp)
   0x000000000040051f &amp;lt;+50&amp;gt;:	jle    0x400501 &amp;lt;main+20&amp;gt;
   0x0000000000400521 &amp;lt;+52&amp;gt;:	mov    $0x0,%eax
   0x0000000000400526 &amp;lt;+57&amp;gt;:	pop    %rbp
   0x0000000000400527 &amp;lt;+58&amp;gt;:	retq   
End of assembler dump.
$ 
$ c99 &lt;strong&gt;-O2&lt;/strong&gt; -o x x.c
$ gdb -batch -ex 'file x' -ex 'disassemble main'
Dump of assembler code for function main:
   0x0000000000400400 &amp;lt;+0&amp;gt;:	xor    %eax,%eax
   0x0000000000400402 &amp;lt;+2&amp;gt;:	retq   
End of assembler dump.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;¡¿DAFUQ?! ¡¿En serio?! ¿El compilador cambió todo el código que escribimos con el sudor de nuestra frente, por dos míseras instrucciones?&lt;/p&gt;
&lt;p&gt;Pues sí, resulta que el compilador observó que nuestro cómputo no sirve de nada porque de todos modos estamos regresando 0 en la línea &lt;code&gt;return&amp;nbsp;0&lt;/code&gt;, así que todo nuestro código no tiene efecto observable. Por eso lo toma, lo tira a la basura y nosotros seguimos observando exactamente el mismo resultado: el correcto.&lt;/p&gt;
&lt;h2&gt;Los compiladores son muy astutos, parte 2&lt;/h2&gt;
&lt;p&gt;Hagamos el mismo análisis, comparando el código generado por &lt;code&gt;-O0&lt;/code&gt; contra el código generado por &lt;code&gt;-O2&lt;/code&gt;, ahora para el programa Y:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ c99 &lt;strong&gt;-O0&lt;/strong&gt; -o y y.c
$ gdb -batch -ex 'file y' -ex 'disassemble main'
Dump of assembler code for function main:
   0x00000000004004ed &amp;lt;+0&amp;gt;:	push   %rbp
   0x00000000004004ee &amp;lt;+1&amp;gt;:	mov    %rsp,%rbp
   0x00000000004004f1 &amp;lt;+4&amp;gt;:	movl   $0x0,-0x8(%rbp)
   0x00000000004004f8 &amp;lt;+11&amp;gt;:	movl   $0x0,-0x4(%rbp)
   0x00000000004004ff &amp;lt;+18&amp;gt;:	jmp    0x400536 &amp;lt;main+73&amp;gt;
   0x0000000000400501 &amp;lt;+20&amp;gt;:	mov    -0x8(%rbp),%eax
   0x0000000000400504 &amp;lt;+23&amp;gt;:	lea    0x1(%rax),%ecx
   0x0000000000400507 &amp;lt;+26&amp;gt;:	mov    $0x66666667,%edx
   0x000000000040050c &amp;lt;+31&amp;gt;:	mov    %ecx,%eax
&lt;strong&gt;   0x000000000040050e &amp;lt;+33&amp;gt;:	imul   %edx&lt;/strong&gt;
   0x0000000000400510 &amp;lt;+35&amp;gt;:	sar    $0x2,%edx
   0x0000000000400513 &amp;lt;+38&amp;gt;:	mov    %ecx,%eax
   0x0000000000400515 &amp;lt;+40&amp;gt;:	sar    $0x1f,%eax
   0x0000000000400518 &amp;lt;+43&amp;gt;:	sub    %eax,%edx
   0x000000000040051a &amp;lt;+45&amp;gt;:	mov    %edx,%eax
   0x000000000040051c &amp;lt;+47&amp;gt;:	mov    %eax,-0x8(%rbp)
   0x000000000040051f &amp;lt;+50&amp;gt;:	mov    -0x8(%rbp),%edx
   0x0000000000400522 &amp;lt;+53&amp;gt;:	mov    %edx,%eax
   0x0000000000400524 &amp;lt;+55&amp;gt;:	shl    $0x2,%eax
   0x0000000000400527 &amp;lt;+58&amp;gt;:	add    %edx,%eax
   0x0000000000400529 &amp;lt;+60&amp;gt;:	add    %eax,%eax
   0x000000000040052b &amp;lt;+62&amp;gt;:	sub    %eax,%ecx
   0x000000000040052d &amp;lt;+64&amp;gt;:	mov    %ecx,%eax
   0x000000000040052f &amp;lt;+66&amp;gt;:	mov    %eax,-0x8(%rbp)
   0x0000000000400532 &amp;lt;+69&amp;gt;:	addl   $0x1,-0x4(%rbp)
   0x0000000000400536 &amp;lt;+73&amp;gt;:	cmpl   $0x3b9ac9ff,-0x4(%rbp)
   0x000000000040053d &amp;lt;+80&amp;gt;:	jle    0x400501 &amp;lt;main+20&amp;gt;
   0x000000000040053f &amp;lt;+82&amp;gt;:	mov    $0x0,%eax
   0x0000000000400544 &amp;lt;+87&amp;gt;:	pop    %rbp
   0x0000000000400545 &amp;lt;+88&amp;gt;:	retq   
End of assembler dump.
$ 
$ c99 &lt;strong&gt;-O2&lt;/strong&gt; -o y y.c
$ gdb -batch -ex 'file y' -ex 'disassemble main'
Dump of assembler code for function main:
   0x0000000000400400 &amp;lt;+0&amp;gt;:	xor    %eax,%eax
   0x0000000000400402 &amp;lt;+2&amp;gt;:	retq   
End of assembler dump.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No sólo ocurre lo mismo, sino que además llama la atención la línea marcada en negritas:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;0x000000000040050e &amp;lt;+33&amp;gt;:	imul   %edx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A pesar de no utilizar optimizaciones, el compilador sabe que, para calcular el módulo, usar la operación DIV tomaría más ciclos de reloj que seguir un algoritmo basado en multiplicaciones enteras, y sabe que eso es cierto &lt;em&gt;en este caso&lt;/em&gt; y &lt;em&gt;en esta arquitectura&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Otro ejemplo de una optimización común: cuando hablamos de una variable &lt;code&gt;x&lt;/code&gt; que es entera positiva, la expresión &lt;code&gt;x&amp;nbsp;/&amp;nbsp;2&lt;/code&gt; suele ser convertida en &lt;code&gt;x&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;¿Cómo evitar que nuestro código sea eliminado?&lt;/h2&gt;
&lt;p&gt;Simplemente es cuestión de usar el valor. Podríamos imprimirlo en pantalla, pero para mantener limpio el desensamblaje mejor cambiemos &lt;code&gt;return&amp;nbsp;0&lt;/code&gt; por &lt;code&gt;return&amp;nbsp;x&lt;/code&gt; o &lt;code&gt;return&amp;nbsp;y&lt;/code&gt; según corresponda:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ sed -i -re &quot;s/return 0;/return x;/&quot; x.c
$ sed -i -re &quot;s/return 0;/return y;/&quot; y.c
$ cat x.c
#define LIMIT 1000000000
int main(void) {
    int x = 0;
    for (int i = 0; i &amp;lt; LIMIT; i++)
    {
        if (x &amp;gt;= 10)
        {
            x = 0;
        }
        else
        {
            x++;
        }
    }
    return x;
}

$ cat y.c
#define LIMIT 1000000000
int main(void) {
    int y = 0;
    for (int i = 0; i &amp;lt; LIMIT; i++)
    {
        y = (y + 1) % 10;
    }
    return y;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bien, nuestro código fuente está correcto. Compilemos con &lt;code&gt;-O3&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ c99 &lt;strong&gt;-O3&lt;/strong&gt; -o x x.c
$ c99 &lt;strong&gt;-O3&lt;/strong&gt; -o y y.c&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Compiló correctamente. Verifiquemos en el código generado:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ gdb -batch -ex 'file x' -ex 'disassemble main'
Dump of assembler code for function main:
   0x0000000000400400 &amp;lt;+0&amp;gt;:	mov    $0x3b9aca00,%edx
   0x0000000000400405 &amp;lt;+5&amp;gt;:	xor    %eax,%eax
   0x0000000000400407 &amp;lt;+7&amp;gt;:	xor    %esi,%esi
   0x0000000000400409 &amp;lt;+9&amp;gt;:	nopl   0x0(%rax)
   0x0000000000400410 &amp;lt;+16&amp;gt;:	lea    0x1(%rax),%ecx
   0x0000000000400413 &amp;lt;+19&amp;gt;:	cmp    $0x9,%eax
   0x0000000000400416 &amp;lt;+22&amp;gt;:	mov    %ecx,%eax
   0x0000000000400418 &amp;lt;+24&amp;gt;:	cmovg  %esi,%eax
   0x000000000040041b &amp;lt;+27&amp;gt;:	sub    $0x1,%edx
   0x000000000040041e &amp;lt;+30&amp;gt;:	jne    0x400410 &amp;lt;main+16&amp;gt;
   0x0000000000400420 &amp;lt;+32&amp;gt;:	repz retq 
End of assembler dump.
$ gdb -batch -ex 'file y' -ex 'disassemble main'
Dump of assembler code for function main:
   0x0000000000400400 &amp;lt;+0&amp;gt;:	mov    $0x3b9aca00,%esi
   0x0000000000400405 &amp;lt;+5&amp;gt;:	xor    %edx,%edx
   0x0000000000400407 &amp;lt;+7&amp;gt;:	mov    $0x66666667,%edi
   0x000000000040040c &amp;lt;+12&amp;gt;:	nopl   0x0(%rax)
   0x0000000000400410 &amp;lt;+16&amp;gt;:	lea    0x1(%rdx),%ecx
   0x0000000000400413 &amp;lt;+19&amp;gt;:	mov    %ecx,%eax
   0x0000000000400415 &amp;lt;+21&amp;gt;:	imul   %edi
   0x0000000000400417 &amp;lt;+23&amp;gt;:	mov    %ecx,%eax
   0x0000000000400419 &amp;lt;+25&amp;gt;:	sar    $0x1f,%eax
   0x000000000040041c &amp;lt;+28&amp;gt;:	sar    $0x2,%edx
   0x000000000040041f &amp;lt;+31&amp;gt;:	sub    %eax,%edx
   0x0000000000400421 &amp;lt;+33&amp;gt;:	lea    (%rdx,%rdx,4),%eax
   0x0000000000400424 &amp;lt;+36&amp;gt;:	add    %eax,%eax
   0x0000000000400426 &amp;lt;+38&amp;gt;:	sub    %eax,%ecx
   0x0000000000400428 &amp;lt;+40&amp;gt;:	sub    $0x1,%esi
   0x000000000040042b &amp;lt;+43&amp;gt;:	mov    %ecx,%edx
   0x000000000040042d &amp;lt;+45&amp;gt;:	jne    0x400410 &amp;lt;main+16&amp;gt;
   0x000000000040042f &amp;lt;+47&amp;gt;:	mov    %ecx,%eax
   0x0000000000400431 &amp;lt;+49&amp;gt;:	retq   
End of assembler dump.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Claramente el código ya no está siendo eliminado.&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;$ time ./x

real	0m1.460s
user	0m1.458s
sys	0m0.000s
$ time ./y

real	0m4.188s
user	0m4.180s
sys	0m0.004s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El resultado: ~3 ns de diferencia por iteración en &lt;code&gt;-O3&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La nueva tabla completa de resultados entre los diferentes niveles de optimización, medidos en segundos:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-O&lt;/th&gt;
&lt;th&gt;X&lt;/th&gt;
&lt;th&gt;Y&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;2.729&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8.810&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;1.455&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.188&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;1.455&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;1.458&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.180&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;fast&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;1.458&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4.185&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;s&lt;/th&gt;
&lt;td&gt;&lt;strong&gt;1.451&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5.688&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;¡Tenemos un ganador!&lt;/p&gt;
&lt;p&gt;Observaciones interesantes: A diferencia de los resultados que obtuvimos en la primera tabla, donde el código usaba &lt;code&gt;return&amp;nbsp;0&lt;/code&gt;, en esta ocasión el programa Y ya no gana ni siquiera en &lt;code&gt;-O1&lt;/code&gt;. En realidad no es que fuera más óptimo anteriormente, sino que el compilador alcanzaba a descartarlo mejor por el uso de &lt;code&gt;return&amp;nbsp;0&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Conclusiones&lt;/h2&gt;
&lt;p&gt;Las conclusiones te tocan a ti. &lt;img src=&quot;https://s.w.org/images/core/emoji/72x72/1f642.png&quot; alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Actualización&lt;/h2&gt;
&lt;p&gt;Después de hacer la publicación caí en cuenta de que olvidé mencionar algunos detalles importantes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El sistema donde se probó es un Intel(R) Xeon(R) CPU X5472 @ 3.00GHz de 8 núcleos con memoria ECC. Nunca vi que se usara más de un solo núcleo. &lt;strong&gt;Los invito a repetir las pruebas en sus laptops y Raspberry Pi.&lt;/strong&gt; Raspberry Pi es ARM, hay que tomarlo en consideración.&lt;/li&gt;
&lt;li&gt;GCC no fue lo suficientemente inteligente para detectar que sólo estábamos trabajando con constantes y haber reducido el programa a una asignación directa con complejidad O(1).&lt;/li&gt;
&lt;li&gt;Es importante considerar que los dos programas probados &lt;strong&gt;no son equivalentes&lt;/strong&gt;. X arroja 10, Y arroja 0. Para hacer una comparación justa entre dos programas es importante que el resultado sea el mismo. Aparentemente, el motivo del planteamiento era probar brutamente &lt;code&gt;if&lt;/code&gt; contra bloques sin &lt;code&gt;if&lt;/code&gt;. El motivo es que, en la vida real, las adecuaciones que se necesitarían para garantizar el resultado afectarían la complejidad del programa; se supone que uno es una refactorización del otro. En este caso sí importa cuidar los nanosegundos puesto que se trata de una medición.&lt;/li&gt;
&lt;li&gt;El propósito de esta publicación es dejar en claro que la velocidad de un programa es muy variable y que depende de muchos factores, como del lenguaje, del compilador, de la arquitectura en la que corre el programa, del modelo exacto de microprocesador, incluso de la manera en como hacemos nuestra prueba, pero sobre todo, del algoritmo. La microoptimización sólo tiene sentido en casos muy particulares.&lt;/li&gt;
&lt;/ol&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Monitor</title>
		<link href="http://blog.alvarezp.org/2015/05/11/monitor/"/>
		<id>http://blog.alvarezp.org/?p=3116</id>
		<updated>2015-05-11T22:42:57+00:00</updated>
		<content type="html">&lt;div class=&quot;wp-caption alignright&quot;&gt;&lt;a href=&quot;http://blog.alvarezp.org/imagenes/monitor-state-diagram.png&quot;&gt;&lt;img class=&quot;&quot; src=&quot;http://blog.alvarezp.org/imagenes/monitor-state-diagram.png&quot; alt=&quot;Diagrama de estados de Monitor&quot; width=&quot;749&quot; height=&quot;631&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Diagrama de estados de Monitor&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a title=&quot;Simple service monitor written in Bash.&quot; href=&quot;https://github.com/alvarezp/monitor&quot;&gt;Monitor&lt;/a&gt; es un script escrito en puro Bash que permite dejar a la PC monitoreando el resultado de una instrucción. A diferencia de &lt;em&gt;watch&lt;/em&gt;, no se trata de estar vigilando la salida de la instrucción, sino de detectar el momento en que ocurre la falla y ejecutar instrucciones cuando el servicio vigilado se cae o se levanta.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3116&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Monitor fue escrito para vigilar servicios con fallas de naturaleza aleatoria. En ocasiones el problema dura poco y no es fácil tomar una muestra del sistema &lt;em&gt;justo&lt;/em&gt; cuando el problema ocurre.&lt;/p&gt;
&lt;p&gt;Además, este tipo de situaciones tiene algunas características:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se quiere saber cuándo se cayó y cuándo se volvió a levantar el servicio para saber en qué sección de las bitácoras buscar.&lt;/li&gt;
&lt;li&gt;Se quiere tomar acción cuando se detecta otra caída. Estas acciones pueden ser toma de diagnósticos o envío de alertas.&lt;/li&gt;
&lt;li&gt;Suele necesitarse ser tolerante a oscilaciones pasajeras; por ejemplo, un &lt;em&gt;ping&lt;/em&gt; perdido no implica una caída de un equipo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si bien este tipo de vigilancia se resuelve fácilmente con un &lt;em&gt;while&lt;/em&gt; de Bash, éste puede volverse rápidamente complejo y no es divertido estar depurándolo cada que uno se ve en la necesidad. Además, es posible cometer errores al programar la lógica del &lt;em&gt;while&lt;/em&gt; y no darnos cuenta hasta cuando el problema original ya volvió a ocurrir y no obtuvimos la monitorización esperada.&lt;/p&gt;
&lt;p&gt;Con Monitor, la lógica está establecida y comprobada. Sólo basta indicar qué instrucción queremos monitorizar.&lt;/p&gt;
&lt;p&gt;El código está disponible en Github: &lt;a href=&quot;https://github.com/alvarezp/monitor&quot;&gt;https://github.com/alvarezp/monitor&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Ejemplo&lt;/h2&gt;
&lt;p&gt;En un hipotético problema perdemos comunicación con nuestro propio &lt;em&gt;host&lt;/em&gt; y no sabemos por qué. Sospechamos que un proceso corriendo en nuestra máquina está insertando reglas de &lt;em&gt;iptables&lt;/em&gt; que resultan en el bloqueo de esta comunicación.&lt;/p&gt;
&lt;p&gt;Utilicemos &lt;code&gt;monitor.bash&lt;/code&gt; para vigilar el resultado de un &lt;em&gt;ping&lt;/em&gt; a &lt;em&gt;localhost&lt;/em&gt; y que en caso de caída confirmada se tome una muestra de &lt;em&gt;iptables&lt;/em&gt;.&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;# monitor.bash --rest-time 1 --on-down 'iptables-save' 'ping localhost -c 1 -w 1 &amp;gt;/dev/null 2&amp;gt;&amp;amp;1'
       INIT 2015-11-05 15:21:58 PDT lun
         UP 2015-11-05 15:21:58 PDT lun
     &lt;strong&gt;---- el proceso misterioso aplica iptables -A INPUT -i lo -p icmp -j DROP ----&lt;/strong&gt;
FALLINGDOWN 2015-11-05 15:22:13 PDT lun
# Generated by iptables-save v1.4.21 on Mon May 11 15:22:17 2015
*filter
:INPUT ACCEPT [74:70608]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [67:5781]
-A INPUT -i lo -p icmp -j DROP
COMMIT
# Completed on Mon May 11 15:22:17 2015
       DOWN 2015-11-05 15:22:17 PDT lun
     &lt;strong&gt;---- el proceso misterioso aplica iptables -F INPUT ----&lt;/strong&gt;
RAISINGBACK 2015-11-05 15:22:32 PDT lun
         UP 2015-11-05 15:22:36 PDT lun&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Da la impresión que &lt;code&gt;iptables-save&lt;/code&gt; se ejecuta después de quedar en FALLINGDOWN, pero en realidad se ejecuta justo al entrar en DOWN.&lt;/p&gt;
&lt;p&gt;Ya tenemos fechas y horas para buscar en bitácoras y algo de evidencia para profundizar en el diagnóstico.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">LibreOffice Styles Tutorial</title>
		<link href="http://blog.alvarezp.org/2015/03/13/libreoffice-styles-tutorial/"/>
		<id>http://blog.alvarezp.org/?p=3107</id>
		<updated>2015-03-13T16:01:09+00:00</updated>
		<content type="html">&lt;div id=&quot;attachment_3108&quot; class=&quot;wp-caption alignleft&quot;&gt;&lt;a href=&quot;http://blog.alvarezp.org/files/libreoffice-styles.odt&quot;&gt;&lt;img class=&quot;wp-image-3108 size-full&quot; title=&quot;Click to download the LibreOffice Styles tutorial&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2015/03/styles-tutorial-thumbnail.png&quot; alt=&quot;LibreOffice Styles Tutorial (click to download)&quot; width=&quot;198&quot; height=&quot;253&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;LibreOffice Styles Tutorial&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;I wrote a small-and-quick tutorial for using LibreOffice Styles. It is intended to quickly let you understand (and hopefully grasp) the concepts behind the use of Styles without having to go through an entire manual.&lt;/p&gt;
&lt;p&gt;It briefly covers and exemplifies the notion of Paragraph and Character Styles, Direct Formatting, automatic table of contents generation and chapter rearrangement through the Navigator.&lt;/p&gt;
&lt;p&gt;Styles can do much more than explained in the tutorial, but it should get you started saving a significant amount of time.&lt;/p&gt;
&lt;p&gt;Download it by clicking on the image or from here: &lt;a title=&quot;LibreOffice Styles Tutorial&quot; href=&quot;http://blog.alvarezp.org/files/libreoffice-styles.odt&quot;&gt;/files/libreoffice-styles.odt&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Internet radio stations at the tip of your fingers (and terminal)</title>
		<link href="http://kwame.informatux.net/?p=738"/>
		<id>http://kwame.informatux.net/?p=738</id>
		<updated>2015-02-04T14:10:06+00:00</updated>
		<content type="html">&lt;p&gt;For those who want to listen to a variaty of internet radio stations, here I leave you with these bash alias&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; news=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://minnesota.publicradio.org/tools/play/streams/news.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# MPR News &amp;lt;/span&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC7&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; current=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://minnesota.publicradio.org/tools/play/streams/the_current.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# The Current &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC8&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; classical=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://minnesota.publicradio.org/tools/play/streams/classical.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Classical MPR &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC9&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; minnesota=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://minnesota.publicradio.org/tools/play/streams/local.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Minn &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC10&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; heartland=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://minnesota.publicradio.org/tools/play/streams/radio_heartland.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# MPR Radio Heartland &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC11&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; wonderground=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer http://wondergroundstream2.publicradio.org/wonderground&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# MPR Wonderground Windows Media &amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC12&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; choral=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://choralstream1.publicradio.org/choral.m3u&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Clasical MPR Choral&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC13&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; wefunk=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://www.wefunkradio.com/play/shoutcast.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# WEFUNK Radio MP3 64K&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC14&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; sleepbot=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://sleepbot.com/ambience/cgi/listen.cgi/listen.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Sleepbot Environmental Broadcast 56K MP3&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC15&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; groovesalad=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://somafm.com/groovesalad130.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Soma FM Groove Salad iTunes AAC 128K&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC16&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; dronezone=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://somafm.com/dronezone130.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Soma FM Drone Zone iTunes AAC 128K&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC17&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; lush=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://somafm.com/lush130.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Soma FM Lush iTunes AAC 128K&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;file-internet_radio_stream_aliases-sh-LC18&amp;quot; class=&amp;quot;line&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-s3&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; sonicuniverse=&amp;lt;span class=&amp;quot;pl-s1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;mplayer -playlist http://somafm.com/sonicuniverse.pls&amp;lt;span class=&amp;quot;pl-pds&amp;quot;&amp;gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;pl-c&amp;quot;&amp;gt;# Soma FM Sonic Universe iTunes AAC 128K &lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Internet+radio+stations+at+the+tip+of+your+fingers+%28and+terminal%29+http%3A%2F%2Fis.gd%2FW3v3pZ&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Internet+radio+stations+at+the+tip+of+your+fingers+%28and+terminal%29+http%3A%2F%2Fis.gd%2FW3v3pZ&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">First impressions of CentOS 7</title>
		<link href="http://kwame.informatux.net/?p=732"/>
		<id>http://kwame.informatux.net/?p=732</id>
		<updated>2015-01-24T02:37:58+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://kwame.informatux.net/wp-content/uploads/2015/01/centos7-logo.png&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-736&quot; src=&quot;http://kwame.informatux.net/wp-content/uploads/2015/01/centos7-logo.png&quot; alt=&quot;centos7-logo&quot; width=&quot;190&quot; height=&quot;100&quot; /&gt;&lt;/a&gt;CentOS 7 has been out for a while now and it&amp;#8217;s time to get busy with it and exploring this new version.&lt;br /&gt;
Some major changes have taken place in this version and I&amp;#8217;ll list them here with no specific order.&lt;/p&gt;
&lt;p&gt;The first thing you&amp;#8217;ll see is that the installer is now the same as the one used in Fedora, you can still drop to the text mode install but if you use the GUI installer it&amp;#8217;s just about the same as the one Fedora uses.&lt;/p&gt;
&lt;p&gt;During the partitioning you&amp;#8217;ll see that the filesystem chosen by default is now xfs and not ext4, even though it&amp;#8217;s still available (ext4). It&amp;#8217;s kind of a surprise that xfs was chosen as the default over ext4, specially considering that the last recorded updates for xfs date from 2013 &lt;a title=&quot;xfs updates &quot; href=&quot;http://xfs.org/index.php/XFS_Status_Updates&quot; target=&quot;_blank&quot;&gt;http://xfs.org/index.php/XFS_Status_Updates&lt;/a&gt;. Now, talking about the nice features of xfs, it&amp;#8217;s very powerful, it allows you to create incremental backups and from what I read in the documentation, it has the ability to suspend and resume in-progress dumps. If you are serious about migrating to CentOS 7 in the near future, xfs is definitively something you need to get your head around.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll continue in another post my review of CentOS 7&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=First+impressions+of+CentOS+7+http%3A%2F%2Fis.gd%2FXZ7Q5j&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=First+impressions+of+CentOS+7+http%3A%2F%2Fis.gd%2FXZ7Q5j&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Guía de Configuración avanzada de Servidor Linux basado en Ubuntu Server 12.04 LTS</title>
		<link href="http://tuxjm.net/2015/01/04/guia-de-configuracion-avanzada-de-servidor-linux-basado-en-ubuntu-server-1204-lts/"/>
		<id>http://tuxjm.net/?p=531</id>
		<updated>2015-01-04T07:24:39+00:00</updated>
		<content type="html">Este articulo es el cuarto dedicado a la instalación y configuración de servidores de red basado en Ubuntu Server 12.04, en esta ocasión dedicaremos tiempo a realizar las tareas de configuración avanzada post instalación, al realizar estas tareas dejaremos un ambiente funcional y personalizado para que sea integrarlo a cualquier ambiente con requisitos de tipo [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Guía de Configuración básica de Servidor Linux basado en Ubuntu Server 12.04 LTS</title>
		<link href="http://tuxjm.net/2014/10/05/guia-de-configuracion-basica-de-servidor-linux-basado-en-ubuntu-server-1204-lts/"/>
		<id>http://tuxjm.net/?p=526</id>
		<updated>2014-10-05T06:04:46+00:00</updated>
		<content type="html">Este articulo es el tercero dedicado a la instalación y configuración de servidores de red basado en Ubuntu Server 12.04, en esta ocasión dedicaremos tiempo a realizar las tareas de configuración básicas post instalación, al realizar estas tareas dejaremos un ambiente funcional y personalizado para que sea posible desarrollar de forma eficiente diferentes actividades ya [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Guía de Instalación de Servidor Linux basado en Ubuntu Server 12.04 LTS</title>
		<link href="http://tuxjm.net/2014/09/29/guia-de-instalacion-de-servidor-linux-basado-en-ubuntu-server-1204-lts/"/>
		<id>http://tuxjm.net/?p=521</id>
		<updated>2014-09-29T07:15:06+00:00</updated>
		<content type="html">Esta es la segunda parte de una serie de 4 artículos que estaré publicando acerca de GNU/Linux en servidores de red, para ver la primera parte hacer clic aquí.
En este articulo mostrare como realizar una instalación básica del sistema operativo Ubuntu Server 12.04 LTS. Ubuntu Server es una distribución GNU/Linux optimizada para funcionar como servidor [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Porque usar GNU/Linux en servidores de red</title>
		<link href="http://tuxjm.net/2014/09/28/porque-usar-gnulinux-en-servidores-de-red/"/>
		<id>http://tuxjm.net/?p=518</id>
		<updated>2014-09-28T06:15:37+00:00</updated>
		<content type="html">Introducción
En este articulo explicare porque recomendamos usar GNU/Linux como sistema operativo para servidores de red, ya sea para uso personal o empresarial.
Empezaremos hablando de analizar los requisitos para implementar un servidor de red, porque usar GNU/Linux, y al final porque usar la distribución Ubuntu Server para servidores de red.
Analizando los requisitos para la implementación de [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Consumo pico de memoria general en Linux</title>
		<link href="http://blog.alvarezp.org/2014/08/27/consumo-pico-de-memoria-general-en-linux/"/>
		<id>http://blog.alvarezp.org/?p=3087</id>
		<updated>2014-08-27T20:36:49+00:00</updated>
		<content type="html">&lt;p&gt;Desafortunadamente, Linux no mantiene un registro del consumo pico de memoria general. Sí lo hace para un proceso pero no para la totalidad del sistema.&lt;/p&gt;
&lt;p&gt;A falta de esto y como mero &lt;em&gt;hack&lt;/em&gt;, el siguiente &lt;em&gt;script&lt;/em&gt; se puede dejar corriendo durante un tiempo determinado:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash

free -m -s 0.05 | while read A _ V _; do
  [ &quot;$A&quot; = &quot;-/+&quot; ] &amp;amp;&amp;amp; [ &quot;$V&quot; -gt &quot;${M:-0}&quot; ] &amp;amp;&amp;amp; { M=$V; echo $M; }
done&lt;/pre&gt;
&lt;p&gt;Ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No necesita de la instalación de ningún programa externo.&lt;/li&gt;
&lt;li&gt;Es compatible con POSIX Shell.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Desventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Funciona por sondeo (&lt;em&gt;polling&lt;/em&gt;) cada 0.05 segundos. Esto significa que si entre muestra y muestra hay un pico que desaparece, éste no se reflejará. Idealmente el &lt;em&gt;kernel&lt;/em&gt; llevaría el registro de manera asíncrona durante cada llamada a &lt;em&gt;brk()&lt;/em&gt; y &lt;em&gt;sbrk()&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Podría no funcionar en &lt;em&gt;locales&lt;/em&gt; con diferente separador decimal. Sería necesario cambiar &lt;code&gt;0.05&lt;/code&gt; por &lt;code&gt;0,05&lt;/code&gt;. Tal vez se pudiera usar el parámetro &lt;code&gt;$1&lt;/code&gt; para evitar este problema.&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Dejar de usar gmail, y sincronizar contactos, calendarios y archivos a ownCloud</title>
		<link href="http://rugebiker.com/blog/openmailbox_y_owncloud"/>
		<id>http://rugebiker.com/blog/openmailbox_y_owncloud</id>
		<updated>2014-08-13T07:00:00+00:00</updated>
		<content type="html">&lt;p&gt;Siguiendo mis intentos de idependizarme de las grandes compañías, en este post escribiré cómo dejar de usar gmail, google calendar, google contacts (sincronización de contactos con android), y dropbox.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dejar gmail&lt;/b&gt; La alternativa más efectiva a gmail y sin tener que recurrir a alguna otra grande compañía es montar tu propio servidor de correos, el cual puede resultar tedioso y hasta difícil para alguien sin experiencia computacional, por lo que les recomendaré el que me encontré hace unos días y empecé a usar: &lt;a href=&quot;https://www.openmailbox.org/&quot;&gt;openmailbox&lt;/a&gt;. Este servicio de emails aún no es tan popular, pero está enfocado principalmente en respetar tu privacidad. Según eso, no registran nunca tu IP, y todo va encriptado. Tiene la opción de ponerlo en español, permite mandar archivos adjuntos de hasta 500 megas, y te aseguran que usan puro software libre. Obviamente tiene también acceso IMAP, POP, con sus varias encriptaciones. La interfaz es sinceramente muy bonita, y para mi una de las mayores ventajas que te dan es que te ofrecen tu propio ownCloud con 1 giga de almacenamiento, el cual usaré para deshacerme de otros productos de google y dropbox.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://owncloud.org/&quot;&gt;Owncloud&lt;/a&gt;&lt;/b&gt; es un software que podemos usar en nuestro propio servidor (o puedes tener 1 giga gratis cuando abres tu correo con openmailbox), el cual cuenta con innumerables características. Con ownCloud demostraré cómo me cambié de varios servicios de google y dropbox a algo más libre y controlado por mi.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dejar dropbox&lt;/b&gt;&lt;/p&gt; &lt;p&gt;No tengo nada en contra de dropbox, simplemente quiero que mis archivos no sean manejados por una gran compañía que quién sabe qué hagan con mis documentos. Con ownCloud en nuestro servidor, podemos usarlo de la misma manera que usamos dropbox. Tiene &lt;a href=&quot;https://owncloud.org/install/&quot;&gt;clientes gratuitos para Linux, winbugs y mac&lt;/a&gt;, así como clientes para android y iphone. El cliente de android de la play store no es gratuito, pero podemos descargar libre y legalmente el mismo cliente desde &lt;a href=&quot;https://f-droid.org/repository/browse/?fdfilter=owncloud&amp;fdid=com.owncloud.android&quot;&gt;F-Droid&lt;/a&gt; (tienda de software libre de aplicaciones para android). Y listo, tu propio sincronizador de archivos con espacio tan limitado como tu servidor.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dejar google calendar&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Este paso toma un poco de más tiempo dependiendo en qué tantos dispositivos quieras sincronizar el calendario. Usaremos de igual manera ownCloud, que funcionará como nuestro servidor CalDAV (formato estándar de calendarios). El calendario de ownCloud al momento de empezarlo a usar ya estará listo para CalDAV, no son necesarios pasos extras. El truco de esto es poder sincronizar este calendario en android, firefox OS, y en mi caso, en linux (disculpa iphone, jamás te he usado, pero seguro googleando se encuentra la forma). En el caso de linux, tanto KDE, como gnome, thunderbird, Firefox OS, y los demás escritorios cuentan por defecto con importación de calendarios CalDAV, con lo que lo único que hay que hacer será agregar el link CalDAV de nuestro calendario de ownCloud y listo. Para android, los pasos a seguir son los mismos que los de sincronizar contactos, como menciono a continuación.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dejar de sincronizar contactos de android con google&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Siempre es útil sincronizar contactos en caso de perder o cambiar nuestro celular. Como lo escrito anterior, usaremos ownCloud para guardar y sincronización nuestros contactos, en este caso usando CardDAV, el cual es un formato estándar de contactos. Estos pasos a seguir son los mismos que se usan para sincronizar el calendario de android con el de ownCloud. Lo primero que hay que hacer es descargar la aplicación &lt;a href=&quot;https://f-droid.org/repository/browse/?fdfilter=davdroid&amp;fdid=at.bitfire.davdroid&quot;&gt;DAVdroid&lt;/a&gt;, disponible gratuitamente en F-droid, o de pago en la play store. Una vez instalada, la abrimos y agregamos una nueva cuenta, en el cual llenamos los parámetros que se piden, como es el link de nuestro ownCloud, el usuario y la contraseña. DAVDroid automáticamente reconocerá todos los calendarios y contactos, y te permitirá elegir cuáles sincronizar. Una vez terminado esto, en el calendario de android nos aparecerá un nuevo calendario a sincronizar, con el nombre que le pusimos en DAVDroid, y ya de esta manera el calendario queda sincronizado. También cada que agreguemos un contacto, podremos seleccionar que lo guarde en DAVDroid, el cuál quedará sincronizado con ownCloud.&lt;/p&gt;

&lt;p&gt;Y listo, ahora somos un poco más independientes. Paso a pasito llegaremos a ser libres algún día :D. Cualquier duda pueden buscarme con mi nick &quot;biker&quot; en freenode.&lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Webmaps usando OpenStreetMap</title>
		<link href="http://rugebiker.com/blog/webmaps_usando_openstreetmap"/>
		<id>http://rugebiker.com/blog/webmaps_usando_openstreetmap</id>
		<updated>2014-07-31T07:00:00+00:00</updated>
		<content type="html">&lt;p&gt;En mi lenta transición de convertirme en una persona libre (como la cerveza), decidí cambiar el mapa embebido en mi sección de &lt;a href=&quot;http://rugebiker.com/places/es/&quot;&gt;Lugares&lt;/a&gt; de Google Maps a OpenStreetMap (OSM). En la &lt;a href=&quot;http://wiki.openstreetmap.org/wiki/Develop/Frameworks#Webmaps&quot;&gt;wiki de OpenStreetMap&lt;/a&gt; hay una gran lista de librerías para poder lograr esto.&lt;/p&gt;

&lt;p&gt;El que elegí es uno llamado &lt;a href=&quot;http://leafletjs.com/&quot;&gt;Leaflet&lt;/a&gt;, el cual los autores describen como simple, ligero y con gran soporte móbil. En mi experiencia, fue muy fácil implementarlo en mi sitio, igual sólo necesitaba un mapa con un montón de marcadores. Hay una sencilla &lt;a href=&quot;http://leafletjs.com/examples/quick-start.html&quot;&gt;guía de introducción&lt;/a&gt; (en inglés) en el sitio de la librería, el cual pueden seguir. Pero AGUAS, porque esa guía usa los mapas de Mapbox. Si, como yo, quieren usar los de OSM, necesitan simplemente cambiar el tileLayer para que use OSM, como pueden ver en &lt;a href=&quot;https://github.com/rugebiker/rugebiker/blob/master/wsgi/rugebiker/templates/places.html&quot;&gt;mi ejemplo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No pasó más de una hora y ya tenía mi mapa con todos los marcadores. Si quieren una alternativa a Google Maps, les recomiendo esta opción libre (: &lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Webmaps using OpenStreetMap</title>
		<link href="http://rugebiker.com/blog/webmaps_using_openstreetmap"/>
		<id>http://rugebiker.com/blog/webmaps_using_openstreetmap</id>
		<updated>2014-07-31T07:00:00+00:00</updated>
		<content type="html">&lt;p&gt;So in my little steps of trying to be fully free (as in beer), I decided to change the map in my &lt;a href=&quot;http://rugebiker.com/places/&quot;&gt;Places&lt;/a&gt; section from Google Maps to OpenStreetMap. There is a whole table in the &lt;a href=&quot;http://wiki.openstreetmap.org/wiki/Develop/Frameworks#Webmaps&quot;&gt;OpenStreetMap wiki&lt;/a&gt; with many libs you can use to embed OpenStreetMap into a webpage, and add a lot of stuff to it.&lt;/p&gt;

&lt;p&gt;The one I picked was the one at the top of the list, called &lt;a href=&quot;http://leafletjs.com/&quot;&gt;Leaflet&lt;/a&gt;, which the authors describe as a library that focuses on performance, usability, simple API, small size and mobile support. In my experience, it was really easy to implement on my site, as well as I just needed something simple: a map with a bunch of markers. There is an easy &lt;a href=&quot;http://leafletjs.com/examples/quick-start.html&quot;&gt;quick start guide&lt;/a&gt; on Leaflet's site, where they use Mapbox for the maps, but if you are like me and want to use OSM, you only need to change the tileLayer to use it, see my &lt;a href=&quot;https://github.com/rugebiker/rugebiker/blob/master/wsgi/rugebiker/templates/places.html&quot;&gt;example&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It didn't take me more than an hour to have the map with all the markers on it. If you want an alternative solution for embedding maps into your site, you can use this opensource one (: &lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Restricting mysql access to a user based on his source ip</title>
		<link href="http://kwame.informatux.net/?p=714"/>
		<id>http://kwame.informatux.net/?p=714</id>
		<updated>2014-07-16T00:36:33+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://kwame.informatux.net/wp-content/uploads/2014/07/mysql.png&quot;&gt;&lt;img src=&quot;http://kwame.informatux.net/wp-content/uploads/2014/07/mysql-150x150.png&quot; alt=&quot;mysql&quot; width=&quot;300&quot; height=&quot;300&quot; class=&quot;alignleft size-medium wp-image-725&quot; /&gt;&lt;/a&gt;One of the most challenging aspects of working as a &lt;a title=&quot;Sysadmin Day&quot; href=&quot;http://sysadminday.com/&quot; target=&quot;_blank&quot;&gt;sysadmin&lt;/a&gt; is the broad scope of the tasks you have to work on. In a single day&amp;#8217;s work you could be asked to look into a security report and take the appropriate steps to address it and fix it. You can also be brought into an alert reported by a monitoring system and do various things, such as, modify the threshold of the alert since it was a false positive and / or look into the alert itself and fix it. You can be asked to modify some application software to be able to handle the load it&amp;#8217;s receiving by changing its settings or just deploy a second or more instances of this application and place all of them behind a load balancer so the load is spread between all of the app servers, all of this, without any downtime or interrupting the sessions of users already logged into your application. You can also be tasked to lock down the access to an application on a specific layer and you need to be able to do it in a very short amount of time since the application might be vulnerable or under attack.&lt;/p&gt;
&lt;p&gt;All of these aspects make a sysadmin&amp;#8217;s work day a very interesting one. I was recently asked to restrict access to &lt;a title=&quot;MySQL&quot; href=&quot;http://www.mysql.com/&quot; target=&quot;_blank&quot;&gt;MySQL&lt;/a&gt; and allow users to be able to connect from only a specific network segment. If I had just been asked to restrict access to MySQL based on network segment (this is a high traffic MySQL server running on a Linux server) I would have used &lt;a title=&quot;iptables&quot; href=&quot;http://www.netfilter.org/projects/iptables/&quot; target=&quot;_blank&quot;&gt;iptables&lt;/a&gt; right out of the bat and be done with the task, but the request was to restrict access in the database itself.&lt;/p&gt;
&lt;p&gt;So I went to the &lt;a title=&quot;MySQL documentation&quot; href=&quot;http://dev.mysql.com/doc/refman/5.6/en/connection-access.html&quot; target=&quot;_blank&quot;&gt;MySQL documentation&lt;/a&gt; site and followed some pointers. Fired up a VM to do some tests and these are the steps I would follow to achieve such task.&lt;/p&gt;
&lt;p&gt;1. Review grants for the user which I want to lock down:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
[root@workvm ~]# mysql -u root -p -h localhost
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt; select user,host from mysql.user;
+-------+--------------------+
| user  | host               |
+-------+--------------------+
| kwame | %                  |
| root  | 127.0.0.1          |
|       | localhost          |
| kwame | localhost          |
| root  | localhost          |
|       | workvm.pythian.com |
| root  | workvm.pythian.com |
+-------+--------------------+
7 rows in set (0.00 sec)

mysql&amp;gt; show grants for 'kwame'@'%';
+------------------------------------------------------------------------------------------------------+
| Grants for kwame@%                                                                                   |
+------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kwame'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `db1`.* TO 'kwame'@'%'                                                       |
+------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql&amp;gt;
&lt;/pre&gt;
&lt;p&gt;In this case we want to restrict access to the user &amp;#8216;kwame&amp;#8217; to have access only from 192.168.100.x&lt;/p&gt;
&lt;p&gt;2. Remove access to this user:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;

mysql&amp;gt; delete from user where user='kwame' and host='%';
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt; delete from user where user='kwame' and host='localhost';
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt;

&lt;/pre&gt;
&lt;p&gt;3. Grant access to the user only from 192.168.100.x&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;

mysql&amp;gt; grant all privileges on `db1`.* TO 'kwame'@'192.168.100.%' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; show grants for 'kwame'@'192.168.100.%';
+------------------------------------------------------------------------------------------------------------------+
| Grants for kwame@192.168.100.%                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kwame'@'192.168.100.%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `db1`.* TO 'kwame'@'192.168.100.%'                                                       |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql&amp;gt; select user,host from mysql.user;
+-------+--------------------+
| user  | host               |
+-------+--------------------+
| root  | 127.0.0.1          |
| kwame | 192.168.100.%      |
|       | localhost          |
| root  | localhost          |
|       | workvm.pythian.com |
| root  | workvm.pythian.com |
+-------+--------------------+
6 rows in set (0.00 sec)

mysql&amp;gt; 


&lt;/pre&gt;
&lt;p&gt;4. Confirm the access is working only from the expected source:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
[kwame@workvm ~]$ ifconfig | grep 'inet addr' | grep 100
          inet addr:192.168.100.194  Bcast:192.168.100.255  Mask:255.255.255.0
[kwame@workvm ~]$ mysql -u kwame -p -h 192.168.100.194
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt; show grants;
+------------------------------------------------------------------------------------------------------------------+
| Grants for kwame@192.168.100.%                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'kwame'@'192.168.100.%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `db1`.* TO 'kwame'@'192.168.100.%'                                                       |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql&amp;gt;


&lt;/pre&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Restricting+mysql+access+to+a+user+based+on+his+source+ip+http%3A%2F%2Fis.gd%2FJH7ikz&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Restricting+mysql+access+to+a+user+based+on+his+source+ip+http%3A%2F%2Fis.gd%2FJH7ikz&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como convertir en VirtualBox un disco VDI dynamic a VDI fixed</title>
		<link href="http://tuxjm.net/2014/06/17/como-convertir-en-virtualbox-un-disco-vdi-dynamic-a-vdi-fixed/"/>
		<id>http://tuxjm.net/?p=455</id>
		<updated>2014-06-17T23:06:28+00:00</updated>
		<content type="html">Introducción
Tengo una máquina virtual que cree para realizar algunas pruebas de integración con una red y sistemas homogeneos, está VM la cree usando un disco duro virtual dinámico, lo cual para las pruebas fue bien, sin embargo, la VM la estoy usando cada vez más y noto que está algo lenta.
Usando programas de línea de [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como instalar las herramientas de desarrollo en sistemas GNU/Linux</title>
		<link href="http://tuxjm.net/2014/06/04/como-instalar-las-herramientas-de-desarrollo-en-sistemas-gnulinux/"/>
		<id>http://tuxjm.net/?p=453</id>
		<updated>2014-06-04T13:57:35+00:00</updated>
		<content type="html">Si te encuentras en la situación en la que tienes que instalar algún programa desde las fuentes, tendrás que tener instalados los programas y herramientas para compilar e instalar programas desde las fuentes o incluso para programar.
En lugar de tener que instalar programa por programa, uno a uno, mejor instalaremos los grupos de paquetes que [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Control de consolas HP ILO3 desde IPMITool en GNU/Linux</title>
		<link href="http://tuxjm.net/2014/05/30/control-de-consolas-hp-ilo3-desde-ipmitool-en-linux/"/>
		<id>http://tuxjm.net/?p=439</id>
		<updated>2014-05-30T19:17:04+00:00</updated>
		<content type="html">Introducción
En este articulo hablare un poco sobre IMPI, IPMItool y conexiones de administración out-of-band a las consolas ILO de servidores HP.
IMPI o Intelligent Platform Management Interface es una interfaz estandarizada usada por administradores de sistmeas para administración out-of-band de equipos de computo y monitorización de la operación. Permite administrar computadoras que pudieran estár apagadas o [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como usar un disco duro externo USB en sistemas GNU/Linux como medio de almacenamiento adicional basado en LVM</title>
		<link href="http://tuxjm.net/2014/05/19/como-usar-un-disco-duro-externo-usb-en-sistemas-gnulinux-como-medio-de-almacenamiento-adicional/"/>
		<id>http://tuxjm.net/?p=420</id>
		<updated>2014-05-19T16:45:22+00:00</updated>
		<content type="html">Introducción
Actualmente uso una Laptop con dos discos duros internos, un disco es SSD de 32 GB que uso para almacenar el sistema operativo Kubuntu 14.04, y un disco SATA de 500 GB que uso para almacenar datos personales. El disco de datos ya esta llegando al 80% de su capacidad máxima, por lo que es buen tiempo [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">The Heartbleed Bug</title>
		<link href="http://kwame.informatux.net/?p=711"/>
		<id>http://kwame.informatux.net/?p=711</id>
		<updated>2014-04-08T17:21:25+00:00</updated>
		<content type="html">&lt;p&gt;Today we woke up with a very fun and interesting news made public here &lt;a href=&quot;http://heartbleed.com/&quot; title=&quot;Heartbleed bug&quot; target=&quot;_blank&quot;&gt;http://heartbleed.com/&lt;/a&gt; &lt;div id=&quot;attachment_712&quot; class=&quot;wp-caption alignright&quot;&gt;&lt;a href=&quot;http://kwame.informatux.net/wp-content/uploads/2014/04/heartbleed.png&quot;&gt;&lt;img src=&quot;http://kwame.informatux.net/wp-content/uploads/2014/04/heartbleed-247x300.png&quot; alt=&quot;heartbleed&quot; width=&quot;247&quot; height=&quot;300&quot; class=&quot;size-medium wp-image-712&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;heartbleed&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;In short what this means is that all internet, IM, email and vpn communications that you thought where encrypted and secured, they are not. This is related to a bug in the OpenSSL software used to encrypt such communications.&lt;br /&gt;
Even more interesting is that according to this report, if your server was compromised there is no log or any evidence that it ever happened.&lt;br /&gt;
The OpenSource community is actively releasing patched to address this bug.&lt;br /&gt;
So, if you where p3wn3d, don&amp;#8217;t worry about it, nobody will ever know it, not even your self &lt;img src=&quot;http://kwame.informatux.net/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Patch and keep safe!&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=The+Heartbleed+Bug+http%3A%2F%2Fis.gd%2Fu7H2BA&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=The+Heartbleed+Bug+http%3A%2F%2Fis.gd%2Fu7H2BA&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">A lightweight screen locker</title>
		<link href="http://kwame.informatux.net/?p=708"/>
		<id>http://kwame.informatux.net/?p=708</id>
		<updated>2014-03-31T23:39:47+00:00</updated>
		<content type="html">&lt;p&gt;For a long time I&amp;#8217;ve been using &lt;a href=&quot;http://awesome.naquadah.org/&quot; title=&quot;Awesome window manager&quot; target=&quot;_blank&quot;&gt;Awesome&lt;/a&gt; as my window manager and &lt;a href=&quot;http://www.jwz.org/xscreensaver/&quot; title=&quot;Xscreensaver&quot; target=&quot;_blank&quot;&gt;Xscreensaver&lt;/a&gt; (by Jamie Zawinski) has been my screensaver of choice.&lt;br /&gt;
Recently I started looking for something even more lightweight than Xscreensaver and I found &lt;a href=&quot;http://i3wm.org/i3lock/&quot; title=&quot;i3lock is a simple screen locker like slock&quot; target=&quot;_blank&quot;&gt;i3lock&lt;/a&gt;.&lt;br /&gt;
i3locki3lock is a simple screen locker like slock. After starting it, you will see a white screen (you can configure the color/an image). You can return to your screen by entering your password. To install it on your Debian system all you need to do is an:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
apt-get install i3lock 
&lt;/pre&gt;
&lt;p&gt;I would recommend to install xautolock. This is a program to start up programs in case of user inactivity in X.&lt;br /&gt;
After you&amp;#8217;ve installed both programs you can set the timer for i3lock to start up with something like this:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
xautolock -time 5 -locker i3lock
&lt;/pre&gt;
&lt;p&gt;Taking a look at the options from i3lock I saw that I can specify an image instead of the default white color. I chose a Linux wallpaper with this option:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
xautolock -time 5 -locker &amp;quot;i3lock --image=/home/kwame/Pictures/linux_wallpaper.png -t&amp;quot;
&lt;/pre&gt;
&lt;p&gt;Hope you find this useful. &lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=A+lightweight+screen+locker+http%3A%2F%2Fis.gd%2Fz2d6EZ&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=A+lightweight+screen+locker+http%3A%2F%2Fis.gd%2Fz2d6EZ&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">FOSDEM 2014</title>
		<link href="http://rugebiker.com/blog/fosdem2014"/>
		<id>http://rugebiker.com/blog/fosdem2014</id>
		<updated>2014-02-16T08:00:00+00:00</updated>
		<content type="html">&lt;p&gt;What up! In this post I will talk about my experiences at my first FOSDEM. FOSDEM (Free and Open source Software Developers' European Meeting) is the biggest open source event in Europe; It is celebrated every year in Brussels. Now that I'm living in Europe, I added that event into my calendar since the moment I knew about it.&lt;/p&gt;

&lt;p&gt;My trip there was only possible thanks to Fedora, who sponsored my trip. The first day I arrived, I was confident that I would know how to arrive to the hotel using my phone's GPS, but when I arrived to the train station, Murphy's law came into action and made me be without internet =/, so I asked some policemen at the station and they told me to go in some direction. So I began walking through Brussels until I found out I was somehow lost in the city center. I decided to ask some locals, and when I did, those &quot;locals&quot; were also foreigners coming to FOSDEM, but they were heading to some bar where the preFOSDEM party was going on, so I decided to go with them. There I met a lot of people (and also drank a couple of beers), but what I liked the most was seeing some old friends from the States. After the bar I managed to find my hotel.&lt;/p&gt;

&lt;p&gt;The first day at FOSDEM I went directly to the Fedora booth, were I met a lot of european Fedora and Red Hat folks. Between the stuff we brought to the booth, the thing that most attracted people were some 3D printers. And what do 3D printers have to do with Fedora? Well, Fedora has one spin called Fedora 3D printing, where we can find a lot of CAD programs and other design tools to use in regular 3D printers. I was there the first day all the morning helping at the booth. After noon, I went with some friends to give a round at the expo room. There were many FLOSS projects, and what I liked the most: hardware projects. Being an embedded systems guy hardware for me is one of the best things I could see there. That night I went out with the Red Hat guys and I manage to know them more.&lt;/p&gt;

&lt;p&gt;The second (and last) day, I was mostly working at the Fedora booth, where I met a lot of people interested in the project, and we also heard some cool stories of them using Fedora. I also went to the Mozilla booth and met a lot of the Mozilla folks. I am also a Mozilla Reps, so meeting them was of great pleasure for me. I discussed with them about different topics, and I really liked seeing a lot of young people volunteering in the Mozilla project. I would be really glad to see a lot of teens volunteering in the Fedora project. At the end of the day, I had dinner again with the Fedora/Red Hat people, and I heard lots of cool stories about FLOSS and off-topic with them.&lt;/p&gt;

&lt;p&gt;FOSDEM I don't think is just about going to conferences and getting free stuff, but most importantly of meeting the people with who you work with, the people who volunteer on other projects, or even people that barely knows about FLOSS but are beginning to get interested on it. I really want to be there next year again, and see my friends and make new ones. Thanks again to Fedora, and I am really glad I'm contributing to it (: &lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Enable hardware acceleration in Chrome/Chromium</title>
		<link href="http://rugebiker.com/blog/chromium_hardware_acceleration"/>
		<id>http://rugebiker.com/blog/chromium_hardware_acceleration</id>
		<updated>2014-01-16T08:00:00+00:00</updated>
		<content type="html">&lt;p&gt;What up! Thanks to one of the blogs I follow (&lt;a href=&quot;http://linuxmanr4.com/2014/01/10/habilitar-la-aceleracion-por-hardware-en-chromium/&quot;&gt;LINUXMANR4&lt;/a&gt;) I found a way to enable hardware acceleration in chromium. It is just quick and easy.&lt;/p&gt;

&lt;p&gt;In any tab in chromium we should write &lt;b&gt;chrome://flags&lt;/b&gt;, and enable the option that says &lt;b&gt;Override software rendering list&lt;/b&gt;, and then restart the browser. That's all! You can check that it worked by going in any tab to &lt;b&gt;chrome://gpu&lt;/b&gt;, and there most of the options should be green and saying &quot;Hardware accelerated&quot; ;)&lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Habilitar aceleración por hardware en Chrome/Chromium</title>
		<link href="http://rugebiker.com/blog/chromium_aceleracion_hardware"/>
		<id>http://rugebiker.com/blog/chromium_aceleracion_hardware</id>
		<updated>2014-01-13T08:00:00+00:00</updated>
		<content type="html">&lt;p&gt;Qué ondas! Gracias a uno de los blogs que sigo (&lt;a href=&quot;http://linuxmanr4.com/2014/01/10/habilitar-la-aceleracion-por-hardware-en-chromium/&quot;&gt;LINUXMANR4&lt;/a&gt;) encontré la forma de habilitar la aceleración por hardware para chromium! Es fácil y rápido:&lt;p&gt;

&lt;p&gt;En alguna pestaña de chromium escribimos lo siguiente: &lt;b&gt;chrome://flags&lt;/b&gt;, y habilitamos la especificación que dice &lt;b&gt;Override software rendering list&lt;/b&gt; (en español dirá algo como: &lt;b&gt;Cancelar la lista de renderización del software&lt;/b&gt;), y reiniciamos el navegador y listo! puedes comprobar que la aceleración por hardware está funcionando accediendo en alguna pestaña a: &lt;b&gt;chrome://gpu&lt;/b&gt;, y ahí la mayoría de especificaciones nos deberán de aparecer en verde y diciendo &quot;Hardware accelerated&quot;.&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">El problema de la liebre</title>
		<link href="http://blog.alvarezp.org/2014/01/10/el-problema-de-la-liebre/"/>
		<id>http://blog.alvarezp.org/?p=3055</id>
		<updated>2014-01-10T21:34:35+00:00</updated>
		<content type="html">&lt;p&gt;Tendria yo como unos 10 años cuando leí el siguiente acertijo en un libro llamado &amp;#8220;A jugar con los números&amp;#8221;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Una liebre pesa 10 libras más la mitad de su peso. ¿Cuál es el peso de la liebre?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span id=&quot;more-3055&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Inmediatamente llegué a una respuesta: &lt;em&gt;15&lt;/em&gt;. Busqué la solución al final del libro y decía simplemente:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;20 libras (y no 15 como era de esperar).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Ni una palabra más ni una palabra menos.&lt;/p&gt;
&lt;p&gt;Pregunté a algunos adultos muy pacientes y algunos también decían que 15. Si alguien me dijo que 20 fue por  usar alguna herramienta matemática (seguramente álgebra, pero yo ni si quiera sabía lo que era).&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Cuando aprendí álgebra la ecuación resultó obvia:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;p&lt;/em&gt; = 10 + &lt;em&gt;p&lt;/em&gt;/2&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Y manipular la ecuación para dejar sola la &lt;em&gt;p&lt;/em&gt; es fácil: primero se multiplica todo por 2:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;2&lt;em&gt;p&lt;/em&gt; = 2*10 + 2&lt;em&gt;p&lt;/em&gt;/2&lt;/p&gt;
&lt;p&gt;2&lt;em&gt;p&lt;/em&gt; = 20 + &lt;em&gt;p&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Y se le resta &lt;em&gt;p&lt;/em&gt; a todo:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;2&lt;em&gt;p&lt;/em&gt; &amp;#8211; &lt;em&gt;p&lt;/em&gt; = 20 + &lt;em&gt;p&lt;/em&gt; &amp;#8211; &lt;em&gt;p&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;p&lt;/em&gt; = 20&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Bien, ya tengo la respuesta. Confirma que mi intuición estaba mal. Pero no me quedo agusto si hay una discrepancia entre la realidad y mi interpretación de la realidad. Ahora, ¿cómo corregir mi intuición? ¿Dónde estaba el error? ¿Podía haberlo comprendido yo, de niño, sin conocimiento de álgebra?&lt;/p&gt;
&lt;h3&gt;Otros aspectos del mismo problema&lt;/h3&gt;
&lt;p&gt;El problema resonó en mi cabeza mucho tiempo y con el tiempo fui descubriéndole puntos de análisis según diferentes aspectos hasta volverse en uno de mis favoritos.&lt;/p&gt;
&lt;p&gt;Me gusta porque es un problema que no es matemáticamente difícil. Es la interpretación e intuición lo que estamos retando. Permite discutir el análisis sin tocar el álgebra y es un problema fácil de captar.&lt;/p&gt;
&lt;p&gt;El problema tiene algunos aspectos desde los que se pueden sacar diferentes conclusiones. La simplicidad matemática del problema permite describir cada aspecto en pocas líneas y además relacionarlos todos. Esto permite que podamos pulir nuestro proceso de pensamiento.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;El aspecto lingüístico&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;El ser humano tiende a dividir los problemas en partes. Es más fácil, práctico y supongo que hasta forma parte de nuestra evolución, pero no todos los problemas son divisibles y este es uno de ellos.&lt;/p&gt;
&lt;p&gt;En este problema el principal reto es la frase &amp;#8220;una liebre pesa 10 libras&amp;#8221;, la cual implanta una asociación (errónea) textual: &lt;em&gt;la liebre pesa 10 libras&lt;/em&gt;. Con el problema dividido y un punto de partida: &lt;em&gt;si pesa 10 libras, la mitad de su peso es 5 libras, entonces son 15 libras.&lt;/em&gt; De ahí llegamos a la respuesta incorrecta.&lt;/p&gt;
&lt;p&gt;En realidad el problema no dice que pesa &lt;em&gt;10 libras&lt;/em&gt;, sino &lt;em&gt;10 libras más la mitad de su peso&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sin embargo, es curioso lo que ocurre si redactamos el mismo problema de otra manera:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Una liebre pesa la mitad de su peso más 10 libras.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;La asociación errónea desaparece más fácilmente. Matemáticamente sigue siendo una ecuación equivalente (en esencia, la misma),&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;p&lt;/em&gt; = &lt;em&gt;p&lt;/em&gt;/2 + 10&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;porque bien sabemos que 5+8 = 8+5 por la propiedad conmutativa de la adición.&lt;/p&gt;
&lt;p&gt;Estuve platicando con alguien que batalla con este problema y al explicarle el planteamiento invertido me dijo: &lt;em&gt;pero es que ahora no sé cuánto pesa la liebre&lt;/em&gt;. Es decir, la asociación desapareció pero permaneció la expectativa de algún dato como punto de partida. Esto pudo haber ocurrido sólo por que la discusión previa del problema en su forma original dejó una estructura mental donde &lt;em&gt;extistía&lt;/em&gt; este dato de partida y se convirtió en un cabo suelto.&lt;/p&gt;
&lt;p&gt;Me pregunto qué pasaría si a dos grupos numerosos de niños se les pone el problema de manera independiente, sin conocimiento previo del mismo en ambas versiones. Me pregunto que ocurrirá si una vez dado suficiente tiempo, se le plantea a cada grupo la correspondiente inversión.&lt;/p&gt;
&lt;p&gt;Me pregunto qué pasaría si repetimos el experimento con adultos que no tienen preparación algebraica.&lt;/p&gt;
&lt;h3&gt;El aspecto lógico&lt;/h3&gt;
&lt;p&gt;¿Es posible darse cuenta al hacer la errónea asociación, &lt;em&gt;p&lt;/em&gt; = 10, de que se está cometiendo un error?&lt;/p&gt;
&lt;p&gt;Puesto que el problema consiste en encontrar el valor de &lt;em&gt;p&lt;/em&gt;, el problema estaría resuelto al saber que &lt;em&gt;p&lt;/em&gt; = 10. Entonces la liebre ya no puede pesar otra cosa. Con la asociación hecha se vuelve absurdo decir que la liebre pesa &lt;em&gt;10 + algo&lt;/em&gt;, porque entonces &lt;em&gt;p&lt;/em&gt; milagrosamente dejaría de valer 10 para pasar a valer 15. Esto es una contradicción lógica al tomar dos valores simultáneamente.&lt;/p&gt;
&lt;p&gt;Trayendo este análisis lógico a lo físico: si uno coloca la liebre en una báscula, la lectura siempre será la misma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si la báscula marca 10, entonces 15 es una respuesta incorrecta puesto que marcó 10.&lt;/li&gt;
&lt;li&gt;Si la báscula marca 15, entonces &lt;em&gt;la mitad de su peso&lt;/em&gt; es 7.5 y no corresponde con el problema planteado.&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero lo cierto es que nunca cambiará simplemente por yo establecer mentalmente su peso.&lt;span&gt; Si eso fuera cierto, entonces la báscula marcaría 10, luego 15, luego 22.5, luego 33.75, y se iría haciendo cada vez más pesada hasta convertirse en un hoyo negro instantáneamente. &lt;img src=&quot;https://s.w.org/images/core/emoji/72x72/1f642.png&quot; alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;De vuelta a lo lingüístico: mentalmente se conjetura que hay una diferencia entre &lt;em&gt;peso original&lt;/em&gt; y &lt;em&gt;peso total&lt;/em&gt; que surgiría de sumar, misteriosamente, 10 con el otro valor. Pero volviendo a la báscula, &lt;em&gt;peso original&lt;/em&gt; = &lt;em&gt;peso total&lt;/em&gt;, siempre. Nunca hay dos valores para el peso de la liebre. Por eso este planteamiento es absurdo.&lt;/p&gt;
&lt;h3&gt;El aspecto de la notación algebraica&lt;/h3&gt;
&lt;p&gt;Al escribir &lt;em&gt;p&lt;/em&gt; = 10 + &lt;em&gt;p&lt;/em&gt;/2, cada lado se considera como un todo independiente. En esta notación no cabe lugar a dudas que &lt;em&gt;p&lt;/em&gt; ≠ 10 porque claramente se indica otra cosa. Automáticamente, la notación permite establecer el problema real sin ambigüedad y sin artilugios humanos.&lt;/p&gt;
&lt;p&gt;Se podría uno cuestionar si la bondad de este lenguaje algebraico radica más en nuestra falta de conocimiento de otras notaciones, es decir, si realmente existe forma de expresar matemáticamente el problema de manera incorrecta, pero al no haberla aprendido en la escuela no tenemos lugar al error. Intentándolo, sólo se me ocurre&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;(&lt;em&gt;p&lt;/em&gt; = 10) + &lt;em&gt;p&lt;/em&gt;/2&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;pero tratando de interpretar la ecuación no logro interpretarla de vuelta a una proposición que pueda ser evaluada o desarrollada. Desconozco si esta notación tenga alguna aplicación en otra rama de las matemáticas. Sinceramente lo dudo porque usualmente se usan las sumatorias para formar series aditivas que son más formales, claras y no son ambiguas.&lt;/p&gt;
&lt;h3&gt;La solución, sin álgebra&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;El meollo del asunto: siendo un problema tan simple cómo analizarlo sin depender del álgebra.&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Para evitarnos liebres tomemos algo más simple, genérico: una línea, rectángulo, tabla de madera rectangular y vamos a decir que su longitud mide &lt;em&gt;p&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Para describir &lt;em&gt;p&lt;/em&gt; a partir de sus secciones podemos usar nuestras manos. Sabemos que &lt;em&gt;p&lt;/em&gt; está formado por dos componentes (&lt;em&gt;p&lt;/em&gt;/2 y 10) y al ser aditivos y los únicos, ambos deberían abarcar la línea completa.&lt;/li&gt;
&lt;li&gt;Es decir, podemos dividir esa línea en dos secciones y describir hasta dónde abarca cada uno de los componentes. Por una parte tenemos 10, que de momento es variable, y por otra tenemos &lt;em&gt;p&lt;/em&gt;/2 que sí sabemos hasta dónde abarca: hasta la mitad de la línea.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Finalmente, sabemos que un entero está formado por dos mitades y ambas son exactamente iguales.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Entonces, si una parte es &lt;em&gt;p&lt;/em&gt;/2, la otra parte también debe ser una mitad exacta. ¡Esa mitad exacta sólo puede ser el 10! Si una mitad es 10, pues la otra también debe valer 10 y podemos concluir que la línea mide 20.&lt;/li&gt;
&lt;/ol&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Nuevo proyecto: Caddeus, un Makefile para TDD en C</title>
		<link href="http://blog.alvarezp.org/2013/12/02/nuevo-proyecto-caddeus-un-makefile-para-tdd-en-c/"/>
		<id>http://blog.alvarezp.org/?p=3050</id>
		<updated>2013-12-02T18:26:18+00:00</updated>
		<content type="html">&lt;p&gt;&lt;em&gt;Caddeus&lt;/em&gt; es un Makefile para GNU Make que sirve como plantilla para comenzar el desarrollo de cualquier proyecto en C. Caddeus está liberado bajo una licencia BSD simplificada. Caddeus está hospedado en Github en la siguiente dirección&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alvarezp/caddeus&quot;&gt;https://github.com/alvarezp/caddeus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3050&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Esta plantilla soporta automáticamente:&lt;/p&gt;
&lt;p&gt;Un modelo de desarrollo dirigido por pruebas (TDD): No es un framework sino la construcción de un módulo y su falla temprana sin reconstruir otros módulos ni reejecutar cada pruebas innecesariamente. La regla es muy simple: si tienes un &lt;em&gt;modulo.c&lt;/em&gt;, crea otro llamado &lt;em&gt;modulo.t.c&lt;/em&gt; y Make automáticamente compilará y ejecutará modulo.t.c automáticamente después y registrará si la prueba pasó. Cualquier modificación al módulo provocará una ejecución nueva de las pruebas de dicho módulo.&lt;/p&gt;
&lt;p&gt;Un archivo llamado &lt;em&gt;aplicacion.tt&lt;/em&gt; es considerado un &lt;em&gt;script&lt;/em&gt; a ser ejecutado tras la compilación de la aplicación final, útil para prueba de integración.&lt;/p&gt;
&lt;p&gt;Por defecto, las CFLAGS son muy estrictas, forzando la estandarización y la portabilidad (o la documentación de la falta de portabilidad) desde un principio: &lt;code&gt;-std=c99 -W -Wall -Werror -Wextra -pendatic-errors&lt;/code&gt;. Si tu programa falla con estas banderas, intenta &lt;code&gt;#define _GNU_SOURCE&lt;/code&gt; al principio de tu módulo y proponte como reto poder eliminar esa definición. Como resultado, tendrás un código de mayor calidad y mejor portabilidad.&lt;/p&gt;
&lt;p&gt;Análisis estático automático, cortesía de &lt;em&gt;CppCheck&lt;/em&gt; y &lt;em&gt;Clang&lt;/em&gt;. Si están presentes en el sistema, todos tus módulos serán automáticamente revisados por CppCheck y Clang, dándote seguridad de un código fuente de mayor calidad.&lt;/p&gt;
&lt;p&gt;Análisis automático de ejecución, cortesía de &lt;em&gt;Valgrind&lt;/em&gt;. Si está instalado en el sistema, las pruebas unitarias se ejecutarán a través de Valgrind con revisión completa por &lt;em&gt;fugas de memoria&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Todo lo anterior se desactiva automáticamente ante la presencia de un archivo &amp;#8220;RELEASE&amp;#8221;, lo que permite liberar código sin forzar a que el resto del mundo ejecute las mismas pruebas.&lt;/p&gt;
&lt;p&gt;Se pueden establecer &lt;em&gt;timeouts&lt;/em&gt; de manera opcional para dejar corriendo el juego de pruebas y si se cae en un ciclo infinito, el consumo del CPU se detenga después de un tiempo establecido.&lt;/p&gt;
&lt;p&gt;Se generan automáticamente dependencias de los archivos .c a sus encabezados .h, de modo que al cambiar cualquiera de los encabezados, también se regeneran los módulos que correspondan.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Motivos para deshabilitar JavaScript (video en español)</title>
		<link href="http://blog.alvarezp.org/2013/11/30/motivos-para-deshabilitar-javascript/"/>
		<id>http://blog.alvarezp.org/?p=3040</id>
		<updated>2013-11-30T21:16:04+00:00</updated>
		<content type="html">&lt;!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ --&gt;


&lt;p&gt;Motivos para deshabilitar JavaScript. Está disponible en HD. Si le dan click al botón de YouTube, cambien la calidad por 720p para que se alcance a ver un poquito mejor la pantalla.&lt;/p&gt;
&lt;p&gt;Presentado el 26 de noviembre de 2013 durante la reunión mensual del grupo Tijuana.js.&lt;/p&gt;
&lt;p&gt;El audio está un poco fuerte, pero sirvió para poder oir algunas preguntas y comentarios que salieron. Entonces, de nada y sorry. &lt;img src=&quot;https://s.w.org/images/core/emoji/72x72/1f609.png&quot; alt=&quot;😉&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Asignacion de variables en Bash</title>
		<link href="http://blog.alvarezp.org/2013/11/21/asignacion-de-variables-en-bash/"/>
		<id>http://blog.alvarezp.org/?p=3010</id>
		<updated>2013-11-21T18:00:26+00:00</updated>
		<content type="html">&lt;p&gt;En Bash, ¿qué diferencia hay entre las siguientes tres instrucciones?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;VARIABLE=valor instrucción&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VARIABLE=valor; instrucción&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export VARIABLE=valor; instrucción&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;¿Por qué no todas las combinaciones funcionan cuando se invoca &lt;em&gt;Make&lt;/em&gt; y por qué no todas las combinaciones funcionan con &lt;em&gt;echo&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3010&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Asignar una variable puede afectar a una de dos: al ambiente o a las variables del &lt;em&gt;shell&lt;/em&gt;. Pero ¿cuál afecta a cuál? Para acabar de complicar la situación, en algunos casos es un cambio persistente y en otros es un cambio temporal.&lt;/p&gt;
&lt;p&gt;Para salir de la duda de una vez por todas y entender con exactitud lo que ocurre, he preparado una dupla de pruebas para cada una de las 3 sintaxis, resultando en 6 combinaciones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;VAR=val env | grep VAR; env | grep VAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VAR=val; env | grep VAR; env | grep VAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export VAR=val; env | grep VAR; env | grep VAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VAR=val echo $VAR; echo $VAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VAR=val; echo $VAR; echo $VAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export VAR=val; echo $VAR; echo $VAR&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estas pruebas deberían ser suficientes para salir de la duda. Para asegurar la fiabilidad a las pruebas, cada una la envolví de esta forma, que permitirá, incluso, ver los saltos de línea:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;(unset VAR; PRUEBA) | tr '\n' :; echo&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Resultados:&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;VAR=val instr&lt;/td&gt;
&lt;td&gt;VAR=val; instr&lt;/td&gt;
&lt;td&gt;export VAR=val; instr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;echo $VAR; echo $VAR&lt;/td&gt;
&lt;td&gt;::&lt;/td&gt;
&lt;td&gt;val:val:&lt;/td&gt;
&lt;td&gt;val:val:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;env | grep VAR; env | grep VAR&lt;/td&gt;
&lt;td&gt;VAR=val:&lt;/td&gt;
&lt;td&gt;(línea vacía)&lt;/td&gt;
&lt;td&gt;VAR=val:VAR=val:&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Se concluye lo siguiente:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;VAR=val instr&lt;/td&gt;
&lt;td&gt;VAR=val; instr&lt;/td&gt;
&lt;td&gt;export VAR=val; instr&lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alcance&lt;/td&gt;
&lt;td&gt;Sólo para la instrucción especificada&lt;/td&gt;
&lt;td&gt;A partir de este momento&lt;/td&gt;
&lt;td&gt;A partr de este momento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ambiente al que afecta&lt;/td&gt;
&lt;td&gt;Subproceso&lt;/td&gt;
&lt;td&gt;Shell actual&lt;/td&gt;
&lt;td&gt;Shell actual y subproceso&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Tiene sentido:&lt;/p&gt;
&lt;p&gt;En la sintaxis &lt;code&gt;VAR=val instr&lt;/code&gt;, la asignación es un prefijo para &lt;code&gt;instr&lt;/code&gt; y sólo para &lt;code&gt;instr&lt;/code&gt;. Lo interesante es que sólo afecta al ambiente exportado a la instrucción. Es decir, &lt;code&gt;VAR=val echo $VAR&lt;/code&gt; no funciona porque la variable la expande Bash mismo &lt;em&gt;antes&lt;/em&gt; de asignar el valor &lt;em&gt;val&lt;/em&gt; a &lt;em&gt;VAR&lt;/em&gt;. En efecto: &lt;code&gt;VAR=val1; VAR=val2 echo $VAR&lt;/code&gt; regresa &lt;code&gt;val1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En la sintaxis &lt;code&gt;VAR=val; instr&lt;/code&gt;, el punto y coma efectivamente separa una instrucción de la otra. Es el equivalente de asignar el valor &lt;em&gt;val&lt;/em&gt; a &lt;em&gt;VAR&lt;/em&gt; antes que cualquier otra instrucción como una acción independiente; &lt;em&gt;es&lt;/em&gt; una acción independiente. Esto le da la persistencia del valor tanto en esta sinaxis como en la tercera. Además, &lt;em&gt;Bash&lt;/em&gt;, por defecto, no exporta sus variables al entorno. Esto hace que sólo se afecte la instrucción &lt;em&gt;echo&lt;/em&gt;&amp;#8230; O bueno&amp;#8230; en realidad no, no es &lt;em&gt;echo&lt;/em&gt; quien se está viendo afectado. Ojo: &lt;em&gt;Echo&lt;/em&gt; no recibe la variable en su entorno: es Bash quien está expandiendo la variable a su valor al llamar &lt;em&gt;echo&lt;/em&gt;, quien recibe el valor ya expandido como argumento.&lt;/p&gt;
&lt;p&gt;La tercera sintaxis, &lt;code&gt;export VAR=val; instr&lt;/code&gt; es igual a la segunda: dos instrucciones independientes, con la adición de que la instrucción &lt;code&gt;export&lt;/code&gt;, naturalmente interna a Bash, indica que VAR se debe exportar al ambiente de los siguientes subprocesos. Es decir, tanto se asigna como se importa en la misma instrucción. Es por esto que afecta tanto a &lt;code&gt;echo $VAR&lt;/code&gt; como a &lt;code&gt;env&lt;/code&gt;, &lt;em&gt;Make&lt;/em&gt; y lo que se ponga a su paso.&lt;/p&gt;
&lt;p&gt;Siendo dos aspectos afectados y dos puntos a combinar podría pensarse que falta una cuarta sintaxis: &lt;code&gt;export VAR=val instr&lt;/code&gt;, sin el punto y coma. Sin embargo, esta sintaxis es una simple invocación a &lt;em&gt;export&lt;/em&gt;, indicando que queremos exportar las variables &lt;code&gt;VAR&lt;/code&gt; e &lt;code&gt;instr&lt;/code&gt;.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Referencia rápida de expresiones regulares</title>
		<link href="http://blog.alvarezp.org/2013/11/15/referencia-rapida-de-expresiones-regulares/"/>
		<id>http://blog.alvarezp.org/?p=3011</id>
		<updated>2013-11-16T07:25:22+00:00</updated>
		<content type="html">&lt;p&gt;Como complemento a mi presentación de hoy en la reunión de noviembre del &lt;a title=&quot;Grupo de Usuarios de GNU/Linux de Tijuana&quot; href=&quot;http://www.gultij.org/&quot;&gt;Gultij&lt;/a&gt;, publico esta tabla de expresiones regulares.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-3011&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Observaciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Esta tabla no contempla la compatibilidad con POSIX. Por ejemplo, &lt;code&gt;\b&lt;/code&gt; es un Perlismo que da la casualidad de que otros lo soportan también. Wikipedia trae información más detallada.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Perl toma algunas consideraciones con los fines de línea (&lt;code&gt;\n&lt;/code&gt;). La manera más simple y segura de hacer matching en Perl de forma consistente con los demás motores es hacerle chomp a la línea. Como dicen en los comerciales: &lt;em&gt;se aplican restricciones&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si le detectan errores, &lt;em&gt;por favor&lt;/em&gt; háganmelos saber.&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;colgroup width=&quot;171&quot;&gt;&lt;/colgroup&gt;
&lt;colgroup span=&quot;6&quot; width=&quot;85&quot;&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;Perl&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;GNU Grep&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;GNU Grep Ext&lt;/td&gt;
&lt;td align=&quot;LEFT&quot;&gt;Gawk&lt;/td&gt;
&lt;td align=&quot;LEFT&quot;&gt;GNU Sed&lt;/td&gt;
&lt;td align=&quot;LEFT&quot;&gt;GNU Sed Ext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;&lt;b&gt;Caracteres&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Comodín&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;. (punto)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;. (punto)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;. (punto)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;. (punto)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;. (punto)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;. (punto)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Juego&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[a-z]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Excepto juego&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[^a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[^a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[^a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[^a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[^a-z]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[^a-z]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase alpha&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alpha:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alpha:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alpha:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alpha:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alpha:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alpha:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase dígitos&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:digit:], \d&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:digit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:digit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:digit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:digit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:digit:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase controlchars&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:cntrl:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:cntrl:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:cntrl:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:cntrl:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:cntrl:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:cntrl:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase alnum&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alnum:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alnum:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alnum:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alnum:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alnum:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:alnum:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase visibles&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:graph:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:graph:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:graph:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:graph:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:graph:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:graph:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase minúsculas&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:lower:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:lower:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:lower:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:lower:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:lower:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:lower:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase mayúsculas&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:upper:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:upper:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:upper:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:upper:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:upper:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:upper:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase imprimibles&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:print:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:print:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:print:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:print:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:print:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:print:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase puntuación&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:punct:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:punct:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:punct:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:punct:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:punct:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:punct:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase espacios&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:blank:], \h&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:blank:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:blank:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:blank:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:blank:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:blank:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase espacios y \n&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:space:], \s&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:space:], \s&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:space:], \s&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:space:], \s&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:space:], \s&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:space:], \s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Clase hexes&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:xdigit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:xdigit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:xdigit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:xdigit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:xdigit:]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;[:xdigit:]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Límite de palabra&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\b&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\b&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\b&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;(no hay)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\b&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;[_[:alnum:]]&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\w&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\w&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\w&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\w&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\w&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\w&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;[^_[:alnum:]] (separadores)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\W&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\W&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\W&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\W&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\W&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;16&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;&lt;b&gt;Anclas&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Inicio&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;^cadena&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;^cadena&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;^cadena&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;^cadena&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;^cadena&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;^cadena&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;16&quot;&gt;Fin&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;cadena$&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;cadena$&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;cadena$&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;cadena$&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;cadena$&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;cadena$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;16&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;&lt;b&gt;Calificadores&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Agrupamiento&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;(j)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\(j\)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;(j)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;(j)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\(j\)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;(j)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Referencia&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\1&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\1&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\1&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;(no hay)&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\1&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;16&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;&lt;b&gt;Cuantificadores&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Cero o más&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;*&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;*&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;*&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;*&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;*&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Cero o uno&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;?&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\?&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;?&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;?&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\?&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Al menos 1&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;+&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\+&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;+&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;+&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\+&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Rango&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;{m,n}&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\{m,n\}&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;{m,n}&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;{m,n}&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\{m,n\}&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;{m,n}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;16&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;&lt;b&gt;Operadores&lt;/b&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Concatenación&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;ab&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;ab&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;ab&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;ab&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;ab&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;ab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;LEFT&quot; height=&quot;17&quot;&gt;Alternancia&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;|&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\|&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;|&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;|&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;\|&lt;/td&gt;
&lt;td align=&quot;CENTER&quot;&gt;|&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Laws of Engineering</title>
		<link href="http://rugebiker.com/blog/laws_of_engineering"/>
		<id>http://rugebiker.com/blog/laws_of_engineering</id>
		<updated>2013-11-07T08:00:00+00:00</updated>
		<content type="html">&lt;p&gt;On my Real-Time Systems book called &quot;Hard Real-Time Computing Systems&quot; by Giorgio C. Butazzo, in the introductory chapter the author writes:&lt;/p&gt;

&lt;p&gt;&quot;Due to the relevance that pessimistic assumptions have on the design of real-time systems, Table 1.1 lists the most significant laws on the topic, which a software engineer should always keep in mind&quot;.&lt;/p&gt;

&lt;p&gt;Table 1.1 is the next one:&lt;/p&gt;


&lt;p&gt;Murphy’s General Law&lt;br /&gt;
If something can go wrong, it will go wrong.&lt;/p&gt;

&lt;p&gt;Murphy’s Constant&lt;br /&gt;
Damage to an object is proportional to its value..&lt;/p&gt;

&lt;p&gt;Naeser’s Law&lt;br /&gt;
One can make something bomb-proof, not jinx-proof..&lt;/p&gt;

&lt;p&gt;Troutman Postulates&lt;br /&gt;
1. Any software bug will tend to maximize the damage.&lt;br /&gt;
2. The worst software bug will be discovered six months after the field test..&lt;/p&gt;

&lt;p&gt;Green’s Law&lt;br /&gt;
If a system is designed to be tolerant to a set of faults, there will always exist an idiot so skilled to cause a nontolerated fault..&lt;/p&gt;

&lt;p&gt;Corollary&lt;br /&gt;
Dummies are always more skilled than measures taken to keep them from harm..&lt;/p&gt;

&lt;p&gt;Johnson’s First Law&lt;br /&gt;
If a system stops working, it will do it at the worst possible time.&lt;/p&gt;

&lt;p&gt;Sodd’s Second Law&lt;br /&gt;
Sooner or later, the worst possible combination of circumstances will happen.&lt;/p&gt;

&lt;p&gt;Corollary&lt;br /&gt;
A system must always be designed to resist the worst possible combination of circumstances.&lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como copiar archivos con espacios en el nombre usando scp</title>
		<link href="http://tuxjm.net/2013/10/29/como-copiar-archivos-con-espacios-en-el-nombre-usando-scp/"/>
		<id>http://tuxjm.net/?p=418</id>
		<updated>2013-10-29T20:35:31+00:00</updated>
		<content type="html">Recientemente tuve la necesidad de copiar un archivo desde un servidor a mi máquina, esto normalmente no es ningún problema, sin embargo, esta vez el nombre del archivo tenía varios espacios, al tratar de hacer la copia con scp esto es lo que aparece:
$ scp remote-server:/srv/samba/data01/TI/08 - Example-creds-v6-final.kdb .
scp: /srv/samba/data01/TI/08: No such file or directory
cp: [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">CentOS kvm clone no muestra el device eth0</title>
		<link href="http://kwame.informatux.net/?p=693"/>
		<id>http://kwame.informatux.net/?p=693</id>
		<updated>2013-10-05T04:30:06+00:00</updated>
		<content type="html">&lt;p&gt;Desde ya hace un buen rato estoy utilizando KVM para manejar mis VMs en Linux (ya sea fedora o debian). Tengo una imagen base de CentOS 6 con la cuál, cuando necesito de otra máquina para hacer pruebas, solamente la clono y listo, tengo una máquina list en unos 3-4 minutos para poder hacer las pruebas que necesito.&lt;/p&gt;
&lt;p&gt;Una cosa que me molestaba al clonar máquinas es que la interfaz eth0 no es reconocida en el nuevo sistema, siempre tengo eth1. Después de googlear e investigar un poco, esto se debe a que &amp;#8220;udev&amp;#8221; recuerda los settings de la NIC que fue clonada. Al levantar la máquina recien clonada, busca los settings, específicamente la mac address de la máquina original, pero como en la máquina clonada tenemos un nuevo mac address para la interfaz, entonces udev nombra a esta interfaz como eth1.&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
[root@centos-lvm ~]# ifconfig -a
eth1      Link encap:Ethernet  HWaddr 52:54:00:04:65:ED  
          inet addr:192.168.0.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe04:65ed/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:116 errors:0 dropped:0 overruns:0 frame:0
          TX packets:53 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14386 (14.0 KiB)  TX bytes:8810 (8.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@centos-lvm ~]# ls /sys/class/net/
eth1  lo
[root@centos-lvm ~]# 
&lt;/pre&gt;
&lt;p&gt;Solucionar esto es realmente sencillo. Solo tienes que modiciar el archivo /etc/udev/rules.d/70-persisten-net.rules de la siguiente manera.&lt;/p&gt;
&lt;p&gt;Archivo original:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
[root@centos-lvm ~]# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:bf:b4:70&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;eth*&amp;quot;, NAME=&amp;quot;eth0&amp;quot;

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:04:65:ed&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;eth*&amp;quot;, NAME=&amp;quot;eth1&amp;quot;
[root@centos-lvm ~]# 
&lt;/pre&gt;
&lt;p&gt;Archivo modificado:&lt;/p&gt;
&lt;pre class=&quot;brush: bash; title: ; notranslate&quot;&gt;
[root@centos-lvm ~]# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:04:65:ed&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;eth*&amp;quot;, NAME=&amp;quot;eth0&amp;quot;
[root@centos-lvm ~]# 
&lt;/pre&gt;
&lt;p&gt;Después de modificar este archivo solo es cuestión de modificar tu /etc/sysconfig/network-scripts/ifcfg-eth0 con su correspondiente mac address, reiniciar tu VM y listo, vas a tener eth0 disponible en tu sistema.&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=CentOS+kvm+clone+no+muestra+el+device+eth0+http%3A%2F%2Fis.gd%2FA4BZJG&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=CentOS+kvm+clone+no+muestra+el+device+eth0+http%3A%2F%2Fis.gd%2FA4BZJG&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Software Libre (presentación en español en el CDTI 2011)</title>
		<link href="http://blog.alvarezp.org/2013/09/30/software-libre-presentacion-en-espanol-en-el-cdti-2011/"/>
		<id>http://blog.alvarezp.org/?p=3001</id>
		<updated>2013-09-30T20:40:06+00:00</updated>
		<content type="html">&lt;!-- iframe plugin v.4.3 wordpress.org/plugins/iframe/ --&gt;


&lt;p&gt;Hace dos años presenté sobre Software Libre en el CDTI 2011, en Tijuana (13/ago), en Tijuana, México, en representación del GUL Tijuana (Gultij).&lt;/p&gt;
&lt;p&gt;Disculpen las deficiencias en el audio y el video.&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Cómo imagino yo JavaScript en la Web</title>
		<link href="http://blog.alvarezp.org/2013/09/17/como-imagino-yo-javascript-en-la-web/"/>
		<id>http://blog.alvarezp.org/?p=2987</id>
		<updated>2013-09-17T07:37:55+00:00</updated>
		<content type="html">&lt;p&gt;Ya todo el mundo sabe que estoy en contra del scripting en documentos. Lo considero uno de los peores errores de la historia computacional. Yo considero que ver datos debe ser una operación segura por naturaleza.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-2987&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Navegar por la Web es visitar contenido, en esencia datos. ¿Cómo imagino yo una Web segura? Obligando al control del operador antes de la ejecución de JavaScript. Deshabilitando los plugins por completo.&lt;/p&gt;
&lt;p&gt;El siguiente es el flujo que quisiera que mi navegador soportara para el uso de aplicaciones Web.&lt;/p&gt;
&lt;div id=&quot;attachment_2988&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp1.png&quot;&gt;&lt;img class=&quot; wp-image-2988 &quot; title=&quot;Flujo de aplicación Web, paso 1: usuario visita el sitio Web.&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp1-1024x382.png&quot; alt=&quot;Un sitio Web con JavaScript y plugins deshabilitados y un icono indicando que hay una aplicación Web disponible.&quot; width=&quot;640&quot; height=&quot;238&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Al visitar el sitio Web, el navegador sólo interpreta el HTML y CSS. No se procesan scripts ni plugins. El sitio Web contiene una etiqueta apuntando hacia la aplicación Web, que es reconocida por el navegador y muestra alguna indicación al usuario como corresponde.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Primero, el usuario visita el sitio Web. El navegador sólo interpreta el HTML y CSS. Los plugins y scripts no son procesados. El sitio Web contiene una etiqueta &amp;lt;link&amp;gt; con una URL apuntando hacia la aplicación Web.&lt;/p&gt;
&lt;p&gt;Como ejemplo tomamos a Twitter, con una etiqueta &amp;lt;link rel=&amp;#8221;webapp&amp;#8221; url=&amp;#8221;https://app.twitter.com/&amp;#8221;&amp;gt; en el código HTML. El navegador Web muestra un icono o cualquier otra indicación con la que el usuario pueda interactuar (como hacer click) para instalar la aplicación Web. En la imagen, el icono es un círculo con líneas similares a las terminales de un circuito integrado empaquetado QFP.&lt;/p&gt;
&lt;p&gt;Este icono y sus funciones relacionadas deberán mantenerse privadas, sin visibilidad de ningún tipo por ninguna API o mecanismos programáticos para terceros.&lt;/p&gt;
&lt;p&gt;El sitio Web podría ya sea ofrecer contenidos separados para la página y la aplicación, o mejor aún, usar la técnica de la mejora progresiva para evitar tener que programar dos veces.&lt;/p&gt;
&lt;div id=&quot;attachment_2989&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp2.png&quot;&gt;&lt;img class=&quot;size-large wp-image-2989&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp2-1024x255.png&quot; alt=&quot;Una ventana de diálogo solicitando confirmación al usuario, con una gran alerta sobre los riesgos de instalar una aplicación Web.&quot; width=&quot;640&quot; height=&quot;159&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Al usuario se le alerta, por medio de una ventana modal o por algún otro mecanismo, sobre los riesgos de instalar una aplicación Web. En esta ventana se le pide al usuario confirmar su decisión.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;El usuario hace clic en el icono de la aplicación Web (en el ejemplo, el círulo con terminales QFP) indicando su decisión de instalar la aplicación Web en su escritorio. El navegador alerta al usuario de los riesgos potenciales y pide al usuario confirmar su decisión.&lt;/p&gt;
&lt;p&gt;El mecanismo puede ser una ventana modal o cualquier otro que se integre con la plataforma, pero que no permita la instalación hasta que el usuario haya confirmado la instrucción. En la ventana podría (o debería) incluir la URL a instalar y el icono y título con el que el sitio será instalado en el escritorio.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;attachment_2990&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp3.png&quot;&gt;&lt;img class=&quot;size-large wp-image-2990&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp3-1024x372.png&quot; alt=&quot;Escritorio con un icono nuevo: la aplicación instalada.&quot; width=&quot;640&quot; height=&quot;232&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;El navegador crea un icono en el escritorio con el que se puede invocar la aplicación Web en todo su esplendor: con JavaScript habilitado, pero con los plugins deshabilitados. Habilitar los plugins requeriría de configuración extra por parte del usuario.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;El usuario acepta y reitera su instrucción de instalar la aplicación Web. Se instala entonces un icono en la galería de aplicaciones instaladas (en la imagen, el propio escritorio), con el mismo favicon y título que se usó en el sitio Web inicial. La instrucción es iniciar una instancia en modo &amp;#8220;Webapp&amp;#8221; de algún navegador que cuente con este modo. El sistema operativo deberá manejar esta asignación, de modo que no sea manipulable externamente. El usuario podría alterar el valor por defecto por medio de alguna interfaz de su sistema operativo.&lt;/p&gt;
&lt;div id=&quot;attachment_2991&quot; class=&quot;wp-caption aligncenter&quot;&gt;&lt;a href=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp4.png&quot;&gt;&lt;img class=&quot;size-large wp-image-2991&quot; src=&quot;http://blog.alvarezp.org/wp-content/uploads/2013/09/webapp4-1024x391.png&quot; alt=&quot;Aplicación Web lanzada y abierta en un navegador de forma apropiada, con JavaScript habilitado.&quot; width=&quot;640&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;El usuario invoca la aplicación como cualquier otra. El navegador muestra la ventana de la aplicación Web y permite la total interacción entre el usuario y la aplicación. Google Chromium es un ejemplo de navegador que soporta &amp;#8220;modo app&amp;#8221;, aunque sólo es un artilegio visual sin diferencias funcionales.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Finalmente, el usuario lanza la aplicación Web de la misma manera en que lanza cualquier otra aplicación. El navegador es lanzado en modo &amp;#8220;Web app&amp;#8221; con las siguientes características:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;No existe una barra de direcciones.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Se permite un nivel (hasta donde sea seguro) de integración con el escritorio. Esto podría permitir la integración de las notificaciones de Facebook con la bandeja de notificaciones de GNOME, por ejemplo.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;JavaScript está habilitado para el dominio en cuestión, y se mantiene la aplicación de la política de &amp;#8220;mismo origen&amp;#8221;. Por defecto, se usará el &amp;#8220;modo estricto&amp;#8221; y el usuario podrá alternar entre el modo &amp;#8220;estricto (más seguro)&amp;#8221; y el modo &amp;#8220;relajado (menos seguro)&amp;#8221;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Hacer clic con el botón secundario mostraría un menú en dos secciones: la sección que ofrece las funciones típicas del navegador: atrás, adelante, imprimir, zoom, etc. y la sección donde la aplicación inserta sus propios elementos. Ambas secciones podrían aparecer en el mismo menú, aunque sería mejor idea que la sección del navegador apareciera en un submenú propio, digamos, con el texto &amp;#8220;Navegar »&amp;#8221;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;La ventana de la aplicación deberá correr en su propio espacio de memoria y ambiente, es decir, en su propio sandbox.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;El navegador no permitirá la visita de dominios ajenos a la aplicación Web. Hacer clic en enlaces hacia dominios independientes invocan al navegador en su modo de &amp;#8220;sólo datos&amp;#8221;, como se describía en el paso 1.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="es-ES">
		<title type="html">Cómo agregar correctamente el DRAE y el DPD como motores de búsqueda en Chromium</title>
		<link href="http://blog.alvarezp.org/2013/07/15/como-agregar-correctamente-el-drae-y-el-dpd-como-motores-de-busqueda-en-chromium/"/>
		<id>http://blog.alvarezp.org/?p=2967</id>
		<updated>2013-07-16T00:12:44+00:00</updated>
		<content type="html">&lt;p&gt;La &lt;a title=&quot;Real Academia Española&quot; href=&quot;http://www.rae.es/&quot;&gt;Real Academia Española&lt;/a&gt; ofrece una consulta en línea de su &lt;em&gt;&lt;a href=&quot;http://lema.rae.es/drae/&quot;&gt;Diccionario de la Lengua Española&lt;/a&gt;, Vigésima segunda edición&lt;/em&gt; así como de su &lt;em&gt;&lt;a title=&quot;Diccionario Panhispánico de Dudas&quot; href=&quot;http://lema.rae.es/dpd/&quot;&gt;Diccionario Panhispánico de Dudas&lt;/a&gt;, Primera edición&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Estas búsquedas funcionan de una manera extraña. Entre el uso de JavaScript, el desajuste de codificación de caracteres y la inhabilidad de Chromium de editar esta codificación por medio de la interfaz gráfica, la única forma de realmente hacerlas funcionar plenamente (con acentos) es la siguiente:&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-2967&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Entrar a la &lt;a href=&quot;http://rae.es/&quot;&gt;Real Academia Española&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;En la sección derecha, en la búsqueda, hacer clic derecho sobre el cuadro de búsqueda del Diccionario de la Lengua Española y escoger &amp;#8220;Agregar como motor de búsqueda&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Cambiar la palabra clave por alguna de nuestro gusto. En mi caso: &lt;code&gt;drae&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cambiar la URL por &lt;code&gt;http://lema.rae.es/drae/?val=%s&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para el DPD el procedimiento es el mismo pero con diferente URL:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Entrar a la &lt;a href=&quot;http://rae.es/&quot;&gt;Real Academia Española&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;En la sección derecha, en la búsqueda, hacer clic derecho sobre el cuadro de búsqueda del Diccionario Panhispánico de Dudas y escoger &amp;#8220;Agregar como motor de búsqueda&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;li&gt;Cambiar la palabra clave por alguna de nuestro gusto. En mi caso: &lt;code&gt;dpd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cambiar la URL por &lt;code&gt;http://lema.rae.es/dpd/?key=%s&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span&gt;Con esto ya es posible usar las claves &lt;/span&gt;&lt;code&gt;drae&lt;/code&gt;&lt;span&gt; y &lt;/span&gt;&lt;code&gt;dpd&lt;/code&gt;&lt;span&gt; directamente sobre la barra de direcciones para buscar en estos diccionarios usando Chromium.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Sugiero comprobar el funcionamiento con la palabra &lt;em&gt;guión&lt;/em&gt;, tanto en el DRAE como en el DPD.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Aplausos.&lt;/span&gt;&lt;/p&gt;</content>
		<author>
			<name>alvarezp</name>
			<uri>http://blog.alvarezp.org</uri>
		</author>
		<source>
			<title type="html">Planet Gultij –</title>
			<link rel="self" href="http://blog.alvarezp.org/categorias/planet-gultij/feed/"/>
			<id>http://blog.alvarezp.org/categorias/planet-gultij/feed/</id>
			<updated>2016-06-22T23:55:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como ejecutar un programa automáticamente al inicio de KDE</title>
		<link href="http://tuxjm.net/2013/06/24/como-ejecutar-un-programa-automaticamente-al-inicio-de-kde/"/>
		<id>http://tuxjm.net/2013/06/24/como-ejecutar-un-programa-automaticamente-al-inicio-de-kde/</id>
		<updated>2013-06-24T20:33:51+00:00</updated>
		<content type="html">En el mundo de Linux y el shell bash es bien sabido que que es posible ejecutar programas al inicio de sesión a través de los archivos .bash*, para login-shells se usa .bash_profile y para non-login shells se usa .bashrc.
Pero para ejecutar algún programa gráfico al inicio de sesión en KDE es otra cosa, para [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como deshabilitar el mouse Touchpad en Ubuntu</title>
		<link href="http://tuxjm.net/2013/06/20/como-deshabilitar-el-mouse-touchpad-en-ubuntu/"/>
		<id>http://tuxjm.net/2013/06/20/como-deshabilitar-el-mouse-touchpad-en-ubuntu/</id>
		<updated>2013-06-20T22:48:04+00:00</updated>
		<content type="html">Cuando trabajamos en alguna laptop por default se habilita el mouse touchpad, hay quienes les gusta usarlo, y hay quienes prefieren usar un mouse externo USB.
En algunos casos he visto que el mouse touchpad es muy sensible e interfiere cuando tecleamos, se brinca el puntero a lugares que no queremos.
Para deshabilitar el mouse touchpad de [...]</content>
		<author>
			<name>jmedina</name>
			<uri>http://tuxjm.net</uri>
		</author>
		<source>
			<title type="html">Tuxjm el sitio de jmedina</title>
			<subtitle type="html">El Blog de jmedina en Tuxjm</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/TuxjmElSitioDeJmedina"/>
			<id>http://feeds.feedburner.com/TuxjmElSitioDeJmedina</id>
			<updated>2015-01-04T07:25:02+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">RAID &amp;amp; LVM Screencast</title>
		<link href="http://kwame.informatux.net/?p=689"/>
		<id>http://kwame.informatux.net/?p=689</id>
		<updated>2013-05-27T22:28:36+00:00</updated>
		<content type="html">&lt;p&gt;Este fin de semana grabé un nuevo screencast, al igual que los anteriores, relacionado con Linux y Software Libre. En esta ocasión, hablo de RAID y LVM.&lt;br /&gt;
La url es http://vimeo.com/67086457&lt;br /&gt;
Pásenle a escucharlo y enviar sus comentarios.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=RAID+%26+LVM+Screencast+http%3A%2F%2Fis.gd%2Fa7Rzjc&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=RAID+%26+LVM+Screencast+http%3A%2F%2Fis.gd%2Fa7Rzjc&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Screencast – Administración básica de MySQL con Fedora 18</title>
		<link href="http://kwame.informatux.net/?p=683"/>
		<id>http://kwame.informatux.net/?p=683</id>
		<updated>2013-05-20T15:48:42+00:00</updated>
		<content type="html">&lt;p&gt;En días anteriores platicando con un padawan linuxero me comentaba que se le estaba haciendo algo difícil el utilizar MySQL en Fedora 18.&lt;/p&gt;
&lt;p&gt;Para ayudarle un poco grabé este screencast de administración básica de MySQL con Fedora 18&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Screencast+%E2%80%93+Administraci%C3%B3n+b%C3%A1sica+de+MySQL+con+Fedora+18+http%3A%2F%2Fis.gd%2F00pmel&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Screencast+%E2%80%93+Administraci%C3%B3n+b%C3%A1sica+de+MySQL+con+Fedora+18+http%3A%2F%2Fis.gd%2F00pmel&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-US">
		<title type="html">Posts 2012</title>
		<link href="http://kwame.informatux.net/?p=680"/>
		<id>http://kwame.informatux.net/?p=680</id>
		<updated>2013-04-29T04:09:55+00:00</updated>
		<content type="html">&lt;p&gt;Si, desafortunadamente los 8 posts que había escrito en el 2012 los perdí por no haber tenido un respaldo actualizado de la base de datos de mi blog.&lt;br /&gt;
Lección aprendida.&lt;/p&gt;
&lt;p&gt;Actualmente estoy ya un poco más normalizado de carga de trabajo, se me hace increíble que ya estoy cerca de cumplir 9 meses trabajando en &lt;a href=&quot;http://www.pythian.com/careers/&quot;&gt;Pythian&lt;/a&gt;. Tengo ya en mi borrador los temas que quiero tomar en mis siguientes posts, podcasts y screencasts.&lt;/p&gt;
&lt;p&gt;Estoy seguro que este 2013 va a ser un año en donde voy a retomar mi vocación bloggera.&lt;/p&gt;
&lt;p&gt;Saludos!&lt;/p&gt;
&lt;div class=&quot;tweetthis&quot;&gt;&lt;p&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Posts+2012+http%3A%2F%2Fis.gd%2FJOCe8U&quot; title=&quot;Post to Twitter&quot;&gt;&lt;img class=&quot;nothumb&quot; src=&quot;http://kwame.informatux.net/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png&quot; alt=&quot;Post to Twitter&quot; /&gt;&lt;/a&gt; &lt;a target=&quot;_blank&quot; rel=&quot;nofollow&quot; class=&quot;tt&quot; href=&quot;http://twitter.com/intent/tweet?text=Posts+2012+http%3A%2F%2Fis.gd%2FJOCe8U&quot; title=&quot;Post to Twitter&quot;&gt;Tweet This Post&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</content>
		<author>
			<name>kwame</name>
			<uri>http://kwame.informatux.net</uri>
		</author>
		<source>
			<title type="html">linux – kwame</title>
			<subtitle type="html">tail -f /dev/me</subtitle>
			<link rel="self" href="http://kwame.informatux.net/?feed=rss2&amp;cat=7"/>
			<id>http://kwame.informatux.net/?feed=rss2&amp;cat=7</id>
			<updated>2016-04-21T09:00:08+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">SCALE 11x</title>
		<link href="http://rugebiker.com/blog/scale11x"/>
		<id>http://rugebiker.com/blog/scale11x</id>
		<updated>2013-03-02T08:00:00+00:00</updated>
		<content type="html">&lt;p&gt;El fin de semana pasado, del 22 al 24 de marzo, se realizó la 11va edición del Southern California Linux Expo (Expo de Linux del Sur de California, SCALE para abreviar). Es la primera vez que yo asisto a este evento, y también el evento más grande al que yo he asistido (aprox 2300 personas). El evento es en Los Ángeles, California, y son varias conferencias simultaneas durante todo el día. Las conferencias las hay de diversos temas, desde niveles muy básicos como qué es linux, cómo pedir ayuda en la web, hasta talleres y temas avanzados como secure boot, git, impresoras 3D, y muchas más! Fueron alrededor de 90 conferencias ;) También hubo varios Birds of Feather, que para los que no sepan, un birds of feather son reuniones informales que se hacen para platicar sobre algún tema. Por mencionar algunas, hubo de Raspberry Pi, de Programación Funcional, de Open Cloud, de ideas sobre instalación de paquetes desde la red, entre muchas otras.&lt;/p&gt;

&lt;p&gt;Aparte de todo esto, hubo dos grandes auditorios en los que hubo exposición de varias empresas y comunidades, como HP, Mozilla, VideoLAN, System76, Canonical, entre muchas otras. Obviamente también hubo una de Fedora, y es ahí donde estuve yo participando. Fue mi primera experiencia en un evento grande estando yo en el booth de Fedora, y les diré que fue una muy genial experiencia. Conocí otros embajadores, como a douglax, vwbusguy, herlo, suehle, y a nuestra amada líder, rbergeron. Me dió mucho gusto conocer a todos :D En el booth teníamos dos o tres computadoras corriendo Fedora 18, dos Raspberry Pi corriendo Fedora Raspberry Pi Remix, y una XO de la OLPC (One Laptop Per Child). Aparte de swag dimos calcamonías, DVDs, camisetas y gorras.&lt;/p&gt;

&lt;p&gt;La participación fue enormemente buena. No hubo un sólo momento en el que no hubiera gente en el booth. En uno de los Raspberry Pi estábamos corriendo un emulador de SNES con el Super Mario Bros. 2. Esto fue un hit para los niños (es correcto, había varios padres geeks que llevaron a sus hijos al evento, bien papás y mamás! you are doing it right!) y también para los no tan niños (como yo :P ). También llegó mucha gente muy emocionada que llegaba y nos decía que ellos llevaban usando Fedora durante bastante tiempo. Algunos cuantos llegaban con sus laptops y nos pedían ayuda de algunos problemas técnicos que tenían, de los cuáles muchos eran problemas de gnome o kde :P pero igual les ayudábamos (: Y como no podía faltar, también llegó mucha gente que se quejaba de algunas funciones o características de Fedora. Creo que lo que más quejas recibió fue el nuevo instalador de Fedora (creo que es una versión nueva de anaconda), que siendo honestos a mi tampoco me gustó mucho =/ Algunas otras quejas fue que algunos no podían instalar Fedora con secure boot activado, que no les funcionaba cierta característica de su compu (en las cuales tratamos de ayudar y logramos arreglar algunas cosas), y algunos detalles menores.&lt;/p&gt;

&lt;p&gt;Entre las cosas positivas que nos dijeron es que fuimos de los más amables y platicadores de los booths, que somos una distro muy buena que siempre hay alguien dispuesto a ayudar (no estoy mintiendo), que el swag que dimos era muy bueno, entre muchos otros cumplidos (: Se hace también como un concurso de booths, de cuál es la que da el mejor swag (que ganó HP porque dieron cerveza :P ), los de mejor disfraz, y algunas otras categorías. Fedora ganó mención honorable debido al trato con la gente :) así que bien fedora! Pero lo que a mi más me llamó la atención, fueron dos niñitas que llegaron (una como de 7 años y la otra como de unos 4),., iban cargando sus mochilas de barby, y una de ellas viene y me dice con su linda voz (en inglés): Yo uso fedora todo el tiempo, mi papá nos los instaló, y jugamos y hacemos muchos dibujos&quot;. Me sentí tan conmovido por la niña, que fui a buscar a su papá y lo felicité con todas las ganas del mundo, y él me respondió: Yo sólo les enseño lo que pueden hacer, y ellas son las que quieren quedarse con ello&quot;. Es un muy buen ejemplo de que Linux no es lo difícil que solía ser antes, y que incluso niños lo usan para diferentes fines. Me sentí muy feliz con esto :D&lt;/p&gt;

&lt;p&gt;También hubo un momento en el que llegó un señor con sus dos sobrinos (como de unos 20 años). Iban vestidos muy extravagantes al estilo country boys mezclado con gitanos jaja, una vestimenta muy rara y a la vez genial. Empezaron a tocar justo enfrente de nuestro booth. El señor tocaba el cerrucho (así como lo oyen, el cerrucho), y los sobrinos uno tocaba la mandolina y el otro el teclado. Tocaban música muy alegre. Justo unos instantes después llegó vwbusguy con su mandolina y empezó a acompañarlos, y no mucho después me prestaron el teclado (el del teclado agarró una especie de alcancía y le pegaba con un palito de madera) y empezamos a jamear. Mucha gente se acercó a oir y muchos incluso nos grabaron. Fue algo bien genial!!!!&lt;/p&gt;

&lt;p&gt;También me tocó conocer mucha gente de Red Hat, que para mi fue un honor, ya que Red Hat es una de las empresas en las que me gustaría trabajar, por las cosas que hacen y por que son una empresa púramente de Software Libre. En fin, si quieren saber más sobre las conferencias que hubo, ver algunos videos y otras cosas, el link de SCALE11x es: &lt;a href=&quot;http://www.socallinuxexpo.org/&quot;&gt;http://www.socallinuxexpo.org&lt;/a&gt; . Es un evento que se hace cada año, y lo recomiendo mucho! así que si van,., nos veremos ahí el siguiente año!&lt;/p&gt;

&lt;p&gt;Muchas gracias al Proyecto Fedora por patrocinarme el viaje :) espero poder asistir a muchos eventos más! un saludo a todos!&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;aligncenter size-large wp-image-674&quot; alt=&quot;fedora scale11x&quot; src=&quot;https://dl.dropboxusercontent.com/u/3716461/rugebiker/scale11x.jpg&quot; width=&quot;620&quot; height=&quot;414&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En el siguiente video, el booth de Fedora es el que más se ve: el más cercano de la esquina vienod hacia acá.&lt;/p&gt;</content>
		<author>
			<name>biker</name>
			<uri>http://rugebiker.com/linux/feed/</uri>
		</author>
		<source>
			<title type="html">Biker</title>
			<subtitle type="html">De linux, el universo y todo lo demás!</subtitle>
			<link rel="self" href="http://rugebiker.com/blog/linux/feed/"/>
			<id>http://rugebiker.com/blog/linux/feed/</id>
			<updated>2016-06-27T19:50:04+00:00</updated>
		</source>
	</entry>

</feed>
