sábado, 7 de febrero de 2009

Gimnasia con HAL (1)

No hay mejor forma de poner a prueba nuevos conocimientos que realizar gracias a ellos tareas que antes de adquirirlos no imaginábamos posibles. Son, no cabe duda, parte fundamental del proceso mismo de aprendizaje. Normalmente el contenido de estas tareas surge de las necesidades del propio aprendiz. Pero a veces el que va por delante en la materia debe dar el primer paso, anticiparse a los deseos del que aprende y dar expresión a lo que en la mente de éste es sólo una inquietud vaga.

Con ese fin, voy a plantear al lector una tarea compleja similar a la última realizada en este primer ciclo de conversaciones con HAL. Algo que, sin duda, habrá pasado por la cabeza del lector al saber que el ciclo se había cerrado: disponer de una lista de todas las órdenes tratadas en los artículos precedentes.

Estas órdenes son las que aparecen en los resúmenes finales de tales artículos y no tendrá sentido ya, después del trecho de aprendizaje recorrido, perder el tiempo en revisarlos todos y entresacar a mano una orden tras otra. Puesto que es fácil descargar el fichero que contiene la versión "en crudo" de esta sección de mi blog (Conversaciones con HAL), podremos utilizar las herramientas aprendidas hasta hoy para procesarlo y obtener la lista de órdenes de forma automática.

El hecho de que sea HAL quien se encargue de la tarea abre además múltiples posibilidades de refinamiento del resultado. Propondré una, como forma de completar (y complicar) el ejercicio. Y presentaré aún otra más difícil e interesante para quien conozca LaTeX o leyese mi librito LaTeX para las Humanidades.

Comencemos precisando los tres problemas.

Problema básico:
Obtener una lista ordenada alfabéticamente de todas las órdenes vistas en los artículos precedentes.

Problema complementario:
Obtener un fichero de texto a partir de la lista citada, donde a cada orden se le asocie la descripción de su propósito (en inglés). Recuérdese que whatis ofrecía estas descripciones breves. (El que la descripción deba mostrarse en inglés es premeditado, no sólo porque nos va a obligar a cambiar temporalmente una parte de nuestro entorno local, sino porque no todas las órdenes comentadas poseen traducción de sus descripciones al castellano).

Problema difícil:
Etiquetar el resultado de la solución del problema básico con instrucciones de LaTeX, guardarlo en un fichero y procesar este último para obtener una salida en pdf.


Lo único que hay saber de antemano para realizar estos ejercicios, aparte de haber comprendido plenamente los artículos anteriores, es lo siguiente:

  • El fichero que contiene los últimos artículos se puede descargar apuntando a esta dirección. Se puede descargar también desde la consola, y con un número mayor de artículos [ver mi comentario a esta entrada], mediante:

    wget http://los-pajaros-de-hogano.blogspot.com/feeds/posts/default/-/Conversaciones\ con\ HAL

    wget http://los-pajaros-de-hogano.blogspot.com/feeds/posts/default/-/Conversaciones\ con\ HAL?max-results=50

    Conviene renombrar el fichero para suprimir los espacios que constan en su nombre. Por ejemplo [hay que incluir las barras invertidas para realizar esta operación]:

    mv Conversaciones\ con\ HAL Conversaciones_con_HAL

    o bien:

    mv Conversaciones\ con\ HAL\?max-results\=50 Conversaciones_con_HAL

  • El fichero descargado contiene los artículos, como decía, "en crudo". Esto significa varias cosas:

    • El fichero contiene únicamente una línea larguísima.

    • Las etiquetas HTML, que son las responsables de que los artículos aparezcan en el navegador con el aspecto que tienen, han sido resueltas a sus entidades correspondientes, es decir, que, por ejemplo, la etiqueta <li> aparece escrita como &lt;li&gt;

    • Todas las órdenes que constan en los resúmenes están etiquetadas de un modo peculiar (con el atributo class="orden"), que hace que sean fácilmente procesables en este ejercicio. Así, por ejemplo, la orden free aparece etiquetada de la siguiente forma:

      <code class="orden">free</code>

      que en su resolución a entidades, tal como aparece en el fichero descargado ---y ya doy demasiadas pistas---, tiene el siguiente aspecto:

      &lt;code class="orden"&gt;free&lt;/code&gt;

  • En cierto momento de la cadena de herramientas que resuelve el problema será necesario, muy probablemente, utilizar sed. Téngase en cuenta que para que sed entienda el caracter '/' como un carácter más de la expresión que manipula y no como un carácter especial debe, por ejemplo, "escaparse" de ser interpretado como carácter especial. Esto se consigue sustituyéndolo por '\/'. Algo semejante sucede con awk y el carácter '\', que el lector que se atreva con el ejercicio difícil tendrá que incluir en algún punto de su orden. También debe "escaparse" de la misma manera: '\\'. En general, el signo '\' permite "escapar" un carácter especial en la lengua de HAL para que sea interpretado literalmente.

  • A los que acometan el ejercicio complementario puede interesarles saber que whatis orden devuelve, por defecto, las descripción breve contenida en las páginas de manual de todas las secciones para esa orden. A nosotros nos interesan únicamente, de momento, las contenidas en las secciones 1 y 8.



No doy, por lo pronto, más pistas, aunque me comprometo a dar alguna otra si los lectores se ven en serias dificultades. Los ejercicios, en particular los dos últimos, no son fáciles. Pero son perfectamente resolubles para quien haya entendido este ciclo de artículos.

El autor ha realizado ---cómo no--- los tres ejercicios, incluido el último, como prueba esta primera página del pdf resultante:



Que este imagen sirva de acicate para tener un buen y fructífero rato de charla con HAL, pero sin traducción simultánea ;-)

1 comentario:

  1. El fichero que contiene el feed de los artículos de la sección actual, tiene un límite que establece Google de acuerdo con el tamaño del mismo. Eso significa que no contendrá todos los artículos de la serie, sino sólo los últimos.

    Una forma, que acabo de encontrar, de forzar que el feed contenga más artículos de los incluidos por defecto es añadir a la URL del fichero que contiene el feed la asignación 'max-results=n', donde n representa el número de artículos máximo para el feed.

    He puesto 50 como número máximo de artículos, que es un número suficiente a día de hoy. Que este número pueda aumentarse es algo que todavía no me es posible comprobar. Depende del límite de tamaño de feed que tiene asignado Google y que está en torno a los 500 y pico KB y de si el procedimiento que he empleado permite evitar este límite.

    ResponderEliminar