Entradas etiquetadas como ‘informática’
Una entrevista sobre informática en 1974

Börje Langefors
Lo curioso de esta entrevista que traigo hoy aquí es que, si hubiera sido realizada antes de ayer, sería totalmente creíble, válida y vigente. Con la excepción de algunos pequeños detalles y comentarios que apuntan claramente a un tiempo pasado, la verdad es que las inquietudes y los retos de aquellos expertos no eran muy distintas a lo que hoy mismo nos podemos encontrar, como es el caso de la seguridad informática, la educación en las aulas, la desaparición de puestos de trabajo humanos en favor de las máquinas o el monopolio de ciertas empresas.
Por otro lado, resulta asaz curioso comprobar la importancia que adquirían en aquel entonces (hace treinta y siete años) los avances en la comunicación con los ordenadores (el paso de tarjetas perforadas a teclados en terminales), el almacenamiento de datos en unidades de memoria cada vez más rápidas y de mayor capacidad o, también, la reducción drástica del tamaño de los procesadores que, efectivamente, implicaba una disminución del volumen de los propios equipos.
Una entrevista retro sin desperdicio alguno que paso a transcribir de forma íntegra.
¿Qué es un ordenador?
Intentaré no dar una definición demasiado estricta. Comúnmente se define como una máquina que tiene cierta capacidad de cálculo, combinada con la posibilidad de almacenar datos o programas, y que es capaz de modificar sus propios programas. Lo importante es que su memoria pueda almacenar tanto hechos relativos al mundo exterior como instrucciones.
¿Existen diferentes clases de ordenadores?
En un tiempo se decía que determinados ordenadores trataban los datos relativos a las empresas y que otros realizaban el trabajo científico. Hasta cierto punto esto ocurre todavía; pero, en la actualidad, estamos más interesados en la distinción entre los ordenadores que poseen gran capacidad de tratamiento de datos, ya sean industriales, comerciales o científicos, y los pequeños ordenadores.
Hoy día los miniordenadores tienen una extraordinaria capacidad de cálculo en cualquier campo. Prácticamente pueden hacerlo todo. Hasta cierto punto son más universales, porque se les pueden añadir equipos externos (periféricos) que les permiten adaptarse a tareas muy diversas.
Existe una tercera categoría: la de los microordenadores, cuya unidad central de cálculo es tan reducida que la podríamos colocar en la uña del dedo pulgar; tienen la ventaja de que se puede introducir directamente esa unidad central en una máquina o en un instrumento, y se emplean para realizar cálculos especializados en el interior de la máquina.
Teníamos la impresión de que había dos tipos de ordenadores: los que calculan y los que proceden por analogía.
En efecto. Cuando hablamos de ordenadores, solemos pensar en los numéricos o digitales, que realizan cálculos exactos como las máquinas de calcular mecánicas de oficina. Pero, en determinados casos, utilizamos ordenadores analógicos, los cuales, en lugar de hacer cálculos, realizan una especie de modelo eléctrico del fenómeno que se desea estudiar. Pero estos ordenadores son de empleo más limitado. Ciertos modelos reales parecen difíciles de traducir en circuitos eléctricos.
¿Cuáles son las principales técnicas, recientemente introducidas, que se emplean en el campo de los ordenadores?
Desde el punto de vista tecnológico, físico, las principales innovaciones afectan a los equipos que reciben los datos procedentes de los utilizadores del ordenador, así como a los equipos que transmiten a estos los datos obtenidos por aquel o los resultados de los cálculos efectuados. Estos equipos deben traducir el lenguaje comprensible para los humanos en un lenguaje comprensible para la máquina, y viceversa.
Una innovación reciente, muy interesante por cierto, consiste en reemplazar las técnicas de entrada y salida tradicionales (fichas perforadas, etc.) por terminales unidos directamente al ordenador, de forma que el utilizador puede enviar sus mensajes al ordenador sólo con pulsar un teclado parecido al de una máquina de escribir, y el ordenador puede contestarle al instante, darle las soluciones o decirle que falta tal o cual dato.

Trabajadora en un centro de cálculo
Aunque esto parezca solamente un pequeño cambio técnico, supone una gran ventaja: para utilizar un ordenador era indispensable, hasta hace poco, presentar las preguntas de manera estrictamente lógica; una simple falta de ortografía podía retrasar el proceso todo un día, hasta que se averiguaba que el ordenador no había comprendido el mensaje. Ahora es posible preguntar al ordenador qué sabe de un asunto concreto, y éste puede responder preguntando sobre qué materia se le cuestiona; de esta forma, al no ser ya necesario conocer el lenguaje específico del ordenador, se pueden sostener con él conversaciones más parecidas a las que tenemos entre nosotros los humanos.
Existen también varias técnicas nuevas para almacenar datos en las memorias rápidas, y es posible utilizar una especie de depósitos suplementarios de datos cuando estos tienen que almacenarse en cantidades muy grandes. Esas memorias suplementarias son más lentas, pero tienen mayor capacidad. Se trata de algo similar a la organización de nuestro cerebro, que puede encontrar rápidamente ciertos datos, pero que para otros necesita más tiempo.
¿En qué medida los ordenadores pueden modificar las actuales formas de trabajo?
Creo que el ordenador tiene mucho que ofrecernos en este campo. Cuando hay que resolver un problema complicado, si usted es un ingeniero, intenta aplicar métodos matemáticos para su resolución. Hay personas que no son aptas para utilizar el pensamiento abstracto y, en consecuencia, se ven excluidas de ciertos trabajos.
Pero ahora parece que puede usted aprender a solucionar de manera práctica determinadas categorías de problemas. Por ejemplo: hemos utilizado ordenadores analógicos para resolver un problema de vibraciones mecánicas en los aviones, que es un asunto bastante matemático. Me di cuenta de que algunos de mis ayudantes podían tratar ese problema; aunque no tenían una preparación matemática suficiente habían adquirido bastante experiencia en el trabajo con modelos analógicos o como radioaficionados.
Un ordenador moderno, con sus terminales, puede enseñar a las personas a resolver problemas especiales utilizando las posibilidades de diálogo de las que está dotado.
Actualmente se plantea el problema de que gran número de trabajadores pueden ser reemplazados por máquinas automáticas, por controladores automáticos. Esto daría origen a un aumento considerable del número de parados…
Es un problema muy importante. Cuando tenemos la posibilidad de automatizar nuevas operaciones, determinar si queremos utilizar esa posibilidad o no es una decisión de carácter político. Pero si no detenemos el progreso, si queremos aprovecharlo, ello significa que podemos producir una misma cantidad de artículos con la mitad de mano de obra. Entonces podemos decidir o bien producir más objetos con la misma cantidad de trabajo humano (entonces no habrá paro, pero podemos destruir la Tierra por un exceso de producción y, en consecuencia, de detritos), o bien que no queremos más objetos, que preferimos detener el crecimiento.
Si continuamos automatizando, dispondremos progresivamente de más tiempo libre para dedicarlo a otras cosas; para el ocio, por ejemplo.
¿Cuál es la utilidad de los ordenadores en las empresas, y cuál es el resultado de su introducción y su empleo?
Es una pregunta muy difícil de responder. Durante muchos años hemos vendido demasiados ordenadores. Primero introdujimos los ordenadores en aplicaciones que podríamos llamar ordinarias: contabilidad, salarios, producción… Luego evolucionamos en direcciones más complejas. Creo que cometimos un error fundamental al pensar que las tareas cotidianas tenían poca importancia. Eran comunes únicamente desde un punto de vista matemático, o tecnológico.

Lectora de discos
Debido a este error encontramos muchas dificultades que no estaban previstas. En primer lugar, los ordenadores eran demasiado numerosos para las aplicaciones simples o fragmentarias a que podían adaptarse; el trabajo humano que ahorraban no compensaba los gastos de los ordenadores y de los especialistas. Más tarde, cuando bajaron los precios, tratar las tareas cotidianas mediante ordenadores empezó a ser ventajoso, hasta tal punto, que la mayor parte de las grandes empresas no podrían existir sin los ordenadores.
Entonces se advirtió que las pequeñas aplicaciones separadas resultarían mucho más económicas si se las podía integrar, coordinándolas. El ordenador podría utilizar unos mismos datos para diversas aplicaciones.
En el aspecto de la integración se consiguieron economías mucho mayores. Pero cuando, al principio, se intentó integrar distintos trabajos, se descubrió que no daba resultado porque las diferentes tareas no eran compatibles entre sí. Tuvimos que pasar unos años modificando las distintas tareas para poder integrar diversas aplicaciones; se crearon grandes sistemas integrados: control de producción, control de material almacenado, contabilidad, salarios… Y luego se descubrió que los sistemas integrados no eran viables. Pero eso permaneció en secreto, porque los que habían dirigido el desarrollo de tales proyectos, muy costosos, no podían confesar tranquilamente que la idea había sido un fracaso absoluto. De modo que empezaron a desintegrar discretamente los sistemas integrados para poderlos conservar en vida.
Esto ocurrió por dos razones fundamentales: la primera es que los sistemas no se estructuraron con la suficiente profundidad y claridad; un sistema puede seguir funcionando si el tiempo que se necesita para introducir un cambio en el mismo es, por término medio, más corto que el tiempo que separa dos necesidades de cambio. Cuanto mayor sea un sistema, y peor estructurado esté, más aumenta el tiempo necesario para esas modificaciones, y si no se es capaz de hacer todos los cambios necesarios antes de que se requiera otra modificación, todo se va al agua.
La segunda razón es que no se tuvieron en consideración las necesidades reales de los utilizadores. Los sistemas muy complicados no se pueden concebir de manera perfecta, porque se carece de experiencia. Por esta razón, cualquier sistema complejo debe tener obligatoriamente algunos defectos y, en consecuencia, dependerá por completo de un personal bien informado y familiarizado con él. Esta es la única forma de que realmente pueda llegar a funcionar. No hace falta que esas personas saboteen el trabajo, basta con que ayuden al sistema para que provoquen la catástrofe y el fracaso.
¿Nos permitirá la informática desarrollar métodos y aproximaciones de decisiones perfectas y lógicas en las empresas, tanto en el plano técnico como en el socioeconómico?
Creo que hace algunos años, cuando empecé a enseñar en la Universidad de Estocolmo, ya consideraba esta pregunta cuestión de importancia capital para la investigación. Pensaba que había una posibilidad de desarrollar sistemas informáticos mayores y más integrados y, al mismo tiempo, desarrollar un mejor método teórico de optimización matemática; esa acción conjugada podría conducir a grandes sistemas integrados del todo y ampliamente optimizados de dirección y de control de empresas.
Empecé por preguntarme si era factible. Pronto me di cuenta de que no lo era. Y existen varias razones: una, quizá la principal, es que cuando llegas a las decisiones más generales para una organización cualquiera, no tienen un fin único, un solo objetivo. Por ejemplo, si el director de una empresa me dice que su único objetivo es la búsqueda del máximo aprovechamiento, que es lo que muchas personas dicen todavía, esto me sitúa inmediatamente ante dos objetivos: aprovechamiento actual y aprovechamiento futuro. Y en la mayoría de los casos ello es contradictorio, ya que los caminos que se han de seguir no son los mismos para corto, medio o largo plazo. De modo que no puedes utilizar modelos matemáticos a menos que los responsables presentes algunas evaluaciones cuantitativas sobre la importancia relativa, para ellos, de dichos aprovechamientos en los distintos períodos.
Además, cuando se discute el asunto a fondo con un responsable, uno se da cuenta de que busca, por ejemplo, no sólo el aprovechamiento, sino además el crecimiento, el aumento. Cuanto más estudias el problema más compruebas que los responsables del nivel más alto persiguen varios objetivos. Un director puede escoger un objetivo en un momento dado, pero hay que saber por qué un objetivo es más importante en ese momento.

Controladora de discos magnéticos
Las más de las veces no puedes obtener una información cuantitativa de los responsables, los cuales no saben, de hecho, qué desean realmente. Y esto no puede ser de otro modo, ya que si un objetivo es lo más importante para uno en un momento dado, puede no serlo al día siguiente. Si, por ejemplo, no estaba previsto conseguir un aprovechamiento satisfactorio este año en la empresa, el primer objetivo será alcanzarlo. Pero si se confiaba en obtener fácilmente un máximo aprovechamiento este año, entonces se descubrirá que hay cosas más importantes, como, por ejemplo, una estrategia para el futuro. De hecho, los directores no deberían decir tan solo el valor relativo que atribuyen a los diferentes objetivos, sino también de qué manera prevén la evolución de las relaciones entre esos diversos objetivos. Y esto es, de nuevo, inconcebible, y hace imposible la realización de la idea.
Surge ahora una pregunta: ¿no podemos hacer nada para ayudar a las personas que tienen que tomar esas decisiones? La conclusión precedente era demasiado pesimista. Realmente, podríamos, gracias a un sistema de informática, más dinámico que la realización de los modelos matemáticos, ayudar a los que deben tomar esas decisiones dándoles mayor información y presentándoles imágenes más claras del desarrollo de sus diversos objetivos.
De modo que podemos ofrecer mucho a los dirigentes, pero el objetivo no puede ser hacernos cargo de sus decisiones. La mayor parte de las decisiones importantes se adoptan en circunstancias críticas ante hechos desconocidos hasta el momento. Por el contrario, existen amplios campos, como el del control de la producción, de los que se puede hacer cargo por completo el ordenador. Pero aunque esos ámbitos sean amplios, no son forzosamente los más importantes. Parece que toda organización sufre cada tres años una situación crítica y, entonces, se ve obligada a tomar serias decisiones de cara al futuro. Eso parece ajeno por completo a las funciones del ordenador, fuera de su alcance, simplemente porque no puede saber por adelantado lo que ocurrirá en el mundo exterior y porque en esas situaciones críticas la redefinición de objetivos planteará de nuevo problemas insolubles. Sin embargo, el ordenador podrá presentar situaciones simuladas, calcular lo que ocurrirá si hace esto o aquello.
¿Cree usted que la informática invadirá y amenazará la vida privada? ¿Deben establecerse reglas, leyes, para la defensa del individuo?
Esto es importante, sin duda, pero se trata, en esencia, de una cuestión política y un problema técnico. A mi modo de ver, la única razón para ser prudente ante el ordenador reside justamente en el hecho de que éste nos aporta tantas cosas útiles que debemos impedir que se haga peligroso. Si únicamente fuera peligroso, perjudicial, podríamos destruirlo. Nuestro problema está en decidir “cuántos informes deben conocerse sobre nuestra persona”.
Por eso debemos estudiar atentamente las leyes, las reglas que habrá que establecer respecto a este asunto. Y esas reglas no deberán frenar ni detener un desarrollo útil.
En el campo de la educación, ¿cuáles son las directrices y los principios que deben tenerse en cuenta para utilizar correctamente la informática? ¿Se podría llegar a eliminar a los profesores? ¿Cuál es la asistencia que aporta un ordenador a la enseñanza actual? ¿Hasta dónde se puede llegar en esa dirección?
Se puede hacer mucho. Ya me he referido a ese problema al decir que las personas pueden aprender realizando experiencias prácticas en un terminal. Utilizando esos terminales es posible la experimentación en casos en que antes no lo era. Y existen muchos ámbitos. Cuando, por ejemplo, queremos enseñar los métodos matemáticos de toma de decisiones o la optimización lineal, sería mucho más eficaz para los estudiantes no sólo leer, sino disponer de un terminal y de una programación para ello, y hacer muchos más cálculos, probar más hipótesis y adquirir un sentimiento experimental más concreto de diversos modos de decisión.
¿Qué ocurre con las enseñanza programada?
Eso nos devuelve a una pregunta anterior: ¿se podrían suprimir los profesores? Gran cantidad de los errores cometidos en muchas empresas (y que han costado miles de dólares, millones, a cada una de ellas) al intentar poner en marcha sistemas sin comprenderlos suficientemente, se habrían evitado si se hubiera dejado a los profesores el tiempo necesario para adquirir esa comprensión, esa inteligencia del problema. En ese ámbito de la enseñanza programada, nosotros hemos puesto en marcha, aquí, una sección. Nos encontramos con que, en vez de analizar primero sistemáticamente el problema y mirar lo que puede no puede hacerse, la gente empezó a trabajar enseguida; es la línea que se sigue en Estados Unidos.
Hubo tantos proyectos mal estructurados que, al final, se desacreditó el conjunto de esa rama. Creemos que esto no se halla justificado y, en la actualidad, avanzamos con mucha prudencia.
Siguiendo el camino clásico para comprender y aprender la programación, lees un capítulo de un libro, intentas comprender su contenido e inmediatamente vas al ordenador, haces un programa. Por ejemplo, lo haces por la tarde. A la mañana siguiente te das cuenta de que cometiste un error al principio y todo el resto está en blanco. Si puedes dialogar con el ordenador, no necesitas leer un capítulo entero: desde el momento que crees haber comprendido algo, hace el test en el acto. Cuando lees todo un capítulo e intentas aplicarlo, descubres a menudo que comprendiste mal parte de lo que se dice en él.

Cableado de una computadora (¡menudo lío!)
Habrás almacenado en tu cabeza algo parcialmente falso y tendrás que hacer un esfuerzo más o menos prolongado para desprenderte de ello. Con el diálogo se pueden evitar muchos equívocos e incomprensiones. Es posible que no tenga tantas ventajas como se había creído antes, pero creo que, en la enseñanza programada, las experiencias fallidas de que antes hemos hablado fueron llevadas a cabo con tanta incompetencia, que no hace falta sacar conclusiones demasiado pesimistas.
Existe prácticamente una situación de monopolio en el campo de la informática. ¿Cómo es que IBM y algunos otros pueden llegar a controlar la aparición de nuevos procedimientos?
Es realmente un peligro. IBM tiene una preponderancia total en el mercado. Yo tenía que vender los productos de la informática sueca. Pensaba poder utilizar argumentos razonables, pero los clientes me contestaban: “Seguramente se equivoca, porque no es lo que dice IBM“. Los productores más poderosos tienen tendencia a comprar los inventos que les puedan hacer la competencia. Por el contrario, parece que IBM defiende en cierto modo a las otras compañías: no intenta expulsarlas del mercado, sino que pone precios muy altos a sus artículos, lo que permite mantenerse en liza a la competencia más pequeña. Esto permite también cierta capacidad de innovación.
Es posible que se evolucione hacia una situación más competitiva. Me parece que los miniordenadores y los microordenadores permitirán romper algo el monopolio tradicional.
¿Cuáles son las condiciones de desarrollo de una industria europea de informática?
Personalmente creo que las redes de pequeños ordenadores harán la competencia a los grandes ordenadores centralizados. Se exagera la economía que resulta de la dimensión de los ordenadores. Los precios de los ordenadores evolucionan muy favorablemente. ¡E incluso los miniordenadores están amenazados por los microordenadores! La situación está cambiando: son únicamente los grandes ordenadores los difíciles de producir por los pequeños fabricantes. Además, no existirá la necesidad de grandes ordenadores. Incluso una sociedad que necesite mucho de la informática se dará cuenta de que es más interesante aumentar su capacidad de tratamiento de datos con los pequeños ordenadores, que descargan de trabajo a los grandes.
¿Cuál será la evolución de la informática en un futuro próximo?
Hay una tendencia general: la rápida disminución del coste y de las dimensiones de las unidades centrales de cálculo. También existe un gran desarrollo de la tecnología de la memoria de los grandes bancos de datos. Somos capaces de almacenar muchos más datos y de encontrarlos más rápidamente. Se pueden aplicar métodos más avanzados para el acceso a las informaciones y a su utilización. Por ejemplo, se desarrolla lo que se llama inteligencia artificial: si inyectas ciertos hechos, el ordenador puede sacar conclusiones y deducir otros hechos. El problema está en que, si deseas utilizar un gran banco de informaciones, eso puede llevar cierto tiempo, y la respuesta llegará demasiado tarde. Pero con unidades centrales de tratamiento más rápidas y menos costosas, y con memorias más baratas y más rápidas, esas posibilidades se desarrollarán.

Operadores con las memorias de cinta
Todavía resultará más fácil comunicarse con el ordenador. El ordenador será también capaz de programarse a sí mismo; hoy día nosotros escribimos un programa que saca conclusiones de unos hechos. Si el ordenador es capaz de sacar por si solo estas conclusiones, podremos economizar en gran manera nuestro trabajo de programación.
Gracias a esas facilidades de utilización, un número creciente de personas tendrá acceso a los bancos de datos cada vez en más lugares. Este desarrollo permitirá, tal vez, que lleguemos a tener terminales en cada hogar, como el teléfono.
Cuando se quiera enseñar el empleo del ordenador en la escuela, no será forzoso aprender la programación, pero seguramente habrá que enseñar a utilizar un terminal.
El cero negativo (-0) sí existe, lo siento mucho

-0
Es curioso que en nuestro mundo cuadriculado de aritmética ordinaria, el cero (0) es cero y punto pelota. No tiene sentido un valor de nada con un signo, porque nada es eso, absolutamente nada. Sin embargo, en el mundo del desarrollo informático, y también de algunas ciencias experimentales (y de determinadas aplicaciones teóricas en la física estadística y otras disciplinas), algunas representaciones numéricas permiten la existencia de un cero negativo (-0), distinguiéndolo a la perfección del cero positivo (+0) y considerándolos dos valores diferentes. El concepto de cero con signo es contrario a la suposición general de la mayoría de los campos de matemáticas de que el cero negativo es lo mismo que cero.
El estándar de la IEEE para aritmética en coma flotante (IEEE 754) es el más extendido para las operaciones en doble precisión o punto flotante (un método de representación de números reales). Este estándar define formatos para la representación de números en coma flotante (incluyendo el cero) y valores no normalizados, así como valores especiales como infinito y NaN (Not a Number), con un conjunto de operaciones que trabaja sobre dichos valores.
El IEEE 754, presente en la mayoría de los ordenadores y de los lenguajes de programación, define pues un -0 y un +0. Estos dos ceros pueden ser considerados como una variante del conjunto extendido R de los números reales, que añadía dos elementos nuevos al conjunto básico R de números reales, el +∞ y el −∞. El menos cero se basa en el concepto de análisis matemático de acercarse a 0 desde abajo como un límite y, asimismo, puede ser utilizado, de manera informal, para referirse a un número negativo que se ha redondeado a cero. En las propias especificaciones del estándar se afirma que este valor hace que sea mucho más sencillo conseguir una buena precisión numérica en determinados problemas críticos, sobre todo si se calculan mediante funciones complejas elementales.
Las representaciones que permiten un cero negativo pueden llegar a ser una fuente de errores en programas si los desarrolladores de software no se dan cuenta (u olvidan) que, si bien ambos ceros se comportan como iguales ante comparaciones numéricas, son diferentes patrones de bits y dan resultados diferentes en algunas operaciones, como por ejemplo la división.

Representación binaria de 32 bits del cero negativo
Supongamos dos valores x e y, además de los dos ceros (positivo y negativo), los dos infinitos (positivo y negativo) y el anteriormente comentado valor NaN. En la siguiente tabla se muestran los distintos resultados que producirían las diferentes divisiones entre ellos (fila divido entre columna).
/ |
+y |
-y |
+0 |
-0 |
+∞ |
-∞ |
NaN |
+x |
+z |
-z |
+∞ |
-∞ |
+0 |
-0 |
NaN |
-x |
-z |
+z |
-∞ |
+∞ |
-0 |
+0 |
NaN |
+0 |
+0 |
-0 |
NaN |
NaN |
+0 |
-0 |
NaN |
-0 |
-0 |
+0 |
NaN |
NaN |
-0 |
+0 |
NaN |
+∞ |
+∞ |
-∞ |
+∞ |
-∞ |
NaN |
NaN |
NaN |
-∞ |
-∞ |
+∞ |
-∞ |
+∞ |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
Vamos a ver un pequeño programa codificado en Java que demuestre algunos de los resultados anteriores. El tipo de datos float de Java tiene completamente integrado el estándar IEEE 754, por lo que no tendremos ningún problema para comprobar los cocientes.
{
public static void main (String[] args)
{
float x,y,resultado;
//+x:+y=+z
x=1;
y=1;
resultado=x/y;
System.out.println(x + "/" + y + "=" + resultado);
//-x:-0=-infinito
x=-1;
y=0;
resultado=x/y;
System.out.println(x + "/" + y + "=" + resultado);
//+x:-infinito=-0
x=1;
y=-1/new Float(-0.00);
resultado=x/y;
System.out.println(x + "/" + y + "=" + resultado);
//0:0=NaN
x=0;
y=0;
resultado=x/y;
System.out.println(x + "/" + y + "=" + resultado);
}
}
Si nos fijamos en el segundo ejemplo (//+x:-infinito=-0), vemos que, como se explicaba en la tabla, un número positivo (+x) dividido entre menos infinito (−∞) da como resultado menos cero (-0). Para conseguir el valor de −∞, lo que hacemos es generar una división intermedia (-1/-0) cuyo cociente sea −∞ (siempre según la tabla), para que después este resultado pase a ser denominador del quebrado principal.
Esto anterior es perfectamente correcto en Java, y el resultado en línea de comandos sería lo siguiente.
1.0/1.0=1.0
-1.0/0.0=-Infinity
1.0/-Infinity=-0.0
0.0/0.0=NaNOtras operaciones aritméticas con -0 arrojan distintos resultados. La multiplicación, por ejemplo, sigue sus mismas reglas de combinación de signos, esto es -0 × -0 = +0, y la raíz cuadrada de -0 (√-0) es igual a -0. Veamos estos dos ejemplitos en código Java.
import java.lang.Math;
class CeroNegativo
{
public static void main (String[] args)
{
float x,y,resultado;
//(-0)+(-0)=-0
x=new Float(-0.00);
y=new Float(-0.00);
resultado=x+y;
System.out.println(x + "+" + y + "=" + resultado);
//SQRT(-0)=-0
x=new Float(-0.00);
resultado=(float)Math.sqrt(x);
System.out.println("La raíz cuadrada de " + x + " es " + resultado);
}
}Y el resultado en línea de comandos sería el que sigue.
-0.0+-0.0=-0.0
La raíz cuadrada de -0.0 es -0.0Con respecto a las comparaciones, se pueden utilizar los operadores comparativos usuales de los diversos lenguajes de programación, aunque, para evitar algunos errores, muchos lenguajes traen comparadores propios para este fin. Es el caso del método equals de la clase Double de Java.
Y aparte de la fricada informática que supone, ¿para qué demonios nos puede servir este absurdo número? Pues bien, como comentábamos al principio, en algunos ámbitos se puede utilizar de manera más o menos formal para establecer valores muy determinados. Por ejemplo, la notación -0 puede ser usada para indicar que se redondeó a cero un número negativo muy cercano a él. Esto puede ser útil cuando un signo negativo es significativo, por ejemplo en la tabulación de temperaturas en grados Celsius, donde un signo negativo significa algo muy preciso (temperaturas bajo cero). En este caso querría decir que la temperatura es algo inferior a cero, pero por próxima se redondeó.
Otro caso práctico sería el de la física estadística, en la que, a veces, se usan temperaturas negativas para describir sistemas con una inversión de población, que se puede considerar que tienen una temperatura mayor que el infinito positivo. En este contexto, una temperatura de cero negativo es una temperatura (teórica) más grande que cualquier otra temperatura negativa, correspondiente al máximo concebible de inversión de población.
En fin, que prácticamente el cero negativo es como un puñetero cero a la izquierda, o sea que no se utiliza para nada. Pero la próxima vez que algún matemático te diga que el -0 no existe, imprímele este post y explícale cómo los informáticos, a veces, tenemos ases en la manga que otros no tienen. Ajo y agua; lo siento mucho.
Reciclarse o morir (o no)

Reciclaje informático
Tengo un amigo imaginario, sí, qué pasa. Es un colega que se ha quedado sin currelo hace un par de meses y anda bastante desesperado. Él es un informático de carrera de los de antes, de cuando en la uni les enseñaban a perforar tarjetas para endiñárselas a una computadora gigantesca y horripilantemente lenta. Por causas de la vida que no vienen al caso, estuvo trabajando durante varios años en una asesoría jurídica y dejó el mundo de la tecnología de lado, perdiendo el tren del reciclaje continuo que, en nuestro trabajo, es una inexorable carrera en espiral al jodido país de Nunca Jamás.
Resulta que, como digo, se ha quedado en el paro y, hace unas semanas, me consultaba afligido acerca de mi opinión sobre su situación y las posibles salidas que yo veía. Me decía que qué me parecía a mí que hiciera, tirarse un par de años reciclándose en cursos de formación específicos o aventurarse a buscar curro con lo poco que sabía y recordaba de programación y diseño web.
Este chico tuvo la mala suerte de dedicarse a la informática cuando nadie daba un duro por los informáticos y, después, tuvo la mala suerte de encontrar un muy buen trabajo ajeno a lo suyo cuando la informática despuntó y los profesionales se cotizaban a precio de oro, del oro amarillo de toda la vida, no de ese blanco chungo que se han inventado ahora.
Sus conocimientos y los pequeños reciclajes al principio le han hecho quedarse en Visual Basic 6.0, lo más básico de Access 2000 y mucho HTML del antiguo. No controla de otros lenguajes de programación, ni sabe de gestores potentes de bases de datos, ni de XML, ni CSS, ni PHP, ni ASP, ni de ninguna puta abreviatura más de esas de ahora. Por supuesto que no domina Java, ni ha oído hablar prácticamente del .NET Framework, ni sabe lo que es la programación estructurada, las bases de datos distribuidas o el desarrollo en capas. Es más, cree que Oracle y Cassandra son dos antiguos dioses griegos que se conocieron en Delfos y se casaron muy enamorados. Bueno, muy desencaminado tampoco anda.
¿Os preguntaréis cuál fue mi contestación? Suicídate Lo mejor es que te pongas por tu cuenta. Vamos a ver, seamos sinceros. Con tu currículum y tu edad lo vas a tener muy difícil para que te contraten en una empresa como desarrollador informático, pero por tu propia cuenta te puedes hacer con una cartera de clientes bastante maja y con un dinerito al mes muy jugoso. Y moviéndote mucho, pero mucho, claro está.
Y es que si nos paramos a pensar un poco, el esclavo reciclaje no es tan importante como nos han hecho creer. Con una versión antigua de Visual Basic y una base de datos de Access se pueden hacer maravillas. No pretenderemos, por supuesto, construir una multinacional desde cero que abastezca de software de gestión a los grandes bancos mundiales, o que se dedique de pleno al desarrollo de equipos de aviónica o a la planificación de recursos empresariales. Pero sí seremos totalmente capaces de proveer de complejos y no muy caros programas informáticos a las pequeñas y a las medianas empresas, uno de los puntos fuertes de explotación de negocio en época de crisis.
¿Es necesario dominar todas las técnicas modernas de desarrollo para ello? Pues no, no señor. ¿Y con respecto al diseño web? Lo mismo. Los repijoleros friquichorris del CSS y el XHTML están obsesionados con separar diseño gráfico de contenido, y eso es una táctica perfecta al enfrentarte al desarrollo del sitio web de Telefónica, pero para montarle una paginilla a una peluquería o a una pequeña empresa de transportes no es en absoluto necesario. Mi amigo sabe tirar de Photoshop que da gusto, tiene muy buen sentido de la estética y se curra unos diseños alucinantes que luego trocea y monta mediante tablas en un HTML. ¿Es algún delito? Al final el resultado visual es el mismo.
Muchos de los que se están llevando las manos a la cabeza leyendo este post se asustarían de las empresas (grandes empresas) del sector que conozco (no daré nombres) y que basan sus diseños web, por los que cobran una pasta indecente, en temas gratuitos para WordPress o en sitios prediseñados con diversas apariencias a golpe de plantillas CSS enlatadas y gadgets y otros añadidos en JavaScript, al estilo Blogger.
Con ello no quiero decir que el valor añadido que proporciona un profesional bien formado y reciclado no sea importante. Es más, diría que es vital para sobrevivir en esta jungla de un negocio que ha reventado como la burbuja inmobiliaria: mucha oferta pero poca demanda. Sin embargo, para mi amigo su valor añadido son los años de experiencia en el mundillo que, aunque no del todo aprovechados, le han servido para acumular un bagaje de errores y meteduras de pata solucionadas que le hacen ser un hacha ante cualquier inconveniente repentino de un programa o una página web.
Mi consejo, pues, fue ese y no otro. Recupera todo lo que puedas de tu anterior experiencia, actualízate un poquito (sin perder mucho el tiempo) y ponte al tema, que seguro que consigues grandes logros. Y así ha sido. A día de hoy ya es autónomo, trabaja desde el ordenador de su casa y tiene en mente dos o tres proyectos que me huele que van a darle mucha suerte. Ojalá.
Tengo otro amigo, imaginario también, que no ha estudiado nada de informática, ni tiene intención de, pero que desde siempre le han apasionado los ordenatas y maneja no sé que coño de aplicación que hace sola los programas, sin necesidad de introducir una sola línea de código, arrastrando cuadraditos por la pantalla y generando una especie de diagrama de flujo del funcionamiento. La caña, vamos. Bueno, ha conseguido vender más de uno de estos pequeños engendros.
¡Intrusismo! ¡Muerte al foráneo! No me toques las pelotas. Si alguien es un poquito bueno en algo y tiene la oportunidad y la suerte de desarrollar su propio negocio con éxito se merece una alabanza. Sobre todo cuando el hambre apremia; y los hijos tienen un hambre atroz.
No seamos tan clasistas ni tan chovinistas informáticos. Las herramientas de hoy son para tontos y cualquier tonto puede manejarlas. Eso sí, un profesional siempre será un profesional y, si puede y se lo permiten, será el más capacitado para el desarrollo serio.
Nota final: No hacer extensible las recomendaciones anteriores a aprendices de cirujanos, pilotos aéreos en prácticas y arquitectos con la carrera sin terminar.
SSHv1 CRC32, el exploit de ‘Matrix Reloaded’

Trinity en 'The Matrix Reloaded'
Todos hemos comprobado profusamente cómo se utilizan elementos de la cultura informática en las películas con una suerte bastante desacertada. Incluso cintas que se suponen pertenecientes al género computacional están cargadas de errores informáticos.
Desde ‘Juegos de guerra‘, e incluso bastante antes, los ordenadores han pasado a formar parte de la línea argumental de muchos telefilmes. Y digo desde ‘Juegos de guerra’ porque quizás fuera la primera película dedicada exclusivamente al mundo informático desde la perspectiva del hacking puro, en la que se mostraba una primitiva y rudimentaria Internet.
Esta película, genialmente interpretada por Matthew Broderick, derrochaba imaginación, sin embargo no se le puede achacar un excesivo uso fantasioso de la informática, quizás porque en la época tampoco era posible crear efectos tridimensionales grandiosos y recurrieron a mostrar la austera pantalla negra de la consola y el adolescente introduciendo los comandos a mano. También es cierto que en algunos momentos a los guionistas se les fue la pinza un poco y se generan situaciones digitales bastante inverosímiles (sobre todo para la época); pero es una gran película.
La película ‘La red‘, que tiene como protagonista a Sandra Bullock, es otro de esos títulos de culto en el mundo de hacking, aunque en ella se aprecia más la ignorancia informática de los guionistas y la despreocupación total del director y del productor por fabricar un producto serio más allá de una absurda trama. Direcciones IP que no existen, extraños efectos de interferencias en páginas web que llevan a sitios oficiales, chats imposibles y demás parafernalia son fácilmente reconocibles en ‘La red’. Además, por supuesto, de uno de los principales axiomas del panorama de las películas de tema informático, que dice aquello de que la velocidad de borrado del contenido de un disquete es inversamente proporcional a la tensión emocional de la escena.
Pero existe una película todavía peor, mucho peor. Es la película ‘Hackers (piratas informáticos)‘. El colmo del despropósito informático, está cargada de interfaces gráficas deslumbrantes, de pantallas de login descomunales (muy típico) y de efectos e instrumentos digitales que se escapan, ya no del mundo de la informática, sino del mundo de la lógica aplastante. Esta película, con una jovencísima Angelina Jolie en el papel de Kate Libby (aka Acid Burn), tiene de la cultura cyberpunk sólo la estética y poco más.

Angelina Jolie en 'Hackers (piratas informáticos)'
‘Operación Swordfish‘, con John Travolta, es uno de los ejemplos de película en la que la informática sirve únicamente como telón de fondo para el argumento, porque prácticamente nada de lo que dicen tiene sentido. Para muestra un botón. En la siguiente escena (en inglés), archifamosa por lo absurda, Stanley Jobson (Hugh Jackman) tiene que reventar la clave de acceso al Departamento de Defensa de los EEUU en 60 segundos mientras un esbirro del malo le apunta con una pistola a la cabeza y una rubia de traca le practica una felación. Vamos, lo nunca visto.
Es impresionante verle teclear vaya usted a saber qué en el portátil mientras aparecen en pantalla listados larguísimos de términos informáticos sin conexión aparente alguna.
Series televisivas como ‘CSI‘ han metido la gamba también más de una vez. Memorable la imagen siguiente en la que aparece una dirección IP que ríete tú del protocolo IPv6. ¿De dónde se han sacado números tan altos? Por el amor de Dios, ¿qué longitud en bits tienen esas direcciones? ¿Acaso los CSI tienen una red paralela a Internet en la que hay más máquinas conectadas que seres vivos en la galaxia? Y no ha sido la única vez que les pasa.

Error de IP en 'CSI'
En fin, multitud de películas en las que se cometen continuamente errores con el tema informático y que, parece ser, se seguirán cometiendo. Podríamos hablar de la dirección de correo errónea (Max@Job 3:14) en ‘Misión imposible‘, del iPod que lee cientos de códigos en pocos segundos, para escanearlos con un cabezal acoplado en plan MacGyver, en ‘Firewall‘, de obtener una contraseña gracias a la imagen de una cámara de seguridad en ‘Conspiración en la Red‘ o de los cientos de errores típicos que se cometen en todas las películas: programas que amplían una matrícula fotografiada desde tomar por culo hasta que se visualiza perfectamente, monitores con un brillo tal que reflejan su imagen perfectamente en la cara del usuario, listados en pantalla con el soniquete de fondo de una impresora matricial, velocidades de transferencia de datos inverosímiles, etcétera.
Sin embargo, y para nuestro regocijo, existen películas en las que el asunto informático se ha tratado correctamente. Títulos como ‘El ultimátum de Bourne‘, ‘La jungla 4.0‘, ‘El asalto final (Hackers 2: Operación Takedown)‘ o ‘The Matrix Reloaded‘ son buenos ejemplos de películas en los que las escenas con ordenadores son totalmente creíbles, porque aparecen sistemas operativos que existen, software real y comandos reales que, además, se introducen de forma acertada y eficaz para el fin que se desea llevar a cabo.
Y es precisamente en ‘The Matrix Reloaded’ donde los hermanos Wachowski llevaron, a mi entender, el tema hacking hasta su punto más riguroso en la escena en la que Trinity (Carrie-Anne Moss) intenta reventar el acceso al ordenador de la central eléctrica. La foto siguiente muestra a qué escena me refiero.
En la imagen se puede apreciar perfectamente la pantalla de la consola que Trinity ha manejado una vez realizada toda la secuencia hasta introducir la contraseña. Es un shell no estándar de una consola Unix adaptado al tono verde que tiñe todas las películas de la saga ‘The Matrix’.
Trinity utiliza para reventar la contraseña, en principio, el programa Nmap (en su versión 2.54BETA25, una versión real), que es un software de código abierto que se utiliza en el mundo del hacking y de la seguridad informática para escanear o rastrear puertos en una máquina remota con el objeto de encontrar agujeros de seguridad. Nmap ofrece la posibilidad de encontrar todos los puertos abiertos de una máquina objetivo y poder comprobar así si dicha máquina es vulnerable a un ataque sobre ese puerto.
La línea de comando que emplea ella es la siguiente:
nmap -v -sS -0 10.2.2.2El parámetro -v le indica a Nmap que aumente el nivel de mensajes detallados; -sS prepara a la aplicación para un análisis de puertos TCP mediante la técnica SYN; y -O especifica que debe ser activada la detección del sistema operativo que está escuchando en ese puerto.
Un escaneo SYN puede realizarse rápidamente, sondeando miles de puertos por segundo en una red rápida en la que no existan cortafuegos. El sondeo SYN es relativamente sigiloso y poco molesto, ya que no llega a completar las conexiones TCP. A esta técnica se la conoce habitualmente como sondeo medio abierto, porque no se llega a abrir una conexión TCP completa. Se envía un paquete SYN, como si se fuera a abrir una conexión real, y después se espera una respuesta. Si se recibe un paquete SYN/ACK esto indica que el puerto está a la escucha (abierto), mientras que si se recibe un RST (reset) indica que no hay nada escuchando en el puerto. Si no se recibe ninguna respuesta (o si se recibe un error de tipo ICMP no alcanzable) después de realizar algunas retransmisiones, entonces el puerto se marca como filtrado.
Por último, Trinity pasa a Nmap como parámetro final la dirección IP del ataque (10.2.2.2), que es una dirección perfectamente válida de un adaptador de red en un servidor.
Lo siguiente que podemos observar en la imagen son los resultados que ha arrojado Nmap. En este caso sólo ha descubierto un puerto abierto que, casualmente, es el puerto TCP 22, el puerto de SSH (Secure SHell). SSH es el nombre de un protocolo, y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos y, además, implementa la seguridad que otros protocolos de sus mismas características (como Telnet) no tienen.
Al darse cuenta de que el puerto 22 está abierto en la máquina remota, Trinity, que es una hacker experimentada porque le habrán enchufado en Matrix un programa de esos directo a la mente para aprender a hackear, no se le ocurre otra cosa que utilizar un exploit para reventar la seguridad del equipo y hacerse con su dominio. El exploit utilizado es el SSHv1 CRC32, que existe en la realidad y fue creado por el analista de seguridad Michael Zalewski en el año 2001.
Un exploit es una pieza de software, un fragmento de datos o una secuencia de comandos con el fin de automatizar el aprovechamiento de un error, fallo o vulnerabilidad, a fin de causar un comportamiento no deseado o imprevisto en los programas informáticos, hardware o componentes electrónicos (por lo general computarizados).
A este ataque en concreto contra un servidor SSH se le conoce como SSHNuke. El agujero de seguridad SSHv1 CRC32 es un fallo de desbordamiento de memoria muy real. O quizás mejor lo fue, porque esperemos que los administradores de sistemas no tengan todavía por ahí un servidor SSH con software tan viejo como para contener este error (alguno seguro que hay). Explotado correctamente permite a un atacante remoto modificar su contraseña de root (cuenta de usuario en sistemas Unix que posee todos los derechos) y acceder al sistema vulnerable.
Vemos, por fin, que Trinity ejecuta el exploit, mediante la siguiente instrucción, contra la IP anterior y con el parámetro pertinente para cambiar la contraseña del administrador del sistema:
sshnuke 10.2.2.2 -rootpw="Z10N0101"Atención especial al detalle de la contraseña nueva (Z10N0101). Si os dais cuenta está formada por dos partes: Z10N y 0101. Z10N es la forma de escribir Zion (la última ciudad humana real fuera de Matrix) en “leet”, que es un tipo de escritura con caracteres alfanuméricos usado por algunas comunidades y usuarios de diferentes medios de Internet, sobre todo los hackers (aunque en “leet” auténtico, la Z debería haber sido sustituida por un 2, dando lugar a 210N). Y el número 101 es una cifra que aparece mucho en toda la saga de ‘The Matrix’.
Una vez que Trinity cambia la contraseña a su antojo, lo que hace es acceder, vía SSH, a la máquina remota con privilegios de root (introduciendo su contraseña recién restaurada).
En fin, muchos directores de películas deberían mirarse en el reflejo de ‘The Matrix’ para, a la hora de introducir temas informáticos en sus obras, recurrir a expertos en la materia y conseguir así un producto digno. Ya sé que, en el fondo, todo esto es de putos friquis como nosotros, y que a la gente que va al cine le gusta ver espectaculares efectos tridimensionales en la pantalla de un ordenador, pero, si no se inventan una forma nueva para conducir un coche, ¿por qué hacerlo para manejar un ordenador?
Seguro que esos directores se gastan más dinero en contratar a expertos pilotos para que el manejo de una jodida avioneta quede realista y luego no invierten un mísero euro en la materia informática. Un error, porque sus películas serán la risión en los foros especializados de Internet, y sus personas de ellos rebajadas a directores de pacotilla. He dicho.



