Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Lógica gerencial

Hace unos días detectamos un problema de seguridad en uno de nuestros sistemas. El problema era que con un poco de maña se podían obtener las claves de mucha gente.

El proveedor del sistema se defendió diciendo que no era tan fácil conseguirlas.
Nosotros decíamos que mientras no se arreglase siempre podrían conseguirse.

La pregunta de dirección: “¿como cuánta maña sería necesaria para conseguirlas?”
Respuesta: “Pues por ejemplo, cualquiera del departamento de informática está capacitado para hacerlo.”

Se organiza una reunión con los proveedores y un par de departamentos, entre ellos informática, para hablar del tema.
Comienza la reunión y dice el jefe:
“Tenemos un problema. Hay que hacer que los informáticos no sean administradores para evitar que puedan ver las claves.”

Lo que decía. Lógica gerencial.

Por cierto, un mínimo de justicia poética ha sucedido unos 20 minutos después de la reunión. El proveedor, quitando permisos de administrador ha dejado sin acceso al sistema a la gente -incluido el usuario que estaban utilizando- y, lógicamente, me han llamado para que lo solventase (cuestión de un minuto).

Breve historia de la informática (y II)

Primera parte

El álgebra y las máquinas de calcular
A finales del siglo XVI y durante el siglo XVII se produjo un gran desarrollo del álgebra y las matemáticas. Hacia 1580 François Viéte (1540-1603) comenzó a utilizar letras para simbolizar valores desconocidos y con ello estableció las bases del álgebra. En 1614, John Napier (1550-1616) inventó los logaritmos (de “logos” y “aritmos” – conocimiento de los números), Edmund Gunter (1581-1626) inventó un precursor de la regla de cálculo en 1620, Galileo (1563-1642) sentó las bases de la formulación matemática, René Descartes (1596-1650) descubrió la geometría analítica…

Wilhelm Schickard diseñó y construyó, en 1623, lo que se considera la primera calculadora digital. La calculadora de Schickard permitía la realización automática de sumas y restas, y parcialmente automatizadas, multiplicaciones y divisiones. Desgraciadamente, Schickard y toda su familia murieron durante una epidemia, y su invento no tuvo difusión. Blaise Pascal (1623-1662) quien es considerado generalmente como el inventor de la calculadora, fabricó su ingenio veinte años después de Schickard y era menos avanzado. Se basaba en un sistema de ruedas dentadas y dada la tecnología de la época no consiguió fabricar ningún modelo fiable.
Otra figura importante de esta época fue Gottfried Wilhelm Leibniz (1646-1716). Leibniz fue a la vez un excelente pensador teórico y un destacado hombre pragmático. Fue, junto con Isaac Newton, el codescubridor del cálculo. Leibniz escribió:
«Es una pérdida de tiempo que personas cualificadas pierdan horas como esclavos en la labor de calcular, lo que podría ser delegado en cualquier otro si se pudieran utilizar máquinas.»
Basándose en los trabajos de Pascal construyó un dispositivo, conocido como la rueda de Leibniz. Este dispositivo podía realizar sumas, restas, multiplicaciones y divisiones automáticamente. Algunas máquinas basadas en los mismos principios que la de Leibniz han jugado un papel preponderante en la segunda guerra mundial, e incluso algunas están todavía en uso. Leibniz fue también el primer pensador occidental en investigar la aritmética binaria y sentó las bases de la lógica simbólica, basada en símbolos y variables abstrayendo la semántica de las proposiciones.

La primera programadora
Charles Babbage (1791-1871) fue uno de los miembros fundadores de la Royal Astronomical Society de Inglaterra. Propuso dos máquinas computadoras movidas por máquinas de vapor “la máquina de diferencia” y “la máquina analítica”. Esta última fue la primera máquina de propósito general concebida. O mejor dicho, sin propósito específico. Cada vez debía seguir las instrucciones de un “programa”. Fue Ada Byron, condesa de Lovelace, y colega de Babbage quien desarrolló los primeros “programas” para estas computadoras y estableció las bases de los lenguajes de programación.
Un inventor sueco, Pehr George Scheutz, consiguió en 1854 construir una máquina “diferencial” altamente especializada. Operaba utilizando tarjetas perforadas que contenían series de operaciones y datos. Babbage tomó la idea de utilizar tarjetas perforadas del telar de Jacquard pero, como Pascal, se vio limitado por la imprecisa tecnología de su tiempo y jamás consiguió construir un modelo que funcionase de su máquina analítica.

La lógica de un autodidacta
Un avance teórico, relativamente reciente, sobre los trabajos de Aristóteles acerca del razonamiento lo realizó Georges Boole (1815-1864). Boole nació en Londres, en el seno de una familia de clase media baja, y fue un auténtico autodidacta. Cuando tenía alrededor de dieciséis años aprendió por su cuenta latín y griego, y posteriormente aprendió francés, italiano y alemán. También de forma autodidacta, Boole aprendió prácticamente todas las matemáticas conocidas en su tiempo. Su contribución más destacada fue “Una investigación sobre las leyes de la Verdad”, publicado en 1854. En este trabajo estableció para el proceso del razonamiento una representación simbólica. Para ello utilizó variables que sólo podían adoptar dos valores “1” (verdadero) y “0” (falso), descartando cualquier valor de “media verdad”. Las ideas de Boole no tuvieron una gran repercusión en los siguientes cincuenta años hasta la aparición de una tesis de Claude E. Shannon quien demostró que el análisis de circuitos electrónicos complejos podía realizarse utilizando el álgebra de Boole.

El censo de los Estados Unidos
Las computadoras masivas
Antes de 1890, el censo de los Estados Unidos se realizaba de forma manual. Sin embargo, el rápido crecimiento que experimentó su población durante el siglo XIX, hizo inviable dicho procedimiento. En 1890 se utilizó para controlar el censo una tecnología basada en tarjetas perforadas creada por Herman Hollerit. Esta tecnología demostró ser más rápida y permitió realizar más preguntas en el cuestionario censal, consiguiendo así una información más útil. Este éxito animó a Hollerit a fundar en 1896 su propia compañía, la “Tabulating Machine Company” que más tarde se convertiría en “International Business Machines” (IBM).

El matemático más influyente de aquellos tiempos fue David Hilbert (1862-1943), que propuso a los matemáticos encontrar un sistema axiomático del cual pudieran derivarse todas las matemáticas. Hilbert pensaba que tal modelo debía ser consistente, en el sentido de que nunca nos podría conducir a la posibilidad de probar dos axiomas contradictorios. Sin embargo, Kurt Gódel (1906-1978) demostró en 1931 que la propuesta de Hilbert era inviable. Por tanto, el antiguo problema de los matemáticos, de sistematizar el razonamiento, avanzó hasta el extremo de descubrir el propio límite del razonamiento. Los trabajos de Gódel revolucionaron la visión que los matemáticos tenían de su disciplina.
El descubrimiento de Gódel tuvo efectos prácticos de forma inmediata; forzó a los matemáticos a revisar hasta qué punto podían afirmar que tenían un método para resolver un problema. Se publicaron varias respuestas a esta pregunta de las cuales la más trascendental fue la publicada en 1936 por el lógico inglés Alan Turing (1912-1954) quien demostró que un “cálculo efectivo” (realizable por un procedimiento finito) podía ser considerado como un tipo particular de máquina abstracta.

Howard T. Aiken (1900-1973) y sus asociados colaborando con un grupo de ingenieros de IBM diseñaron y construyeron, en 1944, una máquina electromecánica bautizada como Mark 1 capaz de multiplicar dos números en seis segundos y dividirlos en doce. “Bell Telephone Laboratories” construyó una máquina similar entre 1937 y 1940 y varias versiones mejoradas fueron construidas sucesivamente.

ENIAC
La madre de todas las computadoras
La primera computadora digital totalmente electrónica fue diseñada por el físico John V. Atanasoff (1903), un profesor asociado de la “Iowa State University”, con la ayuda de un estudiante de licenciatura llamado Clifford E. Berry. El principal interés de Atanasoff era encontrar un método eficaz de resolver sistemas de ecuaciones lineales. La ABC (Atanasoff Berry Computer) fue construida en 1940, utilizaba aritmética binaria y era de propósito único. Aunque nunca se la consideró una herramienta decisiva, sí supuso un paso importante en la informática ya que tuvo una influencia decisiva en John Mauchly, el diseñador de la ENIAC, la primera computadora digital de gran escala. La ENIAC fue diseñada entre finales de 1943 y comienzos de 1944 y se terminó a finales de 1945.
Durante la construcción de la ENIAC, John von Neumann (1903-1957), matemático, se interesó por el diseño de computadoras. Von Neumann consiguió el grado de doctor en matemáticas, graduado en física experimental y química, con sólo veintidós años. Cuando cumplió los veintitrés era ya un renombrado matemático en todo el mundo. Había realizado importantes estudios en lógica formal y colaboraba con Hilbert en sus intentos de axiomatizar las matemáticas. Sin embargo, von Neumann estaba interesado también en las matemáticas aplicadas, especialmente en problemas de dinámica de fluidos. Los modelos matemáticos aplicables requerían largos y tediosos cálculos. De esta forma, von Neumann conjugó dos antiguos intereses ya mencionados la sistematización de la lógica y la posibilidad de realizar cálculos de forma rápida y fiable.
Von Neumann comenzó a trabajar en el proyecto ENIAC en agosto de 1944. Tomó parte en las discusiones sobre el diseño de una nueva máquina, la EDVAC, que pretendía corregir las deficiencias de la ENIAC. Von Neumann asumió rápidamente la responsabilidad del diseño de la estructura lógica de la EDVAC la cual utilizaba notación binaria tanto para el almacenamiento como para la manipulación de números e instrucciones, al contrario de la ENIAC, que utilizaba aritmética decimal.
Estas contribuciones fueron tan transcendentales que, de hecho, hoy en día se utiliza el término “máquina de Von Neumann” para referirnos a las computadoras modernas.

Aprendiendo a hablar
Las primeras máquinas tenían que programarse con unos y ceros, hasta que a comienzos de 1950 se desarrollaron los primeros lenguajes simbólicos, denominados “lenguajes ensamblador”. A finales de los años cincuenta y comienzos de los sesenta se desarrollaron los primeros lenguajes de alto nivel. El primero fue FORTRAN (FORmula TRANslator) en 1954, y su creación se debe a John Backus. Otros lenguajes de alto nivel son COBOL (Common Business-Oriented Language) desarrollado en 1960 por Grace Hopper y otros; y Pascal, desarrollado por Niklaus Wirth en 1970.
Suma de dos números:

Código máquina Lenguaje ensamblador Lenguaje alto nivel
10100101 00000001 LOAD A C = A + B
01100101 00000010 ADD B
10000101 00000011 STO C

Además los distintos lenguajes de programación tienen su propio vocabulario más o menos limitado, su gramática más o menos estricta y su semántica. Además cuantos más lenguajes conoces más fácil es entender un nuevo lenguaje y más fácil es confundirse al escribirlo. Pero como las computadoras siempre necesitan el “código máquina” cuando el programador escribe en un lenguaje de alto nivel su programa debe ser traducido. A este proceso se le llama “compilación” y lo realiza, curiosamente, otro programa. El código escrito por el programador es lo que se conoce como “código fuente” y el código traducido es lo que se conoce como “código binario”.

Las computadoras se comunican
El 4 de Octubre de 1957 la antigua Unión Soviética puso en órbita el primer satélite artificial, llamado SPUTNIK. Un año después, en plena guerra fría, se crea la Advanced Research Projects Agency (ARPA) dependiente del departamento de defensa de los EE.UU. En toda guerra la información es vital y el origen de Internet fue la necesidad de un sistema de comunicaciones que sobreviviera a un conflicto.
En 1962 J.C.R. Licklider escribió un ensayo sobre el concepto de Red Intergaláctica, donde todo el mundo está interconectado pudiendo acceder a programas y a datos desde cualquier lugar del planeta. En Octubre de ese año, Lickider es el primer director de ARPA. Así, entre 1962 y 1968 se trabajó el concepto de intercambio de paquetes en una red conocida como ARPANET. Se siguieron conectando computadores rápidamente a la ARPANET durante los años siguientes y en Octubre de 1972, Kahn organizó una demostración de ARPANET en la International Computer Communication Conference. Esta fue la primera demostración pública de la nueva tecnología de red. Fue también en 1972 cuando se introdujo la primera aplicación “estrella”: el correo electrónico. 1973 Vinton Cerf empezó el desarrollo del protocolo que más tarde se llamaría TCP/IP, un protocolo orientado a comunicar unas redes por otras, el protocolo de internet (IP: Internet Protocol).
Sin embargo no es hasta 1983 cuando se considera que nació realmente Internet, al separarse la parte militar y la civil de la red. En ese momento ya la compartían 500 servidores (ordenadores interconectados). Ese mismo año se creó el sistema de nombres de dominios (.com, .edu, .gov… más las siglas de los países), que prácticamente se ha mantenido hasta ahora. La constitución y crecimiento de esta nueva “red de redes” pronto contó con nodos en Europa. En 1984 William Gibson novelaba el nuevo mundo y acuñaba el término “ciberespacio”.

Y ahora qué
El mundo de la informática sigue en la década de los noventa en pleno desarrollo. Un área especialmente investigada es la de los procesadores paralelos. Los lenguajes de programación también se han desarrollado enormemente en los últimos años con la programación orientada a objetos y la programación extrema (que no consiste en programar sobre un acantilado). Otra de las áreas de interés es el desarrollo de redes de computadoras además de la inteligencia artificial y la robótica.
Pero eso también es otra historia para ser contada más adelante.

http://www.xtec.es/~jdomen28/article101.htm
http://webs.sinectis.com.ar/mcagliani/hnumeros.htm
http://www.persystems.net/historia/internet.htm

Breve historia de la informática (I)

Introducción
La informática es una disciplina añeja, con raíces que pueden encontrarse en las civilizaciones griega, babilónica o egipcia. Se basa en dos cuestiones que han llamado la atención de los pensadores durante miles de años: la sistematización del razonamiento (o cómo expresar razonamientos) y el desarrollo de métodos de cálculo. Los computadores son solo el avance más reciente en esta historia.

Este texto pretende explicar someramente la evolución en dicha historia y fomentar la curiosidad sobre multitud de apasionantes temas que influyeron en la historia del pensamiento y desarrollo de la humanidad. Si consigo interesaros por alguno de ellos me sentiré satisfecho (además de animarme a tratarlos con mayor extensión).
No dudéis en comentar cuantas dudas os surjan, posibles erratas y ampliaciones de información.

Griegos, Babilonios y Egipcios
(El razonamiento formal y los métodos de cálculo)
La antigua Grecia realizó una contribución enorme en la sistematización del razonamiento. Durante el periodo de 600 AC hasta 300 AC, en Grecia se desarrollaron los principios formales de las matemáticas. A este periodo se le conoce como periodo clásico, donde sus principales representantes son Platón (427-347 AC), Aristóteles (384-332 a.C.) y Euclides. Platón introdujo las ideas o abstracciones; Aristóteles presentó el razonamiento deductivo y sistematizado en “Organón” y Euclides es el personaje que mayor influencia ha tenido en las matemáticos a lo largo de toda la historia, al establecer el método axiomático.
En ”Elementos”, Euclides distingue entre principios (definiciones, axiomas y postulados) y teoremas (deducidos a partir de los principios). Con tan solo 5 postulados, Euclides organizó todo el conocimiento matemático de su época con un riguroso método deductivo. Es decir, en lugar de realizar experimentos con círculos y analizar los datos, los matemáticos griegos definieron el concepto de círculo y sus propiedades básicas (axiomas) y derivaron las propiedades de éstos utilizando el razonamiento formal.
Consiguieron así grandes avances en la clarificación de los criterios a seguir para realizar un razonamiento correcto. El ejemplo siguiente se debe a Aristóteles:

Toda persona es mortal.
Sócrates es una persona.
Entonces, Sócrates es mortal.

Esta forma de razonamiento recibe el nombre de modus ponens. Un modo de razonamiento ligeramente diferente, denominado modus tollens, se ilustra a continuación:

Toda persona es mortal.
Zeus no es mortal.
Entonces, Zeus no es una persona.

Los trabajos de Aristóteles sentaron las bases fundamentales de la lógica formal; de hecho, no se produjeron avances revolucionarios en este campo hasta el siglo XVIII.

Los babilonios y egipcios no fueron razonadores sistemáticos como los griegos. En su lugar desarrollaron una gran cantidad de métodos de cálculo, con la intención de agilizarlos, basados fundamentalmente en el métodos de prueba-y-error. Por ejemplo, obtuvieron tablas de multiplicar, tablas de cuadrados y raíces, tablas de cubos y raíces cúbicas, tablas exponenciales para poder obtener el interés compuesto… encontraron incluso una fórmula para resolver ecuaciones cuadráticas. Sin embargo, al contrario que los griegos, los babilonios y los egipcios no desarrollaron métodos para analizar la corrección de sus resultados.

Hindúes, árabes e italianos
(El desarrollo de los números)
Las mejoras sobre métodos computacionales (de cómputo o cálculo) se sucedieron de modo espaciado a lo largo de siglos en diferentes partes del mundo. La numeración decimal de posición que utilizamos procede del sistema de numeración hindú quienes inventaron el cero, cerca del año 500 y lo denominaron “sunya”, que quiere decir “vacío”. Esto fue un gran avance ya que permitía escribir números como el 507 sin que se confundiese con el 57, ya que la forma utilizada anteriormente para escribir 507 era dejando un espacio en blanco (5 7). Este símbolo de la nada fue recogido por los árabes hacia el s. VIII, quienes lo denominaron “céfer”, que también quiere decir “vacío”. De “céfer” derivan tanto “cero” como “cifra”.
Recordemos que la numeración romana, utilizada entonces en occidente, no es posicional (1 es I, 10 es X y 100 es C). Por ello para efectuar las operaciones aritméticas, los griegos, los etruscos y los romanos no utilizaron sus cifras, sino ábacos (que significa “bandeja, mesa o tablilla”). Las piedras utilizadas se llamaban “cálculos” y se parecían mucho a las piedras que aparecen a veces en los riñones y que llamamos “cálculos renales”.

El término “algoritmo” deriva del nombre del matemático persa Abu Ja’far Mohammed ibn Musa al-Khowarizmi, que vivió alrededor del 825 después de Cristo. La acepción original fue algorism y hacia referencia al proceso de prueba de cálculos realizados utilizando números arábigos, que constituía el tema central del libro de al-Kowarizmi.
Fue un matemático italiano, Leonardo Fibonacci (1170-1240), el primero en escribir sobre los números arábigos en occidente. Tuvo la ocasión de viajar ampliamente por el norte de África. Allí aprendió la numeración árabe y la notación posicional con el cero. Fibonacci escribió un libro (1202, Liber Abaci) que sirvió para introducir los números arábigos en Europa, aunque los romanos aún se mantuvieron en vigor durante tres siglos más.
El matemático italiano Geronimo Cardano (1501-1575), fue el que demostró, en 1545, que las deudas y los fenómenos similares se podían tratar con números negativos. Hasta ese momento, los matemáticos habían creído que todos los números tenían que ser mayores que cero. Pero eso es ya otra historia.