El cuchillo jamonero de la SGAE

La cosa va de piratas. Así que cuidado con lo que decimos, porque existe una asociación que, además de defender los derechos de los autores y los editores musicales, tiene tiempo para demandar a todo aquel que ose cuestionar sus planteamientos. No es victimismo, sino la cruda realidad. Lo cierto es que hay que andarse con ojo.

Posiblemente no soy el más indicado para juzgar la obra y milagros de la-que-no-debe-ser-nombrada, porque no soy autor ni editor y no tengo el mínimo interés por la industria musical. Ellos tienen su negocio y yo tengo el mío. Yo hago programas y me pagan. En principio no tengo mucha relación con su mundo. Bueno, pues parece que sí…

Por razones profesionales y por puro placer, tecleo a diario cierta cantidad de código para diferentes programas informáticos. En mis ratos libres me encanta escribir sobre mil temas, hasta puede que empiece una novela. A veces hago fotos y me las paso al ordenador. También grabo vídeos. Mis aplicaciones suelen ser software libre, pero en todo caso tengo derechos de autor sobre ellas. Lo que escribo es propiedad mía. Mis fotos son mías. Mis vídeos son míos.

Una vez a la semana hago una copia de seguridad de todo, por si las moscas. Para hacer estas copias de seguridad de mis datos utilizo CDs grabables, los cuales adquiero legalmente. Sin embargo, pago un fijo a una organización privada porque al parecer hay personas que se dedican a copiar ilegalmente música sobre estos soportes. Esta organización estipula que es una compensación justa que ellos deben cobrar en nombre de todos los autores (incluídos los que ni siquiera representan).

psicosis-1.jpg

Pues no lo acabo de ver. Muchas personas utilizan cuchillos jamoneros para matar. Un día me compré uno y no tuve que pagar un canon compensatorio para ayudar a las víctimas de los cuchillos jamoneros (que sin duda deben de ser muchas). La inquietud me invadió: ¿podía alguien reclamarme esa indemnización?

Preocupado como estaba, temiendo que me acusaran de asesinato por estar en posesión de un cuchillo jamonero de treinta centímetros, revisé la legislación. Existe algo que se ha denominado principio de presunción de inocencia, recogido en el artículo 24 de la Constitución, y que en la práctica impide que alguien me condene sin un juicio. De modo que ahora sí que no entiendo por qué me cobran un canon argumentando que usaré mis CDs para grabar música bajo derechos de autor… ¿no tengo derecho a un proceso justo que establezca mi culpabilidad? Me acusan por adelantado de un delito que no he cometido y me imponen un perjuicio económico. No sé como le sentaría a la gente que le cobraran una multa de tráfico al comprar el coche.

Otra pregunta que me hago, como ciudadano ignorante que soy, es de dónde emana el poder de la SGAE. Quiero decir, ¿cómo se regula su poder para imponer un impuesto o una sanción? Con mi desconocimiento de las leyes, todo puede ser, así me volví a la Constitución, esperando encontrar un artículo que dijera algo como “la SGAE tiene competencias en la imposición y recaudación de impuestos?. En su lugar, el artículo 133 viene a decir “la potestad originaria para establecer los tributes corresponde exclusivamente al Estado, mediante Ley?. Pues no sé yo. Sin saber mucho de leyes todo esto me parece un poco… cómo diría… irregular.

Así que al parecer, una corporación privada puede recaudar nuestro dinero, mientras viola nuestra presunción de inocencia, para compensar a sus asociados. Tras profundas meditaciones, he decidido crear la SGVCJ, Sociedad General de Víctimas de Cuchillos Jamoneros, que recaudará el 5% del precio de venta de cada cuchillo de estas características para compensar a las múltiples víctimas de estas armas. Da igual que quien lo compre insista en que lo utilizará exclusivamente para cortar jamón. Eso lo dicen todos. Asesinos.

[Libro] Piensa en Java

piensa-en-java.jpg Título: Piensa en Java
Autor: Bruce Eckel
Tema: Programación
Editorial: Pearson educación
Páginas: 906
ISBN: 84-205-3192-8
Idioma: Castellano
Traducción: Jorge González Barturen

A favor

Bruce Eckel tiene una inteligencia única para hacernos comprender cómo funcionan las cosas de verdad antes de aprender a utilizarlas (lo cual en informática suele ahorrar bastante tiempo), pero sin entrar en demasiados detalles técnicos, lo cual hace la información accesible a personas que no tengan grandes conocimientos técnicos.

El libro sigue un planteamiento muy progresivo: comienza con una ligerísima introducción a la orientación a objetos que permite entender los fundamentos del paradigma. También propone algunas nociones sobre ingeniería del software, detalle que personalmente me encanta: es preciso concienciar a los programadores de que las cosas deben hacerse bien… hay muchos otros detalles de calidad, como algún repaso por las versiones anteriores de Java que nos permiten entender por qué las cosas son como son.

En cuanto a la información que nos proporciona, hay que decir que el libro es bastante completo y que aborda partes menos populares de Java como el acceso a datos, la computación distribuída o el manejo de múltiples hilos.

Para terminar los pros, hay que decir que acompaña un CD-ROM con mucha información útil. Hay que destacar la versión en PDF de Thinking in C, que nos ayuda a entender los fundamentos. También se acompañan los ejemplos con su código fuente y una versión en PDF del libro (en inglés)

En contra

Lo principal es la traducción. Es absolutamente nefasta, lo cual me cuesta entender para un libro que va por su segunda edición… las partes de texto normal y corrientes están bastante bien resueltas, pero el código se ha convertido en inabordable.

Los traductores han tenido el terrible detalle de traducir partes del código sin entenderlo y sin probar que funciona, con lo que muchos ejemplos son ilegibles (con las dificultades que eso acarrea). Muchos comentarios están sin traducir, pero curiosamente, otras partes del código ejecutable sí. Quienes sean programadores sabrán a qué me refiero… en una parte del ejemplo, por ejemplo, se refiere al objeto «gusano» y en otra al objeto «worm». Los ordenadores no saben traducir, así que el programa, evidentemente, no funciona. Es muy complicado aprender un lenguaje a través de ejemplos si éstos no trabajan correctamente, por lo que la solución es tener siempre a mano los códigos del CD y la versión inglesa por si hay dudas.

En conclusión

Se trata de un libro muy interesante, estructurado con mucha inteligencia y con un desarrollo bastante progresivo: si se sabe leer con paciencia resulta muy instructivo. Por otro lado, es posible utilizarlo también como manual para repasar algunos conceptos. Lo peor, como ya he dicho, es la traducción. A pesar de ello, es el libro que recomendaría a quien tuviera que aprender a programar en Java.

Y para plagiar con todo mi descaro a CPI, terminaré poniendo una nota (numérica, eso sí) al invento. Yo le doy un 0000 1001 a la edición en inglés y un 0000 0111 a la edición en castellano. Es decir, un 9 y un 7, respectivamente :-P

Una mente inmortal

Esta temporada, desde el magnífico programa Redes (La 2, los martes a la 1:30) nos proponían, por medio de su sección titulada «La cuestión», que imagináramos cómo serán los ritos funerarios en el futuro, en el contexto de una cultura regida por la ciencia.

neural0.jpg

Hace unos días leía en el foro de Smart Planet la respuesta ganadora, enviada por Luis Congil, y que viene a proponer algo, que aún siendo ciencia-ficción me parece perfectamente posible, y de hecho, creo que lo será salvo que nos matemos unos a otros (eso me parece más probable, por desgracia…)

Luis Congil imaginó un futuro donde toda la información del cerebro podía ser informáticamente registrada y compartida en la red «Interbrain», permitiendo a las personas perpetuar su conciencia tras la muerte. El texto ganador puede leerse aquí. Les recomiendo que no se lo pierdan por nada del mundo.

La idea de Interbrain me parece absolutamente fascinante… ¿se imaginan las implicaciones que tendría? Sin duda me parece mucho más interesante investigar este aspecto que el de el retraso del envejecimiento físico… personalmente, creo que no me importaría tanto morir si pudiera seguir viviendo a un nivel intelectual. Por otro lado, pienso que librarse del cuerpo podía ser una enorme liberación y, al mismo tiempo, una terrible condena.

En cualquier caso, me temo que nos lo vamos a perder. Siempre llego tarde a todo :-P

La fraudulenta lucha contra el fraude

Ayer al mediodía pude ver en Antena 3 Noticias cómo el Ministerio de Industria ha lanzado una de esas campañas con página web para ayudar al ciudadano a defenderse de los nuevos fraudes basados en las nuevas tecnologías. En el informativo mostraban algunos detalles de la web, y algo me llamó poderosamente la atención de modo que decidí darme un paseo…

Visitando la web uno tiene la sensación de que intentan meterle el miedo en el cuerpo… sobre todo con frases como «¿Sabías que los cibercriminales pueden robarte el dinero sin que te des cuenta?» y mi favorita: «España ocupa el tercer lugar en el ranking de los países de todo el mundo en el que más se comete fraude on-line». Y lo proclaman con ese orgullo, como si no fuera con ellos la cosa… :-P

Pero no quería hablarles de eso… la web en sí cuenta con el patrocinio de Panda Software, y hay una sección absolutamente fantástica, llamada protégete gratis que viene a decir que para evitar el fraude hay que instalarse el Panda. Claro. En ningún motivo se mencionan normas básicas de protección como utilizar un navegador seguro, un cliente de correo fuerte y desconfiar de cierto tipo de mensajes. Para qué. Con el Panda todo se arregla solo. Y para animarte, te lo regalan. Supongo que lo siguiente será que repartan aspirinas para prevenir el embarazo no deseado.

Hasta te ofrecen una versión para Linux. La verdad es que el detalle me ha gustado, pero sigo sin verle el sentido: ¿el fraude se evita con software antivirus? No es que desconfíe de Panda -que también- sino que no veo cómo un programa me protegerá de, por ejemplo, el phishing, si nadie me ha explicado qué es ni qué precauciones debo tomar.

El gobierno no debería dar cobertura a una campaña con un planteamiento tan simplista… creo que es necesario informar, alertar y prevenir, y huir de la filosofía comercial de «instala nuestro programa que puede con todo». Porque no suele ser así. Y cito:

La mejor forma de protegerte contra el robo de identidad y el fraude on-line es contar con una buena protección antivirus instalada en tu PC capaz de detectar todos los códigos maliciosos que pueden robar tus datos o intentar engañarte.

¡Todos! ¡Lo detecta todo! Decir esto tan alegremente me parece muy gracioso, aunque sobre todo lo considero una temeridad… no sé qué problema hay con el fraude entonces, si existe un software que lo detecta absolutamente todo… esto ya sería bastante criticable si fuera mera publicidad de Panda Software, pero que además se haga al amparo del gobierno, en una página que hemos pagado todos, ya es de traca.

Y así nos va… supongo que ahora todo el mundo se instalará el @#$& Panda y, como lo detecta todo, en más o menos un mes España dejará de ocupar ese tercer puesto en fraude on-line. Y espero que sea así, porque en caso contrario, sí que habremos sido todos víctimas de un auténtico fraude… pero a ese tipo estamos ya acostumbrados…

Les juro que con estas cosas le hierve a uno la sangre.

La web 2.0

¿Se acuerda de cómo era la web hace dos o tres años? Probablemente no se parecía mucho a como es ahora, y de hecho la misma existencia de este blog es una prueba de ello… las cosas han cambiado mucho en poco tiempo.

treeshadow.jpgHace solo unos años las bitácoras no existían: sólo cuatro informáticos colgados teníamos páginas personales, la mayoría programadas en HTML puro y duro (sobre todo duro). Incluso recuerdo que llegué a utilizar el MS FrontPage Express… qué tiempos aciagos :-P. De hecho, durante mucho tiempo, la web consistió sólo en páginas absolutamente estáticas: simples documentos enlazados unos con otros. A eso es a lo que ahora denominamos como Web 1.0.

Con el tiempo, aparecieron los grandes portales: estas páginas necesitaban algo más: foros, chats, algo de interactividad. Estas nuevas necesidades nos trajeron el JavaScript y el Java, con lo que Internet se convirtió en una herramienta mucho más potente e interesante. Una buena parte de estas empresas se hundieron (el famoso fracaso de las “punto com?), pero nos dejaron importantes avances. A estos avances los hemos denominado después como Web 1.5 (qué imaginación).

Sin embargo hubo un momento en que la web marcó un gigantesco punto de inflexión, que sólo hemos sido capaces de apreciar cuando han transcurrido ya unos años… hemos sido partícipes de un renacimiento web, con nuevas ideas y nuevas tecnologías, en su mayoría orientadas a una visión social y participativa de Internet, basada cada vez más en contenidos y no en tecnologías.

Todo esto es muy abstracto, y seguro que más de uno está deseando leer ejemplos. Bien, pues está leyendo uno: no he necesitado aplicar una enorme cantidad de conocimientos para crear este blog y mantenerlo. De hecho, muchas personas tienen uno y no tienen ni idea de informática. Por otro lado tenemos la Wikipedia, como buque insignia del fenómeno wiki, que es otro buen ejemplo de esta nueva filosofía.

Algunas ideas…

Desde mi punto de vista, una de las novedades más interesantes que nos ha traído la web 2.0 es la sindicación. Esto podemos verlo como una simple comodidad, pero representa mucho más: la independencia entre el contenido y el contexto: usted mismo puede estar leyendo esto en una página web como Bloglines, en su navegador web, en su cliente de correo o en un agregador cualquiera para RSS o Atom.

Otro punto novedoso son los llamados servicios web. Para entendernos, consisten en que un equipo ofrece un servicio a la comunidad, de manera que los ordenadores que quieran hacer uso de él no tienen más que conectarse al primero. Por ejemplo, imagine un servidor, conectado a Internet, que mantiene una lista con la programación de la televisión. Podríamos diseñar un programa que obtuviera esta información y la mostrara en nuestra pantalla. Precisamente tengo un widget en el Mac que se conecta a un servidor de este tipo y me descarga la programación actualizada. Si no entiende muy bien cómo puede ser esto posible, puede revisar el artículo sobre los protocolos.

Resumiendo, y por dejar sentada alguna idea, la web 2.0 es algo que no sabemos muy bien cómo definir con precisión pero que sabemos que está ahí. La idea central de todo esto es la modularidad: la separación entre servicios, entre contenido y contexto… construyámoslo todo en piezas pequeñas bien conectadas para poder intercambiarlas y compartirlas con facilidad. La vida es un Lego.

Que no panda el cúnico (nunca mejor dicho…)

Todo empezó una noche de primavera. Estaba yo solo en casa, con un portátil encima de la mesa con el Norton Antivirus caducado y por tanto en peligro que reclamaba mis cuidados. Me decidí a salir por un momento de mi universo Mac y ponerme a pensar cómo iba a manejar aquella situación: el ordenador necesitaba urgentemente un antivirus actualizado.

20040907panda.jpg

Tras buscar entre tarrinas, fundas y más fundas de cedeses, constaté lo inevitable: no tenía ni una sola copia actualizada de ningún antivirus. Vaya situación. En ese momento me acordé de un Panda Antivirus original que tenía guardado en algún lugar… para tranquilizarles, diré que me lo habían regalado en un curso sobre seguridad informática (gran paradoja…). Lo observé con desconfianza: había tenido problemas con el viejo Panda Platinum hacía unos años… Comencé a leer la información de la caja: «máxima protección», «impide el acceso de hackers», «lo instalas y te olvidas» (esto último resultó ser cierto, bellacos).

Con tanta frase, tanta característica interesante y tantos logotipos de «mejor producto del año», pensé que tal vez no sería tan malo como las anteriores versiones… vamos, que lo mismo se habían reformado. Los requisitos mínimos me animaron: Pentium 150 Mhz. Pensé que el Centrino podría de sobra con él, así que decidí instalarlo…

Que el autoarranque se bloqueara no fue un buen augurio, pero decidí continuar… finalmente, y tras una espera eterna, logré instalarlo, validando más tarde mi flamante licencia mediante un proceso bastante poco intuitivo… Pero ya tenía mi ordenador protegido. O eso pensaba.

El primer reinicio fue inusualmente lento. Pero era el primero, así que no le di importancia. Cinco minutos clavados tardó en iniciarse el Windows XP, cuando antes arrancaba en un par de minutos. No pasa nada. Cuando por fin pude abrir el panel de control del antivirus me encontré con una interfaz de las que odio: un montón de dibujos y de parafernalia tan bonita como lenta. Acceder a cada menú era una nueva aventura. Intenté tranquilizarme y tomar aire. Configuré las opciones como más me gustó, y empecé a descargar las actualizaciones.

En todo ese tiempo no logré utilizar el ordenador (256 de RAM, 1 GHz) para nada que no fuera el #@$ Panda. Al fin, la actualización terminó de bajarse. En ese momento, el antivirus me informa de que ha ocurrido un error y que debo reiniciar mi máquina. Ese detalle me indignó hasta los topes… ¿cómo puede un antivirus exigirme el reinicio del equipo por un error interno? ¿y si no puedo reiniciarlo? ¿así me protege el nuevo Panta Antivirus + Antispyware Titanium 2006?

Me resistí, pero al final tuve que claudicar. Reseteé el ordenador con cara de pocos amigos. Esta vez tardé 7 minutos en poder usar el ratón. Me estaba poniendo de color verde. La barra de tareas de Windows aparecía a la mitad, nunca había visto nada parecido. Sin duda el programa más lento y pesado que he visto en la vida. Un virus habría perjudicado menos el rendimiento de la máquina.

Así que, ciscándome en los muertos del tal panda, me dispuse a desinstalarlo. Error. Lo intenté de nuevo. Nada… En esa situación, la información del disco comenzaba a estar en cierto peligro… Por fortuna, pronto sería fulminado por las tropas imperiales :-P. Reinicié en modo «a prueba de fallos» como administrador. Tampoco podía. Borré los archivos por las bravas, limpié el registro. Reinicié el portátil, que tardo poco más de un minuto en arrancar, libre de sus cadenas de bambú.

Y así terminó mi breve e intenso coqueteo primaveral con Panda. Estoy pensando, según voy escribiendo esto, en instalarlo en mi Pentium I a ver si de verdad funciona, tal y como promete la publicidad… es intrigante… igual es tan lento que acaba tirando más rápido… creo que voy a probarlo :-P

He aprendido muchas cosas de esta aventura. La más importante es que Panda Software no ha sido todavía capaz de desarrollar algo decente, y posiblemente nunca lo hará. También me he planteado delicadas preguntas sobre los criterios que siguen las empresas para dar sus certificaciones. Por desgracia, todas mis conclusiones están llenas de palabras malsonantes e improperios diversos, así que me voy a morder la lengua antes de decir que me encantaría ver la cabeza de ese maldito panda separada del resto de su cuerpo.

Pero la publicidad no engañaba: «lo instalas y te olvidas». De volver a usar tu ordenador, se entiende.

El software libre cava su propia tumba

Posiblemente seguramente el titular sea un poco sensacionalista, pero pone de manifiesto lo que desde mi punto de vista es una realidad: la filosofía del software libre da cobertura al software propietario. Mejor dicho: el software libre y gratuito ayuda involuntariamente a mantener el modelo de negocio del software propietario de pago. Y me explico:

De un tiempo a esta parte han surgido muchos proyectos de software libre que buscan replicar software comercial, creando versiones libres (y gratuitas en la mayor parte de los casos) de programas bastante utilizados. Ejemplos los hay a patadas, aunque posiblemente el más conocido es el OpenOffice (sustituto libre de Microsoft Office).

180px-heckert_gnu_whitesvg.pngEn principio, todo este software libre se desarrolló gracias a la popularización progresiva de Linux, cuya difusión creó la necesidad de contar con sustitutos de los programas más populares que funcionaran en este sistema… hasta aquel momento, casi la totalidad de las aplicaciones que se desarrollaban estaban diseñadas en exclusiva para Windows, y a la comunidad linuxera no le quedó otra que ponerse manos a la obra y construir desde cero todas las aplicaciones que necesitaban.

De un tiempo a esta parte, todo este software libre, originalmente diseñado para entornos Linux, ha sido portado a sistemas Windows, y últimamente a entornos MacOS. Esto, que representa muchas ventajas, es algo que me preocupa. Esta tendencia del software libre a funcionar en entornos no libres puede llegar a ser perjudicial para su existencia.

¿Cuántos de ustedes están utilizando en este momento Windows? Seguro que muchos. No voy a entrar a valorar si ha adquirido o no su correspondiente licencia. Por desgracia, en los sitemas basados en Windows, no sólo es necesario contar con un sistema operativo, sino que además es imprescindible contar con cierta cantidad de software de aplicación. Y sabemos que con Windows no viene preinstalado casi nada. Así pues, todas las aplicaciones adicionales deben (en principio) comprarse e instalarse por separado.

¿Se ha detenido a pensar en el coste económico que puede suponer esto? Suponiendo que tiene una copia de Windows perfectamente legal, equiparlo con todo el software necesario puede resultarle bastante caro. Salvo, eso sí, que utilice software libre para Windows, que suele ser gratuito… En principio no hay nada malo en ello, es estupendo que muchas personas se ahorren un dinero…

El problema, bajo mi punto de vista, es que la existencia de programas gratuitos multiplataforma frena la expansión de Linux en cierto sentido: muchos usuarios domésticos no podremos permitirnos jamás pagar las licencias de todo el software comercial que utilizamos sobre Windows, de modo que utilizamos sus equivalentes libres y gratuitos. Y como podemos disponer de este software en nuestro Windows (o en nuestro Mac OS) no vemos razones para pasarnos a Linux…

De modo que el mismo software libre nos proporciona las aplicaciones para que no tengamos que decir adiós a nuestro sistema operativo no-libre…

Si el modelo del software propietario y comercial se impusiera, tendríamos que pagar por todas las aplicaciones que utilizamos y nos ataríamos a los fabricantes… si todos los usuarios domésticos que utilizan Windows tuvieran que comprar mañana todo el software que utilizan y no existiera software libre y gratuito para Windows, posiblemente habría una enorme fuga de usuarios hacia entornos tipo Linux: el tiempo de aprender a utilizarlo se compensaría de sobra por el ahorro económico…

Por eso pienso que el software propietario sobrevive en buena parte gracias al libre… supongo que al final, los buenos son tan buenos que terminan pareciendo algo tontos…

El problema de la parada

Terminaba el post de ayer sobre los bucles infinitos comentando más o menos que una máquina no podría leer un bucle infinito sin quedarse irremediablemente inmersa en él. En los comentarios, Trebol-A nos recordaba un chiste muy bueno sobre el tema con estas palabras:

Pocas veces me he reído tanto como con el chiste aquel del programador muerto en la ducha con un bote de champú en las manos que decía:
– Lavar
– Enjuagar
– Repetir

¿Por qué a los ordenadores se les atragantan tanto los bucles infinitos? ¿No pueden detectarse o evitarse de alguna manera? La respuesta es sencilla: no. Una explicación formal y más precisa tendremos que buscarla en el llamado «problema de la parada«.

Este problema y sus conclusiones tienen implicaciones muy importantes en la gestión de los bucles infinitos que no todo el mundo conoce. Hay que explicar antes de nada que los programadores disponemos de herramientas, conocidas como «depuradores» que nos ayudan a eliminar los errores de nuestras aplicaciones. Podíamos pensar en un depurador que nos alertara de la presencia de bucles infinitos, pero por desgracia, tal herramienta no existirá nunca.

Una de las utilidades del problema de la parada consiste en demostrar que un ordenador no es capaz de reconocer si un programa entra en un bucle infinito. ¿Por qué? Vamos a verlo: imaginemos un ordenador que mostrará un «sí» en pantalla si el programa dado tiene un bucle infinito y un «no» si no lo tiene.

El ordenador comenzaría a ejecutar el programa. Si no tiene un bucle infinito, cuando el programa termine, mostrará un «no». Supongamos ahora que el programa tarde, por ejemplo, 10 años en realizar sus tareas, sin entrar en un bucle infinito. Al final de los 10 años, el ordenador nos mostrará un bonito «no» en pantalla.

Ahora supongamos que introducimos otro programa, éste con un bucle infinito. El ordenador ejecutará el bucle un número indefinido de veces. Y ahí se quedará para siempre. Jamás podrá salir del bucle, por lo que jamás nos mostrará ese «sí» que nos indicaría precisamente la presencia de un ciclo.

Ahora podemos pensar «bueno, si el ordenador tarda mucho tiempo en mostrarnos el «sí», significará que el programa entró en un bucle infinito». Pero ¿cuánto tiempo es «mucho»? ¿Un año? ¿dos? Puede ser que nuestro programa sea complicado y tarde mucho tiempo en ejecutarse… ¿dónde está el límite? Ese el problema precisamente: no podemos predecir si obtendremos respuesta o no, no sabemos si el ordenador parará o no para poder mostrarnos el resultado por pantalla. Dicho de otro modo, si no aparece salida en pantalla, no podremos saber si el programa sigue calculando normalmente o es que ha entrado en un bucle infinito…

Sólo los humanos podemos ver un bucle infinito y no quedarnos el resto de la vida pensando en él. Una muestra más de que los ordenadores son bastante torpes… mucho más que el más estúpido de los humanos. Y eso es ser muy estúpido :-P

Bucles infinitos

No me he cansado de repetir (todavía) que los programas informáticos no son otra cosa que conjuntos de instrucciones que el ordenador «comprende» y ejecuta secuencialmente. Por ejemplo, imaginemos un programa formado por tres instrucciones que se leerán en orden (primero la 1, luego la 2 y por último la 3):

  1. Pide al usuario que escriba su nombre
  2. Escribe en la impresora el nombre del usuario
  3. Fin

Es fácil ver entonces que, a lo largo de la ejecución de un programa, el ordenador irá leyendo y procesando estas órdenes de una en una. Claro que no todo es linealidad pura y dura: muchas veces, al diseñar un programa, nos interesaría repetir algunas instrucciones un determinado número de veces, o ejecutarlas sólo si se dan ciertas condiciones.

Todo esto son mecanismos que nos permiten alterar de alguna manera el flujo del programa. Imaginemos que quisieramos pedir e imprimir el nombre de 3 usuarios con el programa anterior. Una forma sería:

  1. Pide al usuario que escriba su nombre
  2. Escribe en la impresora el nombre del usuario
  3. Pide al usuario que escriba su nombre
  4. Escribe en la impresora el nombre del usuario
  5. Pide al usuario que escriba su nombre
  6. Escribe en la impresora el nombre del usuario
  7. Fin

Pero esto no parece muy productivo… tal vez podríamos hacer algo así:

  1. Repite las siguientes instrucciones 3 veces:
    1. Pide al usuario que escriba su nombre
    2. Escribe en la impresora el nombre del usuario
  2. Fin

Esta estructura se conoce como «bucle«, pues supone introducir un ciclo en el orden de ejecución del programa. Un bucle está formado por una condición y un conjunto de instrucciones que se ejecutan mientras se verifica esa condición. En nuestro caso, la condición sería que «el número de iteraciones del bucle sea menor o igual a 3», pero podemos poner la condición que queramos.

Y también puede ser que la condición que seleccionemos se verifique siempre… con lo cual el ordenador quedará permanentemente ejecutando las instrucciones que compongan el bucle. Por ejemplo, el bucle…

  1. Repite la siguiente instrucción siempre que 1 sea igual a 1
    1. No hagas nada

… dejará al ordenador en un ciclo continuo de no hacer nada. Tampoco será un problema serio, pues el bucle sólo afectará al programa que lo contenga, y en principio el Sistema Operativo no se desestabilizará. Este tipo de bucles son conocidos en informática como bucles infinitos, y pueden causar fallos bastante graves…

Tal vez piense que evitarlos debe de ser trivial, pero rara vez se sabe de antemano cuántas veces se ejecutará un bucle, y puede ser que suceda algo que no hayamos previsto en el diseño que desencadene una secuencia sin fin… tiene su cosa, no crea…

Bien, ahora imagine un programa con esta pinta:

  1. Ejecuta la instrucción número 1

¿Qué hará el ordenador? Leerá la instrucción 1. ¿Qué dice? Que ejecute la instrucción 1. Vale, voy a leerla. ¿Qué dice? Que ejecute la instrucción 1… y así hasta el infinito (o hasta que el Sistema Operativo arrebate el procesador al programa)

Por cierto, que tiene usted mucha suerte: si fuera un ordenador jamás habría llegado a leer esto, sino que se habría quedado eternamente leyendo el bucle anterior… ¿Por qué? Bien, se trata de algo que veremos en la próxima entrada :-P

Far from SF

Ya disculparán esta temporada tan alejado de ustedes, pero me encuentro inmerso en los exámenes de septiembre. Sí, ya sé que suena ridículo, se trata de la famosa adaptación al calendario europeo… estoy con el tiempo justo, así que les dejaré a ustedes la valoración sobre la conveniencia o no de tal calendario…

Volveré el sábado 15, tengo que hacer un último esfuerzo durante esta semana, como comprenderán. Les adelanto que habrá novedades muy interesantes durante este verano, espero que estén aquí para vivir juntos todos estos cambios que se avecinan.

?nimo y suerte a quienes estén inmersos en exámenes, oposiciones o sencillamente en el mar :-)