martes, 31 de agosto de 2010

Credo de la pipeta


[desvergonzadamente plagiado de "La chaqueta metálica" ("Full metal jacket"). Gran película. Véase "Rifleman's Creed".]

Ésta es mi pipeta.
Hay otras muchas, pero ésta es la mía.
Mi pipeta es mi mejor amiga.
Es mi vida (puesto que no hay vida fuera del laboratorio).
Tengo que dominarla, igual que domino la técnica del pipeteo.
Sin mí, mi pipeta es inútil. Sin mi pipeta, no puedo investigar.
Tengo que acertar con las puntas, tengo que pipetear y echar la muestra en el tubo correcto.
Tengo que transferir la muestra sin perder un microlitro.
Lo haré...
Mi pipeta es investigación, porque participa de mi investigación.
Por lo tanto, la consideraré como a una hermana.
Aprenderé cuál es su precisión, su repetibilidad, sus piezas y accesorios.
Nunca la trataré inapropiadamente, y la protegeré de los ácidos, bases y solventes más fuertes, como protegería mis brazos, mis ojos y mi corazón de esas sustancias.
Mantendré mi pipeta limpia y lista, libre de RNasas.
Nos convertiremos uno en parte del otro, la pipeta será la continuación de mi mano.
Lo haré...
Esto que digo lo juro ante Watson y Crick, ante Eppendorf y Gilson.
Mi pipeta y yo defenderemos la ciencia.
Triunfaremos ante las adversidades y las contaminaciones de DNA exógeno.
Publicaremos en revistas de alto impacto.
Así sea hasta que consiga clonar la secuencia apropiada, y no haya más PCRs fallidas, sino una banda bien definida.
¡AMÉN!

martes, 8 de junio de 2010

Scientix: recursos educativos sobre ciencia

Leo en CORDISnews (del Servicio de Información Comunitario sobre Investigación y Desarrollo) que el programa "Ciencia y Sociedad" del Séptimo Programa Marco ha puesto en marcha un portal para proveer de recursos sobre enseñanza de ciencias a la comunidad educativa. Scientix se encuentra en http://scientix.eu y tiene buen aspecto, aunque aún un poco escaso (he probado un poco, y sólo hay 59 recursos disponibles). No obstante, la idea es buena, parece que se basa en licencias Creative Commons, tiene vocación multilingüe y utiliza varias tecnologías web2.0.

Esperemos que la lista de proyectos y recursos siga creciendo. Mientras tanto, vale la pena suscribirse. Como buen portal 2.0, tiene prevista la interacción entre sus usuarios (echad un vistazo al botón Comunidad).

jueves, 29 de abril de 2010

Am I a freak biologist?

Es curioso cómo la curiosidad tecnológica puede alienar a uno. Desde que empecé a trabajar en esto de la investigación no he podido evitar derivar de una habilidad a otra, captando un poco de aquí y allí. Siendo un biólogo, creo que merezco entrar dentro de alguna categoría freak:
  • Escribo con cierta soltura en un teclado Dvorak, mejor que en un QWERTY. Esto produce situaciones un tanto estresantes, como que al cambiar bruscamente de teclado (de Dvorak a QWERTY, claro) se me vea teclear dubitativamente hasta que le cojo el tacto a la nueva distribución.
  • Escribo la mayoría de mis trabajos en LaTeX. Esto ha reducido mi nivel de ansiedad al preparar manuscritos, excepto cuando el editor me insiste en que debo enviarle el documento en formato "MSWord".
  • Utilizo ordenadores Mac (vale, esto ya no es tan raro)... con Fink... y recurro frecuentemente a la línea de comandos.
  • Sé instalar un servidor web, bases de datos y sus correspondientes frontends, sobre Linux. Y lo administro a través de SSH.
  • Analizo mis datos programando en R.
  • Soy capaz de programar utilizando macros Excel 4.0 (no es algo que considere especialmente brillante).

miércoles, 10 de marzo de 2010

Visitas

De visita en UK esta semana. Vuelo a Londres el lunes. El martes, viaje a Sheffield para preparar un proyecto con un grupo de la University of Sheffield. Reunión, visita a las instalaciones del grupo, presentación del proyecto, comida, visita a los alrededores y vuelta a Londres. Hoy miércoles, visita a otro grupo en la Zoological Society of London (Regent's Park) in the morning, para preparar la estancia de un doctorando. In the afternoon, viaje a Sunningdale (al lado de Ascot), para visitar a un colega con el que tengo varios frentes abiertos. Visita al centro, comida, visita a su parcela de trabajo (un trozo de bosque inglés), reunión de trabajo. Vuelta a Londres. Mañana, vuelta a España y a otro tema. Y seguimos...

domingo, 8 de noviembre de 2009

Sincronizando datos: rsync (4) y un toque de SSH

Hablamos de crear unos scripts para automatizar el proceso de sincronización con el servidor. Nada más sencillo que abrir un editor de texto y escribir:

#!/bin/bash
rsync -axzuvh --delete --force-delete --exclude='.*' "/Users/myuser/Documents/miBiblioteca/Libros" my.server.com:/home/biblioteca/

Guardamos (por ejemplo, con el nombre bibliosync.libros) y convertimos el archivo en ejecutable. Para mayor comodidad, podemos añadir el directorio donde guardamos nuestro script a las rutas de búsqueda del intérprete de comandos que estemos usando. Esto se queda un poco fuera del tema, así que pongo lo que usé yo, y lo podéis adaptar a vuestro caso sin más que buscar por la red:
  • Para convertir bibliosync.libros en ejecutable: chmod og+x ~/bin/bibliosync.libros
  • Para añadir ~/bin a las rutas de búsqueda de bash (el intérprete de comandos que yo uso), basta con abrir el archivo ~/.profile (o ~/.bashrc) y buscar (o crear) una línea parecida a export PATH=$PATH:/sw/bin, y añadir dos puntos y nuestro directorio de scripts al final. Por ejemplo: PATH=$PATH:/sw/bin:~/bin.
Como yo tengo varios directorios que sincronizar, he creado varios scripts con el nombre bibliosync.lo_que_quiero_sincronizar, más que nada, para ahorrar un poco de tiempo cuando quiero sincronizar un solo directorio. Para cuando quiero una sincronización general, tengo otro script que lo único que hace es ir ejecutando los scripts particulares secuencialmente.

Por último, voy a comentar un pequeño detalle sobre SSH. Cada vez que queramos sincronizar, SSH nos va a pedir la contraseña para acceder al servidor, lo cual puede ser un poco pesado. Para evitarlo, y si la seguridad de nuestro ordenador no está comprometida (e. g., no lo vamos dejando a todo el mundo, o tenemos una cuenta de invitado sin privilegios para ello), podemos crear un archivo de clave en nuestro ordenador y copiarlo al directorio de claves autorizadas del servidor. De esta manera, nuestro ordenador se autentificará automáticamente con el servidor cada vez, sin tener que introducir nosotros la clave. Muy brevemente, sería algo así:
  • Creamos una pareja de claves (privada y pública) escribiendo ssh-keygen en nuestro ordenador. Nos pedirá una passphrase (hagámosla complicada).
  • Esto nos creará un par de archivos. Por defecto, éstos serán id_rsa e id_rsa.pub, en el directorio oculto ~/.ssh. Dejaremos id_rsa (o como lo hayamos llamado) allí, que está bien.
  • El archivo pub lo copiamos al servidor, al directorio ~/.ssh, y le cambiamos el nombre a authorized_keys. Ojo, tiene que ser en la cuenta de usuario que utilizamos para realizar la sincronización. Si ya existe un archivo authorized_keys, hay que copiar el contenido de nuestro nuevo archivo al final de aquel.
Con esto debería bastar, y nuestro backup sería tan simple como escribir el nombre del script adecuado.

sábado, 7 de noviembre de 2009

Sincronizando datos: rsync (3)

En el post anterior os conté cómo se hace una sincronización básica con un servidor remoto. Sin embargo, la última orden que os puse no hacía lo que yo deseaba:

rsync /myuser/biblioteca/ myusername@myserver.address.com:/users/biblioteca

Recordad que en el primer post os dije que, por defecto, rsync realiza una copia simple, sin borrar archivos que ya no existen en el origen, sin copiar directorios, etc. La orden que me sirvió fue ésta:

rsync -axzuvh --delete --force-delete --exclude='.*' /myuser/biblioteca/ myusername@myserver.address.com:/users/biblioteca

Como veis, hay varios códigos precedidos por guiones. Son opciones de rsync, que me permitieron que funcionase como yo quería. Aunque tenéis su significado en los enlaces del primer post (y no olvidéis que tenéis el manual de rsync escribiendo en consola man rsync), voy a describirlas una a una. Un aviso, estas opciones tienen su forma larga (precedida por --) y su forma abreviada (precedida por -). En la forma abreviada, se pueden concatenar varias opciones. Por ejemplo, -axzuvh equivale a -a -x -z -u -v -h.

-a
Modo de archivo, equivale a escribir -rlptgoD. ¿Y qué significa -rlptgoD? Pues que rsync debe comportarse recursivamente (-r), es decir, que debe copiar directorios y los archivos que contengan (un problema que quería resolver); también debe copiar enlaces simbólicos (-l, no entro en esto); debe preservar los permisos de los archivos, su propietario, su grupo, y, si son archivos de dispositivo o especiales, deben permanecer como tales (-pgoD, tampoco entro, pero es muy importante si queremos que los archivos sincronizados se "comporten" como los originales); y debe preservar la hora de modificación de los archivos (-t) ya que, si no, la hora de modificación se cambiaría a la de copia. Vamos, que con -a rsync nos realiza una sincronización del directorio que le ordenemos, con todos sus contenidos y exactamente tal como estaban esos contenidos, sin que haya modificaciones de sus propiedades de por medio.

-x
Esto evita que si dentro del directorio a sincronizar hay una ruta que lleva a un dispositivo de almacenamiento distinto, evite el salto al otro dispositivo. Esto no les será familiar a los usuarios en general, pero es que, en sistemas Unix, los sistemas de almacenamiento (discos duros, DVD, etc.) aparecen como simples directorios. Es decir, que si en mi ruta hay un directorio llamado Pendrive, donde he "montado" mi pendrive de 4 GB, los contenidos de ese pendrive se sincronizarán, a menos que incluya -x. La verdad es que es un concepto un poco difícil de explicar en poco espacio, y, en mi caso, yo no tendría ese problema. Pero me parece que es útil incluir esta opción como precaución.

-z
Le decimos a rsync que comprima los archivos durante la transferencia. Más uso de CPU y memoria (poco importante con los maquinones que utilizamos estos días), pero se aligerará la transferencia por red. Que sepáis que hay opciones adicionales para evitar, por ejemplo, recomprimir archivos ZIP o JPEG (lo cual no tendría beneficios), o para forzar una compresión más rápida o más intensa.

-u
Imprescindible en toda buena sincronización. Con esta orden, no transferimos al destino los archivos que tienen una fecha y hora de modificación más reciente que en el origen. Imaginemos que he subido al servidor (por otra vía distinta a rsync) el archivo "Informe actualizado.pdf". Cuando rsync revise el destino, verá que "Informe actualizado.pdf" es más reciente que su copia en el origen, y no lo actualizará. Esta opción tampoco es necesaria en mi caso, pero la he incluido "por si acaso".

-v
Con esta opción, rsync nos va informando de lo que va haciendo (archivos transferidos, velocidad, etc.), con lo cual podéis ver si suceden cosas raras.

-h
Modo "legible para humanos". Es decir, el tamaño de los archivos no se muestra en bytes (por defecto, sino en KB, MB o GB. Muy útil para entender la información que se muestra en pantalla.

--delete
Si un archivo existe en el destino, pero no en el origen, se borra. Recordad que me interesa que el destino sea igual al origen. Si borro algo en mi ordenador, quiero que desaparezca del servidor.

--force-delete

En principio, si un directorio en el destino no está vacío, no se borrará aunque uséis --delete. Con --force-delete, si borráis un directorio en el origen, desaparecerá en el destino, aunque contenga archivos.

--exclude='.*'
Esta opción os permite utilizar expresiones para evitar que rsync copie determinados archivos. Por no entrar en ello, en mi caso estoy diciendo a rsync que no considere los archivos que empiezan por un punto (que son archivos ocultos en sistemas UNIX). Yo utilizo Mac OS X, que tiene la costumbre de crear archivos ocultos en determinados directorios para guardar cierta información de sistema. Como no me interesa que esos archivos se copien al servidor, utilizo esta opción.

Y ya está. No tengo más que realizar pequeñas modificaciones para acomodar rsync a mis propósitos. En la siguiente (y última entrada sobre el tema, espero), os contaré cómo simplifiqué este proceso con scripts y cómo evité tener que introducir la contraseña de SSH cada vez que quería sincronizar con el servidor.

jueves, 27 de agosto de 2009

Sincronizando datos: rsync (2)

En el post anterior lo dejamos con lo básico, pudiendo transferir los archivos nuevos, pero sin sincronizar realmente. Veamos algo de lo que puede hacer rsync.

Lo primero es comentar una curiosidad que resulta crucial a la hora de decirle a rsync lo que tiene que copiar. Recordemos la forma básica del comando:

rsync /myuser/mydata/ /myuser/mydata_copy

Si os fijáis, puse una barra al final del nombre de la carpeta origen (/). Por si no lo sabéis, en Unix se utiliza la barra inclinada (/) para separar los nombres de las carpetas, mientras que en Windows se utiliza la barra invertida (\). Pues bien, el poner la barra final le dice a rsync que copie el contenido de la primera carpeta en la segunda. ¿Y si no ponemos la barra? Pues rsync copiará la carpeta misma. Es decir, en este caso, nos aparecerá la carpeta mydata dentro de mydata_copy, tal que así: /myuser/mydata_copy/mydata

Continuemos con la historia. Recordad que quiero sincronizar mi biblioteca personal con la de un servidor, de manera que la copia del servidor sea idéntica a la de mi ordenador. Entonces, lo primero será indicar a rsync que debe sincronizar con otra máquina. Veamos:

rsync /myuser/biblioteca/ myserver.address.com:/users/biblioteca

Como veis, lo único que he hecho es preceder la ruta de la carpeta de destino con la dirección del servidor (puede ser el nombre DNS o la IP), separándolos con dos puntos. Los dos puntos le dicen a rsync que debe establecer conexión con esa máquina. Y ya está. Bueno, no todo. En realidad, lo que hace rsync es utilizar SSH (secure shell), así que en la máquina de destino tendrá que estar funcionando un servidor SSH (si es Linux, OpenSSH se instala rápido y sin problemas). No voy a entrar en detalles, sólo decir que SSH permite acceder a otra máquina de forma "segura", y que es lo que utiliza rsync para identificarse y poder así transferir los archivos. Excepto por el hecho de que los archivos se transmiten por red, no hay más complicación para nosotros. Lo que sí tendremos que hacer es entrar nuestra contraseña de usuario cada vez que usemos rsync para transferir archivos de o hacia otra máquina (sí, podemos hacer rsync miservidor.com:/carpeta_origen/ /mi_ordenador/carpeta_destino). Ojo, la contraseña que usemos en la otra máquina. Tengamos en cuenta que rsync manda automáticamente el nombre de usuario que estemos usando en el momento de ejecutar la orden. ¿Y si tenemos un usuario distinto en el otro sistema? Pues nada más sencillo que esto:

rsync /myuser/biblioteca/ myusername@myserver.address.com:/users/biblioteca

Donde myusername es un nombre de usuario de una cuenta activa en la máquina remota. Entramos su contraseña y ya está (en otro post os comentaré cómo evitar tener que estar introduciendo la contraseña cada vez).

Hay otra opción, que es tener a rsync corriendo como servidor en la máquina destino. En ese caso, tendríamos que separar el nombre de la máquina de la ruta de la carpeta destino por :: en vez de usar :, pero esto es otra historia en la que no nos meteremos (más información en los enlaces que os pasé en el post anterior).

Y por hoy ya es suficiente. La próxima entrada: cómo hacer una sincronización de verdad.