- Introducción general.
- Ajuste de la alimentación para consolas americanas y japoneas:
- Salidas de Audio y Video:
- Doble BIOS:
- Teoría
- Instalación de la doble BIOS en VA0
- Instalación de la doble BIOS en VA1
- Carga de la nueva BIOS
- Tarjeta SD
- Teoría
- Instalación
- Manejo
- Disco Duro:
- Teoría
- Instalación
- Manejo
- ¿Existen mas MODs?
domingo, 30 de junio de 2024
Modificando la DreamCast: Índice
lunes, 24 de junio de 2024
Lógica progamable (IV): Dispositivos PLD básicos: PAL, PLA, GAL
- PLA son las siglas de Programmable Logic Array (Lógico Arreglo Programable, o mejor Lógica Programable en Matriz). Disponen de una matriz de puertas AND y OR programables.
- PAL son las siglas de Programmable Array Logic (Arreglo Lógico Programable). Disponen de una matriz AND programable y una OR fija.
- GAL son las siglas de Gate Array Logic (Matriz Lógica de Puertas). es una PAL que se puede programar varias veces.
Celda básica de una PLA
Estructura de una PAL
miércoles, 22 de febrero de 2023
Los que definieron la ciencia de la Informática (IV) Unix y C
Índices: Historia de la Informática
En esta estrada trato sobre el desarrollo del Unix y la creación de mi muy querido lenguaje C (yo amo el BASIC por que empecé con el, pero no hay mejor lenguaje que el C), que van muy de la mano.
Laboratorios Bell
Laboratorios Bell era una subsidiaria dedicada a la investigación de la principal compañía de telefonía americana, la AT&T. Esta había crecido mucho a principios del XX, sobre todo tras la compra de la Bell Company (empresa creada por el que patentó el teléfono Alexander Graham Bell) para dar servicio de telefonía en todo Estados Unidos. En 1881 se crea American Bell para desarrollar el equipamiento para las empresas de telefonía Bell, en 1907 AT&T crea su propio laboratorio, y en 1925 se fusionan ambos para crearse la Bell Telephone Laboratories.
Como muestra de lo avanzado de sus investigaciones
en sus instalaciones a principios de la década de 1950 se creó el
transistor y también Claude Shannon crea la Teoría de la Información.
El origen del C
En los años 60 se definen dos lenguajes teóricos importantes, por un lado ALGOL (ALGOritmic Language, Lenguaje Algorítmico) que tuvo pocas implementaciones pero influyó mucho en los posteriores, y que derivó directamente en el PASCAL, y usando ideas del ALGOL se deriva el lenguaje CPL (Cambridge Programming Language, aunque posteriormente se le llamó Combined Programming Language, Lenguaje de Programación Combinado), que no llegó nunca a desarrollarse debido a ser demasiado grande, ambicioso y complejo. Ante esto en 1967 Martin Richards de la Universidad de Cambridge, mientras estaba en el MIT, desarrolla el BCPL (Basic Combined Programming Language, Lenguaje de Programación Combinado Básico), aunque fue descrito en una presentación en 1969. Se llegaron a desarrollar hasta 25 implementaciones diferentes, pero nunca fue realmente mas que un lenguaje académico. Tenía dos partes, el compilador creaba un código intermedio, que luego un ejecutor específico para cada ordenador podía ejecutar, esta idea se ha usado en lenguajes como el Java y PASCAL.
Ese mismo año lo utiliza Dennis Ritchie como base para el lenguaje B, ayudado por Ken Thompson, como una simplificación del BCPL, del que Thompson elimina todo lo prescindible para poder usarlo en un mini (eliminando hasta parte del nombre).
El origen del UNIX
En los años 60 el Instituto Tecnológico de Massachusetts, los Laboratorios Bell y General Electric trabajaba intensamente en las comunicaciones, con la idea de desarrollar un ordenador que daría servicio a cientos de terminales por todo el país a través de las líneas telefónicas. Para su funcionamiento se definió un sistema operativo denominado MULTICS (Multiplexed Information and Computing Service, Servicio Multiplexado de Información y Computación). Este sistema correría en grandes Mainframes de las empresas General Electrics y Honeywell participantes en el proyecto. Aunque estuvo mucho tiempo en desarrollo, no llegó a funcionar nunca al ser un producto demasiado avanzado para el momento.
Uno de los programadores de los laboratorios Bell, Ken Thompson, escribió un juego llamado Space Travel (Viaje espacial) para la GE-645 en que estaban desarrollando el MULTICS, pero el juego era lento y sus ejecuciones eran caras (en esa época se miraba el coste de los programas por su tiempo de ejecución para calcular su rentabilidad) ya que salía por 75$ por partida.
Entre 1969 y 1978 dos investigadores que trabajaban en MULTICS obtuvieron permiso para usar una computadora PDP-7 que en eso momento estaba siendo reemplazada por otra mas avanzada y había quedado parada, estos eran Ritchie y Thompson. Usando esta máquina, con ideas de MULTICS crearon el sistema operativo UNIX (Uniplexed Information and Computing Service,
Servicio Uniplexado de Información y Computación), cambiando el multi
por el uni ya que daba servicio a un solo usuario, basando el nombre al
parecer en una idea de Brian Kernighan sobre un comentario de Andrew Tanenbaum
Cuando les dejaron el PDP reescribió el programa en ensamblador ayudado por Ritchie, al tener que desarrollar muchas rutinas para el manejo del sistema, Thompson pensó en crear un nuevo sistema operativo para la máquina. De esta manera Thompson y Ritchie lideraron un grupo de programadores para desarrollar en ensamblador un sistema operativo multitarea, junto a un nuevo sistema de manejo de ficheros y un nuevo intérprete de comandos y algunos programas auxiliares.
Posteriormente el laboratorio les deja un PDP-11/20 con la condición de agregar herramientas de procesamiento de textos (un editor para escribir el programa runoff para formatear e imprimir) a UNIX, por lo que en 1970 ya se habla oficialmente en los laboratorios Bell del sistema operativo UNIX, donde el sistema de procesamiento de textos fue utilizado para procesar las solicitudes de patentes que recibían. Luego se mejoró runoff desarrollando troff, que permitía realizar composición tipográfica.
El 3 de noviembre de 1971 Thomson y Ritchie publicaron "UNIX Programmer's Manual", un manual de programación de UNIX, lo que fué su lanzamiento definitivo.
En 1972 se decide reescribir UNIX usando el Lenguaje de programación C, de esta manera UNIX podría ser fácilmente modificado para funcionar en otras computadoras, y como el código era más sencillo de entender y de manejar aumentó la velocidad de desarrollo de UNIX.
AT&T puso a UNIX a disposición de universidades y empresas (incluyendo al propio gobierno) a través de licencias. Al adquirir una de ellas el Departamento de Computación de la Universidad de California, con sede en Berkeley, en 1975 desarrolló su propia versión de UNIX conocida como Berkeley Software Distribution (BSD). En esta distribución se creó el protocolo TCP/IP que es la base de internet.
Posteriormente el UNIX dejó de ser libre para su uso en universidades, pasando a comercializarse. Se lanzaron muchos desarrollos, Microsoft llega a un acuerdo para portar UNIX a los 286 creando una versión que se denominó XENIX, y para los 386 hay dos empresa que lo comercializan con versiones propias, SCO (que compró el XENIX y desarrolló SCO UNix y UnixWare, hoy es parte de Caldera Systems), y SUN que crea Solaris (hoy parte de Oracle). La IBM también lo comercializa creado AIX, Hewlett-Packard crea por su parte HP-UX y DEC comercializa ULTRIX.
Para intentar poner orden el este caos de versiones incompatibles entre si, se creó el estandar POXIS, que intentaba que hubiera cierta compatibilidad en el núcleo entre las versiones para que se pudieran ejecutar programas desarrollados en cualquiera de ellas en otras, no se consiguió nunca una compatibilidad plena, pero fue un buen avance.
Como ya no se puede usar el código en la enseñanza, el profesor Andrew Tanenbaum decide escribir una versión reducida del mismo para sus clases, lo que dio origen al MINIX. Uno de los usuarios de MINIX, Linus Torvalds, descontento con lo que permitía decide ampliarlo, creando otro sistema operativo denominado LINUX, del que posteriormente deriva a su vez Android. Por su parte, Apple derivó su MAC OS X y posteriores como macOS, iOS, iPadOS, tvOS o watchOS a partir del BSD (realmente parten de su anterior NeXTSTEP que usa el nucleo de Mach y partes del BSD).
De esta manera la familia del UNIX actualmente está compuesta por muchas variantes directas o indirectas, además de ser la base de algunas de las ideas del CP/M, que a su vez es la inspiración del MS/DOS.
Si quieres usar un UNIX hoy día tienes varias opciones (mejorada la lista con adicciones):
- UNIX de código libre (cuidado que no todas las versiones de estos productos lo son):
- Variantes de LINUX (hay demasiadas)
- Variantes de BSD (FreeBSD, Dragonfly BSD, NetBSD, OpenBSD)
- MINIX (tiene versiones 1, 2 y 3)
- Variantes libres de Solaris (OpenSOLARIS, Nexenta OS, Illumos, SchilliX, BeleniX).
- Coherent, un clon del Unix muy sencillo, las primeras versiones eran de código propietario, pero desde 2015 pasó a código libre.
- UNIX de código propietario:
- OpenServer (basado en Xenix y no abierto a pesar de su nombre)
- Solaris en sus versiones comerciales (sin el Open delante)
- AIX y z/OS de IBM
- HP-UX.
- Silicon Graphics IRIX
- UnixWare de Univel (hoy parte de SCO-Caldera)
- Ultix de DEC para alguna de sus máquinas
- Amiga Unix. Versión para el Commodore Amiga 3000 del Unix System V de AT&T, poco usado ya que no incluía la posibilidad de ejecutar programas desarrollados para otros sistemas, pero muy apreciado por sus pocos usuarios al incluir parte de las fuentes, por lo que se podía modificar.
- Atari System V. Versión para el Atari TT030, intento de crear una estación de trabajo que no funcionó ya que tras sacar el ordenador y anunciarlo, tardaron dos años en comercializar el Unix.
- Una lista mas extensa se puede consultar en la Wikipedia (en inglés). Pulsa aquí para verla
- Variantes de código propietario (aunque tienen partes de código abierto, de estas solo verás el interface gráfico que hay por encima):
- MAC OS X y sus variantes para teléfonos, tabletas TV
- Android
- Otros desarrollos basados en POSIX:
- BeOS no está basado en Unix, pero tiene cierta compatibilidad POSIX y el interface de la línea de comandos está basado en Bash.
- QNX
Hay mas versiones de UNIX de múltiples fabricantes, solo he mencionado las mas conocidas, y si incluimos sistemas que han usado parte de POSIX en su núcleo se amplia bastante la lista.
martes, 20 de septiembre de 2022
Cómo escribir juegos para el ZX Spectrum. Apendice C
APENDICE C
Este apéndice tampoco forma parte del documento original, es un añadido para explicar como se pueden probar los programas que se describen con otro sistema alternativo más integrado, que permite programar, compilar y probar los programas directamente, más sencillo que el descrito en el apéndice B.
Se basa en usar como editor de texto ConText, que además de editar permite lanzar programas externos, lo que usaremos para compilar con pasmo y ejecutar con Spectaculator. Aquí os pongo un enlace a un archivo ZIP que contiene todo lo necesario. Si no funcionara aquí os dejo otro enlace de descarga.
Dentro del ficho ZIP encontramos instrucciones para su instalación, pero os las incluyo aquí de todas formas. Hay tres programas en el fichero, hay que instalar el editor pero los otros dos no requieren instalación:
- ConText: Este será el editor de textos que usaremos para introducir los programas
- Pasmo: Este es el ensamblador para convertir el ensamblador en Código Máquina del Z80
- Spectaculator El emulador del Spectrum que usaremos para ejecutar, sencillo y práctico.
El primer paso es descomprimir el ZIP en un directorio y mover cosas a este o a otro, por ejemplo, yo usaré C:\Spectrum para todo, pero tu elije los que desees, al descomprimir crea una nueva carpeta, en su interior encontramos los tres programas y dos PDF de ayuda para su instalación, uno en inglés y otro en español. Seguiremos los pasos descritos en el fichero
ES - CREA_UN_ENTORNO_INTEGRADO_ENSAMBLADOR_SPECTRUM_ES.pdf
que resumo aquí:
- Vamos a la carpeta EDITOR_ConTEXT_WIN y ejecutamos el programa Instalar_ConTEXTv0_986.exe instalaremos dando siguiente a todas las pantallas sin preocuparnos de más. Se abrirá ConText. En options - Environement abajo está el idioma del entorno, puedes cambiarlo a español (AR) para poder seguir mejor el documento
- Asociamos los ficheros .ASM con el editor
- Copiamos la carpeta COMPILADOR_PASMO_WIN a C:\Spectrum\Pasmo
- Copiamos la carpeta EMULADOR_SPECTACULATOR_WIN a C:\Spectrum\Spectaculator
- Configurar ConTEXT para usar ASM con los programas externos
- Asociar Pasmo a la tecla F9, puede probarlo con cualquier programa ASM (si abres el fichero de ejemplo incluido con Pasmo llamado programa.asm, debes añadir al final una línea con el texto END 32768). Al pulsar F9 debe compilar el programa, y debe aparecer un mensaje de Ejecución Finalizada o mensajes de error si los hay.
- Asociar Spectaculator a la tecla F10 (los parámetros no tienen espacio entre p y \%F). Podemos ejecutar con F10, si nos aparece una nueva pantalla para elegir entre tres opciones debemos quitar el check de la parte inferior y pulsar cualquier opción. Al cerrar el programa si aparece una nueva pantalla le debemos desmarcar el check para que no pregunte cada vez. Si estamos usando el programa de pruebas de pasmo aparece una letra o en la pantalla, la podemos mover usando las teclas o-p-q-a.
jueves, 23 de junio de 2022
Los que definieron la ciencia de la Informática (III)
Índices: Historia de la Informática
Edsger Dijkstra
|
|
| Edsger Dijkstra poco antes de fallecer en 2002 (fuente: Wikipedia) |
Edsger Wybe Dijkstra nació en Róterdam en 1930 y falleció en 2002. De pequeño quería ser abogado, pero finalmente estudió física. Sus primeros trabajos fueron en 1952 en el Mathematisch Centrum de Ámsterdam, colaborando en la construcción de un ordenador, principalmente desarrolló el software para una máquina que todavía estaba a medio construir, demostrando que la programación metódica y los sistemas formales producen buenos programas. Aquí desarrolló un compilador de ALGOL con el que fijó muchos conceptos de la programación estructurada.
Pasó en 1962 como profesor de matemáticas a la Universidad Tecnológica de Eindhoven, ya que no tenía departamento separado para informática. No fue una etapa muy productiva por las limitaciones del departamento, pero creó el sistema operativo "THE operating system", que introdujo el uso de la memoria virtual paginada.
En 1973 pasó a trabajar como el único investigador en la empresa Burroughs Corporation, empresa norteamericana, pero el siguió trabajando desde su casa en Holanda con visitas ocasionales a las sedes de la empresa, compaginándolo con un solo día en la universidad, donde creó el famoso "Club de los Martes por la Tarde", donde discutían los colegas los trabajos científicos. En la Burroughs, con total libertad para trabajar en lo que quisiera, escribió más de 500 artículos.
En 1984 aceptó una cátedra en la Universidad de Texas en Austin, donde siguió escribiendo numerosos artículos, algunos muy famosos como el que habla del GOTO, y continuó con el club de los martes. Se retiró en 1999, regresó a Holanda donde falleció de un cáncer en 2002.
Contribuciones
La lista es muy larga, solo mencionaré las más conocidas. Uno de sus temas de estudio fue la programación concurrente, escribió el primer artículo científico sobre el tema en 1965. Entre sus contribuciones están el algoritmo del banquero y la idea de los semáforos. Menos conocido, pero también importante, es el tema de la auto estabilización en sistemas concurrentes.
En teoría de grafos definió lo que se conoce como "Algoritmo de Dijkstra" con la solución del problema del camino más corto, usado por ejemplo en los programas de mapas para calcular las mejores rutas para llegar desde un origen a un destino.
Definió la notación polaca inversa y el algoritmo "Shunting Yard" para analizar sintácticamente expresiones en ella.
El sistema operativo THE multiprogramming system, donde usó muchas ideas que se mantienen en los actuales.
Pero quizá su mejor contribución fue sobre la escritura de programas y la verificación formal. Definió el sistema de derivación de programas, se definen primero las bases matemáticas del algoritmo a usar, con su pre y post condición, y luego se desarrolla a partir de este el programa y las pruebas conjuntamente. Sus contribuciones al desarrollo de los lenguajes, comenzando con su compilador de Algol, donde potenció el manejo de funciones y de variables locales, sentando en sus artículos las bases de la moderna programación estructurada.
Polémicas
De carácter difícil, siempre fue muy polémico. No incluía casi referencias a otros trabajos en sus escritos alegando que muchas veces no existían. Tampoco era amante de usar ordenadores para todo, de igual manera a como hacía sus programas primero sobre papel y luego transcribiéndolos, prefería escribir todos sus artículos a mano, no usaba apenas el correo electrónico, no tenía televisión ni teléfono móvil, aunque era apasionado de los conciertos de música clásica y tocaba el piano.
Es muy conocida su polémica sobre la sentencia GOTO y el código espagueti, pero no todo lo que se dice es totalmente cierto. El escribió un artículo hablando del mal uso que se hacía del GOTO y de la ventaja de cambiarlo por funciones, se lo envió a su amigo Niklaus Wirth para que lo publicara en la revista que dirigía, pero este lo cambió pasando a tener como título "Go To Statement Considered Harmful" (La sentencia Goto considerada perjudicial), añadiendo la famosa frase "el BASIC deforma la mente". Cuando leyó lo publicado no se enfadó con su amigo, que lo conocía bien.
C. A. R. Hoare
|
|
| Charles Hoare (Fuente: Wikipedia) |
Charles Antony Richard Hoare nació en Sri Lanka en 1934, de nacionalidad británica. Estudió filosofía en Oxford, donde se enamoró de la lógica matemática. Luego sirvió en la armada hasta 1956. Estudió luego matemáticas en la Universidad Estatal de Moscú, y en 1960 regresó a Inglaterra, donde entró a trabajar en la empresa Elliott Brothers, desarrollando el primer compilador comercial para el lenguaje ALGOL. Intentó desarrollar un sistema operativo, que no funcionó nunca, y dejó el mundo de la empresa pasando en 1968 a la universidad. Tras retirarse como profesor, le ofrecieron un puesto de investigación en Microsoft.
Buscando una manera de realizar búsquedas de palabras en los diccionarios, desarrolló en 1960 el algoritmo de ordenación QuickShort, el mejor algoritmo con diferencia, nunca superado a pesar de los años que tiene, usando un algoritmo del tipo "divide y vencerás".
Para los que hayan estudiado la carrera de informática, una de las asignaturas es sobre los sistemas formales de desarrollo de la programación, que se basa en la conocida como "Lógica de Hoare", que desarrolló en 1969 a partir de un trabajo anterior de Robert Floyd, definió la Verificación Formal usando el triplete “{Q} S {R}” (Q=Precondición, S=Algoritmo, R=Postcondición), base del desarrollo de programas correctos.
Menos conocido es el lenguaje formal CSP (Comunicación de Procesos Secuenciales), un modelo de programación de sistemas concurrentes basado en la comunicación entre procesos sin recursividad, que es el tercer trabajo más citado en computación de acuerdo con las estadísticas de Citeseer.
En su compilador de ALGOL incorporó el puntero nulo (aunque luego se arrepintió públicamente de haberlo hecho en el 2009), lo que ha dado muchos quebraderos de cabeza a los programadores por no usar el ISNULL adecuadamente.
Niklaus Wirth
|
|
| Niklaus Wirth (Fuente: wikipedia) |
Niklaus Wirth nació en Suiza en 1934. Se graduó en Ingeniería Electrónica en la Escuela Politécnica Federal de Zúrich (ETH). Estudió un post-master en 1960 en la Universidad Laval de Canadá. En 1963 obtiene el Doctorado en la Universidad de California, Berkeley. Siempre relacionado con la docencia, fue profesor en la Universidad de Stanford entre 1963 a 1967, luego pasó a la ETH en Suiza, universidad donde tomó dos años sabáticos para acudir al Xerox PARC en California.
Wirth puede que sea la persona que más ha influido en el diseño de los lenguajes de programación, fue el jefe de diseño de los lenguajes de programación Euler, Algol W, Pascal (solo por esto ya merece ser recordado, heredero el ALGOL, tuvo una enorme influencia en el diseño de los lenguajes bien estructurados y de los compiladores, inspiración directa a muchos otros lenguajes), Modula, Modula-2 y Oberon, y en el equipo que diseño los sistemas operativos Lilith y Oberon, y del hardware para el Lola.
Tiene varios textos que son básicos en la ciencia informática, el libro "The Pascal User Manual and Report" (Pascal, manual de uso e informes", escrito junto con Kathleen Jensen, fue la base para muchos esfuerzos de implementación de lenguajes posteriores, Su artículo "Program development by stepwise refinement" (desarrollo de programas por refinamiento sucesivo) sentó las bases de un buen sistema de desarrollo de programas. Y por supuesto su famoso libro "Algoritmos + Estructuras de datos = Programas", básico para aprender a programar.
Tiene una frase memorable que se conoce como la Ley de Wirth, "El software se ralentiza más deprisa de lo que se acelera el hardware", el ejemplo principal es que los ordenadores tardan lo mismo en arrancar hoy que hace unos años, a pesar del aumento de velocidad de los procesadores.
Y por supuesto la ya mencionada amistad con Dijkstra y los cambios que incluía en los artículos que este le remitía para su publicación como director de las publicaciones informáticas de la ETH.
Donald Knuth
|
|
| Donald Knuth (fuente: Wikipedia) |
Donald Ervin Knuth nació en Milwaukee en 1938. Estudió física en universidad de Cleveland, allí tuvo acceso a un IBM 650, que se programaba en ensamblador, pero como no le gustaba reescribió el código del programa ensamblador. Con este realizó un programa para ayudar al equipo de baloncesto, definió una serie de características y asignó unos puntos a cada jugador, calculando la probabilidad de puntuar, este sistema mejorado se sigue usando hoy día, sobre todo en las casas de apuestas. Cambió la física por las matemáticas, recibió dos títulos, y se doctoró en 1963 en el Caltech (California Institute of Technology), donde pasó a ser profesor. En el 68 pasó a Princeton para trabajar en criptografía, y desde el 69 trabaja en la universidad de Stanford.
Comenzó a escribir un manual sobre programación en ensamblador, que rápidamente se convirtió en un libro pues necesitaba ampliar con muchos temas de base sobre programación, luego se dio cuenta que necesitaría desarrollarlo en 6 libros, y finalmente han sido siete, aunque los últimos divididos en varias partes realmente. En 1968 publicó el primero volumen de "El arte de programar ordenadores", en 1969 el segundo, en 1973 el tercero, en 1981 revisó los 3 primeros, ha publicado por secciones en fascículos los capítulos del libro cuarto y parte del quinto, en 2005 publicó un anexo al primero, en 2011 se publicó el libro 4A, además de revisar continuamente los anteriores. A pesar del ritmo que lleva, espera poder publicar el libro 4B, 4C, 4D y los restantes algún día. La serie completa constaría de estos libros:
- Volumen 1 – Fundamental Algorithms (Algoritmos fundamentales)
- Capítulo 1 – Basic concepts (conceptos básicos)
- Capítulo 2 – Information structures (estructuras de datos)
- Volumen 2 – Seminumerical Algorithms (Algoritmos semi-numéricos)
- Capítulo 3 – Random numbers (Números aleatorios)
- Capítulo 4 – Arithmetic (Artimética)
- Volumen 3 – Sorting and Searching (Ordenación y búsqueda)
- Capítulo 5 – Sorting (ordenación)
- Capítulo 6 – Searching (búsqueda)
- Volumen 4 – Combinatorial Algorithms (Algoritmos combinatorios)
- Valumen 4A: Capítulo 7 – Combinatorial searching (búsqueda combinatoria)
- Volumen 4B: Capítulo 7 – Combinatorial searching (búsqueda combinatoria, continuación)
- Volumen 4C y 4D Capítulo 8 – Recursion (recursividad)
- Volumen 5 – Syntactic Algorithms (algoritmos sintácticos)
- Capítulo 9 – Lexical scanning (Análisis léxico, incluye búsqueda de cadenas y compresión)
- Capítulo 10 – Parsing techniques (Técnicas de análisis)
- Volumen 6 – The Theory of Context-Free Languages (Teoría de los lenguajes libres de contexto)
- Volumen 7 – Compiler Techniques (Técnicas de compilación)
Además de sentar las bases de muchos algoritmos y realizar su análisis, su otra gran aportación es TEX, un estándar para la publicación de libros y artículos, separando la redacción del texto de su posterior impresión, una maravilla en el desarrollo de un sistema de impresión completamente independiente que es ampliamente utilizado.
Ofrecía una recompensa de 2,56 dólares por reportar erratas en sus libros (256 centavos son 1 dólar hexadecimal), envió muchos cheques que los afortunados receptores casi nunca cobraron, ya que tiene más valor el propio cheque firmado para el que lo recibe, pero tras tantos años parece ha dejado de hacerlo.
jueves, 16 de junio de 2022
Los que definieron la ciencia de la Informática (II)
Índices: Historia de la Informática
Grace Brewster Murray, de casada Grace Murray Hopper nació en Nueva York en 1906, y falleció en Arlington en 1992. Estudió matemáticas, doctorándose en Yale en 1934. Durante la segunda guerra mundial decidió incorporarse a la Armada, siguiendo los pasos de su bisabuelo que fué almirante, por lo que en 1943 pasó por la academia naval obteniendo el grado de teniente. Fue destinada a trabajar en Harvard para el proyecto de computación que dirigía el comandante Howard Aiken para la construcción de la Mark I.
Tras la Segunda Guerra Mundial pasó a la reserva, pero siguió trabajando en la Mark I, para la que diseñó un programa para la gestión de la contabilidad, ya que en eso momento el ordenador estaba siendo usado por una compañía de seguros.
En 1949 pasó a la empresa Eckert-Mauchly Corporation en Filadelfia, más tarde llamada Univac y luego Remington Rand, donde trabajó en el desarrollo de las computadoras BINAC y en la UNIVAC I. Permaneció en la empresa hasta su retiro en 1971, y tras retirase de la armada en 1973 se incorporó como asesora en Digital Equipment Corporation, fue muy activa en foros industriales, dando unas 200 conferencias por año y participando en programas educativos hasta su muerte. Era muy popular, ya que en sus charlas siempre eran divertidas e incluían sus famosas historias de guerra, contando sus batallitas con los ordenadores.
Fue la primera mujer en ostentar un alto rango en la armada. Quiso retirarse varias veces, pero la armada no se lo permitió, permaneció en la reserva hasta finales de 1966 cuando tuvo que retirarse con el grado de Capitán de fragata, pero la Armada la volvió a llamar en 1967 para estandarizara los lenguajes de alto nivel que usaban. Se retiró de nuevo en 1971 pero se le pidió volver de nuevo en 1972. Fue ascendida a Capitán de navío en 1973. En 1983 ascendió a Contraalmirante y en 1986 se retiró de la Armada de manera definitiva. Fue enterrada con todos los honores militares en el cementerio Nacional de Arlington.
Lenguajes de programación
En la Univac I fue donde realizó sus mayores contribuciones a la ciencia de la informática y sentó las bases de la programación. Intentó convencerles de desarrollar un compilador que usara palabras en inglés, pero le dijeron que no era posible, por lo que en 1952 desarrolló el A-0 que fue el primer compilador operativo de la historia, usaba algunas órdenes en inglés, pero era más un linker que permitía llamadas a funciones estándar. Lo evolucionó en 1957 con el lenguaje B-0 o FLOW-MATIC, primer compilador para procesamiento de datos que usaba órdenes en inglés, que utilizó para diseñar programas relacionados con el cálculo de nóminas.
Poco después apareció el lenguaje FORTRAN en la IBM, pero ella estaba implicada en un proyecto para el departamento de defensa, el desarrollo de un lenguaje de programación para aplicaciones comerciales con instrucciones en inglés, a partir de sus ideas en B-0 y de otro lenguaje de IBM, el COMTRAN desarrollado por Bob Bemer, similar al FORTRAN pero diseñado para aplicaciones de gestión del que se usó el manejo de las variables (las cláusulas PIC o PICTURE), se desarrolló el estándar del COBOL lanzado en 1959. Su idea fue diseñar un lenguaje completamente independiente de la máquina en que se compilara y ejecutara el programa, lo que consiguió completamente, que incluyera el manejo de ficheros y su entrada/salida, fundamental para las aplicaciones de gestión, lo que era una gran ventaja en ese momento en que cada máquina era completamente diferente a las demás, y el manejo de la E/S era muy específico.
Participó en los primeros comités de estandarización de lenguajes, que concluyeron en los estándar ANSI de 1968 para la sintaxis tanto del COBOL como del FORTRAN.
Mary Allen Wilkes
Mary Allen Wilkes nació en Chicago en 1937, y a fecha de hoy sigue con vida. Quería ser abogada pero sus padres no se lo permitieron, ya que en ese momento era muy difícil para una mujer ejercer. Estudió filosofía, pero un profesor le indujo a cambiar a informática por su mente lógica, por lo que entró en el Instituto de Tecnología de Massachusetts (MIT) en 1959, no tuvo problema para entrar a trabajar con computadoras, ya que tras la segunda guerra mundial era terreno copado por mujeres.
En el MIT se mantuvo hasta 1963. Allí trabajó corrigiendo programas, montó un sistema de reconocimiento de voz, y diseño el sistema operativo LAP (LINC Assembly Program) para el ordenador LINC (Laboratory INstrument Computer), uno de los primeros minis de la historia.
![]() |
| Mary Allen Wilkes con el LINC en el salón de su casa (fuente: mujeresconciencia.com) |
Tras esto dejó la informática, retomó su sueño de infancia, estudió derecho y ha ejercido de abogada hasta su jubilación.
Margaret Hamilton
Margaret Hamilton (Indiana 1936, sigue viva a día de hoy) es la creadora de la Ingeniera del Software como disciplina. Estudió matemáticas y se graduó en 1958. Tras su boda pasó una temporada ejerciendo de profesora, pero pronto se divorció. Entró en el MIT, destacó pronto y la nombraron directora de software del Charles Stark Draper Laboratory.
Allí desarrolló en 1965 el software de navegación que usaron las misiones Apolo en su camino a la Luna, trabajando muchas noches y fines de semana para completar el proyecto, a menudo con su hija pequeña jugando a ser astronauta junto a ella. Aquí sentó las bases de que los requisitos de robustez y tolerancia a fallos eran una prioridad para la seguridad y supervivencia de los astronautas.
| Margaret junto al código fuente del programa de navegación de las misiones Apolo impreso en 11 tomos (Fuente: Wikipedia) |
Posteriormente trabajó en el software para el primer laboratorio espacial de la NASA, el SkyLab. En 1976 crea la empresa Higher Order Software, y en 1986 crea Hamilton Technologies, Inc. en Cambridge, Massachusetts, dode trabajó para desarrollar el paradigma de programación DBTF (Development Before the Fact, desarrollar antes de hacer).
En 2016 recibió la Medalla Presidencial de la Libertad, entregada por Barack Obama, por su trabajo en la NASA durante las misiones Apolo. Es autora de numerosos libros, artículos y ponencias en congresos.
miércoles, 15 de junio de 2022
Los que definieron la ciencia de la Informática (I)
Índices: Historia de la Informática
Alan Turing
![]() |
| Alan Turing (Fuente: biografiasyvidas.com) |
Alan Mathison Turing nació en Londres en 1912, y falleció en 1954. Estudió matemáticas en Inglaterra y en Estados Unidos. En un momento en que no existía ningún ordenador definió teóricamente en 1936 una formalización de los conceptos de algoritmo y de computación en un artículo titulado "Acerca de los números computables", para lo que creó un artificio, una máquina universal teórica denominada máquina de Turing, gracias a este artificio junto a Alonzo Church demostraron que no se puede dar una solución universal al problema de la parada (esto es un tema muy técnico que no voy a explicar aquí). Hoy día se sigue usando la máquina de Turing en el estudio de los autómatas de proceso de lenguajes.
Como matemático teórico, estudió muchos conceptos relacionados con los algoritmos y con la idea de su automatización, y tuvo mucho interés en los códigos cifrados con varios estudios sobre la máquina de cifrado Enigma, la que usaban los alemanes para comunicaciones secretas entre las unidades combatientes y por la marina, que se emitían por telegrafía, por tanto era posible interceptarlas pero no descifrarlas.
| Máquina enigma en uso, se precian los 3 rotores pero no se ve el panel frontal (fuente: Wikipedia) |
En 1939, al poco de iniciarse la segunda guerra mundial, fue llevado a una instalación de la inteligencia militar británica ubicada en Bletchley Park (si se va por la zona visita obligada a la exposición existente). Allí trabajó en el descifrado de mensajes de la máquina Enigma, por lo que junto a su equipo comenzó a intentarlo manualmente, encontraron pautas en los mensajes que aportaron pequeños triunfos, pero muy lejos de un sistema realmente operativo. Ante eso decidió combatir el fuego con el fuego, y diseñó una máquina que pudiera luchar contra la máquina Enigma.
Llamó a su máquina "Bombe" o bomba lógica (una máquina de uso específico para un solo propósito, por tanto no es realmente una computadora), lo abordó usando lo se denomina un algoritmo de fuerza bruta, probar combinaciones hasta acertar. Lo que hacía era a partir de un texto cifrado con la enigma, probar combinaciones de los rotores hasta encontrar un mensaje con sentido, probar combinaciones es rápido, pero había millones de combinaciones posibles (con n rotores diferentes hay (26n.n!) posibilidades, con los habituales 5 rotores nos da 1'4 millones de posibilidades, pero había más elementos para complicar el tema por lo que podía llegar a la asombrosa cifra de 158.962.555.217.826.360.000 posibilidades) por lo que su primer logro fue encontrar una forma de reducir las combinaciones, pero detectar cuando el mensaje tiene sentido era la parte más importante y la más complicada que tuvo que resolver. El primer prototipo estuvo funcionando el 14 de marzo de 1940, y en unos meses estaban funcionando hasta 200 máquinas. Como este trabajo estaba clasificado como secreto militar no se ha conocido hasta hace relativamente poco.
| Bomba lógica expuesta en el museo de Bletchley Park (fuente: Wikipedia) |
Nota: En Bletchley Park había otro equipo diferente que diseñó otra máquina denominada Colossus, diseñada para descifrar los mensajes cifrados usando otra máquina alemana, la Lorenz SZ40/42 que era usada para los mensajes de alto nivel y se transmitían por Teletipo. Diseñada por Tommy Flowers, estuvo operativo en febrero de 1944. Posteriormente la mejoró en la Colossus Mark II que empezó a operar en junio de 1944. Se llegaron a construir diez Colossus.
Tras la guerra Turing continuó con la investigación en computación, diseñó uno de los primeros computadores electrónicos programables digitales en el Laboratorio Nacional de Física del Reino Unido y poco tiempo después construyó otra de las primeras máquinas en la Universidad de Mánchester. Además, fue pionero en temas de Inteligencia Artificial, su idea más conocida es la prueba de Turing, definida en 1950, una forma de análisis del grado de "inteligencia" de un programa de ordenador, cosa inexistente en ese momento.
Aunque su contribución al descifrado de Enigma se dice que acortó la guerra en dos años, ahorrando miles de vidas, pero la sociedad inglesa del momento no era tan avanzada como pensamos. La homosexualidad era delito en ese momento, por lo que en 1952 fue procesado por ese delito, lo que le llevó a una crisis importante, a partir de ese momento publicó muy poco, y acabó suicidándose (aunque hay alguna duda sobre esto) dos años más tarde. En el año 2009 Gordon Brown, primer ministro británico, tras presiones populares se disculpó públicamente en nombre del gobierno británico por «la forma espantosa en que [Turing] había sido tratado». La reina Isabel II le otorgó un indulto póstumo en 2013.
Filmografía recomendada: Hay dos películas que se deben ver sobre el tema, "Enigma" de 2001, que trata sobre el equipo de descifrado de códigos de Bletchley Park, en esta se ven las dificultades que afrontaron aunque no se menciona a Turing y no pretende ser fiel a la historia completamente. La película que si trata sobre Turing es "The imitation Game" (El juego de imitación), que en España fué "Descifrando Enigma" y en Hispanoamérica "El código Enigma" de 2014, habla sobre su vida y su trabajo en Bletchley Park, aunque es un poco exagerada la forma de presentar a Turing y pasa de puntillas por el tema del suicidio. De manera accesoria en "Das Boot" (el submarino) de 1981 se ve de refilón la máquina, y en "U-571" del 2000 deben capturar una máquina Enigma de un submarino alemán junto al libro de claves. En "Una mente maravillosa" de 2001 se habla de descifrado de códigos, aunque no tiene que ver con Turing ni con la Enigma.
Konrad Zuse
![]() |
| Konrad Zuse manejando una de sus Z (fuente: zib.de) |
Konrad Zuse nació en Berlín en 1910 y falleció en 1995, aunque estudió ingeniería es el primero en construir un ordenador moderno. Al final de la segunda guerra mundial los americanos y los rusos estaban en una dura pugna por ser los primeros en llegar a Berlín, y aunque es menos conocido peleaban por ser los que se llevaran a los mejores científicos alemanes. Así a Wernher von Braun se lo llevaron los americanos y a pesar de ser nazi convencido acabó dirigiendo la NASA, pero los rusos se llevaron a sus ingenieros y se adelantaron en la carrera espacial. Al no ser la informática una ciencia conocida, Zuse pasó de puntillas por los libros de historia, y hasta hace muy poco ni se le mencionaba.
Tras sus estudios de ingenieria pasa por la Ford donde destacó como dibujante y diseñador, para acabar trabajando como ingeniero en la Henschel en el diseño de aviones, la tarea más laboriosa era calcular el perfil alar, había que repetir los cálculos una y otra vez para calcular el perfil a lo largo del ala. En esa época solo se disponían del principio de los logaritmos, ya que
, usando tablas de logaritmos y reglas de cálculo (que usaban este principio) se realizaban las multiplicaciones, cansado de esta monótona tarea dejó la empresa y se dedicó a diseñar y construir el primer computador de la historia.
El resultado fue el Z1 que finalizó en 1938. Era una máquina mecánica movida por electricidad, una calculadora con capacidad de programación, que internamente usaba el sistema binario, se programaba usando una unidad de cinta de papel, operaba con datos en memoria y proporcionaba el resultado. Podía sumar, restar, multiplicar y dividir, más hacer una comparación, a un régimen de una operación cada 3 a 6 segundos, pero no llegó a funcionar perfectamente ya que las limitaciones del sistema mecánico lo hacían poco operativo.
![]() |
| Z1 en el salón de la casa de sus padres (fuente: assets.sutori.com) |
No se desalentó, comenzó a trabajar en una versión mejorada denominada Z2, y solicitó fondos al estado para continuar sus investigaciones, pero al no ser del partido Nazi ni ver los dirigentes la utilidad real de la máquina, apenas consiguió financiación, pero siguió adelante. Abandonó su idea inicial de una máquina mecánica que le daba muchos problemas y comenzó a utilizar relés, dejó a medias la Z2 desarrollando la Z3 en 1941, versión ya operativa de la Z1 que funcionaba perfectamente. Lamentablemente los bombardeos de Berlín destruyeron tanto las máquinas como los planos, por lo que tras la guerra tuvo que empezar de cero.
Fundó la primera empresa dedicada a fabricar ordenadores en 1946, la Zuse KG, donde construyó la Z4, que se convirtió en 1950 en la primera computadora en ser comercializada, nuevamente en los libros se habla del Ferranti Mark I y del Univac I como los primeros vendidos, pero el se adelantó medio año vendiendo la máquina a la universidad de Zúrich en Suiza. Se puede ver hoy día una réplica en el museo de Múnich. La máquina era una calculadora binaria que pesaba una tonelada, usaba 2200 relés, disponía de una memoria de 500 palabras 32 bits, disponía de una unidad lectora y grabadora de tarjetas perforadas, pudiendo realizar 11 multiplicaciones por segundo. Se mantuvo en uso hasta 1959.
Le siguieron la Z5 y la Z11 de relés, y en 1955 la Z22 funcionando a válvulas y con memoria de núcleos magnéticos. La Universidad de Ciencias Aplicadas de Karlsruhe (Alemania) tiene una Z22 operativa. La Z23 de 1961 trabajaba ya con transistores.
![]() |
| Z22 expuesta en la universidad de Karlsruhe (fuente: Wikipedia) |
En 1967, la empresa Zuse KG había construido un total de 251 computadoras. Ese mismo año Zuse sugirió que el universo en sí mismo es una retícula de computadoras (lo que se denomina Física computacional), publicando esta hipótesis en su libro Rechnender Raum. Por problemas financieros vendió la empresa a la Siemens y se retiró, dedicándose a su otra afición que era la pintura.
Las programadoras del ENIAC
![]() |
| Vista general del ENIAC (fuente: i0.wp.com) |
En 1943 el ejercito financió la construcción del Electronic Numerical Integrator And Computer o ENIAC (integrador y computador numérico electrónico), diseñado por John W. Mauchly y John Presper Eckert y montado en la universidad de Pensilvania, completada en diciembre de 1945, estuvo operativa en febrero del 1946. Era un ordenador de base decimal de 27 toneladas de peso con 17.500 lámparas y 90.000 componentes adicionales, que requirió de aproximadamente cinco millones de conexiones. Podía ejecutar 5.000 sumas o 360 multiplicaciones por segundo.
Sufrió continuas modificaciones a lo largo de su vida. En 1947 fue trasladado a la base militar de Aberdeen, donde se
usó en secreto hasta 1955 para calcular las trayectorias de los misiles
nucleares.
La máquina estaba compuesta de una memoria principal y una serie de unidades de cálculo, cada unidad podía efectuar unas operaciones, pero había varias unidades de cada tipo. Para programarla se disponía de unos paneles con agujeros, similares a los de las centrales telefónicas de la época, mediante hilos se conectaban las memorias con las entradas y salidas de las unidades, cableando un circuito (posteriormente se reconfiguró para usar programación en memoria).
![]() |
| Programando el ENIAC (Fuente: s3.amazonaws.com) |
Pondré un sencillo ejemplo. Si deseábamos ejecutar la operación consistente en multiplicar las posiciones de memoria 1 y 2, luego dividir el resultado con la posición de memoria 3, guardando el resultado en la posición de memoria 4, lo que hoy día sería M4 = (M1 + M2) / M3. Para realizarlo usaremos estas dos unidades:
- Unidad de multiplicación A: Con las entradas 1 y 2 y una salida
- Unidad de división B: con dos entradas para dividendo y divisor, y salidas para Cociente y Resto
Se cableaba así:
- Memoria 1 a la entrada 1 del multiplicador A
- Memoria 2 a la entrada 2 del multiplicador A
- Salida del multiplicador A a la entrada dividendo del divisor B
- Memoria 3 a la entrada divisor del divisor B
- Salida de cociente del divisor B a la memoria 4
Pero además hay que considerar que hasta que no ha concluido la operación anterior el resultado no aparece en su salida, por lo que hay que sincronizar las unidades para que las operaciones se ejecuten en orden, y evitar temas como la división por cero, control de desbordamientos, manejo de decimales, unos cuantos detalles, y pensar que no planteo más que un pequeño programa, sin considerar temas como saltos condicionales o bucles. Además, solo si tenías suerte no se fundía ninguna lámpara a mitad por lo que el control de errores era crítico. En la siguiente imagen se ve un programa real, tiene un aire similar a la programación ladder o por escalera de los PLC modernos.
![]() |
| Programa real para el ENIAC (fuente: computerhistory.org) |
Para manejar todo esto se creó un equipo de 6 mujeres, las denominadas "Programadoras del ENIAC", que aparecen en las fotografías de la época. No eran modelos para las fotografías, eras matemáticas e ingenieras que se dedicaban a programar y atender la máquina. Como el nivel de secretismo era muy alto, el acceso al ordenador estaba muy limitado, por lo que primero preparaban los programas teóricos, luego preparaban los paneles, y cuando tenían el acceso los llevaban a la máquina, que ponían a ejecutar el programa, se verificaba que el "programa" era correcto, y se lanzaba el cálculo programado, que podía tardar unos minutos o varias horas.
Las chicas del ENIAC desarrollaron las bases de la programación de los ordenadores, pues no solo programaron, sino que crearon la primera biblioteca de rutinas y las primeras aplicaciones de software, incluso he leído que una de ellas diseñó la primera rutina de ordenación (aunque esto no lo tengo confirmado, y como sus programas eran secretos militares no hay demasiada información).
- Betty Snyder Holberton (1917-2001) Tras el ENIAC participó después en el UNIVAC I junto a Grace Hopper (que tendrá su propia entrada). Contribuyó en el lenguaje C-10 y participó en el desarrollo de los primeros estándares para COBOL y FORTRAN. Escribió el primer paquete de análisis estadístico que fue utilizado en el censo de los EE.UU. En 1997 recibió el premio Ada Lovelace.
- Betty Jean Jennings Bartik (1924-2011) formó parte del equipo que transformó el ENIAC en un ordenador con programas almacenados. Después de trabajar con BINAC y UNIVAC I, se convirtió en editora para Publicaciones Auerbach, pionera en tecnologías de la información. En 1981 ingresó en Data Decisions. En 2008 le fue concedido el premio del Computer History Museum. La Northwest Missouri State University tiene un museo dedicado a ella.
- Ruth Lichterman Teitelbaum (1924-1986) se trasladó en 1947 a Aberdeen junto al ENIAC, donde enseñó a la siguiente generación de programadoras.
- Kathleen McNulty Mauchly Antonelli (1921-2006) se trasladó en 1947 con el ENIAC a la base militar de Aberdeen. En 1948 se casó con John W. Mauchly.
- Frances Bilas Spence (1922-2012) se casó en 1947 con un ingeniero electrónico de la armada que trabajó en el ENIAC. Dejó su puesto para cuidar a su familia.
- Marlyn Wescoff Meltzer (1922-2008) renunció a su puesto antes del traslado del ENIAC a Aberdeen para contraer matrimonio.








