Reportes de fallos (bugs)

Mayo 18, 2009 by mescobal

Al reportar un bug existente en Pidgin en Ubuntu 9.04, vi un link a un artículo acerca de cómo reportar errores de forma eficiente. Dado que cada tanto recibo reportes de bugs de código hecho por mí, linkeo acá el artículo para que lo lean los usuarios de éstos programas. VER ARTICULO ACA.

Python en Apache 2 (para tarados)

Febrero 4, 2009 by mescobal

Solo para no buscar por Google como un tarado por enésima vez:

Para correr scripts hechos en Python y Ruby en Apache2 sin recurrir a mod_python (corriendo sobre Ubuntu o Debian-símiles).

Editar: /etc/apache2/sites-available/default

o el sitio que corresponda.

Agregar en ls sección <Directory /var/www > o donde correponda

AddHandler cgi-script .rb
AddHandler cgi-script .py

El resto es obvio:

  • reiniciar el servidor ( /etc/init.d/apache2 force-reload o restart)
  • que los scripts tengan permiso de ejecución
  • que tengan al inicio la línea de arranque (es mejor  #!/usr/bin/env python o ruby según corresponda)
  • eventulamente editar en la configuración del directorio el permiso para ejecutar cgis en la parte de Options agregando +ExecCGI )

La siguiente vez que lo busque como un tarado y lo encuentre en mi propio blog, prometo postearlo en los comentarios de forma recursiva hasta envejecer.

Pylint: chequear código escrito en Python

Enero 31, 2009 by mescobal

Dado que la calidad de mi código siempre dejó mucho que desear (ausencia de comentarios, estilo desprolijo, etc),Pylint me viene como anillo al dedo cuando hago algo en Python. El problema es que la configuración que trae por defecto no me gusta: hace que salten alertas sin motivo y me llena de reportes que no necesito. Básicamente cuando escribo quiero que me alerte sobre aquellas cosas que lo ameriten y que me muestre nada más el puntaje que le da a mi código. Me marco como meta un código con puntaje superior a 9 y libre de bugs.

Cambios en la configuración de Pylint

1. En el directorio $HOME (/home/usuario/) teclear:

pylint --generate-rcfile > .pylintrc

Con eso se genera un archivo de configuración que queda oculto (por el punto delante del nombre de archivo) en uno de los lugares donde pylint va a buscar por defecto un archivo de configuración.

2. Edito el archivo generado:

nano .pylintrc

3. Edito las siguientes líneas asignando los siguientes valores:

# Disable the message(s) with the given id(s).
disable-msg=C0103
# Include message's id in output
include-ids=yes
# Disable the report(s) with the given id(s).
disable-report= R0801, R0701, R0101, R0001, R0003
# Maximum number of characters on a single line.
max-line-length=100

Con eso obtengo un reporte limpio con un puntaje asignado al código.

Pueden encontrar más documentación sobre pylint en su directorio de documentación (en Ubuntu es /usr/share/doc/pylint) que si lo abren desde el navegador pueden encontrar unas útiles páginas con faq y características completas del programa.

Mantengo una pestaña del navegador apuntando al reporte generado para actualizarlo y leer la última versión.

El reporte lo genero tecleando:

pylint nombre_del_programa.py > reporte.txt

Si teclean:

pylint -f html nombre_del_programa.py > reporte.html

les queda en formato…  HTML  ;-)

Exploración de datos con Epi Info 6.04

Octubre 7, 2008 by mescobal

Siguiendo con la serie Epi Info, les paso un “pique” para explorar cómodamente los datos almacenados.

En primer lugar, ejecuto el archivo de comandos donde tengo definidas las variables con sus etiquetas correspondientes. En le caso de la investigación que estamos haciendo en el momento (sobre Intentos de AutoEliminación) se llama IAES.PGM.

Eso hace que queden definidas variables que después voy a usar para cruzar.

En segundo lugar, ejecuto el comando: ROUTE tablas.txt <ENTER>

Con eso lo que hago es que se guarde todo lo que voy a hacer a partir de ahora en el archivo llamado tablas.txt. Creo un acceso directo a ese archivo (que va a estar dentro del directorio de Epiinfo, generalmente C:\EPI6) en algún lugar que me quede cómodo (en Win: dentro de “Mis Documentos” o similar).

En tercer lugar, comienzo a jugar con las variables haciendo cruzamientos con el comando TABLES.

Para eso escribo TABLES <ESPACIO> y oprimo la tecla F3, con lo cual se me despliega una lista de variables. Uso preferentemente las que están al final ya que son las que tienen definidas etiquetas en lugar de códigos numéricos (para eso fue que ejecuté antes el IAES.PGM).

Entonces, en comandos queda:

run iaes.pgm
route tablas.txt
tables sexo metodo

Con eso se generan acumulativamente los resultados en tablas.txt, con lo cual puedo explorar lo que se me ocurra y mirar después tranquilo los resultados.

Eventualmente, aquellos cruzamientos que me interesan, los incluyo como una línea más dentro del programa (IAES.PGM).

Ejemplo de script (programa) para EpiInfo 6.04

Octubre 4, 2008 by mescobal

Cuando tengo que analizar datos en EpiInfo, me queda más cómodo hacer un pequeño script (programa) para que procese todo y genere un archivo de texto con el resultado, para poder verlo más tranquilo y no quedarme corto con la pantalla.

Actualmente uso EpiInfo 6.04 (versión para DOS) con Linux, mediante DosBox (uso Ubuntu, está en los repositorios). La instalación de Epi en Linux excede esta nota (puede ir en siguiente post). De todos modos, en Linux tienen (también en los repositorios de Ubuntu) el PSPP, clon del SPSS.

En Windows: crear con el Notepad (Block de notas) un archivo y guardarlo con un nombre apropiado (8 caracteres: límite de DOS) con extesión “.pgm” (por ejemplo: “analizar.pgm”).

El texto de un programa tipo está a continuación con comentarios (en Epi, el asterisco marca los comentarios). Uso IAES como nombre de archivo porque se trata de datos sobre Intentos de AutoEliminación).

* Leer el archivo donde están guardados los datos
read iaes.rec
* Borrar el archivo de SALIDA DE DATOS si es que existe alguno
erase iaes.txt
* Indicarle al sistema que escriba los resultados en un archivo de texto llamado IAES.TXT
route iaes.txt
* Setea variables internas acerca de qué datos estadísticos mostrar
set statistics=on
set percents = on
* La variable DIAGNOSTIC indica quién realizó el diagnóstico del IAE, la voy a recodificar para convertir los códigos numéricos en valores más legibles.
* Definir una variable (DIAG) en modo TEXTO, con 10 caracteres (son 10 guiones bajos)
define diag __________
* Recodificar la variable original (DIAGNOSTIC) que tenía valores numéricos en la variable nueva (DIAG)
* codificando el 1 como Médico, 2 como Residente, 3 como Otro y (IMPORTANTE) declarando 9 como valor MISSING (equivalente a SIN DATOS). Fundamental para el procesamiento adecuado de los datos (ver el PUNTO luego del signo de IGUAL al final).
recode diagnostic to diag 1=Medico, 2=Residente, 3=Otro, 9=.
* Calcular las frecuencias de los valores de la variable DIAG
freq diag
* Aplico el mismo esquema para el resto de las variables que me interesan
* ==================================
define entrev __
recode entrevista to entrev 1=Si, 2=No, 9=.
freq entrev
* Con las edades, se requiere de una aproximación distinta.
* Creo una variable llamada RANGO_EDAD para convertir las edades a rangos
define rango_edad ___________________
* Recodifico EDAD en RANGO_EDAD, agrupando de 10 en 10
recode edad to rango_edad by 10
* Calculo las frecuencias de rangos de edad
freq rango_edad
* Los barrios no están codificados y son un campo alfanumérico, por lo que no necesito recodificación
freq barrio
close *
* CIERRA TODOS LOS ARCHIVOS
close iaes.txt

Guardan el archivo PGM dentro del directorio de EpiInfo.
Guardan el archivo de datos (REC) también dentro del directorio EpiInfo.
Luego ejecutan EPIINFO (abren una ventana de comando, teclean “C:\EPI6 <ENTER>”)
Van al menú PROGRAMA -> ANALISIS

En la ventana de análisis teclean:

run iaes.pgm <ENTER>

(sustituyan IAES.PGM por el nombre que le hayan puesto a su archivo).
Si está todo OK, se ejectuan todas las órdenes (las ven pasar en pantalla). Si no está todo OK, aparece una ventana de error y se detiene todo. Continúan con <ESCAPE>.
Para ver el resultado, abren con el block de notas el archivo IAES.TXT (o el nombre que le hayan puesto), que está dentro del directorio de EpiInfo.
Cada vez que ejecuten el programa, ese archivo se crea de nuevo, por lo cual no tiene sentido modificarlo a mano. Simplemente es para tener el resultado visible y poder cortar y pegar en otro lado.

EpiInfo y Línea de comando en XP

Octubre 3, 2008 by mescobal

Ya hace rato que no uso más Windows, pero el resto de mis colegas sí. Estamos procesando información usando Epi-Info y nos queda más cómodo usar la versión 6.04 (bajarla aqui), que funciona bajo DOS.
Entonces, para quienes usen XP:
Copiar EpiInfo 6 en un directorio bajo el disco C que se llame EPI6.
Si tienen los archivos de instalación, los copian a un directorio cualquiera (por ejemplo c:/epiinst) y desde ahí ejecutan el programa de instalación.
Para acceder a una ventana de comandos (shell) en XP:

Inicio –> Ejecutar –> cmd
o bien pulsando la tecla “Windows + R”

luego:

cd c:\epi6
epi6

Una vez dentro de EpiInfo, en Programa -> Analisis acceden a la ventana de análisis de datos, una vez ahí, pueden usar los siguientes comandos:

read archivo.rec
# lee un archivo con registro de casos
freq var
# tabla de frecuencias (absolutas y %) de la variable var
tables var1 var2
# cruza las variables var1 contra var2 en una tabla

Una mejor alternativa es escribir un pequeño programa que realice estas cosas de modo automático y redireccione la salida a un archivo de texto para después procesarlo más tranquilo.
En el siguiente post va un ejemplo con comentario.

Respaldo de mysql desde línea de comando

Octubre 3, 2008 by mescobal

Problema: Dos por tres tengo que respaldar una base de datos mysql en un servidor remoto, comprimir el archivo y copiarlo a mi computadora. Cada vez que lo voy a hacer, busco en internet el comando de respaldo porque nunca me lo acuerdo. Lo posteo aquí para encontrarlo rápido la siguiente vez que lo necesite. La alternativa es tomar algo para la memoria.

Solución 1:

mysqldump -h localhost -u username -p database_name > backup_db.sql
gzip backup_db.sql
scp backup_db.sql.gz usuario@direccion.del.servidor:/directorio/directorio

Solución 2 (en proceso): hacer un script que realice todo esto de manera automática y ponerlo como comando de ejecución programada en cron. Va en siguiente post.

Lighttpd y error “Forbidden”

Junio 22, 2008 by mescobal

CONTEXTO: Estoy con ganaas de migrar el sistema de la empresa que está armado sobre un robusto Apache + Php + Mysql a algo más ajustado al tipo de sistema del que se trata: bajo numero de accesos, necesidad de respaldos rápidos y minimizar opciones esotéricas de configuración.
Se me ocurrió que la combinación más sencilla sería Lighttpd + Ruby + SQlite3.

PROBLEMA: Cuando quise configurar Lighttpd, me enloqueció con errores de tipo “403… Forbidden”. No podía entender porqué era el error si tenía todos los permisos ajustados para que todo el mundo pudiera leer.

SOLUCION: se me fueron los problemas cuando modifiqué el archivo de configuración ( /etc/lighttpd/lighttpd.conf ). Comenté las líneas server.username y server.groupname de modo que quedó la opción por defecto (”don’t care”):

## change uid to (default: don’t care)
#server.username = “www-data”

## change uid to (default: don’t care)
#server.groupname = “www-data”

Sucumbiendo…

Mayo 1, 2008 by mescobal

Sucumbí (como era de esperar) a la seducción de la tecnología. Una Asus Eee está en mi poder.

Mi tesssssoro, Gollum! Gollum!

Sumamente recomendable. Puedo trabajar mientras viajo mis (al menos) 15 horas semanales en ómnibus y al llegar a casa, además de mantener la movilidad adentro, puedo conectarle (en forma totalmente transaparente y sin configuraciones extra) un monitor externo, teclado y mouse, con lo que tengo una de escritorio. El inalámbrico funciona perfecto. El teclado en español no se extraña (de hecho aquí van varias eñes) si se configura como US/internacional y se usa alt-tecla para tildes y eñes. Sumamente potente, su linux me permite abrir una terminal (CTRL+ALT+T) y liberar al SO que está debajo. La batería tiene una duración mayor que el promedio de portátiles y la pantalla, si bien podría ser más grande, no sacrificara tamaño por movilidad. Música, webcam y todo el harware funciona sumamente integrado al SO. El Xandros Linux que viene con la máquina es limitado para los estándares Linux a los que estoy acostumbrado (no es un Debian, no es un Ubuntu). Y si bien probé instalarle un Ubuntu 8.04 siguiendo instrucciones del sitio, no anduvo con la misma integración que el Xandros original. Habrá que esperar. Mientras tanto le agregué repositorios extras con lo que pude instalar varias cosas (Stellarium, gPhpEdit, Geany, librerías TclTk para Ruby, Gizmo y varias cosas más). Es fácil tunear la interfase ya que la comunidad ya desarrolló herramientas. Un 9,5 en 10 (por lo limitado de la versión de Xandros en cuanto a programas en su repositorio, nada más).

HTML y texto de ancho fijo

Enero 29, 2008 by mescobal

Problema: Necesitaba imprimir un texto con tipografía de ancho fijo, pero cada vez que lo intentaba, los lugares que contenían espacios se compactaban y se rompía todo el diseño del texto.

Intento 1: creé un CSS que especifica la familia de fuente “monospace”. Siguió igual.

Solución: hay que poner el texto entre etiquetas “<pre> </pre>”