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
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
.
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 astandard 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
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
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.
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.
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 conmpg123
, este último no es libre. Nos permitirá decodificar ficheros MP3 (mp3 -> wav).vorbis-tools:
Paquete de herramientas de OGG Vorbis, entre las cuales se encuentranoggenc
, para codificar ficheros WAV (wav -> ogg), yoggdec
, 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.
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.
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.