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

<channel>
	<title>alvarezp &#187; Código</title>
	<atom:link href="http://blog.alvarezp.org/tag/codigo/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alvarezp.org</link>
	<description>cat &#62;&#62; /dev/blog</description>
	<lastBuildDate>Sun, 20 Jun 2010 03:08:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Qué falló durante mi plática en el SFD2008</title>
		<link>http://blog.alvarezp.org/2008/09/16/que-fallo-durante-mi-platica-en-el-sfd2008/</link>
		<comments>http://blog.alvarezp.org/2008/09/16/que-fallo-durante-mi-platica-en-el-sfd2008/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 19:27:46 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Anécdota]]></category>
		<category><![CDATA[Conferencias]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[Gultij]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[SFD]]></category>
		<category><![CDATA[Tijuana]]></category>
		<category><![CDATA[audiosum]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sfd2008]]></category>
		<category><![CDATA[Software libre]]></category>

		<guid isPermaLink="false">http://alvarezp.ods.org/blog/?p=177</guid>
		<description><![CDATA[A todas las personas que estuvieron presentes en la plática &#8220;Invitación al Desarrollo del Software Libre&#8221;:
Quiero expresar mi agradecimiento por su presencia en mi plática; en general, en el evento SFD 2008 en Tijuana.
Recordarán que al terminar la presentación realicé en vivo un cambio al código de audiosum; específicamente, al componente audiodup. Con este cambio [...]]]></description>
			<content:encoded><![CDATA[<p>A todas las personas que estuvieron presentes en la plática &#8220;Invitación al Desarrollo del Software Libre&#8221;:</p>
<p>Quiero expresar mi agradecimiento por su presencia en mi plática; en general, en el evento <a href="http://tonymoyoy.blogsome.com/2008/09/16/sfd-tijuana-08-resumen/">SFD 2008</a> en Tijuana.</p>
<p>Recordarán que al terminar la presentación realicé en vivo un cambio al código de <a href="http://alvarezp.ods.org/blog/audiosum/">audiosum</a>; específicamente, al componente <em>audiodup</em>. Con este cambio busqué mostrarles de manera práctica un ejemplo de cómo se desarrolla en el mundo del software libre mediante <a href="http://git.or.cz/">Git</a>.</p>
<p>También recordarán que el experimento no funcionó del todo:
<ol>
<li>descargamos el código desde repo.or.cz con <code>git clone http://repo.or.cz/audiosum.git</code>,</li>
<li>compilamos audiosum y lo vimos funcionando con <code>./autogen.sh &#038;&#038; ./configure &#038;&#038; make</code>,</li>
<li>realizamos un cambio en audiodup,</li>
<li>mostramos el parche resultante con <code>git diff</code>,</li>
<li>revisamos el estado del repositorio local con <code>git status</code>,</li>
<li>aplicamos el cambio en el repositorio local con <code>git commit -a</code>,</li>
<li>observamos las diferencias entre el repositorio local y el repositorio público con <code>git log origin..master</code>,</li>
<li>pero no pudimos publicar el cambio con <code>git push</code>.</li>
</ol>
<p>El motivo fue muy sencillo: no tenía autorizada la laptop para enviar cambios al repositorio. En <a href="http://repo.or.cz/">repo.or.cz</a> se deben dar de alta las claves públicas de cada persona@computadora autorizada para enviar cambios. Tengo diferentes claves públicas en cada máquina, y sólo tenía dada de alta la PC del trabajo y la PC de la casa. Mi cuenta de la laptop no estaba autorizada para enviar cambios.</p>
<p>Finalmente el cambio fue aplicado con <code>git push</code> y pueden observar en el <a href="http://repo.or.cz/w/audiosum.git">historial de cambios de audiosum</a> el cambio &#8220;<a href="http://repo.or.cz/w/audiosum.git?a=commit;h=02e1ea1a1d99f52d7c44b9f62c6f00e268999947">Added support for file pattern matching</a>&#8220;. En el segundo enlace pueden ver que la fecha es del 13 de septiembre a las 17:56, hora local, es decir, que el commit fue realizado <strong>durante</strong> la conferencia.</p>
<p>Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2008/09/16/que-fallo-durante-mi-platica-en-el-sfd2008/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Superkb 0.16</title>
		<link>http://blog.alvarezp.org/2008/04/05/superkb-016/</link>
		<comments>http://blog.alvarezp.org/2008/04/05/superkb-016/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 08:11:30 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[Superkb]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[xft]]></category>

		<guid isPermaLink="false">http://alvarezp.ods.org/blog/?p=161</guid>
		<description><![CDATA[Una nota rápida para anunciar Superkb 0.16.
La bitácora de cambios:

Algunos bichos corregidos, reportados por gcc -Wextra.
Reescrito el código de dibujado de textos mediante Xft.
Corregida una condición de carrera en el procesamiento de los eventos de X.

Sobre Xft, la migración se realizó para aprovechar la funcionalidad de antialias que provee Xft, en comparación con Xlib. En [...]]]></description>
			<content:encoded><![CDATA[<p>Una nota rápida para anunciar Superkb 0.16.</p>
<p>La bitácora de cambios:</p>
<ul>
<li>Algunos bichos corregidos, reportados por gcc -Wextra.</li>
<li>Reescrito el código de dibujado de textos mediante Xft.</li>
<li>Corregida una condición de carrera en el procesamiento de los eventos de X.</li>
</ul>
<p>Sobre Xft, la migración se realizó para aprovechar la funcionalidad de antialias que provee Xft, en comparación con Xlib. En Debian Sid, por algún motivo renderea igual la versión 0.15 que la 0.16, pero en Ubuntu Feisty se nota la diferencia en la calidad del texto.</p>
<p>Sobre la condición de carrera, se trata de un bug espantoso que podía volver inutilizable Superkb. Significa que el mismo código en la misma distribución en diferentes PC, podría funcionar para una persona y para otra no.</p>
<p>No hay pantallazos por el momento.</p>
<p>Para los diversos recursos del proyecto (descargas y demás), visita <a href="http://alvarezp.ods.org/blog/superkb/">la página de Superkb</a> en este mismo blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2008/04/05/superkb-016/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>audiosum 0.2</title>
		<link>http://blog.alvarezp.org/2008/03/26/audiosum-02/</link>
		<comments>http://blog.alvarezp.org/2008/03/26/audiosum-02/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 06:59:39 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[audiosum]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[Software libre]]></category>

		<guid isPermaLink="false">http://alvarezp.ods.org/blog/?p=156</guid>
		<description><![CDATA[Ok, audiosum ha sido un excelente conejillo de indias para aprender Git, GNU Autoconf y GNU Automake. Los dos últimos me parecen demasiado confusos todavía, pero ahí la llevo.
Y se han hecho varios cambios, principalmente:

Se corrigió un horrible bug donde los archivos que se abrían no se cerraban, tipo memory leak, pero de descriptores.
Se añadió [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, audiosum ha sido un excelente conejillo de indias para aprender Git, GNU Autoconf y GNU Automake. Los dos últimos me parecen demasiado confusos todavía, pero ahí la llevo.</p>
<p>Y se han hecho varios cambios, principalmente:</p>
<ul>
<li>Se corrigió un horrible bug donde los archivos que se abrían no se cerraban, tipo memory leak, pero de descriptores.</li>
<li>Se añadió una opción, -b, para indicar que sólo se desea la firma de una parte del archivo (dado en porcentaje). Si se usa -b sin un valor, imprime sólo el tamaño del audio del archivo.</li>
<li>Se añadió una opción, -a, para indicar qué algoritmo de hash usar, como md5, sha1, etc.</li>
<li>Mejores mensajes de ayuda.</li>
<li>Se incluye audiodup, un script para encontrar duplicados más cómodamente.</li>
</ul>
<p>El script audiodup trabaja de manera eficiente:</p>
<ol>
<li>Genera una lista de archivos a analizar, según las rutas indicadas.</li>
<li>(Primera etapa) Descarta los archivos no duplicados según su tamaño.</li>
<li>(Segunda etapa) Descarta los archivos no duplicados según el primer 2% del contenido.</li>
<li>(Tercera etapa) Descarta los archivos no duplicados según el contenido completo.</li>
<li>Los archivos restantes son duplicados. Se agrupan y se presentan.</li>
</ol>
<p>Ejemplo de uso de audiodup, para buscar mp3 duplicados en $HOME y /mnt/music:</p>
<pre class="code"><code>audiodup $HOME /mnt/music
</code></pre>
<p>Ejemplo de uso de audiodup, usando sha1 y que revise el 5% en la segunda etapa:</p>
<pre class="code"><code>audiodup -a sha1 -b 5 $HOME /mnt/music
</code></pre>
<p>Descarga en .tar.gz: <a href="http://alvarezp.ods.org/blog/files/audiosum-0.2.tar.gz">audiosum-0.2.tar.gz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2008/03/26/audiosum-02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>strvcat &amp; strvcpy</title>
		<link>http://blog.alvarezp.org/2008/03/03/strvcat-strvcpy/</link>
		<comments>http://blog.alvarezp.org/2008/03/03/strvcat-strvcpy/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 04:35:49 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[funciones]]></category>
		<category><![CDATA[strvcat]]></category>
		<category><![CDATA[strvcpy]]></category>

		<guid isPermaLink="false">http://alvarezp.ods.org/blog/2008/03/03/strvcat-strvcpy/</guid>
		<description><![CDATA[#include &#60;stdarg.h>
#include &#60;stdlib.h>
#include &#60;string.h>
#include &#60;stdio.h>

/* Just like strcat(), but allows multiple strings
 * on the same line.
 */
char *strvcat(char * s1, char * args, ...) {
	va_list ap;

	va_start(ap, args);
	while (args != NULL) {
		strcat(s1, args);
		args = va_arg(ap, char *);
	}
	va_end(ap);
	return s1;
}

/* Just like strcpy(), but allows multiple strings
 * on the same line.
 */
char *strvcpy(char * s1, char [...]]]></description>
			<content:encoded><![CDATA[<pre class="code">#include &lt;stdarg.h>
#include &lt;stdlib.h>
#include &lt;string.h>
#include &lt;stdio.h>

/* Just like strcat(), but allows multiple strings
 * on the same line.
 */
char *strvcat(char * s1, char * args, ...) {
	va_list ap;

	va_start(ap, args);
	while (args != NULL) {
		strcat(s1, args);
		args = va_arg(ap, char *);
	}
	va_end(ap);
	return s1;
}

/* Just like strcpy(), but allows multiple strings
 * on the same line.
 */
char *strvcpy(char * s1, char * args, ...) {
	va_list ap;

	va_start(ap, args);
	strcpy(s1, args);

	args = va_arg(ap, char *);
	while (args != NULL) {
		strcat(s1, args);
		args = va_arg(ap, char *);
	}
	va_end(ap);
	return s1;
}

int main() {

	char a[8192] = "HOLA MUNDO ! -- ";

	strvcpy(a, "Hola", " ", "mundo", "!", "\n", NULL);
	strvcat(a, "Hola", " ", "mundo", "!", "\n", NULL);

	printf("%s\n", a);

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2008/03/03/strvcat-strvcpy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transformador de direcciones MAC</title>
		<link>http://blog.alvarezp.org/2007/06/25/transformador-de-direcciones-mac/</link>
		<comments>http://blog.alvarezp.org/2007/06/25/transformador-de-direcciones-mac/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 05:47:27 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[mac-trans]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://alvarezp.ods.org/blog/2007/06/25/transformador-de-direcciones-mac/</guid>
		<description><![CDATA[Por si le resulta útil a alguien más.
Nombre de archivo: &#8220;bin/mac-trans.sh&#8221;.

#!/bin/sh

#Autor: Octavio Alvarez, alvarezp@alvarezp.ods.org.
#License: GPLv2.

if [ $# -ne 2 ]; then
	echo
	echo "usage: $0 output-format mac-string"
	echo
	echo "output-format is one of the following:"
	echo "  -c  Cisco form  : 0123.4567.89ab"
	echo "  -l  Linux form  : 01-23-45-67-89-AB"
	echo "  -w  Windows form: [...]]]></description>
			<content:encoded><![CDATA[<p>Por si le resulta útil a alguien más.</p>
<p>Nombre de archivo: &#8220;bin/mac-trans.sh&#8221;.</p>
<p><span id="more-101"></span></p>
<pre class="code"><code>#!/bin/sh

#Autor: Octavio Alvarez, alvarezp@alvarezp.ods.org.
#License: GPLv2.

if [ $# -ne 2 ]; then
	echo
	echo "usage: $0 output-format mac-string"
	echo
	echo "output-format is one of the following:"
	echo "  -c  Cisco form  : 0123.4567.89ab"
	echo "  -l  Linux form  : 01-23-45-67-89-AB"
	echo "  -w  Windows form: 01:23:45:67:89:AB"
	echo "  -p  Plain lower : 0123456789ab"
	echo "  -P  Plain upper : 0123456789AB"
	echo
	echo "If the mac-string is not recognized, it is left unchanged."
	echo
	echo "Example: $0 -c 01-23-45-67-89-AB   # Output is 0123.4567.89ab"
	exit
fi

SEP='-.:'

while getopts "clwpP" OPT; do
	case $OPT in
	c)	FORM='\1\2.\3\4.\5\6'
		CASE='y/ABCDEF/abcdef/'
		;;
	l)	FORM='\1-\2-\3-\4-\5-\6'
		CASE='y/abcdef/ABCDEF/'
		;;
	w)	FORM='\1:\2:\3:\4:\5:\6'
		CASE='y/abcdef/ABCDEF/'
		;;
	p)	FORM='\1\2\3\4\5\6'
		CASE='y/ABCDEF/abcdef/'
		;;
	P)	FORM='\1\2\3\4\5\6'
		CASE='y/abcdef/ABCDEF/'
		;;
	esac
done

shift $(($OPTIND-1))

BYTE='([0-9A-Fa-f]{2})'

MAC_REGEX=$BYTE[$SEP]?$BYTE[$SEP]?$BYTE[$SEP]?$BYTE[$SEP]?$BYTE[$SEP]?$BYTE

echo $1 | sed -re "s/$MAC_REGEX/$FORM/; $CASE"
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2007/06/25/transformador-de-direcciones-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programa &#8220;hecho a la medida&#8221; y muy económico.</title>
		<link>http://blog.alvarezp.org/2007/03/12/programa-hecho-a-la-medida-y-muy-economico/</link>
		<comments>http://blog.alvarezp.org/2007/03/12/programa-hecho-a-la-medida-y-muy-economico/#comments</comments>
		<pubDate>Mon, 12 Mar 2007 21:50:04 +0000</pubDate>
		<dc:creator>alvarezp</dc:creator>
				<category><![CDATA[Computación]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[Planet Gultij]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://alvarezp.ods.org/blog/2007/03/12/programa-hecho-a-la-medida-y-muy-economico/</guid>
		<description><![CDATA[/* Programa en C para calcular el área de un cuadrado de 5 m por lado.
 * El resultado se da en metros.
 * Licencia: GPL v2. Autor: Octavio Alvarez.
 */

#include &#60;stdio.h>

int main() {
    printf("El área es: 25\n");
    return 0;
}

]]></description>
			<content:encoded><![CDATA[<pre class="code"><code>/* Programa en C para calcular el área de un cuadrado de 5 m por lado.
 * El resultado se da en metros.
 * Licencia: GPL v2. Autor: Octavio Alvarez.
 */

#include &lt;stdio.h>

int main() {
    printf("El área es: 25\n");
    return 0;
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alvarezp.org/2007/03/12/programa-hecho-a-la-medida-y-muy-economico/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
