logotipo

img_google
Mediterrania
Informática, inteligencia artificial, web, diseño, programación...
Tira ECOL
Sindicación
Directorios de Bitácoras
Contador de visitas

Site Counter
 
Compartiendo mi spam (II)
Tras el anterior post sobre el spam he seguido investigando un poco sobre el SpamAssassin y cómo compartir las bases de datos bayesianas de otras personas para mejorar más aún el filtrado.

Mirando entrre la lista de opciones de sa-learn hay dos que nos sirven para esto: una es la exportar la base de datos, y otra es la de indicar un PATH del que leer la base de datos importada.

Para exportar la base de datos basta con teclear:
sa-learn --dump all > fichero

El tamaño de fichero puede ser bastante grande por lo que recomiendo comprimirlo, pues al ser texto se reducirá mucho (a mí me ha pasado de 15M a 2,3M):
comprimir: bzip2 -z -9 fichero
descomprimir: bunzip2 fichero.bz2

Con esto tendremos en el archivo fichero.bz2 nuestra base de datos.

Si lo que queremos es importar una base de datos bastará con teclear:
sa-learn --dbpath path_al_fichero

Por último indicaros que aquí dejo colgada mi base de datos bayesiana comprimida con el bzip2. Si os la vais a decargar tened en cuenta que son 2,3M y que eso es mi portátil y no lo tengo siempre enchufado. Si tenéis mucho interés os la puedo enviar por e-mail.
 
Introducción a make (parte II)
En este segundo artículo de la serie pretendo explicar el uso de varibles. En verdad no tiene mucho sentido utilizar make como se vió en el artículo anterior, pues el tamaño del Makefile es excesivo lo que lleva a que sea poco práctico.

Esto mejorará con el uso de las variables, que veremos hoy, y con el uso de sufijos, que veremos en el último artículo.

Las variables de un fichero Makefile tienen la siguiente forma: ${nombre}$ o $(nombre). Una variable se puede usar para indicar cualquier cosa de un fichero Makefile excepto el nombre de una regla. Por ejemplo, la usaremos para indicar el compilador, los flags de compilación, las librerías, los ficheros fuente, etcétera.

Veamos un ejemplo de uso de flags:
CC = g++
LIB = -lm -lGL -lglu
BIN = main

all: result

result: main.cpp main.h
  ${CC} -o ${BIN} main.cpp ${LIB}

Como se puede observar, las variables hacen que el Makefile sea mucho más generalizable y reutilizable.

Veamos cómo modificar el fichero del otro día, introduciendole variables:
CC = g++
OPTS = -Wno-deprecated -O3
CLIBS = -lm
OPENGL = -lglut -lGL -lGLU
OBJS = Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o

RESULT = raytracer


all: $(RESULT)

Algebra.o: Algebra.cpp Algebra.h
   ${CC} -c Algebra.cpp $

Camara.o: Camara.cpp Camara.h
   ${CC} -c Camara.cpp

FuenteLuminosa.o: FuenteLuminosa.cpp FuenteLuminosa.h
   ${CC} -c FuenteLuminosa.cpp

RGB.o: RGB.cpp RGB.h
   ${CC} -c RGB.cpp

Primitiva.o: Primitiva.cpp Primitiva.h
   ${CC} -c Primitiva.cpp

Render.o: Render.cpp Render.h
   ${CC} -c Render.cpp

Escena.o: Escena.cpp Escena.h
   ${CC} -c Escena.cpp

raytracer: ${RESULT}.cpp ${OBJS}
   ${CC} -o ${RESULT} ${OBJS} ${RESULT}.cpp ${CLIBS} ${OPENGL} ${OPTS}

Cualquier duda o consulta que os surja no dudéis en preguntármela.

El próximo día veremos cómo hacer un Makefile mucho más generalizable aprovechando una de las características avanzadas del make.
 
Muy divertido
 
Compartiendo mi spam
Para aquellos que sufrais problemas de spam os recomiendo Spamassassin. Decir antes que nada que sólo está para GNU/Linux y OSX.

No pretendo explicar el funcionamiento, ni la instalación, ni nada por el estilo. Para ello os doy esta serie de links:


Yo en concreto, en casa tengo SpamAssassin con procmail y me va de perlas.

Lo que quería comentar en este post es que es posible entrenar al propio SpamAssassin con conjuntos de e-mails que ya sepamos que son spam y con conjuntos de e-mails que no queremos que sean clasificados como spam. Esto se conoce como aprendizaje con muestras positivas (spam) y negativas (no-spam). Para ello hay que tener los e-mails guardados, en formato mbox por ejemplo.

Por ejemplo, si nuestro buzón mbox se llama spam entonces para aprender muestras positivas teclearemos:
sa-learn --spam --mbox spam

Si queremos que tome como muestras negativas nuestro buzón de entrada (inbox) lo haremos así:
sa-learn --ham --mbox inbox


Realizar esto de vez en cuando ayuda a reducir la tasa de falsos positivos. De hecho a mí es raro el día que se me cuela algún e-mail spamoso.
 
Introducción a make (parte I)
Make es una herramienta de GNU ampliamente utilizada a la hora de compilar proyectos en los que haya involucrados varios ficheros de código fuente y en los que unos dependan de otros. Es muy utilizada en el mundo UNIX/Linux.

Make se encarga de ayudarnos en la compilación, permitiendo compilar el proyecto entero, recompilando sólo aquello que haya sido modificado, y reduciendo la compilación a la simple ejecución de la orden make.

Os quiero presentar en 3 artículos cómo aprovecharse de las facilidades de make para compilar pequeños proyectos. Me basaré en el Makefile que estoy utlizando para el raytracer.

Para utlizar make debemos escribir un fichero makefile, en donde indicaremos tanto los ficheros a compilar, como el compilador, etcétera. Si el nombre del fichero makefile es Makefile o makefile bastará con ejecutar make a secas para que él sólo se encargue de buscar el fichero makefile en el directorio actual. Si por lo que sea no vamos a utlizar ninguno de esos dos nombres habrá que invocar a make con el argumento -f:
make -f nombre_del_fichero

Bien, veamos ahora la sintaxis de un fichero Makefile. Para ello supondremos que el fichero principal del proyecto (donde se encuentra el main) es raytracer.cpp. Junto con este, se encuentran las clases: Primitiva.cpp, FuenteLuminosa.cpp, RGB.cpp, Escena.cpp, Render.cpp y Algebra.cpp, todos con sus correspondientes .h. El binario final se llamará raytracer y para generarlo necesitaremos llamar al compilador más o menos así:
g++ -o raytracer Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o raytracer.cpp -lm -lGL -lGLU -lglut -Wno-deprecated -O3 -lfl

Esta orden la podemos incluir en el Makefile como sigue:
all: raytracer

raytracer: raytracer.cpp Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o
   g++ -o raytracer Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o raytracer.cpp -lm -lGL -lGLU -lglut -Wno-deprecated -O3 -lfl

Make, cuando lee un fichero Makefile busca la etiqueta all a la que siguen una serie de objetivos, los cuales busca y ejecuta. En este caso el único objetivo que hay es la regla raytracer la cuál ejecutará si alguno de los ficheros indicados después de los dos puntos ha sido modificado desde el último make realizado. Con ello se consigue compilar sólo cuando haga falta, es decir, cuando algo haya cambiado.

Como veis, para generar el binario dependemos de haber generado antes todos los ficheros objeto de las clases. Lo que haremos será crear una regla para cada clase que llame al compilador. Veamos el Makefile directamente:
all: raytracer

Algebra.o: Algebra.cpp Algebra.h
   g++ -c Algebra.cpp

Camara.o: Camara.cpp Camara.h
   g++ -c Camara.cpp

FuenteLuminosa.o: FuenteLuminosa.cpp FuenteLuminosa.h
   g++ -c FuenteLuminosa.cpp

RGB.o: RGB.cpp RGB.h
   g++ -c RGB.cpp

Primitiva.o: Primitiva.cpp Primitiva.h
   g++ -c Primitiva.cpp

Render.o: Render.cpp Render.h
   g++ -c Render.cpp

Escena.o: Escena.cpp Escena.h
   g++ -c Escena.cpp

raytracer: raytracer.cpp Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o
   g++ -o raytracer Algebra.o FuenteLuminosa.o Camara.o Escena.o RGB.o Render.o Primitiva.o raytracer.cpp -lm -lGL -lGLU -lglut -Wno-deprecated -O3 -lfl

Ahora el funcionamiento será el siguiente: al hacer make por primera vez de la regla all se pasará a la regla raytracer. La regla raytracer comprobará las dependencias: primero mirará si raytracer.cpp se ha modificado desde el último make. Imaginemos que no. Ahora pasará a la regla Algebra.o y comprobará las fechas de las dos dependecias de ésta (Algebra.cpp y Algebra.h). Si han sido modificados ejecutará el código asociado, es decir, generará de nuevo el fichero objeto. Así sucesivamente hasta el final de las dependencias de raytracer que llevará a ejecutar la orden de compilación final.

Espero que os sirva para comenzar a desenvolverse un poco con make. En el siguiente artículo veremos cómo utilizar variables para generalizar más los ficheros y hacerlos menos pesados.

Si tenéis cualquier duda no dudéis en consultarmela.


 
Tutti frutti
 
Regalo dos invitaciones para Gmail
Las dos primeras personas que me digan 5 cosas que les gustan del blog y 5 cosas que cambiarían se llevan sendas cuentas de Gmail.
 
Volviendo a las andadas
Por fin me han arreglado el blog. Espero seguir con la marcha normal de publicación de posts durante estos días. Aunque voy a tener menos tiempo de lo normal: las fechas de exámenes se acercan.

<autobombo>Por si nunca lo he comentado estudio Ingeniería Informática en la Politécnica de Valencia. Teóricamente terminaré la carrera este septiembre, con un examen que tengo el día 7 y con la lectura del Proyecto Final de Carrera, allá por el 20.</autobombo>

Estos días he estado ocupando desarrollando un pequeño raytracer para las prácticas de la asignatura que me falta. Os enseño como me va quedando y quizá me anime y comente algunos aspectos en una serie de artículos.



 
Problemas con el blog
Perdonad el parón, pero llevo días con problemas con la plantilla XHTML y el administrador de contenidos de ya.com.

He pedido soporte al servicio técnico y he iniciado un hilo en el foro, pero no hay forma.

Espero volver pronto a la normalidad.
 
Mi portátil
Este es mi portátil. Y la verdad es que estoy muy contento con él: a un precio relativamente barato conseguí un portátil con pantalla panorámica, ligero y bastante fino, con un buen procesador y lo más importante: compatible con Linux.

Y es que ese era uno de mis principales requisitos a la hora de adquirir el nuevo equipo. El resultado es una Gentoo instalada y funcionando perfectamente, con todo el hardware soportado, incluída la Radeon 320M IGP (a la que sólo le falta la aceleración 3D).

En fin, un buen ordenador de una marca poco conocida pero que parece que poco a poco va ganando cuota de mercado ofreciendo calidad a precios razonables.

Un gustazo.
 
Pero que cabrones...
 
Buscadores de Bittorrent
Esta mañana, leyendo mini-d he visto este post sobre un buscador de torrents: el bitoogle.

Lo he probado y parece que sí que encuentra bastantes cosas. Y es que ese es uno de los problemas de los torrents, que no tengan un buscador centralizado que nos permita usarlos como si fueran e-links.

Además de este buscador yo puedo añadir estos dos, que también uso habitualmente:


Ale, a disfrutarlos :)
 
Lavado de cara al estilo (parte I)
Como veis, de ayer a hoy me he decidido a cambiar el estilo del blog, sobretodo animado por este artículo del weblog de trucos.

Yo no soy diseñador y tampoco me considero muy creativo, así que lo que hago es visitar varias web's de estilos tales como CSS Garden, CSS Vault, y algunas más que tengo entre mis favoritos.

Os recomiendo pasaros por lo menos una vez a la semana por cada una de ellas, pues realmente se ven cosas sorprendentes y muy originales, que uno no se imagina que se podrían llegar a hacer sólo con CSS e imaginación.

De momento voy a dejar el diseño como está, pues me agrada bastante, y quizá pronto lo cambie por uno que me están preparando ;)

Ya me diréis qué os parece.
 
gDeskCal
Ayer me pasé un buen rato buscando un calendario práctico, que incluyera recordatorio y que fuera lo suficientemente accesible o visible para serme útil.

Al final encontré en el portage gDeskCal. Éste recuerda mucho a los gdesklets, sin embargo no tiene nada que ver con ellos.

El calendario puede incluir transparencias en el fondo y se sitúa en el escritorio, en el lugar que queramos. Se sincorniza con el calendario de citas de Evolution, además de disponer de un sistema de recordatorios y alarmas muy práctico. Podéis ver aquí pantallazos y una pequeña guía.

Finalmente, para los más pegilgueros dispone de una amplia gama de skins para personalizar al gusto de cada uno.

Muy recomendable.
 
Presentación
Hoy queda inaugurado este weblog. Después de muchos intentos y de mucha búsqueda por fin he encontrado un sitio que me diera espacio en disco duro gratuitamente.

A partir de hoy espero contaros novedades y curiosidades del mundo del software libre, la programación, internet, inteligencia artificial, etcétera...

Nos vemos pronto!