Archive for Libros
October 31, 2008 at 20:03 · Filed under Ciencia, Cultura, Libros
Cito de Viva la Ciencia, por Antonio Mingote y José Manuel Sánchez Ron (Editorial Crítica):
Además de sus contribuciones científicas. la Revolución Científica nos dejó una serie de innovaciones, no sólo de ideas, teorías y boservaciones, sino también de comportamientos y mecanismos que resultaron esenciales para el avance científico. Nos estamos refiriendo a las asociaciones profesionales.
Las ideas científicas pueden surgir en ocasiones en escenarios solitarios. [...] Pero, tomada en su conjunto, la actividad científica requiere de instituciones en las que los científicos reciban educación especializada, realicen sus experimentos, intercambien ideas y publiquen sus trabajos. Y fue durante la Revolución Científica cuando se crearon instituciones que sirvieron a estos fines: las primeras sociedades científicas realmente significativas y estables.
En la Europa del siglo XVI proliferaron las universidades. Podemos hablar de ellas, y con razón, como centros de saber. Pero es ésta una denominación un tanto equívoca eran, sobre y por encima de todo, centros de enseñanza, y, de hecho, sus planes de estudios y división en facultades se mantuvieron estáticas durante siglos. Se necesitaba otro tipo de centros para que la ciencia pudiese desarrollarse verdaderamente: las academias y sociedades científicas.
El texto acerca de las Sociedades Científicas sigue, pero creo que es suficiente. Por alguna razón me ha recordado a los hacklabs y medialabs: a los laboratorios de andar por casa donde se pueden desarrollar ideas en colectividad.
June 26, 2008 at 20:21 · Filed under Libros
“Otras cosas, sin embargo, se van imponiendo porque cada vez más gente piensa que tienen que ser así. Le daré dos ejemplos: ¿usted ya se preguntó por qué las letras de un teclado de máquina de escribir están colocadas en ese orden?
–Nunca me lo pregunté
–Llamemos QWERTY a ese teclado, ya que las letras de la primera línea están dispuestas así. Yo me pregunté el porqué de eso, y encontré la respuesta: la primera máquina fue inventada por Christopher Scholes, en 1873, con el fin de mejorar la caligrafía. Pero presetnaba un problema: si la persona tecleaba con much velocidad, los tipos se entrechocaban y trababan la máquina. Entonces Scholes diseñó el teclado QWERTY, que obligaba a los usuarios a escribir con mayor lentitud.
–No me lo puedo creer.
–Pero es verdad. Sucede que la Remington, que en aquella época fabricaba máquinas de coser, implantó el teclado QWERTY en sus primeras máquinas de escribir. Lo que significa que más personas fueron obligadas a aprender ese sistema, y más compañías pasaron a fabricar estos teclados, hasta que se convirtió en el único modelo existente. Repito: el teclado de las máquinas y ordenadores fue diseñado para que se mecanografiase más lentamente, y no más rápido, ¿comprende? Intente cambiar las letras de lugar y no encontrará un comprador para su producto.
Veronika decide morir, Paulo Coelho, (pág. 178 de 223)
February 11, 2008 at 13:59 · Filed under Libros, Redes
Un libro de uno de los míticos: Andy Tanenbaum. Junto con Silberschatz y Stallings creo que son la biblioteca básica de cualquier estudiante de ciencas de la computación.
800 y pico páginas, casi tan tocho como sus otros libros. Escrito en un tono muy cercano y ameno, y posiblemente gracias a esa forma de transmitir conocimiento le hayan dado el premio Karl V. Karlstrom.
El libro pretende ser una introducción a todo lo que es el campo de las redes de computadoras, tratando desde los niveles más bajos (sin mucha profusión) hasta los niveles más altos. Habla de normalización, de estándares y de las instituciones que se ocupan de ellos. Trata ligeramente el medio físico, procurando abarcar desde fibra óptica a satélites. A la capa de enlace le otorga casi doscientas páginas, para luego pasar a la capa de red. En la capa de red, aparte de algoritmos de enrutamiento, habla un poco de congestión y de calidad de servicio. Le siguen el nivel de transporte, protocolos del nivel de aplicación y seguridad en redes, donde repasa la criptografía simétrica y la de clave pública, además de hablar de certificados, SSL, PGP, S/MIME, IPsec, etc.
El libro es un must-read: una primera lectura sirve para introducirnos en (¿casi?) todos los temas de redes, lecturas posteriores como libro de referencia pueden ser útiles para reintroducirnos en algún aspecto en el que queramos trabajar, ya que además el libro finaliza con una extensa lista de bibliografía para profundizar más en ese tema en concreto.
Desde luego recomiendo su lectura, aunque cuesten las 800 páginas, tanto en términos de tiempo como de dinero (45 o 50 euros, aunque es fácil de encontrar en bibliotecas).
February 11, 2008 at 13:11 · Filed under Bioinformática, Libros
El mayor fallo que le achaco a este libro es que está muy poco actualizado desde 2001 que es de cuando data la primera edición. Al leer el texto se nota en algunas partes que haría falta alguna revisión.
Mi intención cuando lo compré era leer algo que me introdujera en la bioinformática y refrescar un poco el
perl
, que de no usarse las cosas se oxidan.
El
perl
que se trata en el libro es muy básico, como cabía esperar, ya que el libro está orientado para biólogos (o similares) sin apenas conocimientos de informática –aunque alguno sí: tener instalado un Unix, aunque sea MacOS X, sí se hace necesario. Apenas se profundiza en el lenguaje, pero realmente para mí tampoco era esa la intención (para eso probablemente el Programming Perl de Larry Wall, o el de Damian Conway sean más adecuados). Creo que para un biólogo sí puede ser un texto recomendable, ya que presenta una serie de ejemplos en
perl
muy bien comentados, y desde mi punto de vista es fácil de seguir –igual que para un biólogo un texto de bioquímica también le será fácil de asimilar :).
De los trece capítulos del libro los seis primeros tratan de introducir
perl
: expresiones regulares, variables, subrutinas, el depurador, acceso a ficheros, etc.
Además en la web del libro están todos los ejercicios resueltos, así como una librería de funciones útiles para la bioinformática (al menos para empezar, porque gran parte de esas funciones ya están en Bioperl).
Y la bioinformática: el texto sirve para introducirse un poquito en qué es lo que se hace, aunque dada mi falta de conocimientos en biología se me queda un tanto cojo. En el libro se menciona el paso de ADN a proteína. Presenta varios métodos para realizar el proceso, para que el lector se familiarice con
perl
y que vea cómo se trabaja con expresiones regulares y conozca las hashes de
perl
.
De ADN a proteína
Biológicamente una cadena de ADN es una secuencia de bases nucleotídicas, y bases nucleotídicas hay cinco: adenina, timina, uracilo guanina y citosina, de las cuales en el ADN están todas presentes a excepción del uracilo (que reemplaza a la timina en el ARN).
Estas secuencias en perl se representan como cadenas de caracteres, así una cadena de ADN que sea adenina, citosina y guanina se representa como
‘ACG’
.
Cada tres bases forman lo que se llama un codón, y cada codón codifica un aminoácido. Habiendo cuatro bases y tres bases por codón, un codón podría tener hasta 64 valores diferentes (i.e. codificar 64 aminoácidos diferentes). Sin embargo, en la naturaleza sólo hay 20 aminoácidos, por lo que parte de esas secuencias no tienen significado (código degenerado), otras tienen el mismo significado (p.ej. UUU y UUC codifican la dos la fenilalanina), y otras simplemente son códigos de parada: le indican a la maquinaria celular que la cadena ha llegado al final.
En la célula quien hace las tareas son las proteínas: las proteínas son quienes componen mayoritariamente la máquina celular, las que hacen que esa maquinaria trabaje, y en definitiva son las que dirijen el cotarro. Qué proteínas se deben fabricar y cuándo es tarea de los genes: cuando un gen se expresa se inicia un proceso de transcripción que da lugar a una cadena de ARN mensajero a partir de una cadena de ADN. Ese ARN mensajero (ARNm) pasa por un proceso de traducción en los ribosomas de la célula. Los ribosomas toman codones de ARNm y por cada codón el aminoácido señalado por el codón. El ribosoma va uniendo estos aminoácidos y formando una cadena: la proteína. Posteriormente esa proteína se pliega, según condiciones de temperatura y pH se pliega de una manera o de otra, y según cómo se pliege realizará su función de una manera o de otra, o no la realizará.
En definitiva, este proceso de transcripción y traducción a efectos computacionales no deja de ser una simple sustitución de cada tres caracteres (sin solapamiento) de una cadena de ADN por su caracter correspondiente, si lo hay, que represente un aminoácido. Por ejemplo, la cadena
‘ACGGGAGGA’
pasa a ser
‘TGG’
. Las equivalencias entre codones y aminoácidos son casi universales: en todos los organismos son las mismas (la excepción la suponen las mitocondrias y algunos protistas).
Realizar esta traducción en
perl
es trivial. En el BPfB se presentan tres métodos: uno usa hashes en plan
%codigo{‘ACG’}=’T’
, los otros dos usan expresiones regulares:
if ($codon =~ /UU[CU]/){return ‘P’;}
El GenBank y el PDB
También toca el tema de las bases de datos que guardan información biológica: el GenBank y el Protein Data Bank, aunque sin profundizar en la interfaz de
perl
con las bases de datos más allá de los
DBMs
.
El GenBank es una de las bases de datos donde se almacenan genes. Hay una especificación de formato para los ficheros GenBank, y entre otros datos almacena la posición del gen, la especie a la que pertenece el gen, el ADN del gen, la transcripción de ese ADN y unas cuantas anotaciones más.
El Protein Data Bank guarda información similar pero para las proteínas: qué cadena de aminoácidos, y qué atomos y en qué posición están esos átomos. La posición de esos átomos es muy importante, así como la forma que adquiere la proteína, ya que de ello depende su función. Además determinar esta forma es computacionalmente muy costoso ya que se trata de un problema intratable (aunque en el PDB se obtiene mediante cristalografía de rayos X y resonancia magnética nuclear).
El penúltimo capítulo se dedica a BLAST. BLAST es un programa que sirve para comprobar el alineamiento de distintas secuencias de ADN, y así comprobar la similitud entre las secuencias. Hay varias versiones, hay versiones que comprueban cadenas de nucleótidos con cadenas de nucleótidos, otras cadenas de nucleótidos con aminoácidos, etc. La similitud se comprueba de manera estadística, y de hecho viene comentada en un paper del año 1990.
March 25, 2007 at 20:23 · Filed under Libros, OpenBSD, Sistemas operativos
Es el libro que más me han recomendado como introducción a OpenBSD, y en mi caso a los Unix *BSD en general.
Su autor es Michael W. Lucas, autor de una columna llamada Big Scary Daemons en el O’Reilly Report. Autor también de Absolute BSD (publicado también por No Starch Press) y con amplia experiencia en BSD y como administrador de sistemas y redes en general.
Son unas 450 páginas sin contar el índice alfabético, que tratan de explorar a nivel introductorio las capacidades de OpenBSD, y dar una formación básica de cómo instalar el sistema en diferentes entornos y configurarlo para diferentes tareas.
Sin haberlo instalado aún fuera de un emulador y apenas sin haberlo probado este libro me ha permitido ver la enorme potencia que alberga OpenBSD. Se habla ya en los últimos tres capítulos del PF (packet filter) , el firewall de OpenBSD. Enormemente configurable (y mucho más cómodo de hacer, a diferencia de las iptables de Linux) y con unas capacidades que nada tienen que envidiar a las de los kernels de Linux. Es más, cuenta con ciertas opciones de las que Linux carece.
El protocolo TCP (v4 al menos, v6 lo desconozco) mantiene un intercambio de números de secuencia (ISNs) y de reconocimiento en cada uno de los paquetes que se envía dentro de un flujo de datos. La finalidad de este intercambio es dificultar el robo de conexiones o la suplantación de identidad de cliente o servidor. Para ofrecer de verdad seguridad las pilas TCP de los diferentes sistemas debe generar los ISNs de forma aleatoria mediante generadores de números seudoaleatorios (PRNG).
Es de sobra conocido que hay algunos dispositivos tontos (impresoras o scanners en red, etc.) que o bien usan un número constante como ISN o bien a la hora de modificarlo simplemente le suman una constante, de forma que la aleatoriedad es más bien nula. En cualquier caso, el análisis de éstas secuencias de número provenientes de una máquina dada permite saber qué tipo de PRNG ha sido usado, y por tanto qué tipo de máquina, sistema operativo y a veces incluso versión del SO ha entrado en juego. Ésta técnica de análisis es una de las más empleadas a la hora de hacer OS-fingerprinting ([1], [2, 0x0F] y [3]) por programas del estilo de nmap.
Windows al igual que Solaris o Linux o BSD usa números seudoaleatorios, el problema es que el generador de número seudoaleatorios (PRNG) es bastante pobre, por lo que a parte de averiguar que dentro de nuestra intranet hay un servidor Windows, también resta dificultad a la hora de hacer spoofing, p.ej.
PF ofrece la posibilidad, a la hora de hacer NAT/Masquerading con un router con OpenBSD, de reemplazar los ISNs de los paquetes TCP que provienen de la intranet, de forma que un sistema en el exterior pese a analizar las secuencias de ISNs no sea capaz de determinar el sistema operativo real. En su lugar lo que estarán analizando los atacantes son las secuencias generadas por el router, y por tanto por el PRNG de OpenBSD, que no sólo no es el correspondiente al servidor que tenemos en la intranet, sino que además es más seguro que el de Windows. Hasta donde yo sé Linux hoy en día no ofrece esta posibilidad.
OpenBSD es un sistema operativo orientado principalmente a la seguridad. Ya en su página principal presumen de no haber tenido más que dos agujeros de seguridad remotos en la instalación por defecto en los últimos diez años (a costa de venir con más bien poquitos servicios activados por defecto, se discutía esto en Barrapunto hace poco).
Y con tal finalidad cuenta con diverso número de medidas como son el systrace, el propolice, W^X, las pilas no ejecutables y los securelevels. Algunas de ellas compartidas con GNU/Linux.
El systrace es un sistema de políticas de interceptación de llamadas al sistema operativo. Permite interceptar todas las llamadas por parte de un proceso dado a una función determinada, y una vez interceptadas, obrar en consecuencia. Si un día se descubre que el demonio rinetd que tenemos corriendo cuenta con una vulnerabilidad que a un atacante le permite leer el fichero /etc/shadow, digamos con fope(“/etc/shadow”,”r”);, systrace nos permitiría definir una política tal que todas las llamadas de rinetd a fopen con ese argumento fallen y devuelvan NULL en vez de abrir el fichero y devolver un FILE * válido que permita leerlo. Serviría como parche hasta que se publique una nueva versión de rinetd sin ese fallo.
El propolice permite asegurarse de que la dirección de retorno de una función no ha sido modificada y el W^X se asegura de que ninguna página es ejecutable y escribible a la vez, sino que o lo uno o lo otro.
Y finalmente los securelevels: hay 4, desde el -1 (menos seguro) hasta el 2 (más seguro) , y una vez se pasa de uno menor a otro mayor no se puede bajar, salvo reiniciando la máquina. En cada securelevel se ponen en juego una serie de restricciones por parte del sistema operativo.
En el Unix File System (o Fast File System), que es el sistema de ficheros que emplean los BSDs (y Solaris) los archivos, al menos en OpenBSD, pueden tener una serie de flags activadas. Por defecto ningún fichero trae ninguna activada, pero podemos decidir activa el flag schg (system-level immutable flag) sobre un fichero. Esto impedirá que nadie pueda editar, mover o reemplazar ese fichero si no es quitando el flag antes, y para quitarlo hay que ser root, y además de estar en un securelevel menor que 1. Si estamos en el 1 o en el 2, no tendremos más remedio que reiniciar en el -1 o el 0, cambiar el flag y luego ya reiniciar normalmente y proceder.
Como consideraciones finales decir que OpenBSD soporta también varios tipos de ejecutables, a la vez que los suyos propios, soporta la ABI de Linux p.ej., y también alguna más. Me ha dado la impresión de que el sistema operativo, al menos en lo que respecta al manual, está muy bien documentado, y en mi opinión mucho mejor que Linux.
Hay quién dice que es más rápido que Linux. Yo en un análisis el año pasado vi lo contrario, entre Free, Open y Linux el peor parado en cuanto a velocidad era Open, pero teniendo en cuenta las comprobaciones de seguridad que ofrece frente a los otros no es de extrañar. De todas formas todos estos análisis sobre seguridad hay que cogerlos con pinzas, si es que uno se decide a cogerlos (¿tienen gran utilidad? ¿hay gran diferencia de velocidad? ¿compensa usar algo más rápido y más inseguro?).
Así mismo, el libro está un poquito desfasado ya que es del año 2003 y no creo que haya sido revisado mucho desde entonces. Se nota en ciertos capítulos relativos a la instalación y en que se está refiriendo a OpenBSD 3.2 (en mayo saldrá la 4.1, cada 6 meses sale una nueva). No obstante lo recomiendo para iniciarse con OpenBSD.
Next entries »