Zenity, mejorando la presencia de tus scripts

Zenity, es un programa que le permitirá desplegar cuadros de dialogos GTK+, lo cual le facilitará la interacción con el usuario. Tomando en consideración lo anterior, Zenity debe ser considerado a la hora de desarrollar scripts que necesitan presentar una interfaz “amigable”, lo cual facilitará el manejo del script. Por ejemplo, puede generar un cuadro de dialogo que le indique al usuario el progreso de la operación actual, o un mensaje de alerta al usuario.

¿Qué puedo hacer con Zenity?

Puede hacer los siguientes cuadros de dialogos:

  • Calendarios
  • Selección de ficheros o directorios
  • Listas
  • Mensajes de:
    • Error
    • Información
    • Preguntas
    • Alerta
  • Progreso de operaciones
  • Entradas de texto
  • Textos de información
  • Mensajes en el área de notificación

Esto no pretende ser un tutorial exhaustivo del uso de Zenity, simplemente se mostrarán algunos usos que le he dado al desarrollar audioconverter, si utiliza el entorno de escritorio GNOME, puede encontrar información detallada en: Sistema -> Ayuda -> Escritorio -> Zenity.

Listas

Cuadro de dialogo:
Lista En la imagen de la izquierda podemos apreciar uno de los tipos de listas que pueden ser creadas, en este caso he usado la opción –radiolist, esto permite que únicamente se seleccione una opción, si se desea permitir el seleccionar más de una opción, podemos recurrir a –checklist. Al emplear las opciones –radiolist o –checklist es necesario comenzar cada fila con alguna de las constantes TRUE o FALSE, en donde TRUE hará que el botón de radio (o de verificación) se encuentre marcado, en caso contrario el botón quedará desmarcado.

Es importante aclarar que Zenity retornará la entrada que se encuentre en la primera columna de texto de la fila seleccionada al error estándar (stderr), en el ejemplo el valor de retorno sería 2. En el caso que necesite utilizar dicho valor en el script, será necesario hacer una redirección de los descriptores.

zenity --list \
     --title="AudioConverter (v0.3)" \
     --text="Seleccione una operacion a realizar de la lista." \
     --radiolist \
     --width="355" \
     --height="290" \
     --column="" --column="#" --column="Operacion" --column="Descripcion" \
     FALSE 1 "MP3 a WAV" "Convierte ficheros MP3 a WAV" \
     FALSE 2 "MP3 a OGG" "Convierte ficheros MP3 a OGG" \
     FALSE 3 "OGG a WAV" "Convierte ficheros OGG a WAV" \
     FALSE 4 "OGG a MP3" "Convierte ficheros OGG a MP3" \
     FALSE 5 "WAV a OGG" "Convierte ficheros WAV a OGG" \
     FALSE 6 "WAV a MP3" "Convierte ficheros WAV a MP3" \
     FALSE 7 "WMA a MP3" "Convierte ficheros WMA a MP3"

En el codigo de arriba se muestran algunas cosas que aún no he detallado, por ejemplo:

  • --title es una opción general, establece el título del cuadro de dialogo.
  • --width es una opción general, establece la anchura del cuadro de dialogo.
  • --height es una opción general, establece la altura del cuadro de dialogo.
  • --text establece el texto de la lista.
  • --column es una opción específica para la generación de listas, establece el título de la columna.

Existe una opción bastante interesante dentro de las opciones de las listas, dicha opción es –print-column, la cual permite especificar qué columna se imprimirá en la salida estándar (stdout). Por defecto se devuelve el valor de la primera columna, puede utilizar la cadena ALL para imprimir todas las columnas de la fila seleccionada.

Es importante que se asegure de encerrar entre comillas cada uno de los argumentos de los comandos en Zenity, de lo contrario, puede obtener resultados inesperados.

Textos de información

Para crear dialogos de textos de información simplemente debemos utilizar la opción --text-info.

Cuadro de Dialogo: Texto de
Información Aparte de las opciones generales, los dialogos de textos de información soportan las siguientes opciones:

  • --filename=fichero especifica qué fichero será cargado en el dialogo de información
  • --editable permite que el texto mostrado pueda ser editado. El texto editado es retornado a standard error (stderr), cuando el cuadro de dialogo se cierra:

    … 2) mp32ogg 2>&1 | zenity –text-info
    –title=”Registro de la Conversion”
    –width=”420”
    –height=”500”;; …

En el código no se indica explicitamente la opción –filename, pero cabe resaltar que la salida estándar (stdout) de la función mp32ogg es trasladada a través de una tubería (pipe, |) a Zenity, previamente se ha duplicado el error estándar (stderr) de la fucnión mp32ogg a la salida estándar (stdout) de la misma, de esta manera aprovechamos como entrada al dialogo de información las salidas de la función mp32ogg.

Si lo desea puede ampliar la información acerca de las redirecciones en bash leyendo el Manual de Referencia Bash (inglés), no estoy seguro si existe en la red una versión en español de este manual.

Dialogos de Información

Cuadro de Dialogo:
Información Para mostrar cuadros de dialogos de información debemos hacer uso de la opción –info. Dentro de esta categoría existe únicamente un parámetro que se puede utilizar aparte de las opciones generales, dicho parámetro es –text, éste establece un texto en el dialogo.

zenity --info \
     --text="Conversion MP3 a OGG finalizada."

De manera similar se puede mostrar un mensaje de error, debemos recurrir a la opción –error para ello, por ejemplo:

if [ "${1}" -ne "0" ]; then
     zenity --error \
     --text="${2}"
     exit ${1}
fi

Entradas de Texto

Cuadro de Dialogo: Entrada de
Texto Se debe utilizar la opción –entry para crear cuadros de dialogos de entrada de texto, es importante hacer notar que Zenity retornará el contenido de la entrada de texto al error estándar. En el caso que necesite utilizar dicho valor en el script, será necesario hacer una redirección de los descriptores.

Dentro de esta categoría tenemos las siguientes opciones:

  • --text especifica el texto que se mostrará en el cuadro de dialogo de entrada de texto.
  • --entry-text establece el texto que será mostrado en el campo de entrada en el cuadro de dialogo, ideal en los casos cuando quiere mostrar al usuario algún valor predeterminado.
  • --hide-text oculta el texto en el campo de entrada del cuadro de dialogo, ideal en aquellos casos cuando el valor ingresado es una contraseña.

Código de muestra

...
if zenity --entry \
     --title="Ingreso de datos" \
     --text="Ingrese el valor del Bitrate:" \
     --entry-text="160" > bitrate.txt
     then bitrate=$(head bitrate.txt); rm -f bitrate.txt
     else bitrate="160"
fi
...

Ya para finalizar, solo espero que se animen a probar esta útil herramienta a la hora de desarrollar sus scripts, en principio Zenity es básico en su manejo e implementación, próximamente espero publicar un breve tutorial acerca del uso de Xdialog, el cual desde mi perspectiva es más profundo que Zenity.

5 min read

Opera 8

A pesar de ser un navegador con pocos adeptos, Opera es un excelente navegador, ofrece tanto seguridad, rapidez y una interfaz sencilla de manejar.

En esta nueva versión se ofrecen ciertas características que valen la pena mencionar, bloqueador de ventanas emergentes (pop-up), navegación por pestañas, busquedas integradas, e-mail, entre otros.

Opera soporta la mayoría de las distribuciones GNU/Linux, entre ellas se encuentran: RedHat, SuSE, Mandrake, Debian, etc., también se incluyen versiones PowerPC y Sparc.

En esta nueva versión se ha propuesto una interfaz que permite realizar funciones avanzadas de una manera fácil y de una manera efectiva. En cuanto a la seguridad, Opera ahora despliega información dentro de la barra de direcciones, indicándole el nivel de seguridad del sitio en el que navega actualmente, también ofrece protección para evitar el phishing (duplicación de páginas web, normalmente con propósitos ilegales), de manera automática se revisa si existen actualizaciones disponibles para el navegador.

Le recomiendo vea la sección de las características del navegador.

~1 min read

Convirtiendo los formatos de compresión de audio

Siguiendo con la temática que propuse en el artículo Convirtiendo formatos de audio OGG a MP3 he decido ampliar dicho script para abarcar nuevos formatos. En esta ocasión he decidido hacerlo un poco más interactivo con el usuario, aún faltan cosas, pero las funciones elementales las cumple a cabalidad.

Las conversiones que se pueden realizar son las siguientes:

  • mp3 -> wav
  • mp3 -> ogg
  • ogg -> wav
  • ogg -> mp3
  • wav -> ogg
  • wav -> mp3

Antes de proseguir, vamos a revisar los requerimientos.

  • mpg321: Reproductor libre de MP3 bajo linea de comandos, compatible con mpg123, este último no es libre. Nos permitirá decodificar ficheros MP3 (mp3 -> wav).
  • vorbis-tools: Paquete de herramientas de OGG Vorbis, entre las cuales se encuentran oggenc, para codificar ficheros WAV (wav -> ogg), y oggdec, para decodificar ficheros OGG Vorbis (ogg -> wav).
  • lame: Codificar ficheros MP3 (wav -> mp3).
  • normalize: Para ajustar o equilibrar el volúmen de los distintos ficheros involucrados, actúa sobre ficheros WAV.

Una breve descripción acerca de la funcionalidad del paquete normalize la podrá encontrar en el artículo Convirtiendo formatos de audio OGG a MP3.

Para aquellas personas que disfrutan de una distribución Debian o alguna basada en ella simplemente deben hacer lo siguiente como superusuario o root.

apt-get install lame mpg321 vorbis-tools normalize

El script temporalmente actúa sobre los directorios actuales, aún no tiene la capacidad de permitir como parámetros un directorio origen y un directorio destino, próximamente implementaré esta opción, ante lo explicado anteriormente, puede que le resulte conveniente copiar el script dentro del directorio /usr/local/bin, así podrá ejecutarlo desde cualquier directorio de su $HOME sin inconveniente alguno.

Desde mi punto de vista el uso del script es intuitivo, sin embargo, explicare la evolución del proceso de conversión de 3 ficheros OGG Vorbis a MP3 con un ejemplo. Puede descargar el script al hacer clic en AudioConverter.

Cosas por hacer (TODO)

  • Permitir al usuario indicar un directorio origen y un directorio destino
  • Permitir al usuario seleccionar si el formato de compresión de audio en un fichero mp3 sea CBR (Tasa Constante de Bits) o VBR (Tasa Variable de Bits)
  • Permitir al usuario seleccionar la calidad de codificación de los ficheros OGG Vorbis, de manera predeterminada está seleccionada como 3, en donde, -1 representa la peor calidad y 10 la mejor.

¿Puedo colaborar?

Por supuesto, este script es de uso libre, puede colaborar también al comentar si existe algún fallo, o simplemente con sus sugerencias, las cuales serán tomadas en cuenta para el posterior desarrollo del script.

Anuncios

24/04/2005 Sale la versión 0.3 del script.

Características de la versión

Se añaden cuadros de dialogos con el uso de Zenity, permitiendo así interactuar con el usuario de manera más amena.

22/04/2005 Sale la versión 0.2 del script.

Características de la versión

  • Se verifica que las aplicaciones necesarias se encuentren instaladas.
  • Se verifica la existencia de ficheros origen en el directorio donde es ejecutado el script.
  • Se incorpora la posibilidad de convertir ficheros WMA a MP3.
  • El script renombra los ficheros para evitar posibles errores en las conversiones a realizar.
  • El nombre del ejecutable cambia a: audioconverter, de esta manera el comando es más homogéneo a los comandos regulares del shell.

Agradecimientos

Muchas gracias Gabriel de guia-ubuntu.org por sus comentarios y sugerencias.

2 min read

Adobe adquiere Macromedia

Adobe Systems Incorporated ha anunciado a través de un comunicado de prensa la adquisición de Macromedia Inc., se estima que el valor de dicha adquisición es de aproximadamente 3.4 billones de dolares.

Esta noticia está generando controversia y no es para menos, algunos apoyan la adquisición hecha por Adobe, yo pienso que estas personas están siendo muy entusiastas, pero la historia nos recuerda que los monopolios no son nada buenos, ¿necesito dar ejemplos?. Sí, efectivamente, Adobe por medio de esta adquisición ha “dejado fuera” a quien en los últimos años era su máximo competidor. Macromedia ofrecía mejores opciones en cuanto aplicaciones dirijidas al campo del dasarrollo/diseño web, aunque Adobe cuenta con Photoshop, para muchos la mejor herramienta gráfica que ha salido al mercado en todos estos años.

Por ejemplo, para Diego Lafuente la fusión puede generar ciertos beneficios:

…Esto es groso, genial, brutal, de hecho quiero ver las cosas que saldrán de esta fusión (por ej.): PDF + Flash + Flex… oh Dios, lo que viene lo que viene…

Pero desde mi punto de vista Diego no está considerando un factor muy importante, y es que históricamente las empresas monopolistas, al no tener competencia en el mercado, hacen lo que les da la gana con él, por ejemplo, podrían aumentar los precios de sus productos y sus clientes estarían obligados (en caso de realizar una actualización de la suite o de alguna de las aplicaciones en particular) a cancelar montos bastante considerables, por lo que habría que evaluar los posibles aumentos en los costos de dichas inversiones en pequeñas y medianas empresas, por otra parte, es bien sabido que las empresas monopolistas no actualizan su software con regularidad, en ciertos casos, solo aplican “parches”, los cuales son considerados mejoras al software por parte de la empresa (en este caso en particular, Adobe), para adquirir estas “mejoras” el cliente debe cancelar ciertos montos, pero una mejora drástica no se llega a ver tan seguido como en los casos cuando existe competencia en el mercado.

El mismo Diego en uno de los comentarios dejados en su artículo Adobe compra Macromedia parece comprender el riesgo que se genera en el momento en que una empresa controla el mercado, sobretodo, en cuanto a los precios.

Sí eran competidores, competían… Adobe pujaba por la web permanentemente. Aunque FW costaba 4 veces menos, era competidor. Le quitaba un gran mercado, yo siempre usé Photoshop es que no es que me disgustara el FW simplemente no me gustaba el sistema de trabajo que tiene. Muchos lo encontraron muy cómodo.

También podriamos considerar otro hecho bastante peculiar, y es que una persona que venía trabajando con la suite ofrecida por Macromedia hace varios años, puede que no esté acostumbrada al posible cambio en el flujo de trabajo que proponga Adobe en las aplicaciones de ahora en adelante, ¿es posible medir el costo generado por estos cambios?, en realidad no es una tarea sencilla, pero es suficientemente claro que este proceso de “adaptación” representa ciertos costos para una empresa, ya que en el caso de sufrir cambios drásticos, habría que dedicar cierto tiempo al proceso de adaptación, y es que nosotros los seres humanos, somos animales de costumbres, es decir, ciertos cambios podrían generar pequeños inconvenientes a la hora de trabajar con estas aplicaciones.

Ya para finalizar, quisiera mostrar mi apoyo a la opinión emitida por Gez.

No me traten de utópico. Sólo creo que el acceso masivo a la información y la universalización del conocimiento es el paso evolutivo lógico para la humanidad, y no le veo mucha vida a estas corporaciones cuyo único vector son las ganancias.

La aparición de la imprenta marcó en su momento una gran revolución, porque le quitaba poder a la iglesia, que entonces era poseedora del poder que da el conocimiento.

Ahora estamos en los umbrales de una nueva revolución, donde el conocimiento y la tecnología se empezarán a ver como un bien de la humanidad y no como algo a lo que sólo empresas multimillonarias puedan acceder.

Amén. Existen alternativas libres que pueden igualar o mejorar el rendimiento de las aplicaciones descritas anteriormente, pero de igual manera, como mencione anteriormente, el hombre es un animal de costumbres, allí radica la esencia del cambio.

3 min read

Viendo tus diseños en una Mac

Para todas aquellas personas que no posean una Mac, quizás la aplicación Screenshot Generator les resulte bastante útil, si eres diseñador web seguramente te preocuparás porque tus trabajos se vean correctamente en todos los navegadores, esta aplicación te permite simular la vista en los siguientes navegadores bajo Mac:

  • Safari 1.3
  • Internet Explorer 5.2.3
  • Mozilla 1.7.7

Vía Ovillo.

~1 min read