jueves, 8 de enero de 2009

Quién soy, HAL

Digerido ya el inevitable aperitivo ([1], [2]), y con el emulador de terminal abierto en nuestro escritorio, es hora de echar el diente al meollo del asunto.

Pero, ¿podemos realmente hacerlo ya? Sin duda. Una vez que entendamos lo que en primer lugar está presente en la consola. Por cierto, recomiendo maximizar la ventana del emulador del terminal y olvidarse por completo de sus, todavía presentes, objetos gráficos (barra de menús, iconos, pestañas, etc.). Nuestra atención se va a concentrar exclusivamente en el espacio de trabajo. Incluso este concepto, espacio de trabajo, debería ser suprimido de nuestra interpretación de lo que tenemos ante nosotros, por tratarse tan sólo de un último residuo de la metáfora visual. Al fin y al cabo, el emulador de terminal es tan sólo el dispositivo habitual para introducir preguntas u órdenes a través del teclado y para que la máquina nos devuelva sus respuestas sobre la pantalla, pero podría sustituirse perfectamente por un puro sistema de comunicación por voz, donde la idea de espacio no tiene sentido. Por tanto, sólo debemos fijarnos en la secuencia lingüística que iremos introduciendo y en la que produzca nuestra computadora como consecuencia de nuestras intervenciones.

La primera secuencia de texto que encontramos es algo parecido a esto:

luis@hal:~$

( donde la palabra que precede a @ será nuestro nombre de usuario y la palabra que le sigue el nombre de nuestro ordenador. )

Se trata de una invitación de la máquina a iniciar el diálogo. Una invitación que incluye cierta información que nuestra máquina desea proporcionarnos incluso antes de que empecemos a hablar.

La máquina viene a decirnos algo así:

Hola, Luis. Soy HAL y estoy a tu disposición. Aquí, en el lugar de trabajo que te tengo reservado. ¿Quieres que haga algo por ti?

Entre el mensaje sucinto de HAL ---a partir de ahora, llamaré HAL a mi máquina--- y la "traducción" que he dado de él parece haber una gran diferencia. En realidad, no la hay. Como ya dije antes, HAL habla en una lengua especial, que se caracteriza, entre otras cosas, por ser extremadamente económica. El usuario debe acostumbrarse a esta forma de hablar, a esta lengua. No es muy distinto de aprender un idioma nuevo, aunque ciertamente es bastante más fácil, puesto que cualquier lenguaje artificial, como el que habla HAL, carece de ambigüedades, de significados múltiples o dobles sentidos, y consta de un léxico reducido y de un conjunto bastante simple de construcciones sintácticas. El usuario paciente será capaz, sin demasiado esfuerzo, de aprender lo bastante de esa lengua como para que su HAL particular le ayude a realizar sus tareas cotidianas.

Conviene advertir que, en teoría, podríamos configurar buena parte de la lengua de HAL a nuestra medida. Podríamos, en concreto, modificar todo su léxico para que se asemejase al que habitualmente empleamos. Esto, de hecho, suele hacerse en algunos pocos casos, aunque no tengo noticia de que nadie lo haya intentado para todos o casi todos los elementos de ese léxico.

Un ejemplo de mensaje hecho a medida es, justamente, este primero que estamos comentando. En realidad, los creadores de nuestra distribución GNU/Linux son los que han decidido que la bienvenida de HAL tenga esa forma, y puede ser diferente según la distribución con la que operemos.

Nosotros mismos podemos modificar ese mensaje con relativa facilidad y poner en su lugar nuestra "traducción". Sin embargo, no lo recomiendo. No sólo porque lo bueno, si breve, dos veces bueno, sino porque cada vez que HAL responda a nuestras intervenciones, volverá a presentarnos la larga retahíla ---HAL en esto es muy educado---, algo que hace gracia al principio, pero que harta a los pocos minutos.


N.B. Pero para que nadie se quede con las ganas, he aquí cómo se hace. [ Salte este párrafo cualquier usuario que no quiera complicarse innecesariamente la vida ;-) ]:

  1. Editar el fichero .bashrc o crearlo, si no existe (con el punto, como primera letra del nombre). De momento, como no sabemos hacerlo desde la consola, hagámoslo con un editor del sistema gráfico.

  2. Añadir el texto siguiente (en una única línea):

    export PS1="Hola, \u. Soy \H y estoy a tu disposición. Aquí, en el lugar de trabajo que te tengo reservado. ¿Quieres que haga algo por ti?\n"

  3. Guardar el fichero dentro de nuestra carpeta (directorio) personal (/home/[nombre_usuario]).

  4. Cerrar la ventana del emulador de terminal y volver a abrirla. [ Si el cambio realizado se mantiene, este paso no será necesario la siguiente vez que entremos en la máquina ].

  5. Para deshacer esta configuración, habrá que eliminar el fichero recién .bashrc, o quitar de él la línea introducida, y repetir el paso inmediatamente anterior.




Como decía, los creadores de nuestra distribución, siguiendo la forma típica de hablar de HAL, nos han configurado un mensaje de bienvenida relativamente amigable. De no haber sido por ellos no hubiésemos encontrado nada ahí, salvo el silencio de la pantalla vacía. Tendríamos que ser nosotros los que tomásemos la iniciativa ante este aparente silencio. HAL estaría escuchando, pero sin menor advertencia por su parte de que lo está haciendo.

En ese silencioso caso, en el que podemos encontrarnos en alguna ocasión ---por ejemplo, si accedemos a la consola de una máquina remota más reservada en su trato---, lo normal es que nos preguntásemos cosas como ¿quién soy yo?, ¿quién eres tú?, ¿dónde estoy?, o sea, ese tipo de cuestiones que uno se plantea cuando está totalmente desorientado.

Probemos a plantear a HAL estas clásicas preguntas existenciales. Empecemos por la primera de ellas: "¿Quién soy yo?".

Por lo pronto, y ya prevenidos sobre el desinterés de HAL hacia toda ocurrencia lingüística que no sea absolutamente necesaria, prescindiremos de los signos de interrogación, de las mayúsculas y de los acentos. Tecleamos, pues, lo siguiente:

quien soy yo

HAL no responde. "!Qué es esto!", se preguntará el lector. Resulta que, ahora, la máquina supuestamente parlanchina y servicial, es más muda que mi tostadora".

No cunda el pánico. HAL no ha respondido, porque tenemos que buscar algún medio de transmitirle que ya hemos terminado de hacer nuestra pregunta. Si no, ¿cómo se las va a apañar el pobre para saber si vamos a seguir escribiendo más cosas, si vamos a añadir más palabras a la pregunta? HAL es bastante listo, pero todavía no llega a poseer el don de la adivinación y, en consecuencia, no puede inferir de nuestra expresión facial ---puesto que no la ve--- nuestra impaciente espera; ni nuestro texto contiene una entonación de la que él pueda deducir que hemos finalizado la frase. ¿No valdría el signo de interrogación para marcar ese final? Podría haber sido así, si lo único que le planteásemos a HAL fuesen preguntas. Como también construiremos enunciados de otras clases, es necesario hacer que él sepa, en todas las situaciones posibles, que le toca responder. Es decir, debemos elegir un signo más genérico que el de interrogación. Algo parecido a lo que hacíamos cuando jugábamos de niños con los walkie-talkies y articulábamos el diálogo con el famoso "cambio", fuese lo que fuese lo que dijésemos.

Ese "Cambio. Te toca hablar a ti" que le enviamos a HAL, se genera de manera simple y universal pulsando la tecla Enter.
O sea, que la tecla Enter significa exactamente para HAL que responda o ejecute lo que le acabamos de decir.

Probemos de nuevo ---y doy por hecho que a partir de este momento terminaremos nuestras intervenciones siempre con esa tecla---.

quien soy yo [Enter]

HAL ahora sí que responde, pero lo hace con esta críptica sentencia:

bash: quien: orden no encontrada

O, también, según la configuración por defecto de nuestra distribución, la última parte podrá estar en inglés:

bash: quien: command not found

Tranquilidad. Los primeros pasos en una lengua extraña, son siempre los más costosos. Veamos con calma la respuesta de HAL.

Por el momento, vamos a prescindir de tratar de comprender la enigmática primera palabra de su frase:

bash:

Lo que queda es esto [ en versión inglesa ]:

quien: command not found

Si nos fijamos con detenimiento podemos deducir unas cuantas cosas interesantes y nuevas sobre la lengua de HAL y su manera de expresarse.

La primera de todas es que HAL habla básicamente en inglés, una variante artificial del inglés, como veremos en detalle. El inglés es la lengua científica universal y, en general, la lengua que todos conocemos en alguna medida. A la larga, para hablar con HAL, hay que pensar principalmente en inglés, aunque la mayoría de las distribuciones GNU/Linux hacen un esfuerzo por aliviar en lo posible la carga añadida para los usuarios no anglo-parlantes y suelen traducir a otras lenguas muchas de las respuestas típicas de HAL. De ahí que la contestación de HAL pueda aparecer también en castellano. Mi recomendación, no obstante, es la de que nos habituemos al inglés, en la medida de lo posible. No sólo será más natural nuestra charla con HAL, sino que, de paso, aumentaremos nuestro conocimiento de la lengua de Shakespeare.

Por otra parte, observamos que HAL nos devuelve la primera palabra de nuestra pregunta, "quien", y viene a decir de ella algo así como que es una orden que no ha encontrado.

O sea, que, en primer lugar, nuestra pregunta la entendió como una orden; lo que no deja de chocar, siendo como era sólo una pregunta. Pero es que para el servicial de HAL todo lo que sale por nuestra boca son órdenes, órdenes que trata de cumplir rápida y escrupulosamente.

En segundo lugar, parece que no entendió la orden que le dimos, quizá porque se quedo sólo con la primera parte de ella: el "quien" del "quien soy yo", que es la única palabra que nos ha devuelto de nuestra frase original. ¿No será porque el espacio entre las palabras le ha confundido? Veremos más tarde cómo efectivamente el espacio tiene un significado especial para HAL. De momento, volvemos a probar sin espacio, a ver qué pasa:

quiensoyyo

¡Menudo fiasco. La respuesta es casi la misma!:

bash: quiensoyyo: command not found

¡Hombre! tampoco hay que ponerse así, impaciente usuario. Un pequeño avance sí hemos logrado. Al menos, HAL ahora sí ha captado la totalidad de la pregunta. No íbamos, pues, descaminados en nuestra deducción sobre el significado especial del espacio. En todo caso sigue sin entender la pregunta.

¿Qué hacemos? ¿Desistir y mandar todo este galimatías al cuerno? ¡Un momento, aún queda por probar una cosa!: decírselo en inglés, en lugar de en castellano. O sea, "Who am I?", probemos ---de nuevo sin espacios, ni mayúsculas, de una tirada:

whoami

Y la respuesta es ...

luis

¡Acertamos! Ya se ve que, aunque los mensajes de respuesta de HAL pueden estar traducidos, las preguntas que nosotros le hagamos deben realizarse en inglés.

Más de un lector se preguntará si no es posible configurar también a medida estas preguntas u ordenes que se le pueden transmitir a HAL. Por ejemplo, para verterlas al castellano. Efectivamente es posible, aunque poco aconsejable. Esta vez por la razón de que nos llevaría probablemente más trabajo que aprender las versiones ingleses y las expresiones típicas de HAL. Si, a pesar del consejo, se quiere saber cómo hacerlo, léase la siguiente receta:


N.B. Es posible crear sinónimos para las ordenes nativas que entiende HAL, estos sinónimos se llaman, técnicamente, alias. Por ejemplo, si queremos hacer que la orden quiensoy sea un alias de whoami, habría que proceder de un modo parecido al que seguimos cuando personalizamos el mensaje de bienvenida:

  1. Editar el fichero .bashrc o crearlo, si no existe o lo eliminamos antes.

  2. Añadir la siguiente línea:

    alias quiensoy="whoami"

  3. Guardar el fichero dentro de nuestro directorio personal (/home/[nombre_usuario]).

  4. Cerrar la ventana del emulador de terminal y volver a abrirla.




Seguro que alguien se pregunta qué hubiese pasado si, en lugar de minúsculas, hubiésemos usado mayúsculas.

Nada, nada, a probarlo:

WHOAMI

Y la respuesta:

bash: WHOAMI: command not found

Interesante. Para HAL no es lo mismo mayúscula que minúscula. Conviene recordarlo para la próxima.

Vaya, no está mal para un primer mordisco. Hemos aprendido a interpretar la invitación de HAL al diálogo, su mensaje de bienvenida, y hemos logrado plantearle una pregunta que entendió y que nos respondió adecuadamente. Por el camino ---y esto nos servirá para nuestras futuras conversaciones--- hemos deducido unas cuantas cosas fundamentales sobre su lengua, que bien conviene repasar como colofón de esta sesión:

  • HAL habla en una variante artificial y lacónica del inglés.

  • Todas nuestras intervenciones son para él ordenes.

  • Para determinar el fin de nuestras órdenes y para invitarle a que las ejecute terminamos nuestras órdenes con la tecla Enter.

  • El espacio tiene un significado especial para HAL.

  • A HAL no le da igual si una letra es mayúscula o minúscula. Y, de momento, parece que sólo entiende las minúsculas.

  • La orden whoami nos dice nuestro nombre de usuario.

2 comentarios:

  1. Vaya, no decepcionan las entradas. El único problema con el que me he encontrado es el desconocimiento de cómo se crea un archivo .bashrc (o cómo se edita), pero de momento es algo de lo que puedo prescindir, porque no me interesa modificar el lenguaje de HAL.

    Un saludo.

    ResponderEliminar
  2. Gracias, S. Dedalus por tus comentarios, éste y los que has hecho a otros artículos del blog.

    En cuanto a tu problema concreto con .bashrc, te cuento:

    Es casi seguro que tu distribución tiene ya el fichero .bashrc (ten en cuenta que el punto forma parte del nombre del fichero). O sea, que, a pesar de lo dicho en el texto del artículo, que voy a modificar adecuadamente, probablemente no será necesario crearlo, bastará con editarlo.

    A estas alturas de las "Conversaciones" no sabemos editarlo desde el terminal, habrá que hacerlo, pues, con alguna aplicación del entorno de escritorio. El camino más rápido es abrir el gestor de ficheros (Nautilus, si el entorno es Gnome; Konqueror o Dolphin, si el entorno es KDE; xfmm si el entorno es XFce, etc.). Al gestor de fichero se accede desde el menú de aplicaciones. Ya con la ventana del gestor de ficheros abierta, tendrás seguramente que ir a su menú y buscar la opción que te permita modificar la visualización de los ficheros, de forma que se vean también los ficheros ocultos (.bashrc es un fichero oculto). Activada la visualización de ficheros ocultos, pinchas en .bashrc, que se abrirá dentro de un editor de textos. Lo modificas y guardas los cambios.

    En todo caso, esta tarea no forma parte del texto principal. Es una nota al margen, como indica su tipografía. Es suficiente seguir la lectura del texto principal y prescindir de sus notas al margen.

    ResponderEliminar