Elizabeth Garbeth

Elizabeth Garbeth, una niña de apenas 13 años de edad, dará este año una presentación en una conferencia de GNU/Linux en Australia, su presentación es Extending Tuxracer - Learning by Playing. En este seminario, Elizabeth describirá como crear nuevos recorridos para competir en Tuxracer y demostrará los pasos que están envueltos para realizar tal operación.

A pesar de los pocos años que ha vivido Elizabeth, ha tenido bastante contacto con los ordernadores y el mundo GNU/Linux desde muy pequeña, su historia es realmente impresionante.

I have had my own computer since I turned two. By the time I was nine, my computer ran Debian… and before I turned ten my dad convinced me to install Debian for him on the server that became raff.debian.org. That just proves that installing Debian really isn’t very hard, particularly when my Dad is around to answer questions! I also play the violin, am treasurer of my 4H club, and have performed in musicals at my school.

Bdale Garbee, Linux CTO para HP y sirve como lider del proyecto Debian, es el padre de Elizabeth, así que se podrán imaginar la influencia que ha generado éste en su hija, de hecho, Bdale le planteó el reto a su hija de aprender a como crear sus propios recorridos en el juego Tuxracer, puesto que Elizabeth le dijo que al igual que muchos juegos de computadora, al inicio Tuxracer es divertido, pero que eventualmente te fue cansando de recorrer los mismos caminos de siempre. Elizabeth no solamente cumplió el reto planteado por su padre, sino que ahora hará una presentación sobre ello.

1 min read

Convirtiendo formatos de audio OGG a MP3

Por todos es bien sabido la superioridad que presenta el formato de compresión de audio OGG Vorbis™ frente al MP3, adicionalmente, el primero de los formatos es libre, no posee patentes, algo que, en el caso del MP3 no es cierto, el MP3 posee licencia. Desgraciadamente no siempre lo mejor es lo más difundido, solo espero que esta situación cambie algún día.

Solo en algunas ocasiones es “preferible” hacer uso de los MP3, por ejemplo, mi reproductor portátil únicamente acepta los formatos Mp3 y WMA, dos formatos privativos, el primero de ellos fué desarrollado por Fraunhofer ISS y el segundo por Microsoft.

Ahora bien, después de una breve introducción, vamos a lo nuestro, el script en primera instancia removerá los espacios en los nombres de los ficheros OGG Vorbis™, seguidamente convertirá todos los carácteres en mayúsculas a minúsculas, esto lo hacemos con rename, a continuación decodificaremos el fichero con oggdec, este último creará ficheros WAV. Luego de haber creado los ficheros WAV, vamos a ajustar el volumen de dichos ficheros a un nivel standard, con esto evitamos la posible existencia de una variación muy drástica en el volumen de una canción a otra, sobretodo si se tienen colecciones de álbumes distintos, con niveles de grabación diferentes, este ajuste lo realizamos con el comando normalize.

Ya para finalizar, el último bucle del script convertirá los ficheros WAV en MP3, de manera predeterminada se codificará el formato de compresión de audio a unos 160kbps, ud. puede modificar este comportamiento pasándole al script el único argumento que éste acepta, por ejemplo:

ogg2mp3 192

Esto codificará el fichero MP3 a 192kbps. Ya para finalizar, si no hay errores en la codificación de los ficheros, se procederá a borrar los ficheros WAV, que han sido usados como temporales.

#!/bin/bash

#Removiendo Espacios
rename 'y/\ /_/' *.ogg

#Mayusculas a Minusculas
rename 'y/A-Z/a-z/' *.ogg

#Conversion de archivo *.ogg a *.wav
for archivo in *.ogg; do oggdec $archivo; done

#Comente la siguiente linea si no desea igualar el volumen de los ficheros
normalize -m *.wav

for archivo in *.wav; do
  #Variable auxiliar con el nombre base del archivo
  aux="$(basename "$archivo" .wav)"
  #Verificamos que el usuario introduzca el bitrate
  #En caso de no insertar el bitrate, se proporciona uno predeterminado
  if [ -z "$1" ]
  then
    echo ":Valor de bitrate no suministrado. Predeterminado: 160kbps."
    lame -b 160 "$aux.wav" "$aux.mp3"
  else
    lame -b $1 "$aux.wav" "$aux.mp3"
  fi
  #Verificamos posible errores
  #Si no hay errores, eliminamos el fichero *.wav
  if [ $? -eq 0 ]
  then
    rm -f "$aux.wav"
  fi
done

Nota: Es posible que de acuerdo a la distribución que use, deba instalar ciertos paquetes, en mi caso solamente debi instalar el paquete normalize y el lame, simplemente hice lo siguiente: sudo apt-get install lame normalize

2 min read

Galería de Imágenes

En este artículo se describirá un método para implantar una galería de imágenes, esta guía será básica, se describirá la estructura (haciendo uso de XHTML) del documento, adicionalmente nos encargaremos de la presentación de la galería, haciendo uso de hojas de estilos en cascada o CSS. El tema del comportamiento de la galería lo dejaremos a criterio del usuario, ya que existen diversas formas para implantar este sistema, algunas más convenientes que otras.

En primera instancia, vamos a realizar la estructura del documento

<code><body>
<div id="wrapper">
   <div id="main">
      <p><img src="587x474.gif" alt="Texto Alternativo"
      width="587px" height="474px" /></p>
   </div>
   <div id="thumbs">
      <h2 id="muestras" title="Imágenes de Muestra">
      <span></span>Imágenes de muestra</h2>
      <ul>
          <li><a href="#">
          <img src="75x75.gif" alt="Texto Alternativo"
          width="75px" height="75px" /></a></li>
          ...
      </ul>
   </div>
</div>
</body></code>

Vamos a explicar poco a poco la estructura del documento, en primer lugar se ha creado una división, wrapper, se utilizará para envolver todo el contenido, adicionalmente nos permitirá centrar la página (presentación) a través de hojas de estilo en cascada, a continuación se ha anidado otra divisón, la division main, en ésta será donde se expondrá la imagen principal, es decir, aca se expondrá la imagen más reciente o en caso que el usuario seleccione un thumbnail (los cuales se ubican dentro de la división thumbs), se mostrará una imagen con mayores dimensiones en la división main. Como se menciono anteriormente este comportamiento no será descrito, lo dejamos a criterio del usuario.

Cabe resaltar que en la división thumbs, se implementará en la etiqueta h2 un reemplazo de texto por una imagen, he seguido el método Shea Enhancement expuesto por Dave Shea, el cual es explicado al final del artículo Revised Image Replacement, también puede ampliar esta noticia en la excelente recopilación hecha por Kemie Guaida en el artículo Reemplazo de Textos - una comparación, allí podrá evaluar las distintas opciones existentes, sus ventajas y desventajas.

Ahora bien, comencemos con la presentación del documento. En primer lugar, debemos tener claro que los distintos navegadores presentan de manera distinta ciertos márgenes (margin) y rellenos (padding) de manera predeterminada, para evitar complicarnos la vida, es recomendable comenzar nuestra hojas de estilos en cascada anulando dichos márgenes y rellenos para todos los elementos XHTML, de la siguiente manera:

<code>* { margin: 0; padding: 0; }</code>

Con la regla anterior simplemente estamos obligando a todos los elementos tener márgenes y rellenos iguales a 0 (cero). Ahora bien, vamos a crear una regla para el cuerpo del documento (body).

<code>body{
   font-size: small;
   font-family: Georgia, "Times New Roman", serif;
   background: #369 url(bg_bottom.gif) bottom left fixed repeat-x;
}</code>

Brevemente se explicará esta regla, aunque la mayoría de las declaraciones se explican por sí solas, esta regla se aplicará al selector body, dicho selector tendrá un tamaño en la fuente pequeño, la precedencia de las fuentes viene dada de izquierda a derecha, por ejemplo, la fuente de preferencia es Georgia, en caso de fallo, se utilizará la fuente Times New Roman, en caso de fallo, se utilizará la fuente predeteminada de la familia serif. Es importante recalcar que aquellos nombres de fuentes que poseen carácteres de espacio, debemos encerrarlas entre comillas dobles. La última declaración se encarga del fondo, se ha establecido el color de fondo al código hexadecimal #336699 (se ha utilizado una abreviatura que permiten las hojas de estilos en cascada), adicionalmente, se ha colocado una imagen en la parte inferior (bottom) izquierda (left) del cuerpo del documento, dicha imagen se repetirá horizontalmente (repeat-x), el valor fixed simplemente nos permitirá mantener fija la imagen aún cuando se realicen desplazamientos.

A continuación se procederá a centrar el documento, para ello nos referiremos a la divisón cuya id es wrapper, adicionalmente se agregará una declaración al selector body para evitar inconvenientes en la mala interpretación que hace IE.

<code>body{ text-align: center; }
#wrapper{
   width: 603px;
   margin: 20px auto;
   text-align: left;
   background: #fff;
   border: 1px solid #333;
}</code>

Para no extenderme demasiado (y evitar así que ud. se duerma) en la explicación de esta guía básica, le recomiendo lea el artículo CSS Centering 101 de Dan Cederholm.

El método aplicado anteriormente para centrar el layout entero, también puede aplicarse a otros elementos en bloque. Por ello, vamos a aplicar el mismo método a la imagen principal, la ubicada en la división main, pero debe recordar que una imagen (img) es un elemento en línea, así que vamos a “convertirlo” en un elemento en bloque por medio de CSS.

<code>#main img{
   display: block;
   margin: 0 auto;
}</code>

Ya para finalizar, vamos a concentrarnos en la lista desordenada de imágenes que se encuentran anidadas en la divisiónthumbs. Sabemos que los elementos que se presentan en las listas son elementos en bloque, si queremos presentar uno al lado del otro debemos en primera instancia convertirlos en elementos en línea (esto lo haremos a través de la propiedad display), adicionalmente, debemos eliminar la apariencia de los marcadores de los ítems de la lista, para lograr esto, nos referiremos a la propiedad list-style-type, finalmente, controlaremos los márgenes.

<code>#thumbs li{
   list-style-type: none;
   display: inline;
   margin: 10px -4px 0 8px;
}</code>

Es recomendable que examine el código fuente de la Galería de Imágenes que se ha creado, fijese que se han agregado algunas líneas de codigo CSS, pero la base se ha explicado en esta guía. *[ud.]: usted *[IE]: Internet Explorer

4 min read

deborphan, eliminando librerias huérfanas

deborphan simplemente se encarga de buscar librerias huérfanas. Se mostrará un listado de paquetes que posiblemente no fueron desinstalados en su momento y que actualmente no son requeridas en el sistema por ningún otro paquete o aplicación. Esta aplicación es realmente útil para mantener “limpio” el sistema en caso de ser necesario.

Para instalar deborphan en nuestro sistema simplemente debe proceder como sigue:

sudo apt-get install deborphan

Para remover todos los paquetes huérfanos encontrados simplemente debemos proceder como sigue:

sudo deborphan | sudo xargs apt-get remove -y

Esta aplicación me ha sido realmente útil, sobretodo por la reciente actualización que he realizado en la versión mi distribución Ubuntu Linux, la versión anterior era Warty Warthog (v.4.10), la nueva es Hoary Hedgehog (v.5.04). En dicha actualización ocurrieron muchos “rompimientos” de dependencias, muchas librerias quedaron huérfanas, con esta aplicación he depurado el sistema.

~1 min read

Renombrando ficheros con rename

Si ud. es una de esas personas que al igual que yo le gusta ahorrar tiempo en esas tareas cotidianas que a veces se convierten en algo aburridas por lo repetitivas que suelen ser, seguramente este breve artículo acerca del uso de rename le va a interesar, puedo asegurarle que le facilitará la vida, claro, siempre y cuando ud. regularmente modifique nombres de ficheros. Seguramente se ha encontrado alguna vez que el formato de nombres de los ficheros de audio (p.ej. mp3) no le parece el adecuado, en estas situaciones lo más recomendable es recurrir a rename, ya que éste último le automátizara el renombrado de los ficheros al indicarle un parámetro, el cual será una expresión regular de Perl. Algunos ejemplos de esto son los siguientes:

milton@omega ~ $ ls
01 - Main Theme From Star Wars & Leia's Nightmare.mp3
milton@omega ~ $ rename 's/\ -\ /-/' *.mp3

Obtenemos como resultado lo siguiente:

milton@omega ~ $ ls
01-Main Theme From Star Wars & Leia's Nightmare.mp3

Como pudo haberse dado cuenta el comando rename 's/\ -\ /-/' *.mp3 simplemente sustituyó la cadena “ - “ por ‘-‘, recuerde que los espacios en sistemas GNU/Linux son “carácteres especiales”, por lo tanto, al carácter debe precederle una barra invertida (**), los ficheros que modificará son aquellos que posean la extensión **mp3.

También puede notar que en el nombre del fichero anterior aún existen espacios en blanco, si deseamos convertir dichos espacios en blanco por el carácter ‘_’, simplemente realizamos lo siguiente:

milton@omega ~ $ rename 'y/\ /_/' *.mp3<br></br>
milton@omega ~ $ ls<br></br>
01-Main_Theme_From_Star_Wars_&_Leia's_Nightmare.mp3

Como puede darse cuenta, el comando rename 'y/\ /_/' *.mp3 sustituirá todos los carácteres que representan los espacios en blanco por el carácter ‘-‘ en todos los nombres ficheros con extensión mp3.

Otra posibilidad interesante que tenemos es la de convertir todos los carácteres en mayúsculas a mínusculas y viceversa.

milton@omega ~ $ ls
10_MOS_EISLEY_SPACEPORT.mp3
milton@omega ~ $ rename -v 'y/A-Z/a-z/' *.mp3
10_MOS_EISLEY_SPACEPORT.mp3 renamed as 10_mos_eisley_spaceport.mp3

Como vemos, el cambio es realmente sencillo, al utilizar la opción -v simplemente estamos habilitando la impresión de los nombres de los archivos que se han modificado correctamente, esta opción es bastante útil para percatarnos de los cambios que se han generado.

Este tratamiento también es aplicable para renombrar directorios, recuerde que los directorios en sistemas GNU/Linux son tratados de manera equivalente a los archivos, así que vamos a mostrar un ejemplo para aclarar la situación.

milton@omega ~ $ ls
Shadows of the Empire
Star Wars A New Hope
Star Wars Attack Of The Clones
Star Wars Return of the Jedi
Star Wars The Empire Striks Back
Star Wars The Phantom Menace

Arriba vemos los directorios que representan la mayoría de los álbumes de la colección de Star Wars, por comodidad, regularmente suelo hacer una estructura similar a la siguiente: Music » Artista » Título del Álbum » #Pista-Nombre de la Pista. Por lo que los títulos de los álbumes deben ser especificos, no deben contener el nombre del artista. En mi caso he cambiado los nombres de los directorios de la siguiente manera:

milton@omega ~ $ rename -v 's/Star\ Wars\ //' *
Star Wars A New Hope renamed as A New Hope
Star Wars Attack Of The Clones renamed as Attack Of The Clones
Star Wars Return of the Jedi renamed as Return of the Jedi
Star Wars The Empire Striks Back renamed as The Empire Striks Back
Star Wars The Phantom Menace renamed as The Phantom Menace

En el ejemplo anterior simplemente se ha eliminado la cadena “Star Wars “. Es de suponer que el directorio Shadows of the Empire no será renombrado ya que no cumple con las pautas necesarias.

Es importante aclarar, que éste no es el único método existente para la modificación de los nombres de los ficheros, existen muchos otros, pero desde mi punto de vista, el uso de rename me parece bastante adecuado y fácil de implantar.

3 min read