viernes, 23 de enero de 2009

HAL y las lenguas: conclusiones

Con la miniserie sobre HAL y las lenguas, que nos ha ocupado nada menos que cinco artículos sin contar con éste, hemos realizado una experiencia real de lo que es un tipo de trabajo habitual con HAL.

El objetivo primordial era no sólo hacer que HAL nos hablara en la lengua o lenguas deseadas, sino, sobre todo, experimentar en vivo la forma que adopta un diálogo con HAL dirigido a la realización de una tarea concreta, los procedimientos que habitualmente se ponen en juego y las órdenes que más frecuentemente se utilizan.

Consciente de la dificultad que esta primera inmersión en una situación real de diálogo puede tener para el principiante, me parece oportuno esquematizar la conversación propiamente dicha y extraer algunas conclusiones útiles para el futuro.

Recordemos, antes de empezar, la tarea que nos propusimos llevar a cabo. Se trataba de hacer que HAL nos hablase, a nosotros particularmente, en una lengua diferente al inglés, sin que ello afectase a la lengua que otros usuarios decidiesen establecer. Si esta nueva lengua fue la que elegimos en el momento de la instalación, parte de la tarea habrá sido asumida por el arquitecto de la distribución. Por eso, es mejor plantearse el caso más difícil posible, un caso en el que el arquitecto seguramente no haya tomado parte, por ejemplo, el japonés. Por tanto, la tarea concreta que nos propusimos fue hacer que HAL nos hablase primero en castellano y después en japonés.

Veamos paso por paso cuál fue nuestra conversación. Para facilitar la lectura adopto las siguientes convenciones:

  • Nuestras intervenciones van precedidas de la palabra YO.

  • Las intervenciones de HAL van precedidas de la palabra HAL.

  • Nuestras meditaciones, lo que pensamos antes de hablar con HAL, pero que no le decimos, irán en cursiva.

  • Los comentarios del autor a la conversación van entre corchetes.



Hechas estas aclaraciones, recordemos cómo fue el diálogo:

YO:
Voy a pedirle a HAL que me diga cuál es mi entorno local en este momento.

locale


HAL:

LANG=C
LANGUAGE=C
LC_CTYPE=C
LC_NUMERIC=C
LC_TIME=C
LC_COLLATE=C
LC_MONETARY=C
LC_MESSAGES=C
LC_PAPER=C
LC_NAME=C
LC_ADDRESS=C
LC_TELEPHONE=C
LC_MEASUREMENT=C
LC_IDENTIFICATION=C
LC_ALL=


YO:
Y de estas variables ¿cuáles tendré que cambiar?, ¿todas, sólo algunas? Voy a pedir ayuda a HAL sobre la orden anterior.

locale --help


HAL:

Usage: locale [OPTION...] NAME
or: locale [OPTION...] [-a|-m]
Get locale-specific information.

System information:
-a, --all-locales Write names of available locales
-m, --charmaps Write names of available charmaps

Modify output format:
-c, --category-name Write names of selected categories
-k, --keyword-name Write names of selected keywords
-v, --verbose Print more information

-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version


YO:
¡Vaya! No entiendo bien esta respuesta, aparte de estar en inglés. Voy a preguntar a HAL que me muestre el manual de operaciones. Seguro que tiene uno.

man


HAL:

What manual page do you want?


YO:
Parece que el manual contiene varias páginas. Le voy a pedir la referente a locale.

man locale


HAL:

[HAL muestra la página de manual de locale. Como es larga, omito la respuesta. En lo sucesivo omitiré las respuestas muy largas de HAL.]


YO:
La respuesta sigue en inglés, intentaré leerla. ¡Ah!, parece que la variable LC_MESSAGES puede ser útil. Voy a probar a poner esta variable al castellano y volver a solicitar una página de manual, esta vez la relativa al manual mismo.

LC_MESSAGES=es_ES.UTF-8 man man


HAL:

[HAL muestra la página de manual de man.]


YO:
Bien, la opción -a de man me puede ser útil. Con ella le voy a pedir a HAL que me muestre todas las páginas de manual relativas a locale, a ver si descubro algo interesante en ellas.

man -a locale


HAL:

[HAL muestra todas las páginas del manual sobre locale.]


YO:
La página de locale de la sección 7 parece interesante. Le pediré a HAL que me la muestre en castellano.

LC_MESSAGES=es_ES.UTF-8 man 7 locale


HAL:

[HAL muestra la página del manual de locale, sección 7.]


YO:
O sea, que las variables que tengo que cambiar son LANG, LANGUAGE y LC_ALL. Bien, sé ---por el autor, que me lo ha soplado--- que debo modificar mi fichero .bashrc y añadirle estas variables con el valor adecuado para el castellano, que es es_ES.UTF-8. Primero voy a comprobar si estas variables existen ya en ese fichero. Le pediré a HAL que me las busque dentro de él.

grep LANG .bashrc


HAL:

[Silencio.]


YO:
El silencio de HAL significa que la variable no existe en .bashrc. Pruebo también con las otras dos, y tampoco existen. Las voy a añadir al final del fichero con la configuración para el castellano.

echo -e "LANG=es_ES.UTF-8\nLANGUAGE=es_ES.UTF-8\nLC_ALL=es_ES.UTF-8" >>.bashrc


[Pasado un cierto tiempo ...]

Lo he pensado mejor y he decidido cambiar la configuración local que acabo de establecer y en lugar de en castellano, la voy a poner en japonés, es decir, el valor de las variables deberá ser ahora ja_JP.UTF-8. Primero le pediré a HAL que me haga una copia de .bashrc con el nombre .bashrc_ORIGINAL, para tenerlo siempre a mano, por si luego cambio de idea.

cp .bashrc .bashrc_ORIGINAL

Ahora ya puedo cambiar sin miedo .bashrc. Le diré a HAL que llame a su asistente sed y le pida que sustituya 'es_ES' por 'ja_JP' en el fichero .bashrc_ORIGINAL y que guarde los cambios en .bashrc. De esta forma .bashrc quedará modificado con la adaptación japonesa y .bashrc_ORIGINAL contendrá la copia antigua, la adaptada al castellano.

sed 's/es_ES/ja_JP/' .bashrc_ORIGINAL >.bashrc

Todavía no sé, sin embargo, si esta configuración a nivel de usuario va a funcionar. Tengo que comprobar antes si el soporte para el japonés está entre las "localizaciones" disponibles. Por tanto, le voy a pedir a HAL que me diga cuáles lo están en este momento. Sé cómo hacerlo después de releer la página de manual de locale:

locale -a


HAL:

C
es_ES.utf8
POSIX


YO:
Mala suerte, el soporte para el japonés no está disponible. Me las tengo que arreglar para saber qué tengo que hacer ahora. Quizá HAL sepa de algunas órdenes en relación con la "localización" del sistema. Se lo preguntaré.

apropos locale


HAL:
[Un fragmento de la respuesta de HAL]

...
locale-gen (8) - generates localisation files from templates
locale.gen (5) - Configuration file for locale-gen
...


YO:
Estas órdenes parecen pertinentes. Voy a ver qué dice la página de manual de la sección 8 sobre locale-gen.

man 8 locale.gen


HAL:

[HAL muestra la página de manual de locale.gen, sección 8.]


YO:
¡Estupendo! Queda muy claro lo que hay que hacer: modificar el fichero /etc/locale.gen y ejecutar locale-gen. Antes, voy a comprobar si hay algo sobre el japonés (con codificación UTF-8) en ese fichero:

grep ja_JP.UTF-8 /etc/locale.gen


HAL:

# ja_JP.UTF-8 UTF-8


YO:
Efectivamente, hay algo, pero está comentado. Tengo que modificar, pues, el fichero para descomentar esta línea. Pero, antes de realizar la modificación, hago como siempre una copia del fichero que voy a modificar:

cp /etc/locale.gen /etc/locale.gen_ORIGINAL


HAL:

cp: no se puede crear el fichero regular «/etc/locale.gen.ORIG»: Permiso denegado


YO:
Ya veo. Como es un fichero de configuración global, debo adoptar el papel de root para realizar modificaciones en el directorio /etc o en cualquiera de sus ficheros. Le diré a HAL que quiero cambiar de usuario y convertirme en superusuario:

su

Bien. Escribo la contraseña y me convierto en superusuario.


YO (root):
Ahora, como root volveré a pedir a HAL que me haga copia del fichero /etc/locale.gen.

cp /etc/locale.gen /etc/locale.gen_ORIGINAL

¡Funciona! Ahora tengo que descomentar la línea relativa al locale que me interesa. Ya sabes, HAL, llama a tu ayudante sed y pídele que quite el carácter de comentario que ha quedado en el fichero /etc/locale.gen_ORIGINAL y que guarde el cambio en el fichero locale.gen:

sed 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen_ORIGINAL >/etc/locale.gen


Solo falta reconstruir los locales. Puesto que ahora el soporte para el japonés está activado en el sistema, le pediré a HAL que vuelva a generar todos los locales, esto hará funcionar mi configuración personal en .bashrc:

locale-gen

Y ahora a respirar. Dejaré de ser root.

exit


YO:
Abriré un nuevo emulador de terminal, y desde él le pediré a HAL que me diga la fecha, a ver si efectivamente aparece en japonés:

date


HAL:

2009年 1月 22日 木曜日 16:50:56 CET


YO:
Arigato, HAL. Tarea terminada.


Esta fue la conversación. Interesante e instructiva. Más larga de lo que realmente es cuando se está familiarizado con la lengua de HAL. Adquirido el hábito, pensar y hablar tendrán lugar simultáneamente y a toda velocidad.

No muy diferentes en esencia van a ser otras conversaciones encaminadas a la realización de tareas. El patrón es siempre el mismo. Una vez que hemos definido claramente lo que queremos hacer, aplicamos las órdenes que conocemos. Si queremos saber más sobre ellas o sobre órdenes semejantes, recurrimos a la propia ayuda interna de HAL, que es, salvo raras excepciones, la más completa que existe. Esta ayuda es, como hemos visto, de tres clases:

  • Consulta rápida de las opciones de una orden: mediante la opción --help.

  • Consulta detallada sobre una orden: mediante la orden man.

  • Consulta sobre órdenes relativas a algún asunto: mediante la orden apropos.


Aparte de las órdenes que devuelven mensajes puramente informativos o de aquellas que manipulan globalmente ficheros como cp o mv, un gran número de tareas requiere de la edición de ficheros de texto. Para eso son muy útiles órdenes como grep, que busca fragmentos dentro de un fichero, y sed, que permite transformar rápidamente ficheros. Hay más órdenes fundamentales en el tratamiento de ficheros, que probablemente veamos en el futuro. Tan fundamentales o más son las construcciones sintácticas que hacen posible la redirección. Hemos visto sólo una. Pronto habrá que ver la versión extrema y más versátil de ella: las tuberías. Eso queda para otra ocasión.

No hay comentarios:

Publicar un comentario