lunes, 30 de junio de 2008

Buenas y malas

El mundo está loco, eso ya lo sabíamos. Lo que no sabíamos era que las cosas buenas no son realmente buenas y las malas tampoco son realmente malas. Una serie de noticias que he recibido ultimamente me dieron algo sobre lo qué reflexionar:

1) La suba de los combustibles a nivel mundial es catastrófica. Las bolsas financieras en Wall Street están decayendo (Nasdaq y Dow Jones están en caída libre) y la gente ha perdido la confianza en los negocios y el mercado. Esa es la parte mala, pero lo bueno es que la gente empezó a dejar de utilizar sus vehículos personales y se ha volcado al transporte colectivo, además de que viajan menos (CNN). No produciéndose un colapso en los servicios de transporte, esto representa una mejora en el medio ambiente, dado que hay menos emanaciones de gases tóxicos a la atmósfera. Es divertido escuchar a los yankees preocupados por el medio ambiente ahora, aunque en realidad es una mera excusa de moda para justificar el hecho de que no viajan en sus propios autos porque el precio del combustible los está matando. Como para tantas otras cosas, hizo falta que les tocaran el bolsillo para que se hicieran ecologistas.

2) Durante milenios el hombre ha tratado a la muerte como un proceso natural e inevitable, pero ahora resulta que Aubrey de Grey ha logrado en base a la perseverancia, que se considere seriamente al envejecimiento como una enfermedad con posibilidad de ser curada, y hasta consiguió fondos para fundar una organización que estudie el proceso y lo combata (Wired). Esta es la parte buena, la mala es que ya hay por ahí gente preocupada por las implicaciones morales, religiosas y existenciales derivadas de la posible inmortalidad del ser humano. Hasta hay quienes se empiezan a preguntar si los políticos van a pronunciarse a favor o en contra de semejante desarrollo, como si realmente tuvieran el derecho a hablar por todos los seres humanos y como si no se tuviera el derecho público a reclamar de ellos un pronunciamiento acorde al sentir y a la decisión de la mayoría. Bueno, sabemos que en las decisiones importantes los "juan", los "pedro" y los "pepito" no tenemos voz ni voto, pero ¿quien puede decir que no vale la pena la vida lo suficiente como para dejar que un monton de políticos decida sobre el futuro de la misma? (no me hagan caso, ya saben lo que opino de los políticos)

3) Se ha desarrollado un nuevo par base de DNA sintético (3FB, 3FluoroBenceno), lo cual es algo así como inventar el replicador de alimentos de Star Trek. Ya se habían desarrollado pares base artificiales antes, pero la diferencia de este es que puede ser replicado por intermedio de la polimerasa común (la misma que replica los pares base existentes, citosina, guanina, tiamina y adenina) con una exactitud muy buena (el margen de error es de uno cada diez millones de pares base copiados, lo cual no tiene precedentes). Este avance permitió expandir el DNA de forma artificial, posibilitando desde el marcado de materiales orgánicos (para reconocimiento), pasando por nanoestructuras complejas (maquinaria orgánica nanoscópica), hasta desarrollos de organismos sintéticos auto evolucionantes. Las implicaciones son increíbles... pero también cuenta esta investigación con una parte mala: este desarrollo también permite crear nuevas armas biológicas indetectables y enfermedades programables (con fecha de inicio y de expiración), así que ya se pueden imaginar lo que viene después...

No sé si ponerme triste o contento con todas estas noticias... Toda cosa positiva tiene su contraparte negativa, pero después de escuchar como la gente misma hace bandos para contrarrestar el efecto inicial de un problema o solución, uno tiende a creer que la locura humana es solo una cuestión de números: ¿Quienes son los locos? ¿Los pocos que piensan de forma distinta a la mayoría o la mayoría que piensa de forma contraria a los pocos que se comportan de manera inteligente?...

Si alguien encuentra la respuesta, que no se lo diga a nadie... de todas maneras nadie escucha.

EOF

jueves, 26 de junio de 2008

Tutorial: Pasar el SWAP a Raid

Este mes tuve unos cuantos eventos de caída de disco en varios servidores. Normalmente, no me preocuparía, dado que es relativamente normal dada la pésima calidad del hardware que se puede adquirir en Uruguay (parece que nos llega la peor basura grado "C" que se fabrica en el mundo), pero me ha pasado que uno de los equipos ha dejado de funcionar correctamente dado que el SWAP no estaba protegido por la configuración Raid, y una vez que el disco que contiene la partición explota, el SWAP de la misma deja de funcionar y el kernel empieza a comportarse como si hubiera salido un sábado a la noche con unos amigos a tomarse todo el stock de vodka y tequila de la Ciudad Vieja, así que se me ocurrió escribir este texto para entretenerme mientras reviso y arreglo los servidores que todavía pueden tener configuraciones como estas (y de paso evitarme horas de "diversión gratuíta"...).

Como espero que mis lectores sepan, el RAID (Redundant Array of Independent Disks, o Redundant Array of Inexpensive Disk, dependiendo de donde se lea) es un mecanismo que permite utilizar varios discos duros independientes en forma agrupada como si fueran uno solo, normalmente con la finalidad de obtener redundancia y tolerancia a fallos, aunque no siempre se lo utiliza con ese fin. A veces se utiliza como una forma de obtener un medio de almacenamiento de un tamaño total igual a la suma del tamaño de los discos que componen el Raid (se le denomina Raid de nivel 0), aunque este método no provée redundancia, y de hecho, no lo recomiendo.

Normalmente utilizo Raid de niveles 1, 5 y derivados de 5 (5E, 5EE, etc.) por hardware o por software, dependiendo de la plataforma de hardware que tenga a mano. Si tengo una controladora de Raid, la utilizo, y si no tengo, simplemente hago las gestiones para instalar Raid por software.

Este tutorial es una "receta" para pasar el SWAP que dejamos sin protección al raid, sin reiniciar el servidor que actualmente se encuentra en producción, bajo Linux.

Recomiendo lectura previa del Software Raid HOWTO y del Manual del mdadm, así como también de toda documentación que ilumine la ruta del iniciado y le evite males peores. No leer los manuales es garantía de desastre y de una vida sexual plagada de insatisfacciones. ¡No digan que no se los avisé!

Let the fun begins! :-)

TUTORIAL: Pasar el SWAP a Raid

Primero, chequeamos las particiones de nuestra "víctima":

root@server:~ # fdisk -l

Disco /dev/sda: 120.0 GB, 120034123776 bytes
255 cabezas, 63 sectores/pista, 14593 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 1 7 56196 83 Linux
/dev/sda2 8 138 1052257+ 82 Linux swap / Solaris
/dev/sda3 139 14592 116101755 fd Linux raid autodetect

Disco /dev/sdb: 120.0 GB, 120034123776 bytes
255 cabezas, 63 sectores/pista, 14593 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sdb1 1 7 56196 83 Linux
/dev/sdb2 8 138 1052257+ 82 Linux swap / Solaris
/dev/sdb3 139 14592 116101755 fd Linux raid autodetect

Disco /dev/md0: 118.8 GB, 118888071168 bytes
2 cabezas, 4 sectores/pista, 29025408 cilindros
Unidades = cilindros de 8 * 512 = 4096 bytes

El disco /dev/md0 no contiene una tabla de particiones válida
root@server:~ #

Como puede verse, tenemos dos discos idénticos de 120GB, con una partición de 54MB al principio, una partición de 1GB al medio (el SWAP) y una partición de Raid de 118GB al final. Las últimas dos particiones forman parte de una unidad de Raid L1, denominada /dev/md0.

La idea es convertir estas dos particiones de SWAP separadas en una única unidad de Raid L1, la cual pasará a ser luego el SWAP. La única desventaja de esta modificación es que actualmente el servidor cuenta con dos particiones de SWAP independientes, cada una de 1GB, lo cual resulta en un total de 2GB de SWAP efectivo, y cuando hagamos el cambio, asumiendo que vamos a usar Raid L1, el espacio de SWAP disponible quedará reducido a la mitad. Normalmente, esto no resulta ser un problema, y de hecho, es preferible a que el sistema falle porque el disco donde estaba el SWAP aterrizó... así que vamos a ejecutar el procedimiento de todas maneras.

root@server:~ # df -h
S.ficheros Tamaño Usado Disp Uso% Montado en
/dev/md0 109G 90G 14G 87% /
tmpfs 474M 0 474M 0% /dev/shm
/dev/sda1 54M 8,6M 42M 18% /boot
root@server:~ # free
total used free shared buffers cached
Mem: 513740 506508 7232 0 65480 142272
-/+ buffers/cache: 298756 214984
Swap: 2104514 297205 1807309
root@server:~ #

Por lo visto, el uso es intenso, así que tenemos que ser precavidos en lo que vamos a hacer a continuación, ya que es importante evitar consumir todo el espacio disponible con la maniobra de manipulación del SWAP necesaria para poder convertir las particiones a su nuevo formato.

Para lograr esto, debemos crear un archivo vacío que utilizaremos como SWAP temporal, evitando así que el servidor quede sin memoria virtual mientras trabajamos en la conversión de las particiones.
root@server:~ # dd if=/dev/zero of=/swap.tmp bs=1G count=1
1+0 registros leídos
1+0 registros escritos
1073741824 bytes (1,1 GB) copied, 20,356 seconds, 52,7 MB/s
root@server:~ #

Luego, convertimos este archivo en SWAP y lo activamos. Esto agregará más SWAP a la cantidad que tenemos declarada actualmente.
root@server:~ # mkswap /swap.tmp
Configurando espacio de intercambio versión 1, tamaño = 1073737 kB
root@server:~ # swapon /swap.tmp
root@server:~ # free
total used free shared buffers cached
Mem: 513740 506508 7232 0 65480 142272
-/+ buffers/cache: 298756 214984
Swap: 3153082 297205 2855877
root@server:~ #

Ahora, procedemos a desactivar el SWAP que brindan las particiones standard, de manera de poder manipularlas sin destruir el servidor... (créanme, si se manipulan las particiones de SWAP estando activas, el servidor explota). Tengan paciencia, la desactivación del SWAP puede llevar algunos segundos, dado que se transvasa toda la información activa en el SWAP a memoria central y se swapea hacia el nuevo espacio disponible cuando se hace necesario.
root@server:~ # grep "swap" /etc/fstab
/dev/sda2 swap swap pri=42 0 0
/dev/sdb2 swap swap pri=42 0 0
root@server:~ # swapoff /dev/sda2
root@server:~ # swapoff /dev/sdb2
root@server:~ # free
total used free shared buffers cached
Mem: 513740 506508 7232 0 65480 142272
-/+ buffers/cache: 298756 214984
Swap: 1048568 0 1048568
root@server:~ #

Ahora que tenemos las particiones de SWAP desactivadas, podemos proceder a la manipulación de las mismas para convertirlas en una unidad de Raid L1. Tenemos que cambiar el tipo de partición con fdisk, lo cual se hace en un momento.
root@server:~ # fdisk /dev/sda

El número de cilindros para este disco está establecido en 14593.
No hay nada malo en ello, pero es mayor que 1024, y en algunos casos
podría causar problemas con:
1) software que funciona en el inicio (p.ej. versiones antiguas de LILO)
2) software de arranque o particionamiento de otros sistemas operativos
(p.ej. FDISK de DOS, FDISK de OS/2)

Orden (m para obtener ayuda): p

Disco /dev/sda: 120.0 GB, 120034123776 bytes
255 cabezas, 63 sectores/pista, 14593 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 1 7 56196 83 Linux
/dev/sda2 8 138 1052257+ 82 Linux swap / Solaris
/dev/sda3 139 14592 116101755 fd Linux raid autodetect

Orden (m para obtener ayuda): t
Número de partición (1-4): 2
Código hexadecimal (escriba L para ver los códigos): fd
Se ha cambiado el tipo de sistema de la partición 2 por fd (Linux raid autodetect)

Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.

ATENCIÓN: La relectura de la tabla de particiones falló con el
error 16: Dispositivo o recurso ocupado.
El núcleo todavía usa la tabla antigua.
La nueva tabla se usará en el próximo reinicio.
Se están sincronizando los discos.
root@server:~ #

Como puede verse, la manipulación terminó con un error 16, lo cual es normal para un sistema que está en funcionamiento, pero esto no es un problema real, dado que sin importar el tipo de partición que se utilice, el formato interno de la partición es lo que realmente define el tipo de la misma, así que el hecho de que el BIOS crea que sigue teniendo una partición de tipo SWAP es totalmente irrelevante.

Procedemos entonces a ejecutar la misma acción sobre el otro disco, hasta que las dos particiones están preparadas para formar parte del raid.
root@server:~ # fdisk /dev/sdb
[...]
root@server:~ # fdisk -l 2>/dev/null | grep "/dev/sd.2"
/dev/sda2 8 138 1052257+ fd Linux raid autodetect
/dev/sdb2 8 138 1052257+ fd Linux raid autodetect
root@server:~ #

Ahora, consultamos la tabla de estado del raid por software del kernel para verificar la configuración y para obtener el nombre de la próxima unidad (seguramente va a ser /dev/md1, pero es imperativo serciorarnos antes).
root@server:~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb3[1] sda3[0]
116101632 blocks [2/2] [UU]

unused devices:
root@server:~ #

Y finalmente procedemos a crear la unidad de raid correspondiente, para lo cual utilizaremos el comando mdadm (del cual recomiendo leer el manual antes de hacer nada de esto...).
root@server:~ # mdadm --create /dev/md1 --raid-devices=2 --level=1 /dev/sda2 /dev/sdb2
mdadm: array /dev/md1 started.
root@server:~ #

Para confirmar el funcionamiento, volvemos a consultar la tabla de raid del kernel, mediante la cual comprobamos que la nueva unidad está siendo sincronizada. A pesar de no tener nada adentro (o tener más bien restos de basura), la sincronización se realiza siempre que se cree o regenere una unidad de raid.
root@server:~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb2[1] sda2[0]
1052160 blocks [2/2] [UU]
[=>...................] resync = 9.9% (104448/1052160) finish=0.6min speed=26112K/sec
md0 : active raid1 sdb3[1] sda3[0]
116101632 blocks [2/2] [UU]

unused devices:
root@server:~ #

De hecho, sin importar el formato interno de la unidad una vez generada, si corrompemos el filesystem de la misma, la unidad de raid no se quejará ni dará ningún aviso, ni al usuario ni al sistema, dado que su trabajo es conservar en sincronía las particiones que forman parte de la misma, y no le interesa la consistencia de los datos almacenados internamente en el filesystem que la ocupa.

Esto parece algo malo, pero la realidad es que es el filesystem el que se debe ocupar de la consistencia de la información, NO la unidad de raid. Hay que tener eso en cuenta cuando se manipulen datos contenidos en unidades de este tipo.

Y bien, una vez que se termina la sincronización de las particiones, la unidad queda utilizable, con lo cual el próximo paso es formatear la nueva unidad para que pueda utilizarse como SWAP.
root@server:~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb2[1] sda2[0]
1052160 blocks [2/2] [UU]

md0 : active raid1 sdb3[1] sda3[0]
116101632 blocks [2/2] [UU]

unused devices:
root@server:~ # mkswap /dev/md1
Configurando espacio de intercambio versión 1, tamaño = 1077407 kB
root@server:~ #

Luego, procedemos a activar el nuevo espacio de SWAP y a desactivar el SWAP temporal que dejamos en su lugar. Esto puede demandar algunos segundos también si hay algo swapeado (en este caso, no hay uso del SWAP, así que será inmediato).
root@server:~ # swapon /dev/md1
root@server:~ # free
total used free shared buffers cached
Mem: 513740 506508 7232 0 65480 142272
-/+ buffers/cache: 298756 214984
Swap: 2104417 0 2104417
root@server:~ # swapoff /swap.tmp
root@server:~ # free
total used free shared buffers cached
Mem: 513740 506508 7232 0 65480 142272
-/+ buffers/cache: 298756 214984
Swap: 1052160 0 1052160
root@server:~ # rm /swap.tmp
root@server:~ #

Ahora, modificamos el /etc/fstab para reflejar los cambios en la estructura de SWAP del sistema, reemplazando las entradas que están en amarillo:
/dev/md0             /                    ext3       acl,user_xattr        1 1
/dev/sda2 swap swap pri=42 0 0
/dev/sdb2 swap swap pri=42 0 0

/dev/sda1 /boot ext2 acl,user_xattr 1 2
devpts /dev/pts devpts mode=0620,gid=5 0 0
proc /proc proc defaults 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
sysfs /sys sysfs noauto 0 0

por la que está en verde abajo:
/dev/md0             /                    ext3       acl,user_xattr        1 1
/dev/md1 swap swap pri=42 0 0
/dev/sda1 /boot ext2 acl,user_xattr 1 2
devpts /dev/pts devpts mode=0620,gid=5 0 0
proc /proc proc defaults 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
sysfs /sys sysfs noauto 0 0

Para finalizar, y por el bien de la humanidad, del sysadmin olvidadizo y del feliz reboot del servidor, es bueno generar un nuevo /etc/mdadm.conf que refleje los cambios que se han hecho:
root@server:~ # echo "DEVICES /dev/sda2 /dev/sdb2 /dev/sda3 /dev/sdb3" > /etc/mdadm.conf
root@server:~ # mdadm --detail --scan >> /etc/mdadm.conf
root@server:~ # cat /etc/mdadm.conf
DEVICES /dev/sda2 /dev/sdb2 /dev/sda3 /dev/sdb3
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=7c42bfff:4e68b0d2:578afc87:e3831721
devices=/dev/sda2,/dev/sdb2
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=685b0678:9856ccff:50e357fc:db560963
devices=/dev/sda3,/dev/sdb3
root@server:~ #

Con lo cual cerramos este tutorial finalmente, con la tranquilidad y la satisfacción de haber hecho un buen trabajo y de no haber dejado pendiente un problema de esos que te suelen producir el ya consabido síndrome del sysadmin.

Enjoy! :-)

:wq

martes, 17 de junio de 2008

Ser "amo de casa" no es fácil...

Hace unos días que mi señora está en cama, haciendo reposo absoluto. El tema del embarazo viene bien (viene en camino mi segunda hija, Tatiana), pero resulta que como tuvimos una falsa alarma hace unos días, el médico recomendó quietud.

Y bueno, desde hace unos días vengo intentando llevar adelante mi trabajo de todos los días y además, hacer los deberes domésticos...

Cocinar es algo que se me dá bastante bien (bueno, no es por exagerar, pero nadie se queja de lo que come en mi casa, salvo del picante, algo que me encanta darle a la comida, y además es raro que no se oigan vitoreos y aplausos al cocinero... :-) ), así que no tengo demasiados problemas con eso.

Pero muchas otras cosas son un problema, talvéz salvando los utensillos de cocina. Lo peor que puede pasar con ellos es que se ensucien, así que con lavarlos alcanza. Hay un buen detergente y una esponja, y para eso no hay que ser científico de la Nasa o gurú de la domótica... Lo único preocupante es la frecuencia con la que quedan nuevamente en estado de "lavame o no me toques". Con las comidas "standard" del día, más vale que tengas tiempo de lavar o que tengas un gran juego de cubiertos disponible. Pero fuera de eso, es un asunto relativamente fácil de resolver.

Mi primer problema de importancia fué con la lavarropa. Me habían dicho que era "programable", pero resulta que no tiene accesible ninguna interfaz de comandos donde ingresar el "programa". Tampoco hay un puerto USB, ni conector ethernet, ni un slot para tarjetas SD, ni un puerto de consola, ni una mísera disquetera... Busqué el manual a ver si traía una interfaz inalámbrica, pero resulta que tampoco decía nada de eso ahí (talvéz debí ejecutar un grep "wireless" en lugar de un grep "802.11" sobre el archivo del manual... ). Como no tiene acceso de red, no me molesté en buscar nada sobre SNMP, Telnet o RPC, así que mi consulta resultó desconcertántemente fallida. Por ahí recuerdo haber leído que Java se había inventado con la idea de programar electrodomésticos, pero resulta que al día de hoy, Java se usa para cualquier cosa, menos para los electrodomésticos...

En lugar de algo "manejable", resulta que la lavarropas tiene una interfaz gráfica (GUI, para los conocedores) que tiene una miríada de luces indicadoras y unos botones que permiten especificar una serie finita de combinaciones llamadas "modos de lavado" (A.K.A. "programas", por lo menos según lo entienden las "amas de casa"), así que habiendo encontrado entonces una explicación a lo de la programabilidad de dicho dispositivo, decidí hacer uso de mis conocimientos de álgebra booleana, y al fín pude lavar la ropa.

Por supuesto que tuve que desarrollar otras habilidades, como por ejemplo la "clasificación de la ropa", una tarea basada en técnicas de lógica difusa y que requiere especial concentración y un entendimiento profundo de los tejidos con los cuales se fabrican las prendas de vestir. La dosificación del jabón de lavar y la decisión sobre qué nivel del agua es necesario para cierto lavado también son tareas complejas.

Si bien sé de memoria el alfabeto fonético de la Otan para comunicaciones por radio y puedo descifrar sin problemas un listado de reglas de firewalling con iptables, se me hizo bastante complicado recordar y entender los símbolos que suelen venir en las etiquetas que indican el tipo de lavado apropiado para una prenda en particular, sobre todo por lo contradictorio de algunas de las instrucciones. Por ejemplo, hay uno que especifica "no lavar con agua" (¿se lava con alcohol?), y otro que significa "acepta solo blanqueador sin cloro" (¿lo lavo en pintura para cielorrasos?), e incluso uno que indica "igual al anterior" (¿a qué "anterior" se referirá?... solo tengo "uno"). Evidentemente, se trata de símbolos pensados para un género sexual particular de la especie humana cuyo comportamiento resulta también a veces contradictorio, así que asumo que no se tratan de instrucciones para mi persona. Olímpicamente obvié toda instrucción que no fuera evidente, simple y directa, como todo buen macho debe hacer.

Pero no todo termina ahí. Luego del lavado viene otra serie de tareas relacionadas, como el "colgar la ropa". Aprendí que ciertas prendas se doblan desde afuera hacia adentro para que la parte interior quede a la intemperie, evitando así que los rayos solares desluzcan el color en el exterior de las mismas. También se hace antes de meter algunas prendas a lavar, para evitar que se llenen de pelusas de otras prendas o para evitar no sé qué otros males que suelen sufrir las prendas durante el lavado. No todo es tán simple.

Y bueno, mientras colgaba la ropa, me encontré con que la "cuerda" (un sencillo e ingenioso dispositivo creado para mantener las prendas de vestir en suspensión a escasos centímetros del suelo, evitando que entren en contacto entre sí y con el entorno que las rodea) empezó a declarar un error 28 (No space left on device), así que tuve que utilizar técnicas de compresión para reacomodar lo faltante. Pero apenas saboreaba la victoria gracias al nuevo espacio disponible, volvió a darme error 2 (No such file or directory), asi que ejecutando un rápido diagnóstico, me dí cuenta de que era por falta de iNodos (se me acabaron los palillos...). ¡Maldición! Lamentablemente, tuve que ir a comprar más de esos anacrónicos artículos al almacén más cercano...

También está la tarea del "doblado de la ropa", un ritual arcano seguramente derivado del origami japonés, y que tiene como cometido la reconfiguración de las prendas de vestir para ser almacenadas en ficheros, de forma similar a la que se usa para almacenar archivos en un filesystem. Encuentro particularmente difíciles de acomodar las sábanas con elástico, ya que sus bordes no mantienen la coherencia y la forma de las sábanas convencionales, dificultando terríblemente la tarea del plegado.

También me preocupó un poco no tener donde anotar la posición, tamaño y privilegios de acceso de cada prenda, pero recordé que en realidad es casi innecesario cuando cada usuario tiene asignado un único repositorio en el fichero (lo cual puede representar una pesadilla subrepticia para los expertos en seguridad, dado que no hay una separación de privilegios de facto, sino virtual y opcional) y las búsquedas se realizan en forma secuencial y no usando árboles binarios o algún otro método de hashing. Confieso que tuve algunos problemas para acomodar algunas prendas y que al verme parado con una tijera frente a uno de los cajones, mi señora elevó un grito al cielo y llenó el ambiente con toda variedad de improperios desacatados, lo cual me llevó a la conclusión de que ella es definitivamente más hábil que yo en la asignación de espacio (seguro ella utiliza EXT3, y yo siento algo de vergüenza al decir que quise aplicar fragmentación FAT para reacomodar las prendas, lo cual talvéz haya iniciado el frenético estado de mi señora).

Definitivamente no es fácil esto de ser "amo de casa", y por lo visto, saber de informática no ayuda para nada...

:x

jueves, 12 de junio de 2008

BMW GINA Light Visionary Concept

Si creíste que lo habías visto todo en lo que respecta a automóviles, esto te va a hacer cambiar de idea...

BMW desarrolló un vehículo conceptual cuyo diseño es tan innovador, que parece sacado de una realidad alternativa. Su nombre es GINA (según los ingenieros, el nombre viene de "Geometry and functions In 'N' Adaptations") y es nada más y nada menos que un vehículo cuyo exterior es de un compuesto flexible (que BMW denomina simplemente "skin"), el cual puede hacer cambiar su forma mediante la reconfiguración de los tensores internos situados debajo de dicha piel.

Incluso los asientos y hasta el panel de control cambian de forma, ocultando o mostrando controles dependiendo del caso. Los faros delanteros se abren y se cierran cual ojos, y sus puertas se doblan para permitir el acceso al receptáculo interno. Las luces indicadoras pueden verse a través de la piel del auto, produciendo un efecto realmente muy llamativo.

La piel parece metal, pero se trata de una tela lycrada, la cual en si misma no es demasiado resistente, si no fuera por su endoesqueleto de metal y fibra de carbono, el cual cambia de posición mediante unos motores eléctricos internos haciendo que la aerodinámica del coche cambie a demanda.

Y nada que ver con aquella porquería de la serie Viper, que cambiaba de forma de manera totalmente imposible...

Les dejo un videíto (del sitio de BMW-web.tv) que creo que ilustra suficientemente bien el concepto.



La idea es brillante en varios aspectos, pero lástima que no pueda aplicarse en la realidad... imaginate que cualquier idiota puede acercarse a tu auto y con una simple trincheta puede convertirlo en jirones... Podría resolverse rápidamente siempre que tengas un "traje" nuevo de repuesto en la valija (el Jefe del proyecto dice que se puede poner una piel nueva en dos horas)... pero si la valija es de tela, se te pueden llevar el repuesto... bueno... esto se complica... También hay que pensar en la aislación acústica, la resistencia aerodinámica de las ondas provocadas por el flujo de aire sobre las partes de la tela que no están perfectamente tensadas a altas velocidades (un efecto que incluso la piel humana sufre), la resistencia del receptáculo y de las partes "blandas" de la cubierta en caso de colisión, y un largo etcétera, pero lo importante es que es un diseño innovador y que puede abrir nuevas puertas a varios conceptos igualmente interesantes.

Ya me imagino llevando el auto a la tintorería para lavarlo, o al sastre para hacerle chapa y pintura, o incluso quedarnos a acompañar al mecánico para que no apoye una mano llena de grasa arriba del capó...

Dejá, prefiero un auto "normal"...

EOF

martes, 10 de junio de 2008

Notificación de "té listo" por correo...(?)

Mi casa tiene dos plantas. Abajo hay un living comedor y una cocina, y subiendo una escalera con forma de caracol, están los tres dormitorios y el baño.

Mi señora trabaja en la planta baja, conectándose con su computadora a un servidor donde se aloja la aplicación con la que trabaja (un sistema de gestión accesible vía escritorio remoto). Yo trabajo arriba, en uno de los dormitorios, el cual tomé y convertí en data-center (esto es, lo llené de computadoras, cables, CDs, switches, herramientas, etc.), y normalmente mientras trabajo mantengo cerrada la puerta para evitar interrupciones y ruido ambiente.

Hace unos días, recibí un correo electrónico a través de mi cuenta de GMail que tenía el siguiente contenido:

Asunto: el te esta pronto

ya tiene azucar

Ya antes habíamos usado el Google Talk para avisarnos de ciertas cosas, para no estar subiendo y bajando la escalera, pero recibir este mensaje de correo francamente me resultó el colmo de la exageración informática.

Supongo que fué porque sé que este mail viajó desde el equipo que usa mi señora (el cual está a escasos diez metros del mío), a través de nuestro enlace de Internet hasta los servidores de Google (situados físicamente a más de 8000 kilómetros de distancia de mi casa) y volviendo de nuevo a mi equipo, utilizando una infraestructura que vale millones de dólares y que abarca sistemas distribuídos en un área geográfica de varios kilómetros cuadrados.

Todo para avisarme que tengo el té pronto esperandome en la cocina, a pasos de mi silla.

Después de tomar conciencia de semejante derroche de recursos y tecnología, le pedí a mi señora que hiciera acopio de fuerzas y utilizara señales acústicas generadas por medio de sus cuerdas vocales, a alta frecuencia y mediana potencia, como medio de propagación de toda notificación del calibre de la expresada por correo electrónico.

Me explicó que como me escuchó hablando por teléfono y no me vió conectado al GTalk, decidió mandarme la notificación por correo y no gritando, ya que el correo lo leo todo el tiempo y un grito talvéz espante a mi interlocutor telefónico. Y al final tiene razón...

Llegamos a la conclusión de que es mejor hacer uso de la tecnología. Supongo que en una casa donde hay más computadoras que gente, no está mal aprovecharse de esa infraestructura de vez en cuando.

¿No se inventó todo esto para hacernos la vida más fácil?

:wq

 
Gustavo Castro

Crea tu insignia