jueves, noviembre 17, 2011

Gnome-Shell, LXDE, Compiz y los atajos de mouse

Mi computador normalmente está en modo experimental, y este períoo no ha sido la excepción. Estuve usando un Ubuntu Daily con Gnome-Shell un tiempo. Me dejé seducir por la promesa de funcionalidad sobre lo regular, y ¡FUNCIONÓ! Gnome-Shell merece ser instalado y utilizado, pero sin "ajustarlo". Como buen Giro-sin-tornillos instalé cuanto plugin encontré y Gnome-Shell se suicidó sin vuelta.
Solución radical, cambiarme a LXDE, un entorno liviano, sencillo, sin fuegos artificiales. Pero "necesitaba" ciertas cosas, como cambiar de escritorio con el toque de uno de los 7 botones de mi mouse, o el selector global de ventanas al poner el mouse en una esquina de la pantalla, son cosas que no transo. Así que instalé Compiz.

Para mi sorpresa, la configuración "habitual" que me resultaba más familiar, no funcionó. El cambio de escritorios utilizando el plugin  Desktop Wall tiene un error no resuelto. Los atajos de mouse no funcionan, y tampoco funcionan los atajos de teclado para Next y Prev (usados para desplazarse a los escritorios siguiente y anterior). Por eso olvídense de tener un muro de 2x2 (a lo Mac), a menos que sobrevivan con Ctrl+Alt+Izq/Der/Arriba/Abajo , lo que según yo es soportable pero a la larga intolerable.

Si bien recomiendan volver a una versión anterior de Compiz, el proceso es  más complicado que instalar un adicional y configurarlo.

La solución es instalar la herramienta xdotool para simular instrucciones de teclado (algo así como macros por decirlo de alguna manera):
sudo apt-get install xdotool

Y después configurar el plugin de Comandos, asignando como comandos:
  1. Command 0: xdotool key ctrl+alt+Left
  2. Command 1: xdotool key ctrl+alt+Right
Noten las mayúsculas, son importantes ya que o si no no reconoce el comando (si no me creen pruébenlo en un terminal).

Y luego configurar los correspondientes atajos de mouse para cada comando:
  1. Run command 0: Button8
  2. Run command 0: Button9
Y listo. FUNCIONA. Claro que  por sanidad mental en la configuración general indiqué tener un espacio de trabajo de 4 escritorios, dispuestos en una fila (matriz de 1x4). Además marqué la opción de Allow Wrap Around en la pestaña Viewport Switching del plugin Desktop Wall.

Basado en: http://askubuntu.com/questions/41058/how-can-i-enable-bindings-in-desktop-wall

A mi me gusta, y con esto seré feliz hasta que no me cautive XFCE.

Si van a jugar con LXDE, les recomiendo no instalar el Cairo Composite Manager (ni siquiera les pondré el enlace para que no se tienten), es insufríblemente lento.

miércoles, noviembre 16, 2011

Comandos *nix para archivos de texto

Hace poco me enfrenté al siguiente problema, una aplicación desarrollada para una importante empresa internacional de confites realiza una descarga de información desde una base de datos. Ya que el desarrollo fue ad-hok, los archivos de descarga inicial de datos quedaban con líneas en blanco cada ciertos intervalos. Esto se generaba ya que estos archivos son resultado de una concatenación de consultas parciales más pequeñas.
Ya que los colegas manifestaron una ineptitud imposibilidad informática (ni les explico mi cara, mi respuesta, y mi indignación al respecto) para eliminar las líneas en blanco, el problema debí resolverlo yo.

Esto es plataforma Ms Windows, utilizando las GNU Utils, que son herramientas de línea de comandos para *nix (Unix y Linux, en sus diversos sabores).
Cualquiera de estos enlaces les sirve:


Cuento corto, terminé haciendo una llamada a un .bat con el comando sed:
@echo Limpiando archivosed.exe "/^$/d" %1 > %1.delete@exit 1 

De aquí vamos a desprender algunos comandos relevantes:

  • sed.exe "/^$/d" archivo > archivo2sirve para eliminar las líneas en blanco del archivo. Los que tengan algún tipo de familiaridad con vi (el editor de textos para hombres en *nix), o con expresiones regulares, reconocerán el patrón:
    • ^$cadena que empieza y termina inmediatamente (^ empieza, $ termina), sin nada entremedio. Esto es una línea vacía (sólo por si no lo hubieran notado)
    • /ddelete, ie borrar, es decir borra la línea (¡BRILLANTE! no se cómo no me han llevado los rusos)
    • archivo > archivo2 : le indica al comando que opere sobre archivo y redirija los resultados a archivo2. Si archivo2 existiera previamente, este será sobreescrito.
  • wc -l archivo : Cuenta el total de líneas de un archivo de texto
  • grep -c "^$" archivo : cuenta las líneas vacías que hay dentro del archivo.
Y cualquier duda al respecto pueden revisar los manuales de cada comando (con man comando (nótese man de manual)), o la ayuda correspondiente con comando --help ó comando -h . Incluso hay veces que ejecutar el comando sin parámetros da un pincelazo de como se usa cada instrucción.