sábado, 25 de enero de 2014

Gestor de paquetes (a la apt-get) para Windows

Navegando hace unas semanas leí en un foro de contenido técnico una mención a Chocolatey, un programa para gestionar la instalación de otros programas en Windows que trataba de imitar los sistemas de gestión de paquetes de Linux, como APT en Debian y distribuciones derivadas. 

Pensé que era una buena idea, pero esperaba encontrarme algo a medio cocinar, una implementación mediocre de la idea que acabara por no convencer ni a los entusiastas de Linux que tengan que usar Windows ocasionalmente ni a los usuarios habituales de Windows que teman usar la línea de comandos y de todos modos no iban a echar de menos lo que no han disfrutado nunca.

Sin embargo, la sensación tras echar un vistazo al proyecto, los programas soportados y proceder a su instalación y prueba no podría ser mucho mejor, la verdad. Algunas reflexiones al respecto:
  • El proyecto está bien concebido e implementado, empezando por su instalación que hace uso de PowerShell y un objeto del framework .NET presentes en cualquier Windows moderno para reducir el asunto a copiar y pegar una línea en el símbolo de sistema y ejecutarla. Esto descargará e instalará los archivos necesarios en el sistema. Además no se requieren privilegios de administración para ello ni a la hora de usar posteriormente Chocolatey para añadir y quitar programas.
  • Está suficientemente maduro, a punto de llegar a la versión 1.0.
  • Existen actualmente más de 1500 paquetes disponibles, que si uno consulta durante unos minutos por orden de popularidad, no solo se da cuenta de que están la mayoría de programas, utilidades y bibliotecas/runtimes (tanto freeware como opensource/free software) que vale la pena instalar en un PC (con o sin Windows) sino que te ayuda a descubrir algunos nuevos francamente interesantes que te podrían ser de utilidad en el futuro.
  • Hay disponible una GUI para facilitar el uso inicial (u ocasional) a los más novatos en cuestión de comandos.
  • Como no puede esperarse menos hoy en día, cuenta con una activa comunidad de colaboradores y usuarios que informan de incidencias o consultan y responden las más variadas cuestiones referentes al uso de la aplicación y a los paquetes disponibles.
En resumen, una grata sorpresa para usuarios avanzados y  técnicos o administradores que quieran incorporar a Windows una tecnología con sabor a Linux para facilitar la gestión del software instalado sin tener que ir buscando en los distintos sitios webs oficiales ni tener que pasar por el aro de los, a veces desaprensivos y en la mayoría de casos cuestionables, intermediarios que no aportan nada.

jueves, 2 de enero de 2014

Diccionario de la RAE en tu línea de comandos

Comienzo el nuevo año bloguero presentando un script para Bash que llevo usando más de un año y espero que, con los remiendos y mejoras introducidas durante este tiempo de uso cotidiano, esté listo para ser compartido con todo aquel usuario de Linux interesado. Se trata de una sencilla interfaz de línea de comandos (p. ej. drae palabra) para buscar cómodamente desde la terminal cualquier palabra en el diccionario de la lengua española de la RAE. Como en otros scripts de "raspado de datos web" o web scraping, se trata de usar un navegador web no interactivo en modo texto (en este caso Lynx) o un cliente HTTP de consola (como Wget o cURL) para simular una búsqueda en la aplicación web, obtener el documento con los resultados y filtrarlos y formatearlos convenientemente para presentarlos en la terminal, en este caso usando filtros habituales como grep y cut y el potente editor de flujos de texto sed. Una de las mejoras introducidas tiene que ver con seguir hipervínculos cuando la página de resultados no muestra directamente las acepciones de la palabra buscada y otra es la paginación por la lista de acepciones cuando se excede el número de líneas de la terminal. El código queda (de momento ;) así:

#!/bin/bash

## drae - Consulta palabra usando el diccionario de la RAE online ##
##        v0.3 por Rodia (daltonico.net) 2013                     ##

raeserver="http://lema.rae.es"
ua="-useragent='Mozilla/4.0'"

browser=$(which lynx)
if [ -z "$browser" ]; then
   echo "$(basename $0): error: falta 'lynx' y no se puede seguir"
   exit 1
fi

case $# in
     1) palabra=$1
        query=$(echo $palabra| iconv -f UTF-8 -t LATIN1);;
     *) echo "Uso: $(basename $0) PALABRA"
        exit 1;;
esac

$browser "$ua" -dump "$raeserver/drae/srv/search?val=$query" \
         > /tmp/drae.tmp 2> /dev/null

if [ "$?" -ne "0" ]; then
   echo "$(basename $0): error: no se pudo conectar a $raeserver"
   exit 1
fi

# Puede que haya un enlace a seguir hasta la definición
n_enlace=$(egrep " +\* \[[1-9]\]$palabra[^a-z]" /tmp/drae.tmp | \
           grep -o '\[[1-9]\]' | tr -d '[]')
if [ -n "$n_enlace" ]; then
    enlace=$(egrep " +$n_enlace\." /tmp/drae.tmp|awk '{print $2}')
    $browser "$ua" -dump "$enlace" > /tmp/drae.tmp 2> /dev/null
fi

# Extraemos acepciones limpiando líneas no deseadas
lista_acepciones=$(cat /tmp/drae.tmp | sed '{
                            /□ V./,$d
                            /¶$/,$d
                            /Ver art/d
                            /Real Academia/d
                            /___/d
                            /References/d
                            /http/d
                            s/\[[1-9][0-9]*\]//
}' | sed "/  *$palabra\./d" | cut -b 3-)

if [ -z "$lista_acepciones" ]; then
   exit 1
fi

echo -e "\n$lista_acepciones\n" | cat -s | less -e -F -X

exit 0