inicio mail me! sindicaci;ón

Archive for April, 2007

Neumayer

Acabo de conseguir un reportaje que apareció hará un par de semanas en El País Semanal acerca de Neumayer, una estación polar de investigación situada en la Antártida.

Siempre me han entusiasmado un poco todas estas estaciones de investigación, como por ejemplo el Makrolab. Por eso, y coincidiendo con la publicación de ese reportaje me he decidido a escribir un poco sobre ello, saliéndome un tanto de la [mono]temática general de este blog.

La Neumayer II es una base antártica enterrada en el hielo para permanecer a una temperatura más estable. Dependiente del Alfred Wegener Institute (AWI) de Bremerhaven, y por tanto del gobierno alemán, es la sucesora de la Neumayer I construída a principios de los 80 y cuenta con unos dos años más de vida, hasta que hagan la mudanza a la Neumayer III mientras la II se va hundiendo en el hielo y es arrastrada por el glaciar en el que ha sido construída.

Cuenta con una serie de antenas en el exterior que proveen actualmente de acceso a Internet permanentemente, pese a que hace unos años la conexión con el exterior se hacía via radiotelégrafo si las condiciones lo permitían.

A varios kilómetros de distancia se encuentra una estación meteorológica que a través de cables se comunica con la Neumayer (lat: 70º 39′ S, long: 8º 15′ W), aportando distinta información para los estudios científicos que allí se llevan a cabo.

Con dos centrales eléctricas de fuel (que hacen de calefacción y de fundidor de nieve) y un generador eólico de 20 kW, un pequeño hospital con quirófano, dos laboratorios de geofísica y dos de meteorología, los pertinentes lavabos y dormitorios, la cocina, la sala de estar, el gimnasio, salas de radio y administración y el taller toda la tripulación tiene que apañársela durante los 14 o 15 meses que pueden llegar a estar allí. Son 3000 metros cuadrados distribuídos en dos tubos interconectados por un pasillo que hace las veces de parking de las motos de nieve y otros vehículos.

La tripulación: entre nueve y diez personas, de ambos sexos desde hace 10 años, desde el médico que gobierna la base hasta los meteorólogos y geofísicos, pasando por el cocinero, el electricista, el ingeniero y el radiotelegrafista. Pueden ser permanentes, o bien pasajeros, que residen durante dos meses, normalmente fuera de la base. Todos ellos tienen que pasar por una serie de tests físicos y síquicos: mantener la convivencia con las mismas ocho personas durante tantos meses en un espacio tan reducido y tan alejado de toda ayuda es esencial (la base más cercana es la SANAE-IV sudafricana, a 225 kilómetros al sur). Además el AWI se ocupa de instruírles bien en el reciclaje, ya que tan sólo 2 ó 3 veces al año el rompehielos Polarstern pasa a 8-10 kilómetros de allí a recoger la basura y a cambiar de personal, y en última instancia a desmantelar y retirar toda la estación. Poco se puede salir de la estación, contando con que en invierno pasan dos meses de casi continua oscuridad y cuando finalmente sale el sol llegan a producirse corrientes de aire de hasta 200 km/h.

El trabajo que se hace allí es esencialmente la investigación del entorno, o más bien, la influencia del resto del mundo en ese entorno, que ha mostrado ser un buen sensor de los grandes cambios de la humanidad (p.ej. la revolución industrial). En el hielo que del suelo extraen se puede apreciar cómo ha ido cambiando la composición de la atmósfera durante el útimo siglo. La composición del aire, la capa de ozono, la radiación solar, meteorología, corrientes marinas, movimientos sísmicos, estudios sobre los ecosistemas microbianos bajo el hielo, etc. Una gran variedad de estudios especialmente útiles hoy en día que tanta alarma se ha creado con el cambio climático.

La verdad es que desgraciadamente no encuentro un sitio para un informático en una de estas bases como no sea el de ingeniero, aunque la verdad es que para llegar a estar en una de ellas no sólo hay que ser bueno, si no también tener bastante suerte y tener ciertas cualidades de convivencia.

En ésta han participado algunos españoles durante alguna expedición, pero bases españolas de este estilo tan sólo hay dos, frente a las seis que tiene el AWI. Son la Juan Carlos I, en la isla de Livingston, y la Gabriel de Castilla, en la isla Decepción, ambas al norte de la península antártica y creadas a final de la década de los 80.

Instalando Gentoo 2006.1

Desde hace casi tres años uso Gentoo GNU/Linux como distribución de escritorio. Gentoo goza de una excelente documentación y de un aún mejor sistema de paquetería en lo que a organización se refiere.

Durante todo este tiempo la pega que le achaco es que requiere tiempo.

La idea de Gentoo es construir el sistema desde cero, lo cual requiere cierto nivel de conocimientos y tiempo y paciencia disponibles, pero a cambio da la posibilidad de aprender muchísimo acerca de los internals del sistema.

Aunque en teoría uno no tiene por qué compilar absolutamente todo el sistema sino que uno se puede bajar los binarios ya precompilados, yo aún no he conseguido encontrar binarios para mi arquitectura (Prescott) por lo que me veo obligado a compilar todo paquete que quiero instalar. Compilar emacs, vi, gedit, … bueno, si lo tienes que hacer unas cuántas veces aburre, pero hay paquetes como xorg-server, gcc, gnome y sus dependencias que tranquilamente pueden tirarse más de media hora compilando, y esto en cada actualización del sistema se hace un tanto insoportable.

Si el año pasado me cargué la distribución instalando GNU/Hurd (y trabajando como root cuando no debía acabé sobreescribiendo la libc de gentoo con la libc de Bee GNU/Hurd) este año fue al actualizar portage (el gestor de paquetes de gentoo, como el apt-get o el dpkg de debian) al 2006.1 cuando la toolchain volvió a hacer chof! y desde entonces conté sin la posibilidad de poder compilar programa alguno, y por tanto de instalar nada.

Ha sido ahora en estas vacaciones, tras comprarme un disco duro nuevo, cuando me he decidido a hacer las copias de seguridad esas que siempre hay que hacer y que nunca se hacen y tras ello arramplar con todo lo que había instalado y partir de cero.

Los objetivos eran tener instalado OpenBSD, Solaris 10 (del cuál recibí los DVDs gratuitos que enviaban si los pedías) y varias distribuciones de Linux: una para trabajar habitualmente (Gentoo), otra por si todo falla (Debian) y otras por probar. Respecto a Windows: en la facultad tan sólo voy a verme obligado a usar windows durante este cuatrimestre y un mes el segundo cuatrimestre del año que viene (y para eso puedo emplear otro ordenador o un emulador), no acostumbro a jugar con el ordenador, y además es una fuente de problemas, incompatibilidades, virus y otros disgustos, así que finalmente he decidido no instalarlo. Llevo 3 años sin usar windows, y salvo cuando los colegas me piden que les arregle el ordenador que ya no me acuerdo ni dónde está el panel de control, no tengo mayor problema en apañármelas a diario sin windows.

OpenBSD desde hace ya tiempo me llamaba la atención por estar enfocado a la seguridad y tener ese sistema de desarrollo que a veces he echado en falta en Linux. Quise probarlo y tras comprar el CD de la versión 3.9 al final he conseguido instalarlo. Hay que decir que el fdisk que trae es difícil de usar, de hecho primero instalé Debian en un segundo disco duro y desde allí particioné el primer disco con el fdisk de debian, que es bien cómodo. Salvado ese escollo la instalación fue sencilla y apenás duró diez minutos, esencialmente porque no instala casi ningún programa. Una vez acabada y haciendo uso del sistema de ports (que por cierto, la base de datos de ports no la encontré en el CD) ya instalé más aplicaciones como p.ej. GNU screen. No es un sistema agradable a los sentidos, ni creo que lo pretenda, más bien es un sistema espartano, orientado a la seguridad y a cumplir ese objetivo de ser seguro, no el de ser amigable.

Solaris es software no libre, pero es un Unix bastante usado en servidores y sólo por eso merece conocerse un poquito, al menos probarlo, y ya que me enviaban una copia a casa gratuitamente… (llegaron tres DVDs: Solaris 10 x86, Solaris 10 SPARC y las Developer Tools). Parece ser que no reconoce los discos SATA (tuve un problema similar hace 2 años con FreeBSD) así que trataré de apañar un disco IDE de al menos 20 gb., ya que Solaris es caprichosín, al menos en cuanto a espacio.

Debian: probablemente la mejor distribución de Linux. El sistema de paquetería es cómodo como el de Gentoo (inspirado en los ports de BSD). Fácil de instalar, apenas da problemas. Estrictos con las licencias libres (iceweasel, apache1.3, etc.). Tiene una gran comunidad de usuarios (probablemente sea la distribución de Linux con mayor comunidad), aunque no está tan bien documentada como Gentoo. Creo que daba ciertos problemas el instalador con mis discos SATA, pero yendo sobre aviso lo arranqué sin problemas. Dado que por cuestiones de licencias en Debian no está disponible el firefox original, sino el ice-weasel, que no es capaz de leer los ficheros de contraseñas o el historial del firefox que usaba antes, he decidido instalar firefox por mi cuenta, desde la web de mozilla y prescindir del soporte de Debian en este aspecto, e ídem para thunderbird/ice-dove.

Ubuntu: Traté también de instalar Ubuntu, pero tras bajarme y quemar el CD de instalación me encuentro con que en el particionado, si / no está asignado a una partición primaria para el instalador de Ubuntu 6.10 es como si no se le hubiera asignado partición a /, y en consecuencia se queja y no me deja instalar. Esperemos que Feisty Fawn, que sale en 10 días, resuelva este despiste de programador. Pese a esto la interfaz gráfica de Ubuntu está muy cuidada (aunque Gnome 2.16 en general me ha sorprendido muy gratamente).

OpenSUSE es lo que toca en la facultad cuando toca. Si ocurre el milagro de que allí haya algo que no sea Windows instalado, entonces ese algo es OpenSUSE (a excepción de los Macs con su OS X). Antes estuvo Kubuntu (o alguna otra ubuntu) y antes aún creo que Debian. Lo que me maravillaba de OpenSUSE es la interfaz gráfica, que pese a ser KDE es muy atractiva, incluso antes de arrancar las X, en el inicio, mediante el framebuffer se obtiene una pantalla de arranque realmente elegante. Intenté instalarlo, pero a falta de los cinco CDs o el DVD que no pensaba bajármelos ni loco, me bajé el CD de instalación, e iniciándo esta me encuentro con un simpático cuadro de diálogo que me pide la dirección IP de un mirror de SUSE. Tras reiniciar en Debian y buscarle un mirror (y resolver el FQDN, no siendo que efectivamente quisiera la IP), vuelvo a arrancar la instalación y le meto la susodicha IP y a continuación la ruta dentro del servidor hacia el repositorio de SUSE. En proceso de bajarse root.gz, un fichero de 70 megas que debía contener lo esencial para ir instalando procedo a dormitar la siesta. Y volviendo media hora después pensando en que estaría esperando mis órdenes me encuentro con que se ha quedado atascado a los 20 megas. Así que ahí se quedó. Algún día que me encuentre con ánimo para bajarme el DVD de instalación por mi canuto ADSL lo haré y lo instalaré. Algún día. Mientras tanto, si esto lo lee algún programador de SUSE, que por favor, se le ocurra poner cuanto menos una lista de mirrors en el programa de instalación, y a ser posible que use el servidor de nombres que le devuelve el servidor DHCP, que no me pida la IP.

Otro fallo que le he visto a SUSE cuando hace años la usaba (versión 6.5, 7.2, etc.) es el sistema de paquetes, que no es en absoluto comparable a lo que estoy acostumbrado a ver en otras distribuciones. Es realmente muy incómodo.

Y finalmente Gentoo

Hoy es el quinto día de la instalación :D. Tras las primeras compilaciones, reajustando el USE y recompilando, y buscando errores en el Google, he conseguido mis Xorg corriendo con Beryl (que es flipante, a todo esto). He conseguido tener también un fallo con libexpat, ya que en un inicio estaba la versión 1.95.8 instalada y al actualizar el sistema ha pasado a la 2.0.0, con el consecuente fallo de que los programas enlazados a la 1.95.8 (evince, aMule, etc.) no la encontraban y cascaban. Con un revdep-rebuild (del paquete gentoolkit) parece que poco a poco todos los programas que la enlazaban van recompilándose y reenlazándose de nuevo. Mientras tanto en el proceso alguno se queja de las USE flags con los que alguna que otra dependencia ha sido compilada y toca cambiar las USE flags, recompilar la dependencia y volver a empezar el revdep-rebuild (desde el principio). Por lo menos sólo tiene que compilar 52 paquetes (entre ellos gcc y evolution), al menos el open-office no lo tiene que tocar hasta que no lo instale.

Por cierto, para gentoo usé la guía de instalación rápida. Y rápida es, lo que pasa es que es Gentoo. Y si te pones a hacer virguerías como instalar beryl y luego te pasas a ~x86 y te surgen problemillas pues ya te tiras un rato, y si además andas instalando programas de uso obligatorio (gnome y sus dependencias, el kernel, etc.) al final… lo dicho: cinco días. Pero ya casi casi está del todo.

Como colofón, pongo aquí mi /boot/grub/menu-lst, por si a alguien le sirve de ayuda, especialmente en lo que a arrancar OpenBSD 3.9 se refiere:

default 0
timeout 30
splashimage = (hd0,0)/grub/splash.xpm.gz

#Arrancar Gentoo. Kernel instalado en /dev/sda1 (/boot), el / está en /dev/sda6
title = Gentoo Linux 2.6.20-gentoo-r5 20070408
root (hd0,0)
kernel /bzImage-2.6.20-gentoo-r5.20070408 root=/dev/sda6 real_root=/dev/sda6 vmalloc=300M

#Open está en /dev/sda3, esto es (hd0,2)
title = OpenBSD 3.9
root (hd0,2)
makeactive
chainloader +1

#Debian: kernel y la initrd en /dev/sdb1, sistema (/) en /dev/sda3
title = Debian GNU/Linux 4.0 2.6.18 … 20070406
root (hd1,0)
kernel /vmlinuz-2.6.18-4-686 root=/dev/sdb3 ro bootkbd=es noapic nolapic
initrd /initrd.img-2.6.18-4-686

Tipos de datos para almacenar cadenas en Oracle

En respuesta a una serie de dudas que me surgieron al adaptar una base de datos usada en las prácticas de una asignatura, pongo por aquí las conclusiones sacadas.

CHAR
Un atributo de tipo char admite una longitud máxima de menos de 255 caracteres en SQL estándar. Sin embargo, en Oracle podemos permitirnos hasta 2000 bytes. Si no especificamos longitud se asume que será un único byte.

Es de longitud fija, esto quiere decir que si definimos un atributo como char(30), aunque luego le asignemos un valor de 10 caracteres de longitud, se usan los 30 caracteres que hemos introducido, completaandose los 10 caracteres ntorducidos con 20 espacios a su derecha hasta alcanzar los 30 caracteres que hemos declarado.

Al ser de longitud fija, si lo usamos para guardar cadenas de distinta longitud acabaremos desperdiciando espacio,
pero en cambio las búsquedas se realizarán más rápidamente ya que no hay que buscar el fin de cadena, si no que a priori ya se sabe que son bloques de p.ej. 30 caracteres de longitud.

VARCHAR2
Es un tipo de datos propio de Oracle. A diferencia de char es de longitud variable, por lo que no se desperdicia tanto
espacio, pero las búsquedas son más lentas. Puede contener cadenas de hasta 4000 bytes. En disco se guarda la longitud
de la cadena, además del propio valor de la cadena.

En Oracle 8i, 9i y 10g al insertar una cadena vacía realmente se inserta un nulo en vez de una cadena vacía. Desde Oracle8 VARCHAR es un alias para VARCHAR2, aunque esto puede cambiar en futuras versiones y Oracle recomienda usar VARCHAR2 y no VARCHAR.

Al ser de longitud variable pueden dar lugar a la fragmentación del espacio al modificar sus valores,
lo que repercute en el acceso a los datos, o bien en el mantenimiento de éstos ya que habrá que defragmentarlos.

VARCHAR
En Oracle ahora mismo es un alias para varchar2. En otros sistemas (es estándar ANSI SQL) varchar admite hasta 2000 caracteres. Es de longitud fija, pero a diferencia de char no se completan las cadenas con espacios, sino con nulos, lo que facilita p.ej. las comparaciones.
Al ser de longitud fija se desperdiciará espacio cuando se almacenen cadenas de longitud menor a la declarada.
Es hasta un 50% más lento que char.

Tanto VARCHAR como VARCHAR2 presentan dos variantes llamadas respectivamente NVARCHAR y NVARCHAR2. La finalidad de estas variantes es proporcionar una forma de declarar atributos que hacen uso de otro juego de caracteres diferente a aquel con el que se ha definido la base de datos. Oracle 9i al menos permite especificar la longitud a reservar para estos atributos en caracteres en vez de en bytes.

LONG
Permite hasta 2 gigabytes de datos y presenta ciertas restricciones en su uso con ciertos operadores (p.ej. con WHERE). Oracle no permite la creación de índices sobre este tipo de atributos. Es preferible usar un CLOB

CLOB
Character Large Object. Para cadenas de más de 4000 gigabytes. Serviría para guardar documentos. Presenta dos variantes, la NCLOB que proporciona una forma de usar un NLS alternativo al de la base de datos, al igual que NCHAR y NVARCHAR2, y la BLOB (Binnary LOB) para almacenar datos binarios (imágenes, sonidos, etc.)

Oracle 9i incorpora muchas funciones para LONG adaptadas a los LOBs, así como facilidades para migrar tablas con atributos LONG a atributos LOB mediante alter table.
En todos los casos al intentar insertar una cantidad de datos mayor a la reservada se producirá un error en tiempo de ejecución.

Resumido de aquí:

Atributos en ext2/3

Si hace unos días comentaba acerca de los atributos de los ficheros en la implementación de OpenBSD del Unix File System (o Fast File System), ahora mismo estaba viendo su equivalente en ext2, el que fuera hasta hace un par de años sistema de ficheros por defecto de Linux, sucedido por ext3 (que es compatible hacia atrás con ext2) y que dentro de poco será sucedido por ext4 (que de momento y por lo general sí es compatible con ext3).

Los dos comandos que permiten trabajar con los atributos de un fichero son lsattr y chattr, respectivamente para mostrarlos o cambiarlos. Ambos forman parte del paquete e2fsprogs.

Los susodichos atributos son 15, a saber:

  • ‘A’ evita que se modifique el campo atime (accesed time, última vez que fue accedido un fichero) del fichero cada vez que se accede a él. Puede reducir la carga de I/O del sistema.
  • ‘a’ indica que el fichero sólo se puede abrir para añadir si se abre para escritura. Tan sólo root o un proceso con el flag CAP_LINUX_INMUTABLE pueden activar o desactivar esta opción.
  • ‘c’ indica que el fichero se guardará comprimido. Por supuesto, la compresión será transparente al acceso al fichero. A la hora de acceder uno no tiene que preocuparse si el fichero está comprimido o no, eso es cosa del kernel. En las versiones actuales del kernel no está implementado, pero se prevee para versiones futuras.
  • ‘D’ implica actualizaciones síncronas de los directorios cada vez que son accedidos. Sólo es útil a partir de la rama 2.6.
  • ‘d’ excluye al fichero de los programas seleccionados por dump para ser copiados.
  • ‘E’ indica que un fichero tiene un error de compresión (los ficheros de la ‘c’). Es usado por los compresores en etapa experimental, y tan sólo puede ser visualizado mediante lsattr, no puede ser cambiado mediante chattr.
  • ‘i’ impide que se modifique el fichero o que se cree un enlace hacia él, que se elimine o se renombre. Sólo root o procesos CAP_LINUX_INMUTABLE pueden cambiar este flag.
  • ‘j’ hace que todos el fichero sea escrito primero en el journal de ext3 y luego en disco en caso de que el sistema de ficheros esté montado con los modos data=ordered o con data=writeback (con data=journal siempre se hace esto). Sólo root o procesos con la capability CAP_SYS_RESOURCE pueden trastear con esto. Sólo tiene sentido con ext3, no con ext2.
  • ‘s’ se asegura de que al borrar un fichero, todos sus bloques son rellenados con ceros en el disco. Esta forma de borrado segura presenta varias limitaciones. En las versiones actuales del kernel no está implementado, pero se prevee para versiones futuras.
  • ‘S’ actualiza los ficheros de forma síncrona. Similar a la opción sync de mount.
  • ‘T’ manda un directorio a la cima de la jerarquía de directorios. Está relacionado con el asignador de bloques de Orlov presente en la rama 2.6 del kernel desde que se portó la idea de BSD.
  • ‘t’ evita el tail-merging. A excepción de una serie de parches ext3 no cuenta con soporte para tail-merging.
  • ‘u’ guarda el contenido de un fichero cuando éste es borrado, permitiendo así la recuperación del fichero. En las versiones actuales del kernel no está implementado, pero se prevee para versiones futuras.
  • ‘X’, al igual que ‘E’ es usado por los compresores experimentales e indica (y sólo indica, por que no es modificable) que el fichero pese a estar comprimido puede ser accedido directamente.
  • ‘Z’ es similar al anterior, salvo porque indica que el fichero comprimido está sucio.

Desde luego, la variedad de opciones que presentan estos atributos es mayor que la del UFS de OpenBSD, y no sólo mayor si no también diferente. Lástima que Linux no cuente con los Secure Levels de OpenBSD porque a nivel de seguridad (más que de usabilidad) le confieren gran potencia.