martes, 10 de julio de 2007

Cuando los simios tienen voz y voto ...

Cuenta la historia que un científico se propuso investigar como los monos aprendían entre ellos, y como razonaban. Para ello propuso el siguiente experimento, colocó a los monos en una jaula, donde había una escalera que iba a parar a una pequeña plataforma con jugosos plátanos. Pero había un pequeño truco, si alguno de los monos subía por las escaleras para darse un festín, los científicos mojaban con una manguera con agua muy fría a los monos que estaban abajo.

Los resultados eran los siguientes, al principio alguno de los simios vio los plátanos y subió a por ellos, y los demás monos recibían un buen baño con agua helada. Pero con el tiempo los propios monos asociaron que el chorro de agua solo venía cuando alguno subía a la plataforma, con lo que en un par de meses cuando un mono intentaba subir a por la comida, los demás le golpeaban violentamente, para derribarlo, e impedir que subiera. Con esto se ahorraban el chapuzón.

Con el tiempo cambiaban uno de los monos, por otro que no había estado nunca, y cuando intentaba subir, los demás se lo impedían, con lo que no llegaba a mojarse nadie. Poco a poco todos los monos fueron reemplazados, y lo curioso del experimento es que se dio la situación de que a pesar de que ninguno de los monos nunca había sido rociado con agua helada, no dejaban subir al mono a la plataforma. Si los investigadores hubieran podido preguntar a los monos, porque derribaban a los que intentan subir, ellos dirían sin lugar a dudas: “Porque aquí se ha hecho así siempre”.

¿Y por qué cuento esta historia?, pues porque hace unos años alguien repitió esta frase, haciéndome recordar que cerca están algunos de los monos, y cuanto nos queda por avanzar. Esta es la segunda historia que sucedió en Haro, donde yo veraneo.

Nos cubría un cielo nublado, la lluvia amenazaba tímidamente pero inexorable. Nos encontrábamos en la piscina jugando unas cartas, pero buscábamos otra cosa para pasar la mañana de agosto. Nadie más en la piscina, tal vez la lluvia les había asustado, y nos encontrábamos allí solos.

Se me ocurrió la idea de coger la barca hinchable que teníamos y hacer un poco el cafre con ella en la piscina. Los hinchables están prohibidos, pero tal vez sea yo muy listo o demasiado tonto, me pareció que ha nadie íbamos a molestar. Nada más lejos, pues llevaríamos 10 minutos jugando con la barca, uno se subía, y los demás le tirábamos, y nos intentábamos subir los demás.

Salio un vecino y como siempre, pues ya habíamos tenido otros encuentros con él, nos ordena, que quitemos la puta barca del agua, que haber si no sabemos que eso esta prohibido, y que haber si con la edad que tenemos no tenemos nada mejor que hacer que tocar las narices. Antes de que alguno de mis amigos saltara con alguna grosería, intentamos mediar con la dialéctica, arma poderosa. Le dije que, si se iba a bañar, que no hacia falta ponerse así, que nos lo dijera de buenos modos, y nos íbamos a otro sitio, pero que por favor, no nos volviera a gritar así.

Claro esta, el tipo ese no quería bañarse, y así nos lo hizo saber, solo quería tocarlos las narices, así que una vez más, gritando, nos volvió a decir que era la última vez que nos lo decía, que quería ver la jodida barca fuera de la piscina, ya!!.

No nos rendimos a ponernos a su nivel, así que intentamos dialogar otra vez. Le dijimos que mirara alrededor, que no había nadie ni en la piscina, ni el en césped, y por lo tanto, no había nadie a quien molestar, así que no había razón para quitar la barca.

Nuevamente, nos mostró lo cerca que estamos del mono, dándonos una muestra de que cosas no decir en público, pues nos dijo claramente:
Haber chaval, esta prohibido meter hinchables, lo pone bien claro en las normas, si no te las has leído, es tu problema.
Por supuesto que las he leído, digo más, no solo las he leído, sino que las he comprendido, he entendido su significado y su razón de ser.

Yo siempre he pensado que las normas están puestas por algún motivo, y desde mi punto de vista, el hecho de que no se puedan meter colchonetas hinchables en la piscina es porque es muy molesto para los demás bañistas, pues puede salpicar o simplemente ocupar un espacio. Dado que para mi era tan obvio que una causa llevaba a tal efecto, pretendí que me dijera el motivo de la norma, pero he aquí, que como comenté antes, la evolución parece haberse detenido en algunas personas, pues ante la pregunta:

Bien esta prohibido, pero ¿porque?. (Aquí yo esperaba un, porque molesta, … en fin, llevarle a mi terreno, y avanzar hacia mi postura el “debate”)

Las normas están puestas y punto, esta prohibido porque aquí se ha hecho así siempre.
Y con esta frase, que me hizo recordar el experimento de los monos, terminó la discusión, pues pronto entendí que no iba a sacar nada en claro, así que cogimos nuestra barca, y “Al abordaje !!!!!!!

jueves, 5 de julio de 2007

Misterios en la red (skype)

Voy a contar hoy aquí un hecho que me sucedió hace no mucho tiempo, y que aun a día de hoy no he encontrado respuesta, igual alguien lo lee y sabe arrojar un poco de luz en mi fría oscuridad.

Sucedió hará varios meses, que estaba yo haciendo nada, y una ventana emergió de la nada como si estuviera esperando el momento idóneo. Era una ventana del skype, que a pesar de que casi no lo uso, lo suelo tener abierto, entre otras razones, porque mi hermana en el trabajo tiene prohibido usar el Messenger y el skype lo usa para hablar con otras delegaciones.

Siguiendo con la historia, la ventana era de un usuario que me había agregado, no sabía quien podía ser, así que mire el perfil, y empezaron mis dudas. Resulta que era una chica de nacionalidad rumana de muy buen ver. Mi sentido arácnido se disparó, y lo primero que pensé es que sería algún amigo, gastando la típica broma de hacerse pasar por una chica, etc.

Raudo me propuse llegar al meollo del asunto, saber quien era esa persona, y porque me había agregado. Tenía una idea, tenía que hacerle preguntas que sólo una rumana pudiera saber, y si no contestaba o cambiaba de tema, ya sabría que era algún bromista con ganas de guasa. Pero después de una visita rápida por la wikipedia, y preguntarle por la moneda, el nombre del presidente de Rumania, e incluso pedir que me tradujera un texto del rumano al castellano, no me quedó ninguna duda, La persona que estaba al otro lado del cable tenía que ser de origen rumano. Contestaba muy rápido, no le hubiera dado tiempo a buscarlo, y mis dudas aumentaban considerablemente, pues no tenía explicación.

Durante la conversación, la chica comentaba que era rumana, y que estudiaba lenguas, algo así como idiomas, y que me había agregado para hablar en castellano, porque le gustaba mucho.

Soy algo desconfiado, y me olía algo mal, tal vez la televisión me haya creado un prejuicio con los rumanos. Pero la cosa es que la historia no termina aquí, pues una semana después otra chica rumana con buen ver me agregó con el mismo pretexto, y hace una semana, otra chica, esta vez polaca, realizo la misma operación, con la misma intención, las tres chicas estudiaban lo mismo, y en el último caso (amorcita20), la chica quería venir a Donosti de vacaciones y buscaba piso.

Como bien digo, soy bastante desconfiado, pero estos hechos me parecen algo raros, no se si será algún tipo de estafa, pero si es así no veo donde puede estar el riesgo, como no sea, que alguno le diga que vaya a su casa, o algo de este estilo.

Por lo pronto son “chicas” bastante agradables y muy normales, las dos últimas, hace mucho que no se conectan.

Hasta he buscando en google por si había algo relacionado con el skype y con rumanas o algo, pero nada, lo único que he encontrado es un foro donde una de ellas comentaba que quería conocer gente en Donosti o cerca, porque quería venirse en verano, y como los lugareños le contestabas con groserías y provocaciones. Lo que es seguro es que en ellos los prejuicios han llegado más lejos.

A día de hoy sigo sin saber que hay en el fondo del pozo, pero seguiré investigando.

viernes, 15 de junio de 2007

Howto: Exportar de mdb a sqlite en GNU/Linux.

Objetivo: pasar las tablas de una base de datos de Microsoft Access (.mdb) a un archivo sqlite.

Razón: Muchas veces necesitamos hacer búsquedas y no nos sirve usar bases de datos en mysql, un ejemplo puede ser un programa. Puedo querer guardar alguna información, pero puede que la persona que vaya a usar ese programa no tenga mysql instalado o no sepa configurarlo, instalarlo, etc. sqlite nos soluciona el problema, pues es un fichero que puede ser adjuntado con el programa, y nos aporta las ventajas de las bases de datos, aunque en un nivel menos, pues no soporta todas las opciones que nos puede dar mysql. Podríamos guardar los datos en un archivo de texto o binario, pero a la hora de recuperar los datos, sqlite es mucho mejor que un archivo.

Como empezar: Vamos a poner de ejemplo, que queremos pasar la base de datos de todas las cartas de magic, y ya tenemos el mdb. Para trabajar con las bases de datos tenemos el paquete mdbtools, y para trabajar con sqlite el paquete sqlite3, así que pasamos a instalarlos:
sudo apt-get install sqlite3 mdbtools

Una vez que tenemos los paquetes, pasamos a exportar del archivo mdb a sentencias sql, lo haremos en dos pasos, primero el esquema (CREATE …) y luego los datos (INSERT INTO ….) . Para exportar el esquema usaremos el siguiente comando:
mdb-schema master.mdb > esquema.sql

El primer parámetro sera el nombre de la base de datos y el segundo el archivo con las sentencias sql. Si vemos el archivo vemos que uno de los campos se llama P/T y que hay dos campos de tipo Memo/Hyperlink (255), pues bien, sqlite no permite poner “/” en los nombres de los campos, y no existen campos de ese tipo, así que con kate, editaremos el archivo y pondremos de nombre del campo PT y el tipo de datos Text(255).

Ahora pasaremos a por el archivo de los datos, para ello, usaremos el comando:
mdb-export -H -I master.mdb Cards > datos.txt

Con esto exportamos los datos con las sentencias INSERT ya incluidas. Cards es el nombre de la tabla, podemos verlo con mdb-tables master.mdb. Pero tenemos dos problemas que hay que solucionar, el primero es que en los INSERT nos ha puesto el campo P/T, y lo hemos cambiado por PT, y el segundo problema es que las sentencias insert no terminan en “;”. Para arreglar eso echaremos mano de sed.
cat datos.txt | sed -e 's/")/");/g' > datos.temp

Con esto añadimos el ; al final de cada sentencia insert, y para cambiar P/T por PT, basta con:
cat datos.temp | sed -e 's/P\/T/PT/g' > datos.sql

Estupendo, ya tenemos todo lo necesario para crear las tablas en sqlite, el proceso es muy sencillo. ejecutamos estas sentencias:
josu@cyrusnet:$ sqlite
SQLite version 2.8.17
Enter “.help” for instructions
sqlite> .read esquema.sql
DROP TABLE Cards;
SQL error: no such table: Cards
sqlite> .read datos.sql
sqlite> .output insert.sqlite
sqlite> .dump
sqlite>

El nombre del archivo se puede cambiar, pero da lo mismo, porque aun no tenemos la base de datos, pero ya solo queda un último paso, que es:
sqlite cartasMagic.db < insert.sqlite

Una pega que tiene esto, es que el archivo mdb ocupaba 7 megas y el sqlite ocupa 25.

Ya esta, ahora solo queda demostrar que podemos ejecutar consultas sql, por ejemplo vamos a buscar las cartas que se llamen Fireball y sean de quinta edición:
josu@cyrusnet:~/downloads$ sqlite cartasMagic.db "SELECT * FROM Cards WHERE Edition='5E' AND Name ='Fireball'"

Resultado:
Fireball|R|C|5E||0.8300|Sorcery|XR|Mark Tedin|Pay <1> for each target beyond the first: Fireball deals X damage divided evenly, rounded down, among any number of target creatures and/or players.||||5E\Fireball.jpg|1||NF

Para terminar: No es necesario ejecutar las consultas desde bash, hay módulos de sqlite para C++, php, python, etc. Existe el programa kexi que en principio nos hace todo esto mucho más rápido, pero lo he instalado y no me ha funcionado, se cerraba solo por algún bug, así que la forma que hemos visto aquí sirve siempre.