En lo mas alto (o casi)

Queridos lectores:

Tengo la inmensa satisfacción de comunicarles que Segmentation Fault ha alcanzado, en su primer mes de existencia, el valor 2 en PageRank de Google (El «Google PageRank» es el sistema que usa este buscador para medir la importancia de una web)

Además, estos últimos días hemos registrado registros de visitas nunca soñados: éste es el gráfico correspondiente a estos últimos dos días (y la cosa aumenta…):

grafico4.jpg

Es una victoria modesta, pero toda se la debo a ustedes… En especial, merecen mi humilde gratitud quienes han enlazado a este blog (según mis informes…)

(En la próxima actualización de la plantilla enlazaré a quienes aún no estén en la lista de vínculos…)

Tampoco me puedo olvidar de Misslucifer que siempre esta ahí en los momentos difíciles (que son muchos). Y como no, mi agradecimiento por sus comentarios a Mikel de Tellagorri, Shora, Enrique, Spiffy, SrDGato, emili, Ricardo, JuaNMa, Illaq, SquaLl, Tronfi y manulit (seguro que me dejo a alguien por mencionar o enlazar, si me informan de ello les añadiré inmediatamente)

Y a todos quien han visitado alguna vez esto…

¡GRACIAS!

El límite computacional y los huevos fritos

Un comunicante anónimo nos dejaba en este post el siguiente comentario:

¿Puede alguien dar más detalles sobre el límite computacional este? Jo, esto ha sido como hace años cuando un profe nos dejó tirados con el teorema de Godel y los límites del conocimiento humano pero no nos quiso dar detalles para no complicarnos la vida … :)

Y como lo prometido es deuda, vamos a profundizar un poco en el tema, ya que en el anterior post sobre el límite computacional sólo hablamos, en realidad, sobre la Máquina de Turing.

Imaginemos una lista donde pudiéramos incluir todos los problemas del Universo (sí, se que no parece fácil). Ahora recordemos que los computadores son máquinas que resuelven problemas. Esto último puede resultar extraño, pero los ordenadores no se inventaron para jugar al buscaminas, sino como grandes máquinas calculadoras… ¡qué cosas!

Sabiendo todo ésto, podemos preguntarnos: ¿qué problemas de nuestra lista podremos resolver con un ordenador? De hecho, es una pregunta muy buena: si puedo saber a priori que no puedo resolver computacionalmente un problema, me evitaré el esfuerzo de intentarlo (salvo si me gusta trabajar en vano). A los programas que pueden resolverse computacionalmente los vamos a llamar, en adelante, problemas computables.

Bien, si separara en otra lista los programas computables de los que no lo son, lo primero que veríamos es que el conjunto de los computables es mucho menor que el otro. Si lo representáramos como un huevo frito sería una cosa así:

lc01.jpg

El límite entre la yema y la clara es precisamente el famoso límite computacional… (estoy impresionado por lo geeky de mi propia exposición…) Ahora bien, en la informática, ¿dónde se encuentra exactamente ese límite? Esto quizá sea más complicado, así que vamos a dar algunas ideas.

Un algoritmo es una secuencia de instrucciones que un ordenador comprende. O sea, del estilo de «abre el menú de inicio», «conéctame con Internet»… cosas del estilo, nunca le decimos al ordenador «¿qué piensas sobre mi peinado esta mañana?», sólo le mandamos que haga cosas (¡qué vida más dura!). Para poner un ejemplo, éste el algoritmo para freír un huevo:

  1. Calienta aceite en una sartén.
  2. Rompe el huevo.
  3. Vierte el huevo en la sartén.
  4. Espera hasta que esté hecho.
  5. Retira la sartén del fuego.
  6. Extrae el huevo de la sartén.

Los ordenadores son muy buenos para hacer este tipo de acciones, pero desgraciadamente son las únicas que pueden hacer: los problemas que un ordenador puede resolver (los computables, o la yema del huevo) son los que tienen un algoritmo. Con «problemas que tienen un algoritmo» quiero hacer referencia a los problemas resolubles mediante la aplicación de un número finito de pasos sencillos.

Y si lo piensa se dará cuenta: nunca le dirá a su ordenador «haz eso, ya sabes, lo del otro día» o «¿qué opinas sobre Kant?». Y si se lo dice, jamás podrá obedecerle: son dos ejemplos del inmenso mundo de problemas que no tienen algoritmo; esto es, que no pueden resolverse en un número finito de pasos concretos. No obstante, sumar dos números puede hacerse en un número muy pequeño de pasos, de la misma forma que buscar una palabra en un texto… Para ilustrar esto último, he revisado la imagen del huevo:

lc02.jpg

Ni más ni menos. Y (casualidades de la vida), todos los programas argorítmicos tienen una máquina de Turing que los resuelve. Y viceversa: todas las Máquinas de Turing expresan soluciones algorítmicas. Como apunte extra, diré que ésto se conoce como la Tesis de Church-Turing…

Espero haber esclarecido el tema del límite computacional que tanto intriga a nuestros lectores… la verdad es que uno no se cansa nunca de revisar estas cosas, y siempre está bien recordar que, en contra de lo que nos venden, los ordenadores no valen para todo… Ah, y si se lo están preguntando, sí: un ordenador podría freír un huevo :-)

Sobre la memoria (humana)

Este no es mi campo, pero mis colegas de CPI y de Tempus Fugit me van a permitir la intrusión… Hace unos días hablábamos sobre la inteligencia artificial, y de paso hacíamos algunas reflexiones sobre la mente. Lo cierto es que es un tema fascinante, que nos recuerda lo lejos que estamos en la IA de la inteligencia humana…

El pasado martes 21 (bueno, en realidad el miércoles 22) se emitía un nuevo programa de Redes en La 2. El tema: la memoria. Impresionante.

Eduard Punset entrevistaba, en la primera parte del programa, a Douwe Draaisma, profesor de historia y psicología en la Universidad de Groningen, y una parte de la entrevista llamó poderosamente mi atención (por cierto, estará disponible dentro de una semana en la web del programa)

Draaisma explicaba por qué a veces percibimos que el tiempo se dilata. Yo he tenido un accidente de circulación sin importancia, y recuerdo esa sensación de que todo sucede más despacio. Por lo visto, la velocidad a la que transcurre el tiempo es algo subjetivo, relacionado con nuestra actividad mental… se supone que en los instantes previos a la colisión, mi cerebro buscaba soluciones a toda velocidad, y esa aceleración de mis procesos mentales provoca que el tiempo pase más despacio.

Una consecuencia de este hecho parece ser que nuestra vida pase ante nuestros ojos cuando nos acercamos a la muerte de forma traumática… el profesor comentaba que es un hecho del que hay suficientes datos a lo largo de la historia como para suponer que es cierto.

dejavu0.gif

También aportaba una explicación (una de las más razonables desde mi óptica) al fenómeno del Déjà vu. Según Draaisma, este fenómeno se explica por una falta temporal de concentración: es decir, estamos en una situación, y por un instante, desconectamos y pensamos en otra cosa… cuando volvemos, tenemos la impresión de que ha pasado mucho tiempo, porque nuestro cerebro almacenó la situación como un recuerdo reciente…En el transcurso de la entrevista se hicieron más reflexiones… ¿por qué el tiempo pasa más lentamente en la juventud y se acelera segun pasan los años? todo fue tan interesante que no me siento capaz de explicarlo ni de resumirlo. Pero no se pierdan la entrevista cuando la publiquen, y si pueden (la hora es prohibitiva) vean el programa…

… es fascinante :-)

Consultorio SF (III). De proxies y enigmas

Nuestra atenta lectora Misslucifer (¡gracias!) nos enviaba por correo electrónico la siguiente consulta:

¿Cúal es la diferencia entre un servidor proxy y un cortafuegos? Es que aunque en principio lo tenía bastante claro, ahora siempre me lío un poco.

Y como la cosa va de proxies, cortafuegos y demás fauna, vamos a ver primero de qué hablamos y luego entenderemos mejor en qué son diferentes…

Sobre proxies

Es curiosa la enorme confusión que existe sobre el término proxy… Como en general, nadie parece ponerse de acuerdo en su definición exacta vamos a inventarnos una: un proxy es un dispositivo físico o un programa que sirve como intermediario entre ordenadores. Lo más normal es que medie entre una red local y el gran Internet. Quizás a muchos les extrañe eso de que un programa pueda hacernos de proxy, pero en redes las fronteras entre lo físico y lo lógico son bastante difusas: un ordenador con el programa adecuado puede usarse para lo que se quiera. Hasta de proxy :-)

proxy_grande.jpg

O sea, un proxy es un ordenador que se interpone entre dos, simplificando al máximo. Lo normal es que el proxy se interponga entre redes de varios ordenadores, si refinamos un poco más. Ahora bien ¿para qué queremos un proxy? por ejemplo, para compartir una conexión a Internet con varios usuarios: conectamos el proxy a la línea y configuramos a los clientes para que pasen por éste equipo cuando uno se quiera conectar a Internet. Hecho.Ahora imaginemos que diez ordenadores comparten un proxy para salir a la red. Un usuario carga una página web (se le envía desde donde esté almacenada). Y otro carga la misma página un minuto más tarde, así que vuelve a ser enviada… se nos puede ocurrir que el proxy almacene una copia de las páginas recientemente visitadas, y envíe esa copia a los clientes cuando una web concreta sea solicitada. Hay muchos proxies que cumplen esta función, y se conocen como «Proxies-caché».

Respecto a esto último, muchos usuarios consideran que supone perder intimidad porque se puede saber qué páginas han solicitado. Pero para eso no hace falta un proxy ni siquiera, así que sus temores, aunque tengan fundamento, no deberían tener a los proxies como blanco.

Con los proxies se pueden hacer muchas cosas más: podemos configurarlos como filtros, para que, por ejemplo, sólo puedan verse páginas web y no usar el Emule (o similares :-P) Esto es lo que ha hecho que se les confunda con los cortafuegos.

Sobre cortafuegos

Los cortafuegos son dispositivos físicos o lógicos (programas) que pueden utilizarse para proteger uno o varios ordenadores de amenazas externas. Normalmente, se protege la red local de lo que pueda llegar por Internet.

illustr.jpg

Así, el administrador de la red marca unas pautas al cortafuegos para que éste sepa qué trafico bloquear, y cual permitir. De este modo, las peticiones potencialmente malignas son ignoradas y las necesarias son permitidas. Por ejemplo, un firewall permitirá que se establezca una conexión entre nuestro ordenador para ver una página web, pero bloqueará una conexión si ésta es solicitada por un programa sospechoso. Los mecanismos que utilizan los cortafuegos para distinguir el tráfico «bueno» del «malo» son algo más complicados, y no vamos a entrar en ellos.

Basta con que nos quedemos con que el cortafuegos se interpone entre nosotros y el mundo hostil, dejando pasar o prohibiendo las conexiones que se quieran establecer entre los dos.

Encuentre las 8 diferencias

Y ahora que sabemos qué es cada cosa, toca aclarar las diferencias… normalmente el firewall es un programa, mientras que el proxy es un ordenador. Pero sólo normalmente. En general, el proxy se encarga de tramitar las peticiones de varios usuarios y hacerles llegar las respuestas. Por su lado, el cortafuegos simplemente protege uno o varios ordenadores prohibiendo conexiones en base a su contenido, su procedencia, su tipo, etc.

De todos modos hay que decir que la mejor protección y fiabilidad nos la da la combinación del firewall con el proxy. ¡Así me lo aprendí yo!

La programación orientada a objetos

Si yo tuviera que vender mi gato (al menos a un informático) no diría que es amable y autosuficiente y que se alimenta de ratones: más bien argüiría que está orientado-a-objetos?

Roger King

La programación orientada a objetos (POO) es la tecnología emergente más importante en cuanto a desarrollo de aplicaciones. Supone una auténtica revolución en la forma de plantear la construcción de aplicaciones desde un punto de vista ingenieril y aporta infinidad de ventajas sobre los esquemas estructurados tradicionales.

Es algo muy complicado de explicar a quien tenga la fortuna de no haber tenido que desarrollar un programa… sólo me resultaba simpática la cita, por la obsesión que tenemos los aspirantes a ingeniero con la orientación a objetos.

Si a alguien le intriga mucho el tema, puedo tratar de explicarlo, pero no prometo milagros. El inicio de semana está siendo verdaderamente duro, sean tan indulgentes como hasta ahora… :-P

Curiosidades en torno a Java

Seguro que navegando por estos mundos, se ha cruzado más de una vez con un viejo amigo llamado Java. O al menos le sonará su nombre. Y sino, yo se lo aseguro: se han encontrado en más de una ocasión…

java_logo.gifJava es el nombre de una de las tecnologías más destacadas de la última década: se trata de un lenguaje de programación ¿Un qué? Un lenguaje de programación es una «lengua» que es comprensible para los ordenadores… para entendernos, es como el inglés o el francés, sólo que muy formalizada y sin ambigüedad (ya sabemos que las máquinas son muy poco hábiles… )

Hay muchos motivos que han propiciado que Java sea hoy tan importante y tan reconocido: el más importante, a mi parecer es la portabilidad: un programa hecho en Java puede ejecutarse en Windows, Linux y MacOS sin hacer modificaciones, y eso siempre está bien… Tambien es muy seguro, bastante robusto, multitarea y un montón de cosas… pero sobre todo, es dinámico (no se sabe qué demonios es eso, pero todos los productos tienen que ser dinámicos para vender :P)

Lo más sorprendente es que Java fue diseñado como un lenguaje para programar electrodomésticos: Allá por 1990, Sun pretendía fabricar electrónica de consumo dotada de ciertas capacidades extra… (viendo los anuncios, no se debieron de equivocar tanto…). Fruto de los esfuerzos para llevar a cabo aquella nueva raza de lavadoras y frigoríficos superdotados nació el Java. De hecho si se fijan bien, las características que lo han hecho famoso (portabilidad, interpretado…) encajan con la idea de ejecutarlo sobre electrodomésticos…

El caso es que la idea de Sun fracasó. Y es que estos aparatos resultaban excesivamente caros… no sé qué funcionalidad exacta ofrecerían, pero está claro que no compensaba su elevado precio. Así que la idea se desechó. Pero el esfuerzo de desarrollo del lenguaje Java perduró, y se decidió intentar rentabilizarlo portándolo a ordenadores convencionales… ¡y la jugada les salió perfecta! En 1995 el navegador Netscape 2 incluyó un intérprete para Java, lo cual contribuyó definitivamente a popularizarlo en Internet… ¡la nueva era había llegado!

Por cierto, que su singular logotipo y el nombre se deben a que cerca de la sede donde trabajaba el equipo de desarrollo había una cafetería llamada «Java», donde pasaron muchas tardes (muy a la española, vaya…) los creadores de este lenguaje. De ahí que todo en Java está relacionado con el café… El mundo es friki ;-)

SF restablecido y funcionando

Este fin de semana no iba a poder ocuparme del blog, por estar visitando la bella ciudad de Madrid (hacía trece años que no volvía y la he encontrado mejor que nunca, a pesar de las obras). Ni podía ni quería preocuparme del blog, así que, en previsión del aluvión de visitas por parte de los lectores de CPI dejé encargado a Misslucifer (gran colaboradora y mejor amiga) que enviara un post preparado para dar la bienvenida a este selecto grupo.

Debido a problemas de comunicación y de la diferente configuración de nuestros clientes de correo, el post fue publicado con errores en los vínculos. No quise marearme con el asunto ni volver loca (más :-P) a Misslucifer, así que decidimos posponer a hoy la toma de decisiones…

El post de la discordia ya ha sido actualizado y todo vuelve a estar en orden :-) Sólo me queda agradecer a los lectores su paciencia infinita.

A Misslucifer, como es natural, le debo una cena por su inestimable ayuda y para compensarla por el mal rato que debió pasar, en parte por mi responsabilidad. ¡Gracias!

Bienvenido, mister CPI

Actualización: Superados una serie de desagradables problemas técnicos, aquí dejo el post de bienvenida a CPI tal y como nuestros lectores debieron verlo. Reiteramos nuestras disculpas y aprovechamos para saludarles :-)

Supongo que estos días recibiremos la grata visita de algunos lectores de CPI (magnífica bitácora) así que quisiera darles la bienvenida a esta nuestra comunidad: Segmentation Fault.

El nuestro es un blog de corta vida, dedicado a la divulgación informática. Como CPI, tenemos un consultorio: el Consultorio SF, que ya ha resuelto algunas dudas… Aparte de aprender qué es eso del RSS, hemos aprendido qué es una cookie (y de dónde viene su nombre… no es lo que parece)

Pero sobre todo hemos dedicado posts y posts a las preciosas y abismales diferencias entre hombre y ordenador, lo que nunca podrán hacer (con algunos ejemplos prácticos). Y como sin duda hoy lo que manda es Internet, nos pareció bonito analizar las diferencias entre un coche y una ADSL, o qué narices es la verificación de palabras, y ver cómo un portátil de 100 dólares puede revolucionar el mundo que conocemos…

Feliz estancia :-)

Consultorio SF (II). Las redes neuronales

Nuestro lector de honor, Patxi (¡gracias!) nos enviaba esta consulta:

Mola la consultoría. Aquí va una pregunta: ¿llegarán nunca los ordenadores a intepretar imágenes? ¿y vídeo?

Yo me quedaré perplejo el día que a un ordenador le enseñes un video y te lo explique: «se ve un hombre corriendo sobre una playa y ahora rompe una ola…» o algo equivalente.

En realidad aquí se plantean muchas preguntas, así que voy a intentar ir por partes… Nos enfrentamos a un problema decisivo: no conocemos casi nada sobre el funcionamiendo del cerebro. El acto de interpretar es una actividad muy humana, en la medida que precisa de la subjetividad y de la experiencia… tendríamos que preguntarnos cómo percibimos nosotros al hombre que corre por la playa (magnífica excusa para plantar la foto :-P) y cómo sabemos que se trata de una persona… es mucho más complejo de lo que nos parece, porque estamos acostumbrados a interpretar constantemente.

Así que, en cierto sentido, podemos responder que los ordenadores, tal como los conocemos, no serán capaces nunca de interpretar nada… la cuestión aquí es si realmente necesitamos que ellos interpreten de la misma forma en que lo hacemos nosotros… (pero no se desanimen, no todo es lo que parece)

Los ordenadores sólo son capaces de resolver, en principio, los problemas para los cuales conocemos una serie de pasos que nos llevan a su resolución. Pues bien, no existe (no se conoce) una secuencia de este tipo que haga comprender a un computador que lo que se ve en el vídeo es un perro, o una persona, y que lo haga en general (es mucho más complejo que reconocer una letra)

La respuesta tenemos que buscarla en la Inteligencia Artificial. Hay que decir que la IA no es sólo un tema de películas de ciencia-ficción: funciona y sus resultados son prometedores, pero no es la gran revolución que se creía en un principio.

Existe un tipo de computación basada en redes de neuronas. Una red de neuronas imita el funcionamiento de la mente humana: la idea es simular un montón de unidades independientes que pueden funcionar como pequeñas calculadoras, y que interactúan entre sí, tal y como lo hacen las neuronas en nuestro cerebro… puede parecer increíble, pero esto existe…

Hace unos días veíamos cómo los ordenadores pueden reconocer texto y proponíamos una solución sencilla paso a paso. Ahora bien, en cuanto se distorsionaban las letras, el programa no era capaz de comprender nada… Sin embargo, existe una forma de aplicar redes de neuronas al reconocimiento de texto, utilizando [modo experto] una red de Hopfield, que es capaz de soportar una modificación de hasta el 25% de un caracter a reconocer… ¿Cómo lo hace?

Las redes de neuronas aprenden. La forma del aprendizaje es muy parecida a la nuestra: se le da a red un conjunto de datos inicial y se le pide que de un resultado, el que sea. Si es el que esperábamos, hemos terminado. Si no, ajustamos cómo se comunican las neuronas entre ellas y volvemos a probar… es como un entrenamiento. Parece complicado, y de hecho lo es. No obstante, funciona :-)

Sabiendo esto no puedo decir que un ordenador no vaya a ser capaz nunca de reconocer a un hombre corriendo en la playa, pero desde luego que si lo llega a hacer, será mediante un mecanismo de este tipo… (De hecho, nosotros reconocemos a otro humano caminando en la distancia bastándonos sólo en cinco o seis puntos que se mueven a cierto ritmo… es fascinante)

Ahora mismo podríamos tomar una red de neuronas y entrenarla para que reconociera un hombre corriendo (esto existe, de hecho, en algunos sistemas de seguridad, aunque es bastante primitivo). También podríamos lograr que reconociera en un vídeo como rompe una ola (dosis extra de dificultad). Los límites de este tipo de estructuras no están nada claros, para bien o para mal.

El problema surge al generalizar: el querer una red que estudie un vídeo o una imagen y que identifique lo que sea, cualquier cosa, un perro, un gato, un calamar gigante o un humano… yo me atrevería a decir que no parece posible, salvo que el sistema aprenda todos los objetos que pueden aparecer: sus formas, su comportamiento y sus variantes… lo cual implicaría un entrenamiento largo, como el que podamos tener las personas… pero no veo por qué no podría hacerse.

En conclusión, considero que sí es posible que los ordenadores reconozcan fenómenos concretos en imágenes o en vídeo. Serán necesarias, eso sí, estructuras más avanzadas que la computación tradicional, y que estas estructuras hayan sido entrenadas con cierto volumen de datos. No obstante, será muy complicado que reconozcan todas las situaciones posibles sin que hayan sido previstas, tal y como hacemos nosotros, y en grados variables de detalle… Pero sin duda, más tarde o más temprano, la respuesta a la pregunta de Patxi será un S?.

Cuando aparecieron los primeros ordenadores, hubo quien dijo que jamás tendrían éxito por el increíble coste que tendrían… es mejor tener la mente abierta, uno siempre se lleva sorpresas ;-)

PD: Perdón por el post kilométrico, pero el tema lo merece…