lunes, 17 de septiembre de 2012

Impriendo data selectivamente con Gnuplot

Gnuplot es una muy buena herramienta (de línea de comandos) de graficado 2D/3D que funciona en los Sistemas Operativos más comunes. Me es particularmente útil para hacer gráficas de datos tabulados.

Eventualmente recibimos alguna data tabulada para graficar, pero de la que no nos interesa más que una parte. Por ejemplo, nos dan un archivo en el que cada fila representa ciertos indicadores económicos desde el año 1960 hasta 2012, y sólo queremos graficar los indicadores desde 1980 hasta 2000. Otro ejemplo podría ser que tengamos que graficar muchos archivos que tienen una o más líneas de cabecera y lógicamente debemos omitirlas. Otro caso, podría ser que, volviendo al primer ejemplo, quisieramos graficar los datos de cada 5 años y no todos (1965, 1970, 1975, etc).

Para estos casos y muchos más, tenemos la opción every, cuya sintaxis es la siguiente:

every I:J:K:L:M:N

En donde:

  • I: incremento de línea
  • J: incremento de bloque de datos
  • K: primera línea (empezando en 0)
  • L: primer bloque de datos (empezando en 1). Se consideran bloques de datos, los separados por líneas en blanco en el archivo
  • M: última línea
  • N: último bloque de datos

Por ejemplo, si tenemos un archivo con la siguiente estructura:

#year #var1 #var2 #var3
1960 120 80 90
1961 125 85 91
1962 124 79 91
1963 121 81 88
...

y queremos graficar year Vs. var3,  omitiendo la primera línea (cabecera) y sólo tomando en cuenta los primero 100 valores:

plot "archivo.in" every ::1::100 using 1:4 with lp


Observe que sólo se especifica hasta el índice que estemos utilizando (no se colocan ":"s de relleno al final). Por ejemplo, si quisieramos imprimir todos los datos, sólo omitiendo los primeros 3, sería:

plot "archivo.in" every ::3 using 1:4 with lp

Combinando los índices, tenemos muchas posibilidades.

miércoles, 12 de septiembre de 2012

ndiswrapper y Ubuntu 12.04

Hace un rato hice el upgrade a Ubuntu 12.04 (sí, ya sé que está casi listo el 12.10), desde Ubuntu 11.10, en una PC de escritorio que se conecta a Internet a través de una tarjeta wifi encore ENLWI-NX2, que como conté hace algún tiempo, no es soportada por Ubuntu, así que uso ndiswrapper para cargar el driver de Windows.

El punto es que luego de terminado el upgrade no tenía acceso a Internet. En el menú de redes de Ubuntu no me aparecía ninguna red inalámbrica. Para diagnosticar el problema, lo primero que hago es revisar si el driver estaba cargado:
sudo lshw -C network

Y me aparece como UNCLAIMED la interfaz de la tarjeta inalámbrica, es decir, como si no hubiese ningun driver cargado. Sin embargo, luego pruebo:
sudo ndiswrapper -l

y me doy cuenta que el driver SÍ estaba instalado. Aquí fue donde comencé a googlear, y me econtré con esta pregunta. Allí la primera sugerencia era instalar ndiswrapper-dkms, y con ello resolví el problema.

Si la única forma de acceso a Internet de esa máquina es mediante la red inalámbrica, tocará llevarse el paquete en un disco o memoria usb. Se puede descargar de acá:

Además, este paquete depende de dkms, que probablemente no esté instalado, así que hay que llevarlo también:

Luego instalamos los paquetes y cargamos el módulo:
sudo modprobe ndiswrapper

Y recordar que si queremos que el módulo se cargue cada vez que se arranca el sistema, debemos agregarlo a /etc/modules.