inicio mail me! sindicaci;ón

Archive for Output

Creando accesores en Python

Python tiene una característica que son las propiedades, pero al no conocerlas bien y ser particulares de este lenguaje, he creado una minúscula aplicación que genera el código para iniciar y acceder (get y set) a las propiedades de un objeto.

Esencialmente, es una función a la que le pasamos el nombre de las propiedades y su valor inicial, por ejemplo:

buildAccessor([
        (‘configfile’,\’/etc/foo.conf\’),
        ])

Y esto nos genera el código que debemos incluir en el constructor, así como los métodos get y set:

self.__configfile = ‘/etc/foo.conf’

        def getConfigfile(self):
                return self.__configfile

        def setConfigfile(self, value):
                self.__configfile=value

Con lo que si hacemos una prueba:

class objectFoo:
        def __init__(self):
                self.__configfile = ‘/etc/foo.conf’

        def getConfigfile(self):
                return self.__configfile

        def setConfigfile(self, value):
                self.__configfile=value

if __name__==‘__main__’:
        test=objectFoo()
        print(‘test.getConfigfile() says \’ + test.getConfigfile() + \’)
        test.setConfigfile(‘/home/linz/.foo’)
        print(‘Now, test.getConfigfile() says \’ + test.getConfigfile() + \’)

Resulta esto:

pablo@golgi:~/Desktop/py-pwgen$ python test_buildAccessor.py
test.getConfigfile() says ‘/etc/foo.conf’
Now test.getConfigfile() says ‘/home/linz/.foo’
pablo@golgi:~/Desktop/py-pwgen$

He decidido ponerle una página estática, por que puede ser que en el futuro amplíe el trabajo, o incluso que lo suba un SVN.

Comenzando con Aleli

Fue ya hace casi un mes, el 24 de octubre, cuando recibí el comunicado de Forja-RedIRIS de que se había aprobado el proyecto con el que participo en el I Concurso Universitario de Software Libre. Y desde entonces, entre asignaturas, cursos y compromisos apenas he conseguido tiempo para rebañar un poco de documentación sobre lex y yacc, que son unos de los recursos que pienso emplear para desarrollar este proyecto.

Aleli es un proyecto orientado a obtener estadísticas sobre una lista de correo, de forma que a partir de su histórico en formato mbox (p.ej. este) se pueda ver cuántos mensajes se han enviado por día del mes, día de la semana, semana, mes, usuario, etc. La salida sería en el formato de gnuplot para representarla fácilmente.
El primer objetivo será ser capaz de parsear una entrada en formato mbox y abstraerla en una estructura de datos (aparte de verificar si la entrada es correcta). Precisamente para esto es para lo que voy a recurrir a lex y yacc.
Los siguientes objetivos poco a poco los voy perfilando, y mejor ir poco a poco: más vale pájaro en mano que ciento volando, ¿no? Además de que ir maleando los objetivos “en caliente” permite ajustarse mucho mejor a las necesidades reales.

Añadiendo una firma a los correos que envíe

Una de las cosas que se pueden hacer por la tarde:

#!/bin/bash

ruta=/home/fulano/firmas-correo

firmar()
{

echo -n “” > $1;
#echo “–” >> $1; Esto ya lo pone el thunderbird él solo
#Sacar la frase aqui
cat $1.0 >> $1;

}

for fichero in $ruta/*@*[^0];

do firmar $fichero ;

done;

Mozilla Thunderbird, por cada correo que envía se puede configurar para incluya al final del mismo, él sólo, el contenido de un fichero, precediendo el contenido por dos guiones ‘–’ .

Al abrir el cuadro de escribir mensaje, ya directamente aparece en el widget para escribir el cuerpo del mensaje:

< contenido del fichero>

Bien, mi idea es que cada una de las direcciones de correo que uso tenga su propio fichero con su contenido, llamado $ruta/, p.ej.: /home/fulano/firmas-correo/perki_pat3@yahoo.es. Ese fichero será el que usará Thunderbird.

Lo que me interesa es que el contenido de ese fichero cambie. Para empezar el script de arriba lo que hace es, por cada fichero del directorio /home/fulano/firmas-correo/ cuyo nombre no acabe en 0, escribe en él el contenido de un fichero de igual nombre, pero acabado en .0, y contenido en el mismo directorio. La intención es que justo antes de incluir lo de este último fichero, se incluya una cita, o alguna frase ingeniosa o algo de ascii-art. Una posibilidad es tirar de fortunes. Para que el fichero que incluye Thunderbird cambie, o bien se ejecuta manualmente, o bien, con un cron: 07 * * * * ruta_al_script (en el minuto 07 de cada hora de cada día lo ejecuta, cambiando una vez a la hora).

Pero lo que me gustaría de verdad es montar (o encontrar) una base de datos, que vía web me supla de frases, de forma que un `wget < ...> -O -` arregle el asunto. Bash.org no me hace la faena, y wikiquotes tampoco. Así que tendré que hacer una base de datos que guarde las quotes clasificadas de alguna forma, y un CGI que las lea y las devuelva en distintos formatos (para esto me interesaría texto plano, pero en una aplicación web a lo mejor interesa XML). Y además que permita incluir nuevas quotes. Si sacara algo de tiempo para leer y practicar algo de desarrollo web pues… estaría bien.

Recopilando los Bruce Schneier Facts

Anoche, tras ver la noticia en meneame hice un script en perl, que con un poquito de bash scripting sirveron para recopilar los más de 100 facts sobre Bruce Schneier, que había en ese momento. Aquí va todo el material:

Orden para ejecutarlo:

pepito@grillo ~$ while [ 1 ]; do wget http://geekz.co.uk/schneierfacts/ -O – 2>/dev/null| ./doo.pl; sleep 10; done;

(se deja un rato, y Ctrl-C)

pepito@grillo ~$

Script en perl (¡guardadlo con permisos de ejecución!) y todas las frases.
Si abrís el archivo y os fijáis, todas acaban en #. De todas las peticiones que se hicieron, es el número de ellas en la que la frase ya estaba en la base de datos. Así, #12 indica que de todas las peticiones se recibieron 12 con esa frase, #1 que se recibió esa frase sólo una vez (creo que no hay ninguna de 1, de 2 hay una, de 3 hay tres, apañaos con grep \#$ frases.txt para saber cuántas líneas acaban en #) . Guardé ese dato para rayarme con el generador de números aleatorios que usa el servidor (la implementación de php). Si lo hago ya lo contaré. Se elimina con sed s/\#[0-9][0-9]//g bruce.db | sed s/\#[0-9]//g -, igualmente las entidades XML tal como ” se reemplazan por su versión texto con secuencias como sed s/\&quot\;/\”/g bruce.db
Por ahora nada más, cuando tenga algo más interesante que contar lo pondré por aquí

Contador de fisgonas

Me intrigaba saber cuánta gente accedía a la fisgona según la hora que fuera y el día, ya que supuse que no sería lo mismo a las 4 de la mañana que a las 10, ni sería lo mismo un domingo o un día de agosto, que un miércoles o un día de febrero. Así que en una madrugada de ahce 15 días aproximadamente escribí una chapucilla en shell script que me permitía dibujar unas gráficas representando número de usuarios respecto a la hora dada. Pese a que debía de haberlo publicado antes, ya que desde entonces ha estado cogiendo polvo, lo he publicado hoy, donde le he dado algún que otro retoque que le faltaba. Of course, sigue siendo cutre a más no poder, pero su función la acomete con eficacia y sin chistar, salvo por un problema: que alguien (o algo) de dreamhost debió matar el proceso allá por el día 23. Así que algo habrá que inventar que permita que se esté ejecutando de continuo el proceso de sondeo, p.ej. programar un cron cada minuto para sondear, y otro cada 10 o 20 minutos para dibujar.

Como ahora mismo tengo mejores cosas que hacer, y no tengo noticias de que a nadie le interese seguir mejorando esto, lo dejo paralizado (freeze).

El contador de fisgonas se puede acceder aquí, y el código fuente del contador de fisgonas acá, y el resto lo sabréis leyendo el código fuente, que es muy reducido.

Creo que respecto a este tema nada más, y si no, pues a los comentarios. Y si a alguien le interesa el contador éste y quiere que se siga mejorando o bien lo mejora él/ella, o bien que pida y [a lo mejor] se le dará.

Actualización (20060820): Aviso que esto de los resultados del siguiente párrafo son elucubraciones mías, así que no tomárselo muy en serio. Lo digo por que esta noticia ha sido meneada, y alguien en los comentarios rebatía, posiblemente con toda la razón, lo que yo escribí.

Bueno, los resultados: se aprecia que de lunes a viernes, y especialmente de martes a jueves, hay unas grandes subidas de usuarios algo después de las 8 de la mañana –hora de entrar a trabajar– y bajadas algo antes de las 12 de la noche –hora de irse al saco. Los lunes la subida es más discreta, al igual que la bajada el viernes. Durante el fin de semana se ve que se alcanza el mismo número de usuarios pico, pero cuesta más y se mantiene por menos tiempo, la subida es más relajada. Ese jueves de esa semana (porque los datos son de sólo una semana) se inicia la subida de usuarios algo antes de las 8 de la mañana, por lo que hubo gente que llegó antes a trabajar ese día.

Acutalización (20060817): Hoy le he hecho algunas mejoras al sistema, por ejemplo, ahora funicona mediante cron. Ya no es un script que tiene que estar permanentemente ejecutándose (los de DreamHost además lo mataban), si no que cada minuto toma una muestra del número de fisgonas que hay (antes era cada 20 segundos, pero cron no permite más definición). Ahora hay 2 resoluciones para las imágenes que se generen desde hoy: 640×480 y la anterior de 2048×1024. El código fuente además, en vez de estar desperdigado en tres ficheros, lo he reunido en uno sólo, que para las pocas líneas de códgio que son, no merece ese jaleo de tres ficheros.