jueves, febrero 02, 2012

Algunas notas rápidas de valgrind (I)

Una de las mejoras herramientas que he usado en estos últimos tiempos para la programación en C es valgrind, un conjunto de herramientas
que nos permite instrumentalizar nuestros binarios para analizar el comportamientos de éstos. Fundamentalmente lo uso para analizar consumo de memoria y posibles memory leaks
que tengan los programas. Aparte da información de accesos erróneos de memoria.

La herramienta de instrumentación más sencilla que usa es el detector de memory leaks. Para ello suelo ejecutar el programa de la siguiente manera:

valgrind --log-file=leak --leak-check=full --dsymutil=yes ./binario argumento1 argumento2 ...
Esta es la manera más sencilla de generar un informe, en este caso usando la herramienta de instrumentación por defecto, que en este caso es memcheck y
es la encargada de detectar los problemas de memoria (leaks, escritura fuera de bloques reservados, saltos tomados a partir de valores de variables que
no han sido inicialidados), y se le dice a dicha utilidad, con --leak-check=full que memcheck utilice información detallada de la gestión de memoria.

El resto de las opciones indica el fichero donde queremos que se almacene la información, --log-file=fichero, y la opción --dsymutil=yes es una opción específica
de MacOS X para que utilice la utilidad dsymutil para tener
la información de depuración almacenada en el binario.

Para que valgrind nos pueda tener los números de líneas del programa, hay que compilarlo con información de depuración (por ejemplo la opción del gcc para que esto ocurra es -g)


#include <stdio.h>
#include <stdlib.h>
int func1(void)
{
        char *p = NULL;
        p = malloc (1000);
}
int func2 (void)
{
        int asco;
        if (asco)
        {
                printf ("Uno\n");
        }
        else
        {
                printf ("Dos\n");
        }
}
int main (int argc,char **argv)
{
        func1 ();
        func2 ();
        exit (0);
}

Por ejemplo el código anterior tiene un memory leak y una comparación tomada en función de una variable que no ha sido inicialidada. Si compilamos este
programa con la opción -g y ejecutamos el valgrind:

gcc -g -o binario test1.c

valgrind --log-file=leak --leak-check=full --dsymutil=yes ./binario

En el fichero leak nos generará la siguiente salida:

==16246== Memcheck, a memory error detector
==16246== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==16246== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==16246== Command: ./a.out
==16246== Parent PID: 16092
==16246==
==16246== Conditional jump or move depends on uninitialised value(s)
==16246==    at 0x100000E5E: func2 (test1.c:11)
==16246==    by 0x100000EB0: main (test1.c:23)
==16246==
==16246==
==16246== HEAP SUMMARY:
==16246==     in use at exit: 7,087 bytes in 34 blocks
==16246==   total heap usage: 34 allocs, 0 frees, 7,087 bytes allocated
==16246==
==16246== 1,000 bytes in 1 blocks are definitely lost in loss record 9 of 10
==16246==    at 0xB823: malloc (vg_replace_malloc.c:266)
==16246==    by 0x100000E41: func1 (test1.c:6)
==16246==    by 0x100000EAB: main (test1.c:22)
==16246==
==16246== LEAK SUMMARY:
==16246==    definitely lost: 1,000 bytes in 1 blocks
==16246==    indirectly lost: 0 bytes in 0 blocks
==16246==      possibly lost: 0 bytes in 0 blocks
==16246==    still reachable: 6,087 bytes in 33 blocks
==16246==         suppressed: 0 bytes in 0 blocks
==16246== Reachable blocks (those to which a pointer was found) are not shown.
==16246== To see them, rerun with: --leak-check=full --show-reachable=yes
==16246==
==16246== For counts of detected and suppressed errors, rerun with: -v
==16246== Use --track-origins=yes to see where uninitialised values come from
==16246== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 1 from 1)

Podemos ver los dos errores el memory leak de no liberal el malloc y el salto tomado en base a una variable que no esta inicialida.

Referencias


Technorati Tags:

martes, enero 31, 2012

Perlas de Educación para la Ciudanía

Siempre tuve claro tras leer el Real Decreto 1631/2006 donde está el curriculum de esa asignatura obligatoria totalmente prescindible que es Educación para la Ciudanía, que nos encontrábamos ante una de los pilares básicos de lo que tenía que ser uno de los mayores intentos de ingeniería social que iban a ocurrir en España. De hecho, cada vez tengo más claro que en la educación obligatoria, cada ve es más importante la transmisión de ideología que la transmisión de conocimientos. La batalla de los últimos ocho años en la educación en España, más allá que los desastrosos resultados de la misma ha girado entorno a esta cuestión.

Hoy, leyendo el twitter de Lorenzo Ramírez he llegado a algunas de las perlas contenidas en algunos de los textos de la asignatura:

"El neoliberalismo, en principio, perjudica a todos los trabajadores, sobre todo a las mujeres" EpC Editorial Mc Graw Hill
Vaya, parece mentira, que eso se diga en la Unión Europea, donde en media, los Estados controlan el 50% del PIB de cada país. ¿Liberalismo?. Supongo que los listos que redactaron dicho textos todavía no se han enterado de la cantidad de precios regulados que hay en España, que los mayores especuladores de este país son las administraciones públicas - los Ayuntamientos - y que en término medio trabajamos medio año para el Estado.
"El poder político es el poder supremo que, decide, de manera obligatoria para todos, lo que debe hacerse" (EpC, Editorial Anaya)
Por eso ciertos partidos ponen el grito en el cielo cuando alguien osa mencionar la independencia del poder judicial, ¡Montesquiu ha muerto!, como decía cierto caradura sevillano. Todos hemos visto la calidad de nuestros políticos. Gente formada, que ha trabajado muy duro hasta llegar a los puestos más altos del Estado, con unos resultados encomiables en su desempeño. Ver, por ejemplo, el paro en Andalucia o las cuentas de la Comunidad Valenciana.
"Los obreros solo recuperar su dignidad como hombres y trabajadores cuando acaben con el capitalismo como arma opresora" EpC Ed Almadabra
Ah, bueno, sólo en España, en media trabajamos para el Estado hasta el mes de Mayo. Casi el 50% de la riqueza se la lleva el Estado, para redistribuirla adecuadamente. Todos hemos visto la excelente gestión que hace el Estado de dichos recursos. Si, estamos en una crisis económica, lástima que muchos recordamos la eficiencia y lo bien que se vive en alguno de esos paraísos de los trabajadores como Cuba. Hablad con cualquiera que haya ido en un viaje de fin de curso.

En realidad, tendría que desaparecer o bien ser optativa para aquellos padres que deseen que la cursen sus hijos. Por desgracia, no creo que eso esté en la mente de los socialistas de todos los partidos.


Technorati Tags: ,

domingo, enero 29, 2012

Varias fotos en Barajas de "wide bodies" (Spotting)

El pasado mes de Noviembre me fui un domingo a la rotonda de Barajas situada al lado de la cabecera de la 33L. Con el aeropuerto en configuración norte, los aviones aterrizan desde el sur y puede fotografiarse sin problemas. El domingo por la mañana debe ser el momento en el que llegan bastantes vuelos de latinoamérica, y me encontré con un montón de modelos que no había tenido la oportunidad de fotografiar todavía, los aviones que se denominan wide body, que tienen dos pasillos en la cabina. Airbus A330 , A340 y Boeing 767. También aterrizaron varios aviones de corto rango como Boeing 737 y CRJs, pero lo que más me interesaba eran los grandes.

Justo cuando me iba en el coche, vi en la lejanía como un B747 Jumbo enfilaba la senda de planeo, pero no me dio tiempo a fotografiarlo. Es uno de los modelos que junto con los Boeing 777 que tengo pendiente fotografiar en Barajas.

A continuación las fotos de la sesión




Air Europa Airbus A330-220 EC-JQC "Estepona"




Air Europa Airbus A330-220 EC-JQC "Estepona" iniciando la recogida sobre la 33L




Avianca Airbus A330-24 N968AV




Air Europa A330-200 EC-LMN




Iberia A340-313X EC-KSE "Clara Campoamor"




LAN Airliners B767-316/ER CC-CWV




Iberia Iberia A340-313 EC-GHX "Rosalia De Castro"


Technorati Tags:

martes, enero 17, 2012

Usando mutt con gmail

Durante muchos años usé como cliente de correo mutt, conectado a un servidor local al cual le inyectaba el correo a un servidor local. Podía consultarlo externamente a través del protocolo imap. Con la llegada de los webmails, fui usando poco a poco los clientes web que daban Hotmail o Gmail. Sin embargo, cada vez la mayor publicidad y los cambios de interfaz, he vuelto a usar los clientes tradicionales de correo. Llevando en el móvil con un buen cliente imap, y dejando el webmail para casos de emergencia cuando no estoy con mi ordenador, me encuentro bastante cómodo. Para algunos, escapar de la nube puede parecer absurdo, pero mi experiencia es que cada vez la capa "virtual" que supone el navegador web se hace cada vez más pasada en algunos aspectos.

Como suelo usar imap con el cliente de correo de Apple, no tengo demasiados problemas a la hora de leer el correo, pero el otro día, me apeteció volver a probar en una máquina Linux mutt. Buscando documentación, vi que soportaba correctamente el protocolo imap, y decidí probar si era posible que usar gmail como almacén de correo y pudiese enviarlo a través del mismo. La versión mínima necesaria para que funcione el imap en el mutt es la 1.4

Lo primero que hice es ir a las instrucciones genéricas de configuración de clientes de imap en gmail. Allí tenemos las direcciones de los servidores de correo y la configuración que tenemos que utilizar para conectarnos. La dirección de correo que voy a usar es "loqueseaa@gmail.com" y la contraseña de acceso al mismo "mi contraseña". Para configurar el buzón de correo vía imap, añado a mi $HOME/.muttrc:

# Saca todas las cabeceras
set edit_headers = yes
# El nombre que aparcerá cuando mandemos o respondamos un correo
set realname = "Drizzt"
# Usa el campo From
set use_from = yes
# Mi dirección de correo
set from = "loquesea@gmail.com"
# El spool file , en este caso está en imap seguro en gmail
set spoolfile=imaps://imap.gmail.com/INBOX
# Tiempo por el que se chequea el correo (segundos)
set mail_check=90
# Timeout de conexión
set timeout=15
# Usuaruo de imap
set imap_user="loquesea@gmail.com"
# Contraseña de Imap. Escapar caracteres raros con la contrabarra "\"
set imap_pass="tu contraseña"
# Donde están los buzones
set folder=imaps://imap.gmail.com/INBOX
# Dirección de correo smtp saliente. Nota: Como veis va el usuario completo "loquesea@gmail.com", con la arroba escapada
set smtp_url=smtps://loquesea\@gmail.com@smtp.gmail.com
# Caché de cabeceras, para no tener que bajárselas
set header_cache=~/.mutt/hcache
# Caché de mensajes
set message_cachedir=~/.mutt/mcache
# Contraseña SMTP
set smtp_pass="tu contraseña"
# No preguntes para mover del spool al mbox
# No muevas los mensajes automáticamente
set move=no

Una nota rápida, si uno de los campos de configuración necesita un "$" , se puede escapar con la contrabarra.

En esta configuración falta especificar que use los buzones imap correspondientes para los correos enviados, los borradores y el buzón de correo borrado.

Referencias


Technorati Tags:

lunes, enero 16, 2012

¿Qué coño le importa al Estado ...?

El otro día fui a inscribir a mi hija en el registro civil. De buenas a primeras, me encuentro que me dan un boletín para una encuesta - no anónima - para el INE donde entre otras cosas me preguntan:

  • Si mi mujer tuvo complicaciones en el parto.
  • El tipo de parto que fue.
  • El peso de la niña al nacer.
  • El número de semanas de gestación.
  • Sitio donde ha dado a luz.

Para acabar, te ponen un recuadro donde te recuerdan La obligación de facilitar los datos, donde según la Ley de la Función Estadística Pública, en su artículo 10.1 y 10.2 tenemos la obligación de dar los datos, eso sí si nos negamos, nos recuerda amablemente que seremos sancionados de acuerdo al artículo 48 de la misma. La cuestión, es que si de manera anónima un hospital me pide esos datos para un estudio no tengo problemas en darlos. Pero que el Estado te obligue a retratarte, recuerda ya demasiado a ciertas distopías.

Lo cachondo del tema, es que cuando pedí número para el registro , me dijeron que tenía que rellenar el boletín estadístico, pero luego la funcionaria que me atendió me dijo que no hacía falta y que si a ella le obligan hacer eso para registrar un hijo montaba un pollo. Lo curioso es como los españoles aceptamos que el Estado nos pueda perdir esos datos así como así y no nos planteamos que no es misión del mismo recoger este tipo de estadísticas que afectan a la privacidad de los ciudadanos.


Technorati Tags: