Monthly Archives: November 2009

Reparar las preferencias de Avant Window Navigator

Introducción.

Avant Window Navigator es un barra de navegación de anclaje similar a la de MacOSX que incluye Ubuntu en sus repositorios y que hasta ahora me ha parecido interesante.  Mucho mejor que Docky (extraño y limitado) y Cairo-Dock (demasiadas opciones de configuración).

Instalación.

La instalación del paquete es simple.

$ sudo aptitude install avant-window-navigator avant-window-navigator-data

Inclusive es posible instalar algunos extras.

$ sudo aptitude install awn-applets-c-extras awn-applets-python-extras

El problema.

A AWN lo tengo instalado en dos de mis equipos, sin embargo extrañamente en uno de ellos no funcionaba el diálogo de preferencias (Dock Preferences)  cuando intentaba mostrarlo desde la barra o ejecutarlo desde línea de comando (awn-manager) obtenía el siguiente error de Python.

Traceback (most recent call last):
File "/usr/bin/awn-manager", line 220, in <module>
awnmanager = AwnManager()
File "/usr/bin/awn-manager", line 136, in __init__
self.prefManager = awnPreferences(self.wTree)
File "/usr/share/avant-window-navigator/awn-manager/awnPreferences.py", line 109, in     __init__
self.setup_look(defs.BAR, defs.BAR_ANGLE, self.wTree.get_widget("look"))
File "/usr/share/avant-window-navigator/awn-manager/awnPreferences.py", line 363, in   setup_look
self.changed_look(dropdown)
File "/usr/share/avant-window-navigator/awn-manager/awnPreferences.py", line 377, in changed_look
self.reload_look(0, dropdown)
File "/usr/share/avant-window-navigator/awn-manager/awnPreferences.py", line 368, in reload_look
if self.client.get_int(defs.BAR, defs.BAR_ANGLE) == 0:
glib.GError: Type mismatch: Expected `int' got `float' for key /apps/avant-window-navigator/bar/bar_angle

Solución.

Gracias a @enrich del foro de Ubuntu encontré la causa de esta molestia y su solución.

Todo se debía a un valor incorrecto en la configuración del ángulo de la barra del AWN.  Como decía el mensaje, tenía un float cuando esperaba un integer.

screenshot_001

Para solucionar este problema siga estos pasos.

  1. En un shell ejecute el siguiente comando: gconf-editor.
  2. En el Configuration Editor navegue por estas ramas: apps / avant-window-navigator / bar.
  3. En la lista del panel derecho seleccione el elemento llamado bar_angle.
  4. Haga un clic derecho sobre el elemento y seleccione la opción unset key del menú contextual.
  5. Cierre el Configuration Editor.
  6. Inicie nuevamente al AWN.

Enlaces.

Hacer algo cuando inicia o termina el evento AJAX con Prototype

Introducción.

De manera análoga a como hace poco había mostrado como manejar el evento de inicio y terminación de AJAX con jQuery para realizar algún tipo de acción específica como el mostrar un indicador de carga, ahora experimentaremos como hacerlo con el framework de Prototype el cual nuevamente estaré utilizando en el proyecto de los próximos meses.

Procedimiento.

Ajax.Responders.register({
    onCreate: function()
    {
        // An AJAX request has been initialized!
    },
    onComplete: function()
    {
        // An AJAX request has been completed!
    }
});

Adicionalmente hay otros eventos que pueden manejarse de igual manera onUninitialized, onLoading, onLoaded, onInteractive y onException, además de los ya mencionados onCreate y onComplete.

Enlaces.

Ejemplo rápido y simple de AJAX con PHP y PrototypeJS

Introducción.

Intentando recuperar mis neuronas que saben de Prototype para continuar por fin con uno de los proyectos que se encontraba en pausa permanente, el día de hoy me día a la breve tarea de recordar un poco la invocación asíncrona y la manipulación del DOM utilizando esta librería.  Para hacer una pequeña práctica decidí modificar el ejemplo de la calculadora que se basaba en jQuery y PHP para migrar su código de acuerdo con la especificación de Prototype.

Las modificaciones necesarias se centraron en la inclusión de la librería javascript en la página web (frontend) y en reescribir la invocación asíncrona de la aplicación web en PHP (backend).

Procedimiento.

Reemplazar la inclusión de la librería de jQuery por la de Prototype.  Para este caso se continúo utilizando el API de Google AJAX.

<script src="http://www.google.com/jsapi"></script>
<script>google.load("prototype", "1.6");</script>

Posteriormente se asoció el manejo del evento de presión del botón igual a la invocación de la función procesar, esto se realiza tan pronto como la estructura de la página (código HTML) se encuentra cargada completamente por el navegador.

/* Código a ejecutarse tan pronto como la
   página ha sido cargada por el navegador */
document.observe('dom:loaded', function()
{
    /* Asociar el evento de clic del botón 'igual'
       con la lógica del negocio de la aplicación */
    Event.observe('igual', 'click', procesar);
});

Finalmente se implementa la función procesar que realizará la invocación asíncrona del cálculo matemático.  Esta función consta de las siguientes partes.

  1. Información básica del requerimiento.
  2. Que hacer en caso de éxito.
  3. Que hacer en caso de fracaso.

El requerimiento incluye la siguiente información básica de conexión.

  • El URL de la aplicación remota a invocar (backend).
  • El método HTTP a utilizar.
  • Los parámetros de la página web a enviarse.
function procesar()
{
    new Ajax.Request('calcular.php',                                         /* URL a invocar asíncronamente */
    {
        method:       'post',                                                /* Método utilizado para el requerimiento */
        parameters:   $('formulario').serialize(true),                       /* Información local a enviarse con el requerimiento */

En caso de que la invocación asíncrona tenga un resultado exitoso se deberán realizar los siguientes pasos.

  • Mostrar un mensaje de éxito en color verde.
  • Desplegar el valor del resultado obtenido en el campo definido para tal fin.
        /* Que hacer en caso de ser exitoso el requerimiento */
        onSuccess: function(transport)
        {
            /* Cambiar el color del texto a verde */
            $('mensaje').setStyle('color: #0ab53a');
            /* Mostrar un mensaje informando el éxito sucedido */
            $('mensaje').update("Operación realizada exitosamente");
            /* Mostrar el resultado obtenido del cálculo solicitado */
            $('resultado').update(transport.responseText);
        },

En caso de que fracase el proceso de invocación asíncrona se deberán realizar los siguientes pasos análogos.

  • Mostrar el mensaje de error proveniente del servidor, en color rojo.
  • Limpiar cualquier resultado previo para evitar confusiones con la operación.
        /* Que hacer en caso de que sea fallido el requerimiento */
        onFailure: function(transport)
        {
            /* Cambiar el color del texto a rojo */
            $('mensaje').setStyle('color: #ff0e0e');
            /* Mostrar el mensaje de error */
            $('mensaje').update('Error: ' + transport.responseText);
            /* Limpiar cualquier resultado anterior */
            $('resultado').update('Error');
        }
    });
}

Enlaces.

Creación de una LiveUSB con Fedora 11 utilizando LiveUSB Creator desde Ubuntu 9.10

Introducción

Estoy animado haciendo mas pruebas con las LiveUSB basadas en Linux ya que con el soporte de estas a la persistencia de los archivos de los usuarios se simplifican y mejoran muchos procesos que son muy útiles en muchas áreas como la academia, las demostraciones y por supuesto, la experimentación.

Antes de estas pruebas hice algunos intentos con LiveCD pero la falta persistencia y su baja velocidad de acceso al medio hicieron que fuera una forma un tanto engorrosa para las demostraciones.  Posteriomente experimenté también compartiendo máquinas virtuales con las instalaciones de los sistemas operativos sin embargo al ejecutarse en un huésped los recursos utilizados son altos, el transporte e instalación de las imágenes en los clientes no es muy cómodo del todo y extrañamente, algunas veces obtuve comportamientos diferentes en el software de virtualización entre mi equipo de desarrollo y los equipos donde instalaba las imágenes: el acceso a los puertos USB por ejemplo, probablemente debido a diferencias entre los sistemas operativos húesped.  Por supuesto que esta última aproximación también tiene sus ventajas como la posibilidad de instalar otros sistemas operativos además de Linux y la posibilidad de ejecutar varias máquinas virtuales diferentes en un mismo huésped.

Ahora con la extrema facilidad de instalación de Linux en las unidades USB, el soporte a la persistencia de la información y el bajo costo de estos dispositivos me parecen una excelente solución para las situaciones que mencioné anteriormente.

Hace unos días estuve experimentando con la creación de LiveUSB basadas en Ubuntu mediante el uso del software provisto de manera nativa por la misma distribución.  Hoy voy a experimentar algo similar con Linux Fedora para el cual existe una aplicación homóloga a la utilizada en Ubuntu llamada LiveUSB-Creator.  Esta aplicación incluye algunas características adicionales que son interesantes.

  • Es desarrollado por el proyecto Fedora para crear imágenes de sus sistema operativo pero puede instalarse en otras distribuciones.  En mi caso lo instalaré en mi equipo personal, un Linux Ubuntu 9.10.
  • Permite realizar la instalación del sistema operativo a partir de una imagen ISO local del LiveCD o este mismo se encarga de descargarla de Internet con la sola indicación de su versión.
  • Reconoce automáticamente las unidades USB disponibles en el sistema operativo para realizar la instalación.
  • Permite establecer la cantidad de espacio que se dispondrá para el sistema de archivos persistente.

Para este último se debe tener en cuenta que si se utiliza el sistema de archivos FAT32 en la unidad USB, el tamaño máximo de sus archivos -y por ende, espacio persistente en la LiveUSB- estará limitado a máximo 2GB.

Instalación

Instalar las librerías necesarias por la aplicación.

$ sudo aptitude install python-qt4 python-qt4-dbus python-parted pyqt4-dev-tools

Descargar la versión mas reciente de la aplicación disponible en la siguiente ubicación.

https://fedorahosted.org/releases/l/i/liveusb-creator/

En este caso se utilizó la versión 3.8.6.

$ wget https://fedorahosted.org/releases/l/i/liveusb-creator/liveusb-creator-3.8.6.tar.bz2

$ bunzip2 liveusb-creator-3.8.6.tar.bz2

$ tar xvf liveusb-creator-3.8.6.tar

Creación de la imagen.

Inserte la memoria USB en el computador.  En mi caso venía formateada previamente con FAT32.

$ cd liveusb-creator-3.8.6/

$ sudo ./liveusb-creator

Ventana de Live USB Creator

Ventana de Live USB Creator

En la parte superior de la ventana de la aplicación (Use existing Live CD) presione el botón Browse y seleccione el archivo de la imagen ISO del Linux Fedora LiveCD que desea instalar en la memoria USB.

En la parte media (Target device) seleccione el dispositivo correspondiente a la memoria USB donde desea instalar el sistema operativo.  Tenga mucho cuidado con su selección ya que los datos actualmente contenidos en dicho dispositivo se perderán.

Con la barra de desplazamiento (Persistent Storage) frente a esta opción especifique la cantidad de espacio que designará para la persistencia del sistema de archivos del usuario.  En este caso elegí darle 1024KB (1GB) para guardar los archivos de la sesión de trabajo del usuario.

Para iniciar el proceso de creación del LiveUSB presione el botón Create Live USB ubicado en la parte inferior de la ventana.

Observe los mensajes de información que genera la aplicación en el campo de texto en la parte media y la barra de progreso bajo esta.

Cuando la aplicación indica que se ha completado el 100% del progreso y sin errores, la unidad se encuentra lista para que se inicie el sistema operativo desde esta.

Problemas encontrados

Durante la experimentación enfrenté algunos problemas que tuve que resolver antes de obtener un resultado exitoso con esta aplicación.  A continuación relaciono las soluciones que propongo para dichos problemas.

No existe el módulo parted.

Síntoma: durante el proceso de creación del LiveUSB se obtiene del LiveUSB Creator un mensaje como el siguiente.

Fedora-11-i686-Live.iso selected
Verifying filesystem…
Extracting live image to USB device…
Wrote to device at 5 MB/sec
Creating 1001MB persistent overlay
Setting up OLPC boot file…
Installing bootloader…
No module named parted
LiveUSB creation failed!

Causa: no se encuentra instalado el paquete python-parted el cual es necesario para la correcta ejecución de la aplicación.

Solución: instalar el paquete python-parted.

$ sudo aptitude install python-parted

Falla la verificación MD5 de la imagen ISO.

Síntoma: en mis pruebas, LiveUSB Creator siempre fallo al verificar el checksum MD5 de la imagen ISO que descargué de Linux Fedora a pesar de que esta era correcta (verificada con md5sum).  Al intentar crear la LiveUSB se obtiene siempre un mensaje como el siguiente.

Verifying filesystem…
Verifying ISO MD5 checksum
ISO MD5 checksum verification failed

Causa: razones desconocidas.

Solución: utilizar el parámetro -n al ejecutar el LiveUSB Creator para evitar la verificación del checksum.

$ sudo ./liveusb-creator -n

No se encuentra el sistema de archivos raíz.

Síntoma: durante la ejecución del LiveUSB ya instalado se obtiene un mensaje como el siguiente indicando que no fue posible montar el sistema de archivos raíz del sistema.  Este problema se me presentó cuando utilicé la versión 3.7 de la aplicación.

"Warning: cannot find root file system!
Exiting to shell
To cotinue you will need to create a symlink to /dev/root

Solución: editar el archivo syslinux/syslinux.cfg de la LiveUSB y actualizar el valor de los parámetros root con el UUID real de la unidad USB.  Este valor puede consultarse con la ejecución del siguiente comando mientras el dispositivo se encuentra conectado al computador.

$ ls -l /dev/disk/by-uuid

lrwxrwxrwx 1 root root 10 2009-11-13 17:46 07D8-070B -> ../../sda1
lrwxrwxrwx 1 root root 10 2009-11-13 17:46 2d8af445-6147-44e9-b493-237b99a81cbb -> ../../sda3
lrwxrwxrwx 1 root root 10 2009-11-13 17:46 4A3C22F43C22DB29 -> ../../sda2
lrwxrwxrwx 1 root root 10 2009-11-13 23:29 7A0E-19F0 -> ../../sdb1
lrwxrwxrwx 1 root root 10 2009-11-13 17:46 86f01e2a-e74f-423c-85cc-786f7dc6f207 -> ../../sda6
lrwxrwxrwx 1 root root 10 2009-11-13 17:46 e49a1fe3-387f-43cf-9302-e365c105ae3d -> ../../sda5
lrwxrwxrwx 1 root root 15 2009-11-13 22:46 F40F-3C8C -> ../../mmcblk0p1

Es posible solucionar temporalmente este problema durante la ejecución del sistema operativo creando un enlace por software entre /dev/root y la partición de la USB, sdb1 en mi caso.

$ ln -s /dev/sdb1 /dev/root

$ exit

Enlaces

Creación de una LiveUSB con Ubuntu 9.10 utilizando el USB Startup Disk Creator

Introducción.

Los sistemas operativos pueden ser instalados en medios diferentes al disco duro gracias a que las tarjetas madres actuales tienen la capacidad de acceder a ellos e iniciarlos (boot).  El medio mas común es el CDROM, su principal ventaja/desventaja (según como se vea) es que su sistema de archivos no puede ser modificado debido a la naturaleza de sólo lectura del medio, así que las modificaciones que se realicen (como la creación y edición de archivos) se realizará sobre un disco virtual en memoria RAM y se perderán tan pronto como se apague.  Estas distribuciones son conocidas como LiveCD.

Una variación de estas distribuciones aún mas interesante son las LiveUSB que como puede fácilmente predecirse, consiste en instalar el sistema operativo en una memoria USB (Pen drive).  Como ventaja, la mayoría de estas distribuciones (no necesariamente todas), tienen la habilidad de permitir la escritura de archivos de manera persistente, es decir, perduran después de reiniciar el sistema operativo.  Esta opción es muy interesante para ciertas necesidades de portabilidad (transportabilidad) y pruebas que frecuentemente necesitamos las mentes inquietas.  Como desventaja que esta opción comparte con el LiveCD, es que su ejecución es mas lenta con respecto a la ejecución convencional en el disco duro ya que los tiempos de acceso a estos medios son mayores.

Desde hace mucho tiempo había querido hacer pruebas con ellos y nunca me había animado ya que todo sugería la necesidad de cosas complicadas con scripts y modificaciones del Kernel, sin embargo me di cuenta mientras realizaba la instalación de Ubuntu 9.10 desde una unidad USB que actualmente es un proceso muy sencillo.

En el presente artículo describiré el procedimiento necesario para crear LiveUSBs de Linux Ubuntu 9.10 utilizando la herramienta USB Startup Disk Creator incluída en la misma distribución desde su versión 9.04 (si no estoy mal).

Creación de la imagen.

Descargue la imagen ISO del sistema operativo a instalar, en este caso será Linux Ubuntu 9.10.

http://www.ubuntu.com/getubuntu/download

Inserte la memoria USB en el computador.  En mi caso venía formateada previamente con FAT32.

Inicie la aplicación System > Administration > USB startup disk creator.

Ventana de USB startup disk creator

Ventana de USB startup disk creator

En la parte superior de la ventana de la aplicación (Source disk image), presione el botón Other … y seleccione la imagen ISO del sistema operativo a instalarse (obtenida en el primer paso).  Si no se cuenta con la imagen ISO sino con el CDROM de la distribución también es posible utilizarlo.

En la parte media (Disk to use) seleccione la unidad USB donde se instalará el sistema operativo.  En mi caso era el dispositivo /dev/sdf1.

En la parte baja seleccione la opción Discarded on shutdown si no desea que la unidad incluya un espacio para la persistencia de los archivos del usuario (al estilo de los LiveCD) o Stored in reserved extra space si desea hacerlo, en este último caso especifique además cuanto espacio está dispuesto a reservar.

Presione el botón Make startup disk para iniciar el proceso de creación del medio.

InstallationCompleted

Inicio del sistema operativo.

Inserte la memoria USB en el computador y enciéndalo.

En el SETUP del computador especifique al puerto USB como dispositivo de inicio (boot sequence) del sistema operativo.  En la mayoría de BIOS se accede a esta opción presionando F11 durante el inicio del POST.

Ubuntu le preguntará como desea iniciar el sistema operativo, elija la opción Try Ubuntu without any change to your computer para iniciar el instalado en la memoria USB.  Posteriormente seleccione el idioma en que desea utilizar la distribución.

Espere un momento y listo, disfrute de Ubuntu en su memoria USB.

Tiempo de acceso.

Como mencioné anteriormente una desventaja de este método con respecto a la instalación convencional en el disco duro es que los tiempos de acceso de las memorias USB son mayores y esto se traduce en mayor lentitud del sistema operativo instalado en ellas.

Hice una prueba muy informal y en total desventaja en mi equipo para verificar los tiempos de inicio.  Estos fueron los valores que obtuve.

Inicio desde la
memoria USB
Inicio desde
el disco duro
1' 09 seg45 seg

Me refiero a total desventaja ya que hice una medición rápida del sistema operativo recién instalado en la USB sin ningún servicio o software adicional versus mi estación de trabajo con controladores propietarios y servicios instalados como Apache y MySQL lo que aumentará inexorablemente el tiempo de inicio.

Sería muy interesante volver a realizar esta verificación con mayor formalidad ya que la instalación de ambientes Linux en memorias USB me parece una excelente opción para pruebas y despliegues académicos.

Configurar una cuenta de GoogleApps for Domains con Pidgin

Introducción.

Las cuentas de Google Apps for Domains proveen además del correo electrónico (GMail) otros servicios de Google como la mensajería instantánea (GTalk).  El problema surge al intentar configurar estas cuentas en un cliente de mensajería múltiple como Pidgin ya que estas no funcionan con las configuraciones por defecto de GTalk o de XMPP.

Procedimiento.

Abra el diálogo de administración de cuentas: Accounts > Manage Accounts o presione CTRL+A.

Presione el botón Add … para crear una nueva cuenta.

Ingrese la siguiente información requerida.

  • Protocolo: XMPP.
  • Nombre de usuario.
  • Dominio: su dominio de Google Apps for Domains.
  • Alias local: el nombre que desee que se muestre para su usuario.

Seleccione la pestaña Advanced y provea la siguiente información.

  • Requiere SSL/TLS: seleccionado.
  • Puerto de conexión: 5222.
  • Conectar al servidor: talk.google.com.

Presione el botón Guardar.

Enlaces.

Problemas para instalar plugins de Eclipse en Ubuntu 9.10

Introducción.

Anoche instalé la nueva versión de Aptana Studio, un IDE para el desarrollo web basado en Eclipse. Aparentemente incluyeron algunos cambios drásticos frente a la versión anterior de la serie 1.x.

Instalación de plugins en Aptana 2.0

Instalación de plugins en Aptana 2.0

Durante la instalación de los plugins empecé a tener problemas: los botones de ciertas partes del proceso de instalación dejaron de funcionar a pesar de que los presionara correctamente, evitando que pudiera efectivamente completar el proceso de instalación.

El problema.

Aparentemente el problema no es de Aptana sino de algún tipo de conflicto entre el GTK incluído por la distribución de Linux Ubuntu 9.10 y Eclipse.

La solución.

La solución deberá ser que resuelvan el supuesto conflicto, ya sea la gente de GTK o los de Eclipse, sin embargo hay dos formas conocidas de evitar temporalmente este problema.

Solución #1: Enter.

La solución mas sencilla pero menos elegante, a pesar de que si funciona, es hacer clic sobre el botón que se desee presionar para asignarle el foco y presionar la tecla Enter para generar el evento.

Solución #2: Utilizar las ventanas nativas del GDK.

Para hacer esto es necesario no ejecutar AptanaStudio directamente sino crear un script con el siguiente contenido.

export GDK_NATIVE_WINDOWS=true
~/Aptana/2.0/AptanaStudio &

Obviamente la ruta del ejecutable (segunda línea) deberá personalizarse para adecuarse a su ubicación exacta en el ambiente que se esté instalando.

Enlaces.

Instalar Ubuntu 9.10 desde una unidad USB

Introducción.

Hoy decidí actualizar mi equipo con Ubuntu 9.04 a la nueva versión 9.10 disponible recientemente; descargué la imagen ISO pero no quería utilizar un CDROM para ella ya que acostumbro a hacerlo y se utiliza una o dos veces y a la basura desperdiciándose el disco, así que busqué como hacerlo en un medio reutilizable.

Inicialmente pensé en utilizar una memoria SD pero tarde descubrí que mi computador no es capaz de iniciar desde el lector de tarjetas así que terminé utilizando un lector USB de tarjetas SD o en su defecto, una memria USB convencional.

Para realizar este procedimiento pensé que iba a tener que utilizar una aplicación de terceros y encontré UNetbootlin sin embargo descubrí que Ubuntu incluye su propia aplicación nativa para preparar las unidades USB para la instalación del sistema operativo.

Procedimiento.

Seleccionar la aplicación de los menúes System > Administration > USB Startup Disk Creator.

USB Startup Disk Creator

USB Startup Disk Creator

En la primera parte, source disk image, seleccione la ruta donde se encuentra el medio de instalación de Ubuntu que podrá ser un CDROM o una imagen ISO.

En la segunda parte, USB disk to use, elija la memoria USB en la cual se va a realizar la copia de los archivos del sistema operativo.  En mi caso aparece una unidad SD/MMC porque yo realicé el procedimiento con una tarjeta SD en un lector USB, sin embargo si se utiliza una memoria USB directamente deberá aparecer algo como /dev/sdb1 en el dispositivo a seleccionarse.

Adicionalmente la aplicación nos permite especificar un espacio en la memoria USB para mantener la persistencia de la información en la sesión del usuario o si por el contrario no se desea esto y los archivos creados por el usuario serán descartados.

Contenido de la unidad USB preparada

Contenido de la unidad USB preparada

El último paso consistirá en reiniciar el equipo y configurarlo para que se ejecute el sistema operativo desde la unidad USB recién preparada y se con esto se inicie el proceso de instalación.