martes, 27 de enero de 2009

Castings con HAL

El día pasado dimos inicio a una actividad que va a ser, sin duda, uno de las más frecuentes en nuestra vida con HAL, la gestión de paquetes. La ocasión la dio nuestro deseo de disponer de un diccionario bilingüe aquí mismo, en la consola. Con la ayuda de aptitude, HAL logró presentarnos una serie de candidatos posibles de entre la descomunal lista de paquetes disponibles. Podríamos haber tratado de refinar aún más la búsqueda con nuevos patrones de búsqueda u otras palabras clave. Sin embargo, como la lista no es demasiado larga, quizá sea hora de que asumamos nuestra responsabilidad, pongamos paz en la inquietud de los aspirantes y, como directores del cotarro, seleccionemos al protagonista de esta escena bilingüe en el gran drama haliano.

Todo este proceso de selección, que vamos a desgranar en un instante, puede efectuarse sin recurrir a los encadenamientos de órdenes que van a aparecer hoy. Estos encadenamientos se pueden considerar moderadamente avanzados. Es probable, pues, que el principiante se acobarde ante ellos o que caiga víctima de un vértigo y una angustia irrefrenables.

No hay que temer estas sensaciones. Son naturales y sólo se desvanecen cuando el trato con HAL se transforma de superficial y ocasional contacto en relación profunda. El lector de estas conversaciones llegará en poco tiempo a esa intensidad comunicativa, si tal es su deseo. Sólo que ahora es pronto para plantar cara a los aspectos a primera vista más intrincados de la lengua de HAL.

¿Por qué, entonces, hacerlos entrar ya en escena? ¿No habría sido mejor esperar?

La razón es didáctica. Hasta ahora casi todo recurso de la lengua de HAL se ha explicado justo en el momento de su aparición. Sin embargo, el aprendizaje de cualquier lengua extraña sigue derroteros por completo diferentes. El aprendiz está expuesto desde el principio a la totalidad de la lengua, que se le manifiesta como un enigma inabordable sobre el que sólo poco a poco van surgiendo zonas de luz e inteligibilidad. Sin querer llegar a tales extremos, me ha parecido conveniente procurar hoy un tipo de impregnación semejante a ésta bien conocida, precisamente en un asunto muy significativo de la lengua de HAL. El presupuesto es que el contacto semiconsciente con ciertas estructuras lingüísticas puede servir de preparación para un tratamiento sistemático posterior.

A pesar de lo dicho, el lector que encuentre en la experiencia motivo más de repugnancia que de expectación, puede perfectamente dejar de leer en el momento que lo desee y continuar con los artículos siguientes. Nada esencial se pierde por hacerlo.

Hecha la advertencia, volvamos por donde lo dejamos: al proceso de selección del paquete para diccionarios.

El día pasado presenté la lista inicial que nos dio HAL. La voy a mostrar de nuevo. Pero para que los candidatos a protagonistas de nuestra próxima escena no se quejen, eliminaré de ella los paquetes ya instalados e incluiré también las descripciones breves de todos los demás. Tengo que formatear la lista de un modo distinto de como por defecto nos la da aptitude, si quiero que quepa en la pantalla. Pero no lo haré a mano ---líbreme el cielo de esa carga inútil. HAL, que es un maestro en la manipulación de texto, lo hace por mí, aunque a veces resulte extraña la forma de pedírselo:
aptitude --disable-columns -F "%c:%p:%d" search '~Gdictionary ~Gcommandline' \
| grep -v ^i | awk -F: '{printf "%s:\n%s\n\n", $2, $3}' | tee candidatos


Esta larga retahíla produce otra vez el casting de aspirantes, pero con un nuevo formato:

aiksaurus:
an English-language thesaurus (utility)

anthy:
Método de introducción de japonés

anthy-el:
input method for Japanese - elisp frontend

brazilian-conjugate:
Brazilian Portuguese verb conjugator

chasen:
a Japanese Morphological Analysis System

chasen-dictutils:
a Japanese Morphological Analysis System - utilities for dictionary

crack:
Programa para adivinar contraseñas

crack-md5:
Programa para adivinar contraseñas

cracklib-runtime:
runtime support for password checker library cracklib2

dict:
Cliente de diccionario

dictem:
Dict client for emacs

dictfmt:
Utilidad para dar formato a un archivo para que el servidor de dictd pueda usarlo

dictzip:
Compression utility for dictionary databases

duali:
The Arabic Spell Checker

eblook:
electronic dictionary search command using EB Library

epwutil:
Varias utilidades para EB(Libro Eléctrico)/EPWING

glosstex:
prepare glossaries and lists of acronyms

gnuvd:
Query the online Dutch Van Dale dictionary

gramadoir:
Irish language grammar checker (integration scripts)

hspell:
corrector ortográfico y analizador morfológico de hebreo

i2e:
English-Spanish translation dictionary

link-grammar:
Intérprete de la gramática de enlace de la Universidad Carnegie Mellon para Inglés

lookup:
interactive utility to search text files quickly

makedic:
A dictionary compiler for KDrill

mecab-utils:
Support programs of Mecab

rmligs-german:
Elimina ligaduras usadas incorrectamente en documentos LaTeX

sary:
Una biblioteca de vector de sufijos (programa)

sdcv:
StarDict Console Version

skktools:
Herramientas de mantenimiento para diccionarios de SKK

spell:
GNU Spell, a clone of Unix `spell'

spellutils:
Utilidades para la corrección ortográfica

sufary:
Herramientas de búsqueda de texto completo usando un vector de sufijos

thescoder:
compiler for OpenOffice 1.x thesaurus files

translate:
traduce palabras de inglés a alemán o viceversa

xjdic:
Japanese-English dictionary search program


Un repaso rápido por las cartas de presentación de los candidatos (las descripciones breves de los paquetes), nos permite descartar unas cuantas entradas (las relativas a otras lenguas, los analizadores gramaticales u ortográficos, los programas de descubrimiento de contraseñas, etc.), y concentrarnos en unas pocas, incluidas las que ni siquiera entendemos de qué van.

O sea, que tendríamos que editar la lista anterior y suprimir todas las entradas referentes a los excluidos en esta primera criba. Pero no apetece hacerlo a mano. Es una deshonor para HAL que insistamos en los trabajos manuales estando él ahí. Dejémosle que lo haga él por nosotros [He adaptado ligeramente la orden respecto de lo que sería en realidad para que quepa aquí]:

grep -E -v \
-e 'aiksaurus|anthy|anthy-el|brazilian-conjugate|chasen|chasen-dictutils' \
-e 'crack|crack-md5|cracklib-runtime|dictzip|duali|glosstex|gnuvd|gramadoir' \
-e 'hspell|link-grammar|lookup|rmligs-german|sary|spell' \
-e 'spellutils|sufary|thescoder|translate|xjdic' \
candidatos \
| grep :$ -A1 | tee candidatos_firmes


Y HAL nos da la siguiente lista remozada:


dict:
Cliente de diccionario

dictem:
Dict client for emacs

dictfmt:
Utilidad para dar formato a un archivo para que el servidor de dictd pueda usarlo

eblook:
electronic dictionary search command using EB Library

epwutil:
Varias utilidades para EB(Libro Eléctrico)/EPWING

i2e:
English-Spanish translation dictionary

makedic:
A dictionary compiler for KDrill

mecab-utils:
Support programs of Mecab

sdcv:
StarDict Console Version

skktools:
Herramientas de mantenimiento para diccionarios de SKK


La lista es cada vez más corta, pero necesitaremos una información más detallada sobre cada paquete para poder tomar una determinación fiable. Ya sabemos cómo pedir esa información, con aptitude show.
aptitude show  $( grep :$ candidatos_firmes | sed 's/://' | tr '\n' ' ' ) | more


Y HAL nos presenta los correspondientes informes, que omito, dada la longitud del resultado.

Después de revisarlos, procedemos a un nuevo descarte. [Los procedimientos para la obtención de la lista definitiva son semejantes a los anteriormente especificados.] El resultado final de esta selección definitiva es el siguiente:

dict:
Cliente de diccionario

i2e:
English-Spanish translation dictionary


El papel protagonista se lo llevará, en nuestro caso, dict, porque también se le debe permitir al director dar rienda suelta a su subjetividad, si no, no sería el dire. Ya veremos el día que viene que pueda aportar dict a nuestra consola.


Fin del casting y meditaciones del realizador:
Nos ha llevado un buen trecho adoptar una decisión final. Es posible que, por el camino, hayamos dejado algún paquete sin revisar, ya fuera porque nuestras búsquedas fallaron en algún punto ---ningún tiro a la diana acierta siempre y por completo--- o ya porque los desarrolladores de los paquetes no caracterizaron con suficiente minuciosidad sus productos o nosotros no entendimos bien sus caracterizaciones. Por supuesto, siempre queda el camino del "listillo", la recomendación de un poderoso. En el mundo del software libre, por suerte, no suele darse fenómenos de arribismo descarado, son muchos ojos los que ven y las componendas prácticamente no existen, por eso la recomendación suele ser también un buen punto de partida. No obstante, nunca está de más proceder con nuestras propias herramientas ---las de HAL--- para descubrir los paquetes que nos interesen. Esta sesión y la anterior han tratado de mostrar un ejemplo práctico de cómo hacerlo.

No hay comentarios:

Publicar un comentario