viernes, 11 de mayo de 2007

(Re)Descubriendo Tcl/Tk

En esto tiempos aciagos para los/as programadores/as, en los que cada dos días sale un lenguaje o herramienta nuevos, en los que para montar una sencilla web hay que lidiar con los omnipresentes patrones de diseño, montones de capas de abstracción y demás, se agradece la simplicidad y sencillez de los viejos tiempos.
Tcl significa "Tool Command Language" y Tk "ToolKit". Es un lenguaje de "script", con una sintaxis muy similar a la de cualquier "shell" (como Bash).

Hacía mucho que no hacía nada con Tcl/Tk, y el otro día recordé que existe todavía la estupenda librería Snack. Es una librería de tratamiento y generación de sonido en tiempo real.

Así que, provisto del tutorial de Snack y la documentación de Tcl/Tk pertinente, me hice un pequeño afinador (cutre: sólo da notas de referencia, no "lee" las notas del instrumento):

Captura pantalla

(Captura de pantalla en Windows)

En 65 líneas de código simple tenemos casi un programa completo:

Código (renombrar a tuner.tcl)

Lo que más atención me llama es que a cada "widget" se le puede asociar una variable (global) de tal forma que, al cambiar la variable, se actualiza el elemento convenientemente. Por ejemplo, el "message" y el "spinbox" tienen asociados dos variables, newfreq y octave, respectivamente.

Desde el procedimiento beep modificamos newfreq y el texto de la etiqueta cambia.
Ocultamiento de información y encapsulamiento: ninguno. ¿Acaso es necesario siempre? ;-)

Recursos

  • Todavía hay en la red un tutorial en castellano (de lo poquito que he podido encontrar) de la Universidad de Oviedo. Data de 1998 (!) y está bastante bien. Lo bueno del mundillo Tcl/Tk es que las cosas no se quedan obsoletas tan pronto.

  • Visual Tcl es un IDE para Tcl/Tk. Permite desarrollar las aplicaciones Tcl/Tk de forma "visual": pinchando y dibujando los "widgets". Funciona perfectamente y su última actualización fue en 2006.

lunes, 7 de mayo de 2007

Software musical en Linux

Soy músico aficionado (y creo que lo seguiré siendo toda mi vida). Tocaba la guitarra, me pasé al saxofón (tenor), luego al bajo eléctrico y, finalmente, al contrabajo. También intento tocar un poco la armónica, la flauta dulce y el ukelele.

Hay dos programas que utilizo a menudo para mis “tareas musicales”, Lilypond y Musical MIDI Accompaniment (MMA).

Lilypond es un programa de edición de partituras. Su utilización es muy diferente a otros programas con la misma finalidad. Las notas y otros símbolos musicales se escriben en un archivo de texto plano, y después se procesa con Lilypond este archivo. El resultado es un archivo PDF (también puede generar Postscript y ficheros MIDI) con una calidad muy buena. Muchos ejemplos musicales en estas páginas han sido elaborados con Lilypond.

Musical MIDI Accompaniment es un programa que sirve para generar ficheros MIDI con acompañamiento musical. Es una alternativa al programa comercial “Band in a Box”, de la compañia PG Music.

No existe mucha documentación en castellano sobre los programas Lilypond y Musical MIDI Accompaniment (MMA). Por ello me decidí a escribir sendos tutoriales de Lilypond y MMA. En las siguientes direcciones pueden consultarse:

jueves, 3 de mayo de 2007

Desarrollo de temas para Wordpress

Estoy empezando a cacharrear con Wordpress, su API y la posibilidad de desarrollar temas personalizados.

Ya sé que Wordpress no es la herramienta más adecuada para utilizar como gestor de contenidos (CMS), pero es que me encanta su sencillez y facilidad de uso.

El mayor problema que me estaba encontrando era el siguiente: cuando se tienen varias categorías anidadas, al seguir el enlace de la categoría "madre", ésta mostraba todas las entradas de sus categorías "hijas", aunque ella misma no tuviese entradas. Esto está bien para un "blog", pero no era lo que yo necesitaba.

Lo que quiero es lo siguiente: al "pinchar" en el título de la categoría "madre" mostrar la descripción de la categoría o algo similar si no tiene entradas, pero no mostrar las entradas de sus "hijas".

Cacharreando un poco, ya he encontrado la manera de hacerlo. Ej. del fichero archive.php:

Estamos "dentro" del código y del

La función single_cat_title('', false) nos devuelve la categoría actual (por ejemplo, el nombre de la categoría "madre"), la función get_the_category() nos devuelve todas las categorías a las que pertenece una entrada, así que sólo hay que comparar si son la misma o no.

Nuestro archive.php queda así, más o menos:

<?php$categoria = get_the_category();
if (single_cat_title('', false) == $categoria[0]->cat_name) {
?>