Linux Magazine - Edición en Castellano, Nº 06

100
Multimedia MainActor Transcode Plugins VST/VSTi Q-DVD-Author MLDonkey Macros OpenOffice ScummVM Scribus (III) MLDonkey Descarga todo lo que necesitas en las redes de pares p36 OpenOffice Aprende a programar macros para tus aplicaciones p51 NÚMERO 6 P.V.P 4,95 Desktopía Skippy: previsualización de ventanas activas Desarrollo Python: 3D en tiempo real con VTK Patentes El peligro amenaza el desarrollo del software KVocTrain Una ayuda al vocabulario WWW.LINUX - MAGAZINE.ES LINUX MAGAZINE NÚMERO 06 Edición en Castellano MULTIMEDIA Las herramientas y técnicas de los expertos Títulos y textos para vídeos domésticos p10 Conversión de ficheros de vídeo p19 Plugins de audio de Mac bajo Linux p23 ScummVM p78 Recupera los clásicos juegos de aventuras desde Linux

description

Puesto a la venta en mayo 2005. Tema de Portada: Multimedia.

Transcript of Linux Magazine - Edición en Castellano, Nº 06

Mu

ltime

dia

Ma

inA

cto

r Tran

sco

de

Plu

gin

s VS

T/V

STi Q

-DV

D-A

uth

or M

LDo

nk

ey M

ac

ros O

pe

nO

ffice

Sc

um

mV

M S

crib

us (III)

MLDonkeyDescarga todo lo que necesitas

en las redes de pares p36

OpenOfficeAprende a programar macros

para tus aplicaciones p51

NÚMERO 6 • P.V.P 4,95 €

DesktopíaSkippy: previsualización de ventanas activas

DesarrolloPython: 3D en tiempo real con VTK

PatentesEl peligro amenaza el desarrollo del software

KVocTrainUna ayuda alvocabulario

W W W . L I N U X - M A G A Z I N E . E S

LIN

UX M

AGAZIN

E

NÚMERO 0

6

Edición enCastellano

MULTIMEDIALas herramientas y técnicas de los expertos

Títulos y textos para vídeos domésticos p10

Conversión de ficheros de vídeo p19

Plugins de audio de Mac bajo Linux p23

ScummVM p78

Recupera los clásicos juegos

de aventuras desde Linux

• Número 1: Especial Redes - Servidores de correo TLS -

MediaWiki - Konversation - DVD Fedora Core 3 ...

¡Hazte con tus ejemplares atrasados!

¡No esperes a que

se agoten!

#1

#2

#3

#4 #5

• Número 2: Hardware Linux - PCs Silenciosos - Gestor

de ventanas Twin - Backups con Konserve ...

• Número 3: Seguridad para todos - Configuración

iptables con Shorewall - Ruby Rails - Domótica ...

• Número 4: Redes Wireless - Scribus - Radio USB-

Hackeando con Zaurus - DVD Mandrake 10.1 ...

• Número 5: Email seguro - Seguridad Wireless - Gimp

con Python - Bluetooth - QEMU - QTCanvas - Scribus (II)

¡pídelos ya!

WWW.LINUX-MAGAZINE.ES

Hay una

cita por

ahí que

dice que Linux es

para los que están

a disgusto con

Windows y BSD

para los que están

a gusto con Unix.

Eso, como todas

las generalidades (incluyendo ésta) es

exagerar, pero, sí, es cierto que Linux se

ha convertido en una especie de salvavi-

das para aquellos desencantados o escal-

dados de otras alternativas bien conoci-

das y buscan en Linux lo mismo, pero

más y mejor. Esto, que nadie lo dude, es

bueno. Pero que bueno, buenísimo. Es

una ocasión única y sin precedentes en la

historia de la industria (en el sentido

moderno de la palabra). Demuestra que

la gente llana sí tiene poder, sí puede

cambiar el curso establecido por los

poderes corporativos.

Que nadie se lleve a engaño: a pesar

del respaldo empresarial del que ahora

disfruta Linux, su éxito se debe a la

comunidad. Sin las corporaciones que lo

apoyan, Linux no sería tanto como es,

pero sin la comunidad no sería absoluta-

mente nada. Y la mayoría de los pioneros

de Linux venían de Unix, desencantados

con licencias, restricciones y ciclos de

desarrollo lentos… al igual que los que

migran ahora de Windows a Linux. Por

tanto, no, no es cierto que Linux sólo sea

un colchón para los renegados de Win-

dows.

Sin embargo, si Linux es tan genial,

¿por qué nadie desearía migrar a un BSD

y su aberrante licencia? Pero muchos lo

hacen. Consideraciones técnicas aparte,

muchos sienten que ya está todo dicho

en Linux y falta el reto de los primeros

años. No es cierto, pero entiendo la sen-

sación.

Recientemente me instalé Ubuntu en

una partición libre de mi portátil y me

detectó y configuró sin ningún problema

mi tarjeta gráfica. Me había pasado

meses peleando con la muy cabr * sin

conseguir la

tan ansiada

aceleración 3D.

¿Qué hizo

Ubuntu?

Instaló y con-

figuró los dri-

vers sin ningún

problema.

Estupendo ¿no?

Sin embargo,

me quedé con el resquemor de no

haberlo resuelto yo solito.

En un thread en Usenet, otra vez sobre

Ubuntu, un usuario comenta:

[…] me decidí a dar el paso final e

instalar la Debian, para lo cual elegí la

Ubuntu. Y todo ha ido *casi* perfecto. Lo

del casi lo pongo por:

1.- En la instalación, no me deja

establecer una contraseña de supe-

rusuario ó root […].

2.- A la hora de ejecutar el dselect,

quisiera que me apareciesen todos los

paquetes habidos y por haber bajo Linux

[…].

3.- En el modo normal, se me inicia el

modo gráfico, cuando yo quiero que se

me inicie en modo texto[…].

A lo cual le contestan:

Si deseas usar Debian, ¿por qué no

instalas Debian en lugar de Ubuntu?

Ubuntu no te aportará nada, aparte de

limitaciones como las que describes y

problemas.

Y es que, es lo de siempre: o eliges fle-

xibilidad, lo que te complica la insta-

lación y configuración, pero te evita “li-

mitaciones” y “problemas”, ya que deja

que sea el usuario quien configure a su

gusto y a la medida de su sistema. O

eliges facilidad de uso y te resignas a

deshacer y rehacer para resolver las “li-

mitaciones” y “problemas” que plantean

las instalaciones “asistidas”.

Volviendo al tema de BSD, he inten-

tado instalarlo, lo juro, pero algo ha

pasado con los dos equipos con los que

lo intenté: en uno, un viejo Pentium II

con un CDROM sin autoarranque, no

había manera que me reconociese los

disquetes que había creado para empezar

la instalación. En el otro… Dios mío, eso

sí ha sido una pesadilla. La máquina era

(es, si se recupera de la experiencia) una

AMD nuevecito, montada según mis

especificaciones precisas para correr

Linux y en el que ya corría felizmente

Fedora, dos configuraciones diferen-

ciadas de Mandrake y LinEspa. Sin

embargo, la experiencia de correr el

instalador de OpenBSD parece haberla

mancillado para siempre. Los Mandrakes

no arrancan y LinEspa ha desaparecido

directamente. Por arte de birli-birloque la

partición de Fedora quedó intacta. Juro

que seguí las direcciones del OpenBSD y

creé una partición para él solito, pero me

ha dejado un erial de devastación en mi

disco duro. Algo habré hecho mal sin

duda y los apóstoles del sistema opera-

tivo demoniaco (lo digo por su mascota,

ojo) estarán riéndose y renegando de mí

a partes iguales por no dar con la formula

mágica, nada obvia, por cierto, que me

habría transformado en un un feliz

usuario de OBSD.

Chico, no sé.

Sinceramente creo que ambas posturas

tienen su lugar y gracias a Linux, se

puede empezar con la facilidad de uso y

acabar con la flexibilidad en unos pocos

pasos, así que, a fin de cuentas, nada es

tan malo como todo eso.

3

EDITORIAL

3Número 06W W W . L I N U X - M A G A Z I N E . E S

Estimado Lector de Linux Magazine

Nos sentimos orgullosos de nuestros orígenes como pu-blicación, que se remonta a los primero días de larevolución Linux.Nuestra revista hermana, la publicaciónalemana Linux Magazin, fundada en 1994, fue la primerarevista dedicada a Linux en Europa. Desde aquellas tem-pranas fechas hasta hoy, nuestra red y experiencia hancrecido y se han expandido a la par que la comunidadLinux a lo ancho y largo del mundo.Como lector de LinuxMagazine, te unes a una red de información dedicada ala distribución del conocimiento y experiencia técnica.No nos limitamos a informar sobre el movimiento Linuxy de Software Libre,sino que somos parte integral de él.

EL PORQUÉ DE LAS COSAS

Paul C. Brown

Director

CONTENIDOS • Linux Magazine nº 6

4 Número 06 W W W . L I N U X - M A G A Z I N E . E S

PRÁCTICO

DESARROLLO

LINUX MAGAZINE

3 Editorial

6 Noticias

93 Suscripciones

95 Noticias del Más Allá: Patentes

97 Información de Contacto

97 Eventos

98 Próximo Número

28 Scribus

Damos los toques finales a nuestro

periódico Linux. Aprendemos a

generar un PDF y descubrimos qué

opina un profesional de la maque-

tación de nuestro proyecto.

32 HotPlugging

En este artículo, vamos a investigar

cómo funciona el sistema de cone-

xión en caliente.

36 MLDonkey

El cliente multired MLDonkey pro-

porciona a los usuarios acceso a la

mayoría de redes donde se com-

parten archivos.

42 Knoda

En la segunda parte de nuestro taller

investigaremos como crear formula-

rios e imprimir informes con Knoda

46 Zaurus

El panorama actual está repleto de

ROMs cada vez más completas y

potentes, llegando a ser un problema

el poder responder a la pregunta

¿qué ROM puedo ponerle hoy a mi

Zaurus?

51 Macros OpenOffice

Vemos como empezar a programar

macros con el BASIC de OpenOffice

para ampliar las prestaciones de

nuestras aplicaciones ofimáticas.

10 MainActor

Con algunos trucos y efectos espe-

ciales, MainActor puede ofrecernos

unos impresionantes títulos de aper-

tura.

14 Q-DVD

Q-DVD-Author proporciona una

interfaz amigable para controlar el

proceso de realización de DVDs de

vídeos bajo Linux.

19 Handyman

Transcode es una útil herramienta

para manipular archivos de vídeo

desde la línea de comandos.

23 Audio

El sonido en Linux ha hecho

enormes avances. Ahora podemos

incluso ejecutar la enorme cantidad

de plugins VST directamente en

nuestro estudio Linux.

PORTADA

54 Perl

Un útil guión en Perl que nos per-

mite una visión inmediata de nues-

tro estado financiero, incluyendo los

balances de múltiples cuentas y las

inversiones en bolsa.

Linux Magazine nº 6 • CONTENIDO

5Número 06W W W . L I N U X - M A G A Z I N E . E S

ADMINISTRACIÓN

65 La Columna de Charly

66 Darwin

El servidor Darwin de Apple es una

versión gratuita del servidor comer-

cial Quicktime. Puede manejar los

formatos MP3 y MPEG4 y posee una

interfaz web.

69 Demonios

Este mes os mostraremos cómo usar

el protocolo Ident para asociar un

nombre de usuario con una

conexión TCP.

LINUX USER

71 Linux User

72 KVocTrain

KVocTrain nos ayuda a cimentar el

vocabulario de otros idiomas uti-

lizando una serie de tarjetas de pa-

labras virtuales.

76 Desktopia

Skippy es un imaginativo paginador

de ventanas con funciones de previ-

sualización integradas.

78 ScummVM

El motor SCUMM es la base de

muchas aventuras gráficas

clásicas. Los fanáticos de estos

juegos pueden ejecutarlos en Linux

gracias a ScummVM

82 Línea de Comandos: traductor

El comando tr permite reemplazar

cadenas en archivos de texto. Ya sea

reemplazando letras o eliminando

espacios en blanco, la versatilidad

de tr es sorprendente.

84 Educación

En este artículo nos enfrentamos al

tema de la accesibilidad y la

tecnología adaptativa desde un

punto de vista educativo.

90 Trucos

60 Python

Exploramos la biblioteca de

desarrollo 3D VTK y vemos como

imbuir sus funciones en scripts

Python, a la vez que desarrollamos

un interfaz vistoso.

Esta sección reúne las mejores

soluciones a los problemas más

acuciantes que surgen en el día a

día de todo usuario de Linux.

6

NOTICIAS LINUX

Schlagwort sollte hier stehenLINUX USERNOTICIAS

6 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Linux Magazine y Mundo Di-

gital (Canal Málaga, los

martes 8 de la tarde) han acor-

dado unificar sus fuerzas para

promocionar la difusión de

Linux entre el gran público.

Empezando con un sección

semanal en el programa

Mundo Digital, Paul

Brown, director

de Linux Maga-

zine, presentará

junto con Javier

Atencia, director y

presentador de

Mundo Digital, un

espacio que pretende

acercar Linux al usuario

novel o, incluso a aquel

que no ha migrado al sis-

tema operativo todavía.

LINUX EN LA TELE

El espacio consistirá en

tutoriales, demostraciones y

presentaciones que ayu-

darán a los televidentes a dar sus

primeros pasos en Linux, abar-

cando la comprensión de la

terminología y filosofía tras el

sistema, instalación, primeros

pasos y configuración de Linux

sobre equipos de escritorio y

llegando a niveles avanzados,

como el dominio y progra-

mación del shell, uso de apli-

caciones sofisticadas y confi-

guración de servidores.

Asimismo, Linux Magazine,

a través de Mundo Digital, se

compromete con otros medios

(prensa y portales de Internet

no especializados) para la

difusión de Linux como sis-

tema operativo de consumo y profe-

sional.

http://www.mundodigital.net/

http://www.linux-magazine.es/

Novell está dejando atrás su

fama de empresa-dinosaurio

que estuvo a punto de perder

el tren de la innovación tec-

nológica a marchas forzadas.

Desde que adquirió SuSE por

lo que parece allá por el pleis-

toceno, Novell no ha dejado

de apoyar y defender Linux y

el software abierto en general.

Esta vez está predicando

con el ejemplo y migrando

a sus empleados en masa a

escritorios Linux. El primer

paso se dio en el verano

del 2004, cuando se

migraron el 85% de los

puestos que hasta ese

momento corrían Microsoft

Office a OpenOffice. La

siguiente fase, deshacerse de

Windows por completo, era

un paso lógico a seguir.

Poco después de completar

el experimento con OpenOffi-

PREDICAR CON EL EJEMPLO AL SUPER

CON LINUXce, Debra Anderson, el cere-

bro tras el proyecto trazó los

objetivos del éxodo a Linux: el

50% de la plantilla de Novell

debería estar trabajando en

escritorios Linux para octubre.

Dicho y hecho. Lo más intere-

sante es que ese 50% fueron

todos voluntarios.

Los problemas (por que

haberlos, haylos) que

surgieron en el transcurso del

experimento, han sido remiti-

das a los desarrolladores de

OpenOffice y otros proyectos

GNU/Linux para su análisis,

para que sirvan de guía para

mejorar las aplicaciones uti-

lizadas en la experiencia.

En el área de formación,

siempre un tema de espinoso

cuando se habla de

migración, Anderson dice:

“[No es cuestión de días sino

de] horas. La formación con-

siste en diferencias de usabi-

lidad. [Saber] las diferencias

entre el kernel de Linux y el

de Windows no es un requi-

sito necesario”.

En el ámbito

económico, Novell ha

cancelado sus contratos

con Microsoft para

licencias Windows y

con esta medida espera

ahorrar $900.000 para el

final de este año fiscal. Un

ahorro que, con la progre-

siva migración de la totali-

dad de los escritorios de

Novell a Linux, sólo puede

ir en aumento.

http://www.novell.com

Suma y sigue: Linux continúa

penetrando en el tejido

empresarial mundial y esta

vez llega a un “super” cerca

de ti.

Mercadona, una

de las empre-

sas líderes

de cade-

nas de

super-

merca-

dos de

ali-

mentación,

ha decidido

migrar 10.000 esta-

ciones “desktop”, lo que

incluye todos los terminales

de punto de venta (TPVs), a

Red Hat Desktop.

No sólo eso, sino que todos

los servidores de la cadena

NOTICIAS

8 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Y si para Red Hat no parece

que hay más que parabienes,

en SCO tratan desesperada-

mente de acaparar el tempo-

ral de tropiezos y perdidas

que no auguran nada bueno

para la empresa dirigida por

Darl McBride.

La

firma de

Lindon

por fin

presentó a

Nasdaq su

informe

anual

para 2004

que lleva-

ba tiempo retrasado. SCO

había rebasado dos fechas

límite impuestas, pero espera

con esta medida que se le

vuelva a incluir entre las

empresas que cotizan en esta

bolsa.

“Hemos hecho lo que

hemos podido” se excusó

Blake Stowell “[el retraso] se

debió a errores en la contabi-

lidad”. Y desde luego las

cifras son para que cualquiera

las repasase con dete-

nimiento: 23,3 millones de

dólares de perdidas netas

sobre ganancias de 42,8 mi-

llones de beneficios, un caída

considerable si comparamos

con las cifras del 2003:

ganancias netas de 5,4 mi-

llones de ingresos netos y

beneficios de 79,2 millones.

En el área de la venta de

licencias Linux, si bien los

beneficios en esta área

arañaron 25,8 millones en el

2003, en el 2004 las ganan-

cias fueron de escasamente

800 mil dólares. Aún así,

cabe preguntarse quien

narices

sigue

pagando

por este

espúreo

producto.

Los

benefi-

cios por

la venta

de su propio (es un decir)

sistema operativo Unix

sufrieron también fuertes

perdidas, cayendo de 53,4

millones en el 2003 a 41,9

millones en el 2004. SCO

atribuye estas perdidas a la

“continuada competencia

de otros sistemas opera-

tivos, sobre todo Linux”.

Habrá que plantearse más

litigios.

Los que siguen el caso de

la empresa de Lindon, dan la

impresión de estar asistiendo

circunspectos a la lenta y

patética agonía de una

empresa que ni supo adap-

tarse, ni quiso jugar limpio en

el difícil mercado TI.

http://www.itmanagers jour

nal.com/article.pl?sid=05/04/

02/1529226

SCO ON THE ROCKS... OTRA VEZ

LINUX MAGAZINE Y LOS JUGONES

han sido migrados al Red Hat

Enterprise Server. Los fac-

tores que más han pesado a

la hora de la elección del soft-

ware han sido, según un por-

tavoz de la cadena de super-

mercados, que es un software

que permite “una mayor flui-

dez en el momento del paso

por la línea de cajas y que

facilita el trabajo a nuestros

cajeros y cajeras”. José

Manuel Villanueva, Director

General de Red Hat para

España y Portugal, por su

lado, señala la transición

supondrá para Mercadona

“un gran ahorro en la gestión

y administración de los sis-

temas”.

En otro orden de cosas, a

Red Hat no le podría ir mejor

el negocio. En el último

trimestre fiscal para el 2005,

la empresa anuncia que sus

beneficios se incrementaron

un 56% sobre los beneficios

obtenidos en el mismo perío-

do el año anterior. Los benefi-

cios totales para el año fiscal

2005 han sido de 196,5 millo-

nes de dólares, 58% más que

los obtenidos en el años fiscal

2004.

En fin, que recuerdes que

la próxima vez la cajera te

pase una lata de mejillones

en escabeche por el escáner,

que Linux te hace la cuenta.

http://www.redhat.es/

http://www.mercadona.es/

Linux Magazine estuvo pre-

sente en la LAN Party de

Reus, en Tarragona celebrado

el … pasado.

A la party acudieron más

de …. jugadores y aficiona-

dos que dedicaron … días a

jugar a Counter-

strike, Quake o sim-

plemente a navegar

y chatear sin parar.

Linux Magazine estuvo pre-

sente gracias a la empresa de

alojamiento y servidores web

Symbian, que repartíó

numerosos ejemplares de la

revista entre los asistente. La

mayoría de los asistentes

expresaron mucho interés en

la revista, pero reconocieron

su relativa ignoran-

cia del sistema

operativo Linux, ya

que la mayoría de

los juegos máspopulares sólo

funcionan bajo Windows.

Sin embargo, muchas de

las peticiones de los usuarios

a la redacción de Linux Maga-

zine y a los especialistas de

Symbian iban dirigidas a

conocer como se podía mon-

tar un servidor de juegos bajo

Linux, área que prometemos

cubrir en futuras ediciones de

la revista.

http://www.reuslanparty.

com

http://www.simbionet.com

Parece una broma de esos que

los anglosajones tanto gustan

de gastar el día 1 de abril, pero

va en serio. Al igual que

Microsoft no tiene ninguna

intención de migrar Internet

Explorer a plataformas Linux,

tampoco permitirá a los usua-

rios que utilicen Office bajo

Wine actualizarse a la nueva

versión.

Cómo es bien sabido, aparte

de permitir la ejecución del

“Buscaminas” y el “Solitario”,

uno de los principales obje-

tivos de Wine es permitir a los

usuarios de los distintos

Unices ejecutar los programas

más populares de Windows

bajo un entorno X. Esto

incluye los programa de Office.

Sin embargo, Microsoft no

tiene ninguna intención de per-

mitir que las nuevas versiones

de Office puedan ejecutarse

bajo ningún entorno que no

sean para los que desarrollan

“oficialmente”, es decir, Win-

dows y Mac. Para impedir la

proliferación de instalaciones

“no oficiales”, se ha incluido

en el software de actualización

del nuevo Office un bug que

impide que el proceso de

actualización online se com-

plete desde Wine.

A pesar de que Microsoft

niega que se trate una treta

intencionada para dejar fuera a

los usuarios de Unix, según

Leo Ponti, desarrollador de

Wine, el programa Ge-

nuineCheck.exe busca explíci-

tamente HKLMSOFTWARE

WineWineConfig para com-

probar si contiene la clave

RegOpenKeyExA(). De encon-

trarlo se genera un error irrecu-

perable y el proceso de insta-

lación se detiene y no puede

continuar.

Teniendo OpenOffice y

MySQL… ¡Ay que penita,

pena!

http://www.winehq.com

DIAS DE VINO Y

ROSAS

secuenciadores, sintetizadores u otras

herramientas distintas disponibles en

Internet. El problema es que habitual-

mente es difícil encontrar documentación

práctica respecto a cómo usar estas he-

rramientas en situaciones reales.

En el reportaje de portada de este mes

veremos de forma práctica algunas he-

rramientas multimedia para Linux. Por

supuesto, no podemos decirte todo lo que

necesitas saber sobre la edición digital de

vídeo o sobre cómo montar tú propio

estudio de grabación, pero sí remarcare-

mos algunas tareas comunes y

mostraremos algunas herramientas útiles,

lo que puede que induzca a descubri-

mientos propios.

La colección de este

mes comenzará con el

programa de edición de

vídeo MainActor.

Concretamente os

mostraremos cómo

incorporar a vuestros

vídeos títulos u otros

mensajes de texto,

los cuales les dan un

toque muy profe-

sional. Continuare-

mos con un par de

artículos sobre

vídeo digital en

Linux. El artículo

“Cortar y Grabar:

producción de

DVD en Linux”

nos introduce a la

herramienta

QDVD Author, la

cual nos permite

convertir nues-

tros vídeos digi-

tales en DVD. Y

el artículo

“Manitas:

Conversión y

Procesado de

vídeos con

Transcode” hace un

repaso a la utilidad

Transcode, una herramienta rápida y flexi-

ble que nos permite manipular imágenes de

vídeo y hacer conversiones entre formatos

de vídeo desde la línea de comandos.

Como conclusión hay un artículo para

aquellos que se han aventurado en el soft-

ware de audio disponible para Linux.

Linux ha experimentado un gran avance

en la industria musical, atrayendo la aten-

ción de los expertos, si bien la infraestruc-

tura de audio de Linux es un mundo en sí

mismo. Hubo un tiempo en que los miles

de plugins de audio VST/VSTi desarrolla-

dos para sistemas Windows y Macintosh

no estaban disponibles para sistemas

Linux, pero ahora podemos acceder a los

archivos de audio VST a través de simples

herramientas Linux. En el artículo

“Pasarela Musical: Ejecutación de Plugins

de Audio VST en Linux”, el experto en

audio en entornos Linux Dave Phillips,

autor del libro Linux Music and Sound

(Música y sonido en Linux), nos muestra

cómo acceder a plugins VST o VSTi desde

sistemas Linux. Esperamos que disfrutéis

del tema de portada de este mes, y

buena suerte en vuestras aven-

turas grabando audio y

vídeo en Linux. �

Técnicas Multimedia en Linux

PELÍCULAS Y MÚSICA

9

Multimedia • PORTADA

9Número 06W W W . L I N U X - M A G A Z I N E . E S

Los vendedores de hardware y de

software resolvieron hace mucho

tiempo el problema de integrar los

ordenadores con periféricos estándar

como impresoras o controladores de dis-

cos. En los últimos años, el énfasis se ha

enfocado hacia la incorporación de dis-

positivos que, en su momento, se consi-

deraban bastante alejados del entorno de

los equipos domésticos.

Por supuesto, nuestro ordenador es muy

bueno en cualquier tarea digital, por lo que

no es de extrañar que los desarrolladores

se hayan centrado en el uso de los orde-

nadores para la gestión contenidos genera-

dos con cámaras digitales o equipos de

audio digital. Los usuarios de Linux, que

podemos definir como un grupo proactivo

técnicamente hablando, son habitual-

mente los primeros en probar estas nuevas

técnicas. Los principales sistemas Linux

contienen una considerable cantidad de

software multimedia, como reproductores,

editores de vídeo, grabadores de CD,

Ya hemos recorrido los pasos básicos de reproducción de sonidos y edición de vídeo en sistemas Linux.

Ahora debemos dar un paso más hacia las herramientas y técnicas de los expertos. POR JOE CASAD

MainActor . . . . . . . . . . . . . . . . . . . . . . .10

Es evidente que podemos realizar

películas caseras, pero, ¿podemos

añadirles títulos, créditos u otros men-

sajes de texto? Os mostraremos cómo

añadir texto a vuestros vídeos con Main-

Actor.

Q-DVD-Author . . . . . . . . . . . . . . . . . .14

Q-DVD-Author es una útil herramienta

que nos ayuda a pasar vídeos a DVDs.

Conversión de Datos . . . . . . . . . . .19

Transcode es la navaja suiza para la

manipulación de vídeos en Linux. Usare-

mos esta simple herramienta de la línea

de comandos para convertir archivos

con formato de vídeo y reajustar el

tamaño de imágenes de vídeo.

Plugins de Audio VST . . . . . . . . . .23

Internet está lleno de plugins de audio

VST escritos para sistemas Windows y

Macintosh. Os mostraremos como

podemos integrar estos plugins VST y

VSTi en nuestro estudio de sonido Linux.

EN PORTADA

10

nuestras vacaciones, podemos usar títu-

los para informar a los espectadores del

lugar de la escena. Lo ideal sería que

tuviésemos en cuenta los posibles títulos

a la hora de grabar el vídeo. Por ejemplo,

es mucho más fácil grabar la señal con el

nombre de la ciudad que añadir un sub-

título más tarde.

Si no hemos encontrado un subtítulo

genuino, lo primero será visionar todo el

material original antes de empezar a edi-

tar. Las panorámicas lentas o de paisajes

nos proporcionan unos fondos útiles

para nuestro vídeo. Como alternativa,

podemos usar un fondo monocromático

(típicamente negro) o una imagen con-

gelada. En cualquier caso el material

para el segundo plano no debe ser

demasiado dominante, o distraerá al

espectador. Documentales profesionales

y películas pueden servirnos de

inspiración. El ejemplo que conside-

raremos en este artículo está basado en

El programa de edición de vídeo MainActor parece tener un gene-

rador de títulos rudimentario. Pero con algunos trucos y efectos

especiales, MainActor puede ofrecerle unos impresionantes títulos

de apertura. POR TIM SCHÜRMANN

GRANDES TITULARESTítulos de vídeo con MainActor.

GRANDES TITULARES

PORTADA • MainActor

10 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Acabamos de volver de las vaca-

ciones, nuestro monedero está

vacío, y nuestras cintas de vídeo

están llenas de imágenes de playas para-

disiacas y tripas al sol. A continuación

hemos editado el vídeo en nuestro orde-

nador bajo Linux. Para terminar nuestro

trabajo de manera brillante todo lo que

necesitamos es añadir los títulos. Si

hemos usado MainActor para la edición

de vídeo, descubriremos que el gene-

rador de títulos está muy escondido y

nos proporciona solamente funcionali-

dades básicas. Pero no temamos, unos

pequeños trucos y unos conocimientos

elementales de efectos de vídeo nos ayu-

darán a crear unos títulos más que satis-

factorios.

La Instalación.MainActor es un programa comercial de

edición de vídeo desarrollado por Main-

Concept. La página de MainActor [1]

tiene una versión de pruebas, cuya única

restricción es que añade una marca de

agua al vídeo. En el momento de escribir

estas líneas, los archivos ejecutables

para Suse Linux y Mandrake estaban

disponibles para su descarga. En caso de

no utilizar alguna de estas distribu-

ciones, deberíamos probar MainActor en

nuestra distribución antes de comprarla.

Después de instalar MainActor con el

administrador de paquetes, abrimos un

terminal y tecleamos mactor para ejecu-

tar MainActor.

Títulos en MainActor.Antes de empezar, deberíamos consi-

derar la estructura y el material que tene-

mos disponible. Los títulos no son sólo

útiles para los títulos de crédito, también

ayudan al espectador a llevar el hilo de

lo que está pasando conforme las esce-

nas van cambiando. Por ejemplo, si

hemos visitado diferentes lugares en

los títulos de crédito del comienzo de

“Buscando a Nemo”. Empezaremos

mostrando a los creadores con un tipo de

letra simple. A esto seguirá el título

propiamente dicho (“Vacaciones 2004”)

estará un poco más elaborado. El

segundo plano es una panorámica

sacada del vídeo de las vacaciones, que

nos conduce a la primera escena. Los

siguientes pasos dan por hecho que la

escena para el segundo plano ya está en

nuestro disco duro (véase el Cuadro 1:

“Bienvenido a bordo”).

Segundo Plano.Para ayudarnos a estar organizados en

primer lugar crearemos una nueva línea

de tiempo seleccionando Timeline /

New. Cuándo hagamos esto, MainActor

añadirá una nueva pestaña a la ventana

Timeline. Podemos asignar los títulos a

las pistas en la primera pestaña, la

segunda pestaña tiene el resto de la

película. Esta configuración es opcional,

pero nos ayudará a situarnos cuando

realicemos tareas de edición de vídeo

más complicada.

A continuación importamos el mate-

rial de vídeo seleccionando Add multi-

media files del menú de la ventana del

navegador. El icono situado más a la

izquierda de la barra de botones nos

conduce igualmente a esta ventana.

Exploramos hasta encontrar el archivo y

pulsamos OK. MainActor creará un

nuevo directorio llamado Media, que

podemos abrir haciendo doble clic.

Arrastramos el vídeo desde este directo-

rio y lo soltamos en la pista V1 en la

línea de tiempo. Un marco de color

blanco nos mostrará donde ha encajado

el vídeo cuando hemos soltado el botón

del ratón. Para nuestro ejemplo, nece-

sitaremos situar el marco lo más a la

izquierda de la línea de tiempo que

podamos (véase la Figura 1).

Título Simple.Las funciones que nos ofrece el gene-

rador de títulos integrado 2D Text serán

suficientes para el nombre del creador. El

generador está situado en Filters / Text

en la pestaña Effects (véase la Figura 2).

Arrastramos el icono hasta la pista V2

en la ventana Timeline. MainActor crea

un objeto tiene asas en forma de

pequeños rectángulos a izquierda y

derecha. Pulsamos sobre la asa situada a

la derecha y dejamos presionado el

botón del ratón. El rectángulo se vuelve

gris. Arrastramos el título hacia la

derecha. Los nuevos tiempos de

comienzo y final, y la duración del título

aparecen en una pequeña ventana de

herramientas de color amarillo. Si man-

tenemos pulsado el botón izquierdo y

11

MainActor • PORTADA

11Número 06W W W . L I N U X - M A G A Z I N E . E S

arrastramos ratón podemos abrir este

elemento para visionar todo el texto.

Una vez veamos todo el texto, soltamos

el botón.

Como podemos ver en la ventana de

previsualización, el texto todavía deja

mucho que desear. Para cambiar esto,

hacemos doble clic en el elemento 2D

Text en la pista V2. MainActor nos mues-

tra las opciones para el elemento selec-

cionando en la ventana Effects (véase la

Figura 3). En primer lugar, introducimos

el texto “The Millers” dentro de la caja

de texto grande y a continuación, en una

línea nueva tecleamos “present”. Usamos

el botón de centrado para centrar el

La función de grabación de MainActor

está escondida en Tools / MainConcept /

DV Capture. Tenemos que conectar

nuestra cámara de vídeo digital al conec-

tor FireWire y tener los drivers FireWire

correctamente configurados. La mayoría

de los ordenadores actuales dispone de

puerto FireWire. También existen

numerosas tarjetas de bajo precio que

permiten incorporarlo. Después de

instalar los drivers, seleccionamos la

interfaz y el modelo de la cámara en

Capture Driver y Capture Device, respec-

tivamente. En el cuadro Capture File

introducimos un nombre de fichero y la

ruta donde MainActor guardará la infor-

mación. Por último presionamos el

icono de grabación (un pequeño botón

rojo) para comenzar el proceso.

Si la distribución no carga los drivers

correctamente, abrimos un terminal,

pasamos a administrador con su y

tecleamos modprobe1394 y a conti-

nuación modprobe ohci1394. Por último

reiniciamos MainActor.

Cuadro 1: Bienvenido abordo

Figura 1: El vídeo de fondo se encuentra colocado en la línea temporal (abajo derecha). El resul-

tado está visibe en la ventana de previsualización (arriba derecha). Se puede escalar la vista

pulsando en los botones + y - que se encuentran en la parte inferior de la línea temporal.

La previsualización nos muestra cómo

presenta MainActor nuestro título sobre

el segundo plano del vídeo. La línea de

tiempo nos permite especificar qué ele-

mentos se situarán en primer plano y

cuáles en segundo plano. Las pistas de

vídeo funcionan como una pila de roda-

jas situadas una encima de la otra.

Cualquier objeto en la pista V2 estará

por encima de una objeto de la pista V1,

por ejemplo. Si hemos añadido alguna

otra pista (seleccionando Add video

track en el menú), los elementos de esta

pista estarán por encima de los elemen-

tos en las pistas 1 y 2, es decir, que

estarán por encima de los títulos.

Cuadro 2: Procesar comouna pila

ventana, puede incluso haberse despren-

dido. Para arreglar esto usamos las ba-

rras de control para mover el título hasta

el centro de la pantalla. A continuación

seleccionamos un Color que sea fácil-

mente distinguible respecto del fondo.

Transición Gradual.Si visionamos la película en la ventana

de previsualización (usando del sím-

bolo play, un triángulo apuntando hacia

la derecha), el título aparecerá y desa-

parecerá de manera súbita. Para con-

seguir que esta transición sea más

suave, necesitamos incrementar y

reducir de manera gradual la opacidad

del título. Sin embargo, con mover la

barra de control no hacemos nada, ya

que esto sólo cambia el valor cuando el

título es visible. MainActor tiene una

manera un poco más compleja de hacer

esto. En la ventana Effects, pulsamos en

Opacity. Esto mostrará la llamada “línea

quebrada” o perfil (mostrado bajo el

indicador Opacity de la ventana Effects

en la Figura 3).

Esta línea nos muestra cómo cambia el

valor asignado a lo largo de un período

de tiempo. Si la línea es únicamente una

línea roja en el borde superior, el texto se

mostrará con opacidad total 1.0 durante

toda la duración. Observamos que

aparece una pequeña asa en el perfil.

Podemos arrastrar esta asa, con el botón

del ratón pulsado, hasta otra posición.

Podemos ver el efecto sobre la trans-

parencia en la ventana de previsua-

lización. El perfil se ha modificado por

completo. Para cambiar este compor-

tamiento, necesitamos añadir otra asa.

Para ello, pulsamos el botón derecho y

seleccionamos Add key en el menú que

aparece.

MainActor hace referencia a estas asas

como cuadros clave. Representan las

imágenes de la película desde la cual

comienza a aplicarse una nueva configu-

ración. Los cuadros clave se pueden

mover libre e independientemente uno

de otro, por todo el perfil. Añadimos dos

cuadros clave más y los usamos para

dibujar una curva. El primer cuadro

clave empieza con transparencia total

para el texto, y el segundo indica el

punto de total opacidad.

Debido a que la línea de tiempo y el

perfil se muestran en ventanas dife-

rentes, es imposible saber a qué imagen

hace referencia el cuadro clave y vice-

versa. Un deslizador nos ayuda en esta

tarea detectivesca. El deslizador es una

línea verde pequeña y vertical con una

contraparte en la ventana de línea de

tiempo. Si pulsamos en una sección de la

línea de tiempo, el deslizador se moverá

hasta donde hemos pulsado, y la imagen

bajo el deslizador se muestra en la ven-

tana de previsualización. Para asignar

una imagen específica como cuadro

clave, movemos primero el deslizador

hasta la posición deseada y entonces

arrastramos el cuadro clave hasta la línea

verde.

EngalanadoUsemos un truco para el título principal.

El logotipo es una imagen fija que

podemos cortar y pegar sobre el segundo

plano. Podemos crear la imagen con

cualquier paquete gráfico, por ejemplo el

texto, seleccionamos un texto sin serif, y

elegimos un tipo de letra adecuado.

Estos pasos son muy similares a trabajar

con un procesador de textos.

Llegados a este punto, el texto está en

alguna parte en la parte inferior de la

PORTADA • MainActor

12 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Importa: DV AVI Multi File *.dzl (multi-

ples archivos tipo 1 pertenecientes a una

misma película); DV AVI Type 1 *.avi; DV

AVI Type 2 *.avi; DV DIF *.dif, *.dv (for-

mato RAW); MJPEG *.avi, *.mjpg,

*.mjpeg; MPEG *.mpg, *.mpeg, *.mmv,

*mpv, *.dat (MPEG1 y 2,

VideoCD);MPEG Audio *.mpa, *.mp2,

*.mpg2; Wave Audio *.wav; PNG; JPG;

TIFF

Exporta formatos de video: MPEG 1 y 2;

DV AVI

Exporta formatos gráficos: Amiga IFF;

Bio-Rad confocal; CompuServe GIF; DKB

Ray Tracer; DPX; Explore (TDI) & Maya;

Gimp Pattern; ImageMagick; JPEG|JIFF;

Jeff’s Image Format; Kodak Cineon; MTV

RayTracer; PNG; Palm Pilot; Picture Gear

Pocket; Portable Bitmap; Portable

Greyscale; Portable Image; Portable Net-

work Graphics; Portable Pixmap; Post-

script; Psion Serie 3 Bitmap; Psion Serie

5 Bitmap; Qrt Raytracer; Raw; Rayshade;

SciTex Continous Tone; Sillicon Graphics

RGB; SoftImage TIFF Revision 6; Truevi-

sion Targa; VRML2; Vista; Vivid Ray-

Tracer; Wavefront Raster file; Windows

Bitmap; Windows Icon; Wireless Bitmap

(level 0); X11 Bitmap; X11 Pixmap; YUV

16 Bit; YUV 16 Bits Interleaved; ZSoft

Multi-Page Paintbrush; ZSoft Publisher’s

Paintbrush.

Cuadro 3: Formatossoportados por MainActor

Figura 2: En la solapa Efectos se encuentra el generador de títulos

2D Text. Esta solapa ofrece toda una serie de opciones para hacer

más interesante el título.

Figura 3: Elegimos una fuente sin serif para el título (abajo a la

izquierda en la ventana Efectos), ya que estas fuentes son más

fáciles de leer en una pantalla de televisión.

GIMP. Hay algunas cosas, sin embargo,

que debemos tener presente. En primer

lugar, la imagen debe ser del mismo

tamaño que el vídeo. La mayoría de las

cámaras de vídeo digitales de hoy en dia

usan el formato Digital Video (DV), que

tiene una resolución de 720 por 576 píxe-

les en Europa. Si la imagen es de distinto

tamaño, MainActor la cambiará a la

fuerza, lo que puede provocar una dis-

torsión notable.

Pantalla azulPara cortar la imagen, MainActor usa la

llamada técnica de pantalla azul. Esta

técnica requiere escoger un color que no

coincida con el resto de la imagen. Main-

Actor sustituye las partes de la imagen

donde el color seleccionado aparezca,

por las de la imagen de fondo. El tono

utilizado es típicamente un azul claro o

el verde, que no coincide con la cara

humana, y que de paso le da nombre a la

técnica. Cuando dibujemos nuestro logo

del título, tenemos que decidir por ade-

lantado que color será reemplazado más

tarde. El ejemplo de la Figura 4 usa el

verde.

Después de crear un logo para el

título, lo guardamos y volvemos a Main-

Actor. Usamos la pestaña Project de la

ventana del navegador, y añadimos el

archivo de nuestro proyecto desde la

lista desplegable Add multimedia files.

Tal y como hicimos con el texto, arras-

tramos el logo hasta la pista V2 en la

línea de tiempo, y arrastramos iguale-

mente las asas para extender la

duración. Movemos el deslizador hasta

un cuadro que contenga el logo a

mostrar en la previsualización. Esto nos

permite monitorizar los cambios que

vayamos a hacer.

El efecto Color Keyer, que está situado

debajo de Standard en la pestaña Effects

de la ventana del navegador, controla el

corte de la imagen. Arrastramos el icono

del Color Keyer

hasta la imagen

con el logo en la

línea de tiempo.

MainActor mues-

tra una pequeña

barra para indicar

que se ha asig-

nado el efecto.

Hacemos doble

clic en la barra.

Suponiendo que

las propiedades

del texto 2D están

aún en pantalla en

la ventana Effects,

podemos pulsar

sobre la X para

eliminar la

entrada. Esto quita de la vista algunas

opciones irrelevantes.

En primer lugar elegimos el color que

MainActor reemplazará con el fondo de

pantalla en el Color Keyer. Para elegir el

color, primeramente debemos pulsar

sobre la barra de color. Podemos selec-

cionar el color directamente en la ven-

tana que aparece, o coger la pipeta y pul-

sar en alguna parte de la previsua-

lización que contenga el color que nece-

sitamos (véase la Figura 5). Después de

que hayamos elegido el color, pulsamos

OK. No nos debemos asustar si MainAc-

tor no actualiza la previsualización

automáticamente. En este caso debemos

actualizar de manera manual.

Al igual que hicimos con el nombre de

los creadores, queremos que el logo

aparezca y desaparezca gradualmente.

Podemos seguir los mismo pasos: de

nuevo lo que necesitamos es un perfil de

la opacidad.

SalidaUna vez hemos añadido los creditos

del comienzo de la película, podemos

exportar los resultados. MainActor

tiene una selección de formatos de sa-

lida en Timeline / Export. Si estamos

creando un DVD, seleccionamos Video

+ Audio, y MPEG, debajo de Format.

Pulsamos en Format options y selec-

cionamos DVD bajo MPEG Type. Frame

size nos debería mostrar la resolución

DV. Pulsamos en OK para volver atrás,

y rellenamos el campo Export as con el

nombre del archivo. Debemos asegu-

rarnos de tener deshabilitada la opción

Only export yellow In/Out segment.

Cuando tengamos todo configurado,

pulsamos en Export para dar salida al

resultado final.

PerspectivasEl método que hemos seguido permite

mucha creatividad a la hora de hacer los

títulos. Podemos aplicar también varios

efectos de MainActor a nuestro logo. Por

ejemplo, si queremos conseguir un

efecto trémulo como el del logotipo de

“Buscando a Nemo”, arrastramos el

efecto Glue desde el grupo Filter / 2D-

Warp de la ventana del navegador, hasta

el logo en la línea de tiempo. Hacemos

doble clic para abrir la configuración en

la ventana Effects y seleccionamos Effect

-> Original for Progress. Esto hará que el

logo se estremezca todo el tiempo. Para

impedir esto, añadimos otro cuadro

clave al perfil. El segundo cuadro clave

debería alcanzar el borde final antes que

la posición donde desaparece el logo.

Esto ayuda a los espectadores a leer el

contenido antes de que desaparezca.

Podemos aplicar el efecto Color Keyer

para completar secuencias de video si

estamos dispuestos a crear la típica

secuencia del reportero y la imagen de

fondo.

Debemos usar los efectos con mo-

deración. Debemos meditar cuándo es

apropiado añadir títulos: un logo chillón

que rota y rebota no pega mucho en un

vídeo de meditación, por ejemplo. �

MainActor • PORTADA

13Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] Página de MainConcept: http://www.

mainconcept.com/index_flash.shtml

RECURSOS

Figura 5: Para seleccionar un color para el efecto de clave de color,

primero utilizaremos la pipeta y haremos clic en el área verde de la

ventana de previsualización.

Figura 4: El logo del título. MainActor

recorta el verde y lo reeemplaza con el fondo.

14

sita un fichero XML que controle la gene-

ración de contenido. El ejemplo que

muestra el Listado 1 es un fichero sencillo

de control para una película estructurada

en dos capítulos, sin menú, sin fondo, sin

acceso directo ni otras características.

Un fichero de control más complejo con

un menú y las características típicas

puede llegar a ocupar varios kilobytes –

¡quien puede reprocharles nada a los

usuarios por no querer componer esta

clase de ficheros manualmente! Si se

tiene ánimos para afrontar el reto, se

puede consultar el sitio web de DVDau-

thor para leer la documentación y el tuto-

rial de los ficheros de control [5].

La realización de DVDs de vídeos en Linux ha sido un problema durante bastante tiempo, pero el problema

se ha solucionado gracias a unas cuantas herramientas útiles. Q-DVD-Author proporciona una interfaz ami-

gable para controlar el proceso. POR MARCO KRAUS

Creación de DVDs en Linux

LA TOSTADORAVALIENTE

PORTADA • Q-DVD

14 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Por fin se terminó: después de

semanas de peleas con el software

de edición de vídeo, el vídeo de

las vacaciones del verano pasado por fin

se ha convertido en una película casera

presentable y divertida. Pero, ¿y ahora

qué? Las nuevas generaciones no aceptan

nada que no sea un DVD, sin mencionar

el menú, la selección de escenas y otras

opciones típicas de los DVD comerciales.

Obviamente, la herramienta de

grabación no va a proporcionar estas

características, ya que espera un formato

especial de sistema de ficheros y de vídeo

en vez de una película casera. Dicho de

otro modo, se necesita una herramienta

de autoría de DVD.

Si se está creando un Vídeo DVD para

uno mismo, no hay por qué preocuparse

por estos detalles. Los programas de edi-

ción populares como Kino o MainActor

tienen la posibilidad de exportar a for-

mato DVD ya que soportan este estándar.

Si se tiene una película que no necesita

ser cortada pero no tiene el formato DVD

que se precisa, le será útil herramientas

como Mencoder[1], Ffmpeg[2] o

Transcode[3].

Estructura del Sistema deFicherosAdemás del sistema de ficheros (normal-

mente UDF Bridge), el estándar Vídeo

DVD también detalla los nombres de los

ficheros y las rutas. Las películas se alma-

cenan en los llamados ficheros VOB

(Video Object). Los ficheros VOB almace-

nan una mezcla de contenidos (multi-

plexado), como vídeo, audio y posible-

mente subtítulos. Junto a ellos existen

una serie de ficheros IFO que contienen

información de control como una selec-

ción de capítulos, y los ficheros BUP, que

son copias de seguridad de los contenidos

IFO. Las copias de seguridad son impor-

tantes porque los DVDs son más propen-

sos a los errores que los CD normales

debido a la alta densidad de almace-

namiento.

Los ficheros VIDEO_TS.VOB y

VIDEO_TS.IFO le indican al reproductor

de DVD donde tiene que empezar a repro-

ducir. La guía no oficial “DVD Specifica-

tion Guide” [4] contiene más detalles

sobre la estructura de los ficheros.

DVDauthorEn Linux, la herramienta de línea de

comandos dvdauthor permite a los usua-

rios crear una imagen DVD completa con

la estructura detallada anterior-

mente desde un simple

fichero DVD MPEG2.

DVDauthor[5] es

casi siempre el

punto de partida

cuando se necesita

crear un DVD en

Linux. Otras

herramientas de

autor son real-

mente interfaces

para DVDauthor.

DVDauthor

tiene una

colección

de herra-

mientas

para masteri-

zación, como

ifogen, que gene-

ra ficheros IFO.

Desafortunada-

mente, el uso de

DVDauthor no es

algo trivial. Se nece-

Eliminando los dolores decabeza con una GUILas dos interfaces gráficas de usuario más

conocidas son DVDStyler[6] y Q-DVD-

Author[7]. Ambos proyectos son relativa-

mente jóvenes y aun están en fase beta.

Pero a pesar de que aún hay que limarle

algunas asperezas, ambos son funcionales

y proporcionan una enorme ventaja.

Desafortunadamente, en la actualidad

ambos programas carecen de las rutinas

de transformación de flujo de vídeo, por lo

que se necesita un fichero MPG2 compati-

ble con DVD. La mayoría de los programas

de edición de vídeo pueden exportar el

vídeo a un formato adecuado, lo que pro-

porcionará la fuente para poder empezar.

DVDStyler es más intuitivo y fácil de

manejar que Q-DVD-Author. Pero en la

actualidad, DVDStyler no soporta ni

música ni capítulos. Si se busca un punto

de entrada rápido y simple, DVDStyler es

un buen candidato. Si se necesita algo

más complejo, será mejor que se empiece

con Q-DVD-Author.

Q-DVD-Author, que se basa en las bi-

bliotecas QT, va por la versión 0.0.8alpha.

Algunas características aún no están

implementadas, tal y como sugiere el

número de versión tan bajo. Pero, las fun-

ciones que han sido completadas se han

probado y son muy estables.

PreparaciónLo primero es introducir el nombre del

proyecto y del directorio de trabajo,

donde se albergarán los ficheros del DVD

una vez terminado, en Tools|Setup. La

solapa Path contiene los detalles de la

ruta para las herramientas DVDauthor.

Q-DVD-Author tan solo usa esta configu-

ración para el proyecto actual, no tiene

soporte para configuraciones glo-

bales. La opción Scan system no fun-

ciona todavía en la versión actual,

aunque el autor del programa nos

informó que en la actualidad el tra-

bajo de desarrollo se está enfocando

en este punto.

Las configuraciones por defecto

esperan que los ficheros binarios

estén situados en /usr/local/bin,

aunque la mayoría de las distribu-

ciones almacenan estos ficheros en

/usr/bin. El comando whereis dvdau-

thor le indica donde están realmente

situados los ficheros.

Aunque Q-DVD-Author se mostró

bastante estable en nuestro laborato-

rio, es conveniente ir salvando el trabajo

realizado a intervalos regulares. Además

de la simple función guardar, se puede

exportar a un fichero de proyecto com-

patible con DVDauthor en formato XML

y continuar trabajando con el fichero

desde la línea de comandos. No hay fun-

ciones de importación para los ficheros

de los proyectos de DVDauthor.

El siguiente paso es añadir los ficheros

reales de las películas al proyecto. Selec-

cionando Add Movie en el cuadro de diá-

logo. Una selección múltiple agrupará

varias secuencias para crear una única

película.

Menú PrincipalEs una buena idea crear los menús del

DVD en el mismo orden en que se visua-

lizarán. El menú principal, que será lo

primero que el reproductor muestre, es

siempre el menú VMGM seleccionado

cuando el programa se ejecuta. Hay cuatro

botones debajo de la ventana principal,

aunque actualmente tan solo

están implementados Add

Background y Add Sound. Add

Background abre una ventana

en la que hay que seleccionar

el fichero que contiene la ima-

gen que se usará de fondo. El

programa automáticamente

configura la imagen selec-

cionada en el menú en el que

se está trabajando. No hay que

preocuparse por el tamaño de

la imagen. Si la imagen es

demasiado grande o demasia-

do pequeña, Q-DVD-Author

abrirá el cuadro de diálogo

Resize (Figura 1), donde se

podrá convertir la imagen al

15

Q-DVD • PORTADA

15Número 06W W W . L I N U X - M A G A Z I N E . E S

tamaño correspondiente del formato PAL

o NTSC. La conversión no es destructiva,

es decir, no afecta al fichero original del

disco, así que se podrán usar imágenes de

nuestro álbum de fotos particular sin co-

rrer ningún riesgo.

Para rematar el menú principal, se le

puede añadir una música de fondo selec-

cionando Add Sound. Además del for-

mato de audio típico MPEG2 y PCM/WAV,

el programa también soporta los formatos

MP3 y Ogg.

Es conveniente preparar y crear el resto

de los otros menús antes de comenzar

con los enlaces entre páginas y su nave-

gación. Por ejemplo, hay que diseñar un

menú de selección de capítulos antes de

poder enlazarlo con el menú principal. El

menú DVDAuthor|Add Menu añade un

menú vacío al proyecto.

DVDMenu|Rename Menu permite asig-

narle un nombre intuitivo, como “Selec-

cionar Capítulo”. Los siguientes pasos son

los mismos que hemos visto para el menú

principal.

Figura 1: Escalado automático de imágenes de Q-

DVD-Author.

01 <dvdauthor>

02 <vmgm />

03 <titleset>

04 <titles>

05 <pgc>

06 <vob file="video1.mpg" />

07 <vob file="video2.mpg" />

08 </pgc>

09 </titles>

10 </titleset>

11 </dvdauthor>

Listado 1: Un fichero decontrol simple de

DVDauthor

Figura 2: Menú contextual con los elementos de nave-

gación.

mento de texto, aparece un cuadro

de diálogo para establecer la

fuente, el tamaño, el color y la jus-

tificación del texto; véase la Figura

3.

Si se selecciona una imagen

como elemento de navegación,

aparece el cuadro de diálogo típico

para la selección de imágenes. Se

puede escalar, cortar y rotar tanto

los textos como las imágenes

seleccionando Matrix en el menú

contextual (botón derecho del

ratón).

Para los elementos de texto, Edit

del menú contextual abre de

nuevo el cuadro de diálogo de las

fuentes, así que el elemento de

menú Matrix sólo servirá para hacer cam-

bios que afecten a la geometría. Esta solu-

ción proporciona resultados pobres para

los gráficos, así que será preferible usar el

desplegable bajo Edit que abre el cuadro

de diálogo de imágenes (Figura 4).

Creación de Ayudas a laNavegaciónVamos a poner una imagen de Tux que

apunte al submenú Selección de Capítulos

que se creó anteriormente. Para ello, se

selecciona el texto y luego se escoge

Define as button del menú desplegable.

Durante el transcurso de nuestras prue-

bas, descubrimos que la versión actual

del software presenta algunos problemas

cuando se intenta modificar los elementos

botón. Es conveniente establecer el

tamaño y la posición de la ayuda a la

navegación exactamente antes de usar la

característica. Esto puede ahorrar bas-

tantes dolores de cabeza cuando se tra-

baje posteriormente con el fichero XML.

El cuadro de diálogo Button aparece

entonces, mostrando la caja de texto

General donde se puede introducir un

nombre intuitivo (Figura 5). El campo

justo debajo de este se denomina Action y

permite asignar una función al botón,

normalmente el comando jump. El menú

desplegable junto al campo, lista todos

los menús y películas que se han definido

en el proyecto. Para enlazar el elemento

de texto a la secuencia de vídeo, simple-

mente hay que seleccionar la secuencia.

El menú que muestra el tiempo, hace

referencia al capítulo actual, pero volvere-

mos a ello más adelante.

Se dispone de algunas opciones de

tamaño y navegación en el menú

Advanced, sin embargo, normalmente no

se usarán. No hay necesidad de cambiar

los parámetros por defecto para navegar

por los menús usando las teclas de fle-

chas del reproductor de DVD. Las solapas

Normal, Highlighted y Selected permiten

modificar de forma individual los botones

de texto para cada una de estas selec-

ciones.

Ayudas a la NavegaciónLas ayudas sirven para enlazar los ele-

mentos del menú con las secuencias de

vídeo. Se representan como botones que

los usuarios pueden pulsar para saltar al

siguiente menú o para visualizar una

secuencia de vídeo. La versión actual

puede usar tanto textos como imágenes

para esto. Los elementos Collection y

Movie aun no han sido implementados en

la versión disponible. Y el elemento

Frame no está todavía terminado.

Pulsando el botón derecho del ratón en

la ventana principal, se desplegará un

menú contextual con elementos de nave-

gación (Figura 2). Como alternativa, se

puede usar la entrada DVDmenu en la

barra de menús.

Cuando se selecciona un elemento de

texto o una imagen, aparece un cursor

con forma de cruz, que permite selec-

cionar un marco para definir el tamaño

del elemento. Si se selecciona un ele-

PORTADA • Q-DVD

16 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Manipulación avanzada de imágenes. Figura 5: Definiendo la funcionalidad de los elementos de navegación.

En nuestras pruebas, Q-DVD-Author a

menudo presentó problemas a la hora

de realizar cambios en la estructura. Por

ejemplo, el script final de creación del

DVD falló algunas veces. Comprobamos

que los múltiples añadidos y elimina-

ciones habían corrompido el fichero

XML. Hay que asegurarse de planear

bien el proceso para no tener que modi-

ficarlo y evitar que se produzca este fallo

en la versión actual.

Cuadro 1: ProblemasEstructurales

Figura 3: El Cuadro de Diálogo de fuentes de Q-DVD-

Author.

Cuando se cierra el cuadro de diálogo,

el menú contextual para el botón muestra

algunas funciones ligeramente diferentes.

Edit ya no volverá a mostrar el cuadro de

diálogo de fuentes sino el cuadro de diá-

logo Button. Se puede deshacer un enlace

seleccionando Unbutton. El mismo

cuadro de diálogo permite enlazar la ima-

gen con el menú Selección de Capítulos,

donde se seleccionará un submenú como

objetivo del salto.

Selección de Capítulos delSubmenúSe necesita un submenú de selección de

capítulos que permita saltar a puntos

específicos de la película. Pero antes de

crearlo, hay que poner marcas de capítulo

en la película. Para ello, se selecciona el

vídeo correspondiente en All al lado

izquierdo de la ventana, se pulsa el botón

derecho para que se muestre el menú

contextual y se selecciona Edit.

El elemento SourceEntry contiene la

lista de películas del proyecto actual; cada

una de estas películas pueden contener

marcas de capítulos independientemente.

La función Auto Chapter automática-

mente asigna marcas de capítulos a inter-

valos. Sin embargo, es más común dividir

la película en capítulos lógicos y esto es

algo que sólo se puede hacer a mano. La

función Preview en el cuadro de diálogo

de capítulos no funcionaba en la versión

que hemos probado. Esto, junto al hecho

de que el visualizador de películas en

Movie Selection no tiene una utilidad de

control de tiempo, hace que sea difícil

encontrar la posición correcta para colo-

car las marcas de capítulos.

Después de asignar estas marcas, se

pueden usar los botones normales de

navegación para saltar entre ellos, como

se describió anteriormente. Una práctica

común es usar un fotograma de los capí-

tulos, pero el texto nos sacará del apuro.

Como la película tiene ya las marcas de

los capítulos, se puede seleccionar los

capítulos de un desplegable para cada

película.

Finalmente, cada submenú tiene que

darle la posibilidad al usuario de volver al

menú anterior para poder salir de él. Esto

se hace añadiendo un elemento que

apunte al menú VMGM para cada botón

de capítulo.

DVD SlideshowYa estaría completo nuestro DVD, pero

Q-DVD-Author tiene otra virguería: DVD-

Slideshow. Probablemente se haya dado

cuenta del enorme botón rotulado con

Add slideshow en Add movie en el lado

Q-DVD • PORTADA

La implementación del cuadro de diálo-

go para la grabación de DVD de Q-DVD-

Author es minimalista: hace el trabajo,

pero puede que no sea de su total

agrado y no proporcione todas las carac-

terísticas que tienen los programas

especializados. Como los ficheros que

K3B necesita para crear el Vídeo DVD

existen, se puede crear el DVD con este

programa en vez de usar Q-DVD-Author.

Simplemente hay que abrir un proyecto

nuevo de VideoDVD, seleccionarlo en

K3B, arrastrar y soltar el directorio

creado con Q-DVD-Author dentro de la

ventana de datos y tostar el DVD.

Cuadro 2: Mejoran delproceso de tostado

el periodo de tiempo que cada imagen

estará en pantalla se usa General delay in

seconds. La opción include filter permite

especificar si generar o no las transi-

ciones, como se especificó en Continue.

Generar los filtros consume tiempo.

Si se pulsa el botón OK se abre la ven-

tana de generación, donde se podrá

especificar algunos parámetros específi-

cos del proyecto para el slideshow, como

el directorio de trabajo y el nombre de la

película. Cuando se pulse el botón Gene-

rate slideshow se crea la película en el

directorio indicado. Q-DVD-Author

automáticamente la inserta en el

proyecto actual y la muestra en el cuadro

de diálogo de selección de vídeos.

Tostando el DVDTras preparar los datos y los menús, toca

el turno de generar la estructura del

DVD. El cuadro de diálogo Command-

Queue en DVDAuthor|Create DVD es el

lugar donde se hace. El cuadro de diá-

logo muestra los comandos, que serán

ejecutados en el

orden adecuado y

da la oportunidad

de hacer cambios

de última hora a

los parámetros

(Figura 7). Si no

se está familia-

rizado con las he-

rramientas, es

mejor dejar los

valores por

defecto.

Probablemente

se quiera tener

deseleccionado el

casillero Don’t exe-

cute Burn DVD

(está deselec-

cionado por

defecto). Esto hace

que el programa genere la estructura en el

directorio correspondiente pero evita que

la grabe en el DVD. Q-DVD-Author usa un

cuadro de texto para mostrar al usuario

las tareas que está realizando cuando se

lance el proceso de generación.

Una vez finalizado (y esto puede tardar

un rato dependiendo del tamaño del

proyecto), se puede ejecutar xine para

comprobar la estructura de los datos en

disco:

xine dvd://working/directoryU

/VIDEO_TS

Es conveniente verificar los resultados antes

de pasarlo a un DVD. Se puede grabar en el

DVD directamente desde el programa Q-

DVD-Author habilitando la opción Burn

DVD en el cuadro de diálogo Command-

Queue. El proceso de grabación usa her-

ramientas conocidas como growisofs.

Incluso después de haber usado xine para

comprobar los resultados, probablemente

prefiera grabar primero un DVD-RW. Incluso

los autores de DVD más expertos necesitan

al menos dos intentos para obtener un DVD

que funcione perfectamente en un televisor.

Es lógico que le surjan algunos problemas a

los usuarios noveles.

Durante el proceso de masterizado, hay

conviene recordar que el área de visión de

un televisor es menor que la que se mues-

tra en la pantalla del PC. Se debe tener los

elementos de navegación y los textos ale-

jados de los bordes de la pantalla. Incluso

debería comprobarse que los colores coin-

ciden y que el reproductor de DVD puede

leer el disco.

En un FuturoQ-DVD-Author es el programa de autoría

de DVD más maduro para la plataforma

Linux, a pesar de algunos defectos, como

la carencia de algunas funciones. Es

extremadamente estable, aún si tenemos

en cuenta que el proyecto todavía está en

fases muy tempranas de desarrollo. Una

cosa que realmente llamará la atención es

la cantidad de botones que contiene para

funciones que aun tienen que implemen-

tarse. Parece como si Q-DVD-Author estu-

viera destinado a ser una herramienta pro-

fesional de masterización en el futuro y

por la información que disponemos parece

que probablemente consiga su objetivo. �

izquierdo de la ventana del programa. Si

se pulsa este botón se muestra una inter-

faz para el programa dvd-slideshow.

Como DVDauthor, dvd-slideshow es una

herramienta de la línea de comandos que

crea un álbum de fotos desde una fuente

de datos MPEG2, permitiendo fundir el

álbum en el DVD y verlo en el televisor.

Si se selecciona DVD-Slideshow se

muestra un campo de texto vacío (Figura

6). A continuación hay que pulsar en

Select images para añadir un número de

imágenes que se usarán como materia

prima para realizar el slideshow. El

botón Continue proporciona un cuadro

de diálogo con filtros que permiten al

usuario especificar las transiciones y la

música de fondo. Tan solo tiene sentido

seleccionar una imagen de fondo si se

sabe que las imágenes del álbum no van

a cubrir toda la pantalla. Para especificar

PORTADA • Q-DVD

18 Número 06 W W W . L I N U X - M A G A Z I N E . E S

[1] Mencoder: http://www.mplayerhq.hu

[2] ffmpeg: http://ffmpeg.sourceforge.net

[3] Transcode: http://www.zebra.

fh-weingarten.de/~transcode

[4] DVD Specification Guide: http://www.

dvd-replica.com/DVD/index.php

[5] DVDauthor: http://dvdauthor.

sourceforge.net

[6] DVDStyler: http://dvdstyler.

sourceforge.net

[7] Q-DVD-Author: http://qdvdauthor.

sourceforge.net

RECURSOS

Figura 6: Interfaz integrado para DVD-

Slideshow.

Figura 7: Edición manual de generación de comandos

19Número 06W W W . L I N U X - M A G A Z I N E . E S

• Entrada / Decodificación.

• Modificación / Filtrado.

• Salida / Codificación.

Los módulos de entrada (ver Tabla 2)

tienen la tarea de decodificar archivos de

vídeo y audio y ofrecerlos a Transcode

en un formato de datos “virgen”. Hay

diferentes módulos para códigos indivi-

duales de vídeo y audio y para la lectura

de secuencias de vídeo, como las propor-

cionadas por tarjetas de televisión.

El siguiente paso aplica módulos de fil-

tro a los datos virgen de entrada servidos

por los módulos de entrada. Los filtros

no solo modifican los datos existentes de

la imagen y del sonido, si no que tam-

bién pueden añadir o eliminar fotogra-

mas para alterar la sincronización de

películas en movimiento y la banda

sonora.

En el último paso, Transcode pasa los

datos a uno o a varios módulos de sa-

lida, los cuales manejan los datos codi-

ficándolos aplicando una variedad de

códigos de vídeo y audio para crear los

archivos requeridos.

Conversiones de FormatoSimplesEl siguiente comando de Transcode con-

vierte un archivo MPEG1 o MPEG2 en un

archivo AVI en formato MPEG4:

transcode -i sourcefile U

-o targetfile.avi -y xvid4 U

-w 500 -b 48

Transcode usa la librería nativa Linux

XviD para este trabajo. La librería es

rápida y fiable y, desde el punto de vista

de la calidad, está al nivel de los codecs

comerciales. Este simple ejemplo mues-

tra las opciones más importantes: -i y -o

para indicar el archivo de entrada y el

de salida respectivamente, -y para fijar

el filtro de exportación del vídeo a xvid4

y -w para ajustar la tasa de bits a 500

kbps.

flexibilidad, siendo su mayor debilidad

su usabilidad.

Aquellos que prefieran un estilo

basado en interfaz gráfica pueden elegir

entre los que ofrecen interfaces amiga-

bles para las funciones especiales de

Transcode (ver tabla 1). Pero ninguno de

estos programas llega al potencial de

Transcode.

Transcode tiene un diseño estricta-

mente modular. Las funciones críticas

residen en módulos externos que solo se

cargan cuando se necesitan. Transcode

proporciona tres tipos de módulos dife-

rentes que se corresponden con los tres

pasos del proceso de conversión de

archivos de Transcode:

Transcode es una herramienta que

convierte archivos de vídeo de un

formato a otro. También podemos

usar Transcode para otras manipula-

ciones de archivos de vídeo, como el

ajuste del tamaño de los fotogramas de

los vídeos.

Si esperamos que una herramienta de

conversión de vídeo nos ofrezca una

bonita interfaz gráfica de usuario, es

muy posible que Transcode nos desilu-

sione. Transcode [1] es solo un programa

de línea de comandos con muchos con-

troles basados precisamente en la línea

de comandos. Como la mayoría de he-

rramientas no basadas en interfaz grá-

fica, la gran ventaja de Transcode es su

Transcode es una útil herramienta para manipular archivos de vídeo

desde la línea de comandos. Con su arquitectura modular, la utilidad

Transcode ofrece a los usuarios mucho más que simples cambios de

formato. POR JÖRN REDER

Conversión y procesado de archivos de vídeo con Transcode

EL MANITAS

Conversión de vídeo • PORTADA

01 transcode -i sourcefile.mpeg

-o targetfile.avi -y

xvid4,null -w 500 -b 128 -R 1

02 transcode -i sourcefile.mpeg

-o targetfile.avi -y xvid4 -w

500 -b 128 -R 2

Listado 1: Ejemplo deCodificación con Múltiples

Pasos

PORTADA • Conversión de vídeo

20 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Puesto que Transcode exporta audio

como 128 kbps MP3 de forma predeter-

minada, todo lo que tenemos que hacer

es ajustar la tasa de bits de la banda

sonora a 48 kbps usando la opción -b.

Adivina la Tasa de BitsLa tasa de bits del vídeo es el factor que

marca la calidad del vídeo resultante.

Necesitamos una serie de datos, como la

altura y anchura del fotograma y el

número de estos por segundo, para cal-

cular lo que se ha dado en llamar el valor

BPP (Bits por Píxel), el cual es igual a:

Tasa de Bits * 1000 / (Altura * Anchura *

Tasa de Fotogramas).

Por supuesto que la calidad de un

vídeo depende en gran parte de la cali-

dad del vídeo original (escenas rápidas /

lentas, contraste alto / bajo, etc.), pero,

como norma general, podemos suponer

que un valor BPP de aproximadamente

0.20 nos proporcionará una calidad sufi-

ciente evitándonos problemas. Valores

por debajo de 0.15 afectarán la calidad

de la imagen de forma visible. El valor

que utiliza Transcode es el seleccionado

en la configuración (en la línea V:

bits/pixel). Si el valor es muy bajo,

puede que prefiramos detener Transcode

presionando [Ctrl]+[C] e intentarlo de

nuevo con un valor más alto.

Más Vale PrevenirTranscode soporta el método de pases

múltiples para codecs MPEG4. Para

obtener una distribución de la tasa de

bits optima en un vídeo, el programa

primero analiza el material del vídeo y

crea un archivo de registro. En el

segundo pase hace el análisis del archivo

de registro recién creado y entonces rea-

liza la conversión. Podemos habilitar

pases múltiples especificando la opción

-R, teniendo que especificar si éste es el

primer o el segundo pase. El Listado 1

muestra un ejemplo.

Puesto que el primer paso sólo realiza

un análisis del vídeo, podemos usar la

opción -y xvid4,null para deshabilitar la

exportación del audio y acelerar el pro-

ceso hasta en un diez por ciento.

Análisis vs. Prueba y ErrorPuesto que los resultados de una conver-

sión de vídeo dependen de la calidad del

material original, Transcode nos ofrece

una serie de herramientas para analizar

archivos de vídeo, obteniendo sus carac-

terísticas técnicas críticas. El comando

tcprobe nos ofrece un rápido vistazo como

el ejemplo que muestra el listado 4.

De acuerdo a tcprobe, el archivo fuente

tiene una resolución de 320x240 píxeles

y una tasa NTSC de 29.97 fotogramas

por segundo. Adicionalmente, el archivo

tiene una pista de audio mono de 44.1

khz con una frecuencia de muestreo de

16-bit (como indica -e 44100,16,1, puesto

que si fuera estéreo aparecería un 2). La

pista de audio esta codificada como

MP2, pero, desafortunadamente, no lo

indica directamente. Tenemos que eva-

luar el resultado, -n 0x50. 0x55 significa

MP3, y 0x2000 codificación AC3. La tasa

de bits de audio está ajustada a 48 kbps.

Puesto que Transcode usa una codifi-

cación de 128 kbps de forma predetermi-

nada, tiene sentido bajar manualmente

la tasa a 48 kbps, puesto que un valor

más alto no mejorará la calidad del resul-

tado, solo incrementando el tamaño del

archivo.

Módulo Descripción

Dvd Lee directamente desde video DVD. El parámetro -i debe apuntar al nombre

del archivo de un dispositivo o al nombre de un directorio que contenga el sis

tema de archivos del DVD.

vob Lee archivos DVD VOB. Podemos crear el archivo usando el comando tccat de

Transcode.

dv Lee DV vídeo.

ffmpeg Accede a todos los codecs proporcionados por la librería ffmpeg. La detección

del formato es realizada de forma automática.

mplayer Ejecutamos el reproductor mplayer para decodificar vídeo. Por tanto,

Transcode puede soportar cualquier codificador que soporte el reproductor

mplayer.

v4l / v4l2 Lee la señal de vídeo directamente desde un dispositivo Video4Linux, como

una tarjeta de TV.

xvid Lee video MPEG4.

mpeg2 Importa vídeo MPEG.

Tabla 2: Módulos de importación de Transcode

01 transcode --i e4.mpv -J

detectclipping

02 ...

03 [detectclipping#0] valid area:

X: 9..712 Y: 57..519 -> -j

58,10,56,6

04 ...

Listado 2: Análisis lasbarras negras

Nombre Página Web Descripción

dvd::rip http://www.exit1.org/dvdrip/ Interfaz gráfica especializado

en copias DVDs.

g4l http://gv4l.sourceforge.net/ Interfaz gráfica de Transcode

V4L para manipular material de

vídeo TV.

Ripmake http://www.lallafa.de/bp/ripmake.html Programa de línea de coman

dos que facilita una serie de

aplicaciones comunes de

ranscode.

kavi2svcd http://www.cornelinux.de/web/ Kavi2svcd convierte archivos

AVI a linux/kavi2svcd/

index.html súpervideo CD.

Tabla 1: Interfaces de Transcode

Figura 1: La resolución completa de los

vídeos PAL es de 720x576 píxeles. La ima-

gen a 4:3 esta distorsionada porque

720x576 píxeles equivale a un ratio de 5:4.

Esto hace que los caracteres de la película

estén un poco ahuevados si lo vemos en for-

mato original en nuestro PC.

tante opción, la cual reduce la tasa de

bits del vídeo. Como en el ejemplo se

reduce el ancho y la altura a la mitad, la

imagen sólo ocupará una cuarta parte de

su tamaño original, lo que es equivalente

a un cuarto de la tasa de bits.

Grabación de TVLos usuarios con grabadoras digitales de

vídeo basadas en Linux, como VDR,

puede que quieran almacenar graba-

ciones de TV en formatos de alta com-

presión como XviD o MPEG4 de vez en

cuando. Transcode nos puede ayudar de

nuevo, si bien necesita un poco de ayuda

de Vdrsync [2] para el VDR. Si bien

Transcode puede gestionar archivos VDR

directamente, son relativamente

comunes los problemas con la sin-

cronización de audio y vídeo, pudiendo

Vdrsync resolver estos problemas antes

de empezar. El siguiente comando crea

dos archivos de una grabación VDR para

proporcionarnos dos puntos de almace-

naje para las pistas de audio y de vídeo:

vdrsync.pl U

/vdrdata/Dragonheart/ U

2004-08-08.20\:13.50.50.rec/

El nombre de los archivos varía. En este

ejemplo, el código ha creado un archivo

de vídeo llamado e4.mpv y un archivo de

audio llamado c0.mpa. Transcode puede

ahora manipular ambos archivos.

Visión LimitadaSi el material de las películas está en el

formato Letterbox es muy posible que

veamos unas barras negras en las partes

inferior y superior de nuestra pantalla.

Puesto que las barras negras son un des-

perdicio de espacio, puede que

deseemos que Transcode las elimine.

Esto es un proceso que requiere dos

pasos. Primero, Transcode necesita

analizar el tamaño de las barras, y luego

necesita descubrir la posición exacta de

estas. Para hacerlo, Transcode usa el fil-

Los valores entre corchetes en el resul-

tado de tcprobe indican los ajustes prede-

terminados para Transcode. El programa

usará estos valores si pasamos los datos

vírgenes con valores formateados que no

reconozca.

Pequeño pero PoderosoLa posibilidad de escalar material de

imágenes es otra útil funciónalidad, la

cual nos permite crear una vista previa

de un archivo de gran tamaño que está

disponible para descargar. Transcode

ofrece una serie de funciones. La más

simple de éstas usa el parámetro -Z y

devuelve los valores de anchura y altura.

El siguiente comando reducirá el tamaño

de la imagen hasta la mitad (160x120)

sin necesidad de usar el método de los

pases múltiples:

transcode -i sourcefile.mpeg U

-o targetfile_small.avi -y U

xvid4 -w 125 -b 48 -Z U

160x120,fast

El parámetro fast indica a Transcode que

use un algoritmo interno para escalar, el

cual puede afectar la calidad ligera-

mente, que tiene algunas restricciones.

Por ejemplo, la anchura y la altura de

una imagen tienen que ser divisibles por

8. Si no es así, el programa usará el

método estándar. -w 125 es otra impor-

01 transcode -i e4.mpv -J

32detect=verbose=1

02 ...

03 (0) frame [000086]: (1) = 2141

| (2) = 2161 | (3) = 10 |

interlaced = yes

04 ...

Listado 3: Busqueda defotogramas entrelazados

Figura 2: Para eliminar al distorsión debe-

mos alargar la imagen un poco lateralmente,

para hacer que los “huevos” sean redondos.

Figura 3: La barras negras solo ocupan espa-

cio al codificar. Su eliminación ahorra espacio.

hace tareas similares a las que hace

Transcode. Los filtros de Transcode

tienen muchas opciones con las que

jugar, si bien lo normal es que los valores

predeterminados funcionen correcta-

mente en la mayoría de los casos.

Cálculo en MasaPara ahorrar incluso más espacio no sólo

debemos eliminar las barras negras, sino

que también debemos reducir el tamaño

de la imagen. El material de vídeo PAL

tienen una resolución original de

720x576 píxeles, pero el tamaño de la

imagen se distorsiona al ser reproducida

en la pantalla de un PC, puesto que

720x576 píxeles nos dan un ratio de 5:4

en lugar de 4:3. la mayoría de los repro-

ductores multimedia corregirán esto de

forma automática, pero nuestro objetivo

es producir un archivo AVI con el ratio

adecuado a un PC de 4:3. incluso hay

más distorsión con el formato 16:9. Los

cálculos pueden ser aplicados al formato

16:9 de forma similar al formato 5:4. Los

pasos se detallan desde la figura 1 hasta

la 4.

Lo primero que debemos hacer es co-

rregir el ratio. Tenemos que expandir la

imagen lateralmente un factor de (4/3)/

(5/4) = (1.33/1.25) = 1.06. con esta

operación la imagen crecerá un 6%,

teniendo ahora 768 píxeles de anchura.

Lo siguiente es decirle a Transcode que

elimine las dos barras negras, las cuales

ocupan 56 píxeles cada una, resultando

por tanto una imagen de 464 píxeles de

altura.

Ahora le indicamos a Transcode que

escale la imagen desde su tamaño actual

(768x464) a un ancho de 640 Pixels (fac-

tor de 1.2). El tamaño de la imagen

resultante es de 640x386 píxeles, por lo

que aún tenemos que reducir la altura

hasta 384 para que sea divisible entre 16.

El factor de distorsión es invisible para el

ojo humano. Aplicamos algo de

matemáticas de nuevo y escribimos el

siguiente comando para convertir los

datos originales en VDR a un formato de

vídeo Xvid:

transcode -i e4.mpv -p c0.mpa U

-o targetfile.avi -y xvid4 -w U

1650 -j 56 -J smartyuv -Z U

640x384,fast

El parámetro -p añade el archivo de

audio (recordemos que los archivos de

audio y vídeo estaban separados). Una

tasa de bits del vídeo de 1650, combi-

nada con la resolución seleccionada

resulta en un valor BPP de 0.267, el cual

debe ser suficientemente alto para la ca-

lidad deseada.

Flexible y PoderosoEste artículo apenas entra en el enorme

número de funciones de Transcode. La

distribución Transcode viene adicional-

mente con una serie de prácticas he-

rramientas para la línea de comandos.

En la lista de distribución de Transcode

[3] podemos encontrar muchas más

información que seguro nos ayudará a

trabajar con Transcode. �

tro detectclipping. El listado 2 muestra

un ejemplo de cómo hacerlo. Lo que en

realidad hace Transcode es inspeccionar

cada uno de los fotogramas y mostrar el

resultado en la línea de comandos.

Cuando los resultados dejan de cambiar

significa que Transcode ha encontrado

los ajustes adecuados. -j 58,10,56,6

indica al programa que debe eliminar la

barra negra situada 58 líneas hacia

arriba, 10 líneas a la izquierda, 56 líneas

hacia abajo y 6 hacia la derecha.

Desafortunadamente no podemos usar

estos valores tal cual, puesto que no son

divisibles entre 16 (la mayoría de los

codecs requieren que la imagen sea

divisible por 16, y XviD no es una excep-

ción). Un poco de matemáticas nos

puede ayudar. Solo por motivos de clari-

dad no vamos a considerar los píxeles de

la izquierda y de la derecha. Si elimi-

namos 56 líneas en lugar de 58 eli-

minaremos 112 en total. Las 576 líneas

del sistema PAL menos las 112 que elimi-

namos dejan 464, número divisible por

16. Esto nos deja con -j 56,0,56,0, pu-

diendo usar una abreviatura para pasarle

la orden a Transcode: -j 56. El programa

corta simétricamente por defecto

EntrelazadoEntrelazado es una palabra común en la

tecnología del vídeo. Significa que las

líneas pares e impares se muestran de

forma separada, lo que es habitual en la

TV. Cuando visualizamos imagenes en

movimiento en un monitor de PC, los

resultados son malos debido a que los

objetos tienden a verse borrosos. Para

contrarrestar este efecto, la mayoría de

los reproductores o convertidores de

vídeo usan una función de desentre-

lazado para eliminar las líneas.

Transcode usa el filtro 32detect (ver lis-

tado 3) para comprobar si el material

original del vídeo contiene los fotogra-

mas entrelazados.

Transcode devuelve una línea por cada

fotograma. Si aparecen fotogramas inter-

lazados (interlaced = yes) es oportuno

usar el filtro específico para eliminar el

entrelazado. Como aspecto negativo

destacar que la codificación tarda mucho

más tiempo. Transcode dispone de otro

filtro (smartyuv), que es la versión opti-

mizada en cuanto a velocidad del filtro

smart deinterlacer de VirtualDub para el

espacio color YUV. VirtualDub es un pro-

grama Windows de gran difusión que

PORTADA • Conversión de vídeo

22 Número 06 W W W . L I N U X - M A G A Z I N E . E S

[1] Página Web de Transcode: http://

www.transcoding.org/

[2] Vdrsync preprocesa grabaciones de

VDR para ser manipuladas con

Transcode: http://vdrsync.vdr-portal.

de/

[3] Lista de distribución de Transcode:

http://lists.exit1.org/mailman/listinfo/

RECURSOS

Figura 4: Para ahorrar incluso más espacio

podemos reducir el ancho a 640 píxeles con-

servando una buena definición.

01 tcprobe -i sourcefile.mpeg

02 [tcprobe] MPEG program

stream(PS)

03 [tcprobe] summary for

sourcefile.mpeg, (*) = not

default, 0 = not detected

04 import frame size: -g 320x240

[720x576] (*)

05 aspect ratio: 1:1

06 frame rate: -f 29.970

07 [25.000] frc=4 (*)

08 audio track: -a 0 [0] -e

44100,16,1 [48000,16,2] -n

0x50 [0x2000] (*)

09 PTS=370.6876, bitrate=48 kbps

Listado 4: Resultado detcprobe

23Número 06W W W . L I N U X - M A G A Z I N E . E S

Los desarrolladores de programas base

pueden concentrarse en diseñar sistemas

y motores más robustos y flexibles,

mientras que los desarrolladores de plu-

gins pueden hacer lo propio en su tra-

bajo, sin tener que preocu-

parse de cómo se ensam-

blarán con los programas

que harán de host. Por

supuesto, son los usuarios

quienes salen ganando con

todo esto.

En el mundo de la

música bajo Windows o

Mac, la API para plugins

VST de Steinberg se ha

convertido en la interfaz

más comúnmente acep-

tada. Este formato VST

(Virtual Studio Technology)

de Steinberg para plugins

salió al mercado a finales

de los 90. El actual están-

dar VST2 apareció en 1999.

Podemos hacernos una

idea de su popularidad

entre los desarrolladores y

puede ser más general y ser usada por

distintos programas.

Diseñar un programa que cumpla una

interfaz estándar para los plugins tiene

mucho interés para los programadores.

En el mundo del software de

sonido digital, un plugin es un

componente extra que extiende

las funcionalidades del programa base.

Un plugin puede proporcionar un efecto

especial, como rever-

beración, puede ser un

instrumento MIDI, como

un sintetizador multitím-

brico General MIDI, o

puede ser un interfaz para

un secuenciador MIDI.

El programa base y el

plugin deben acordar en

qué, cómo y cuándo van a

comunicarse. Si el pro-

grama y el plugin se

ponen de acuerdo en una

Interfaz de Programación

de Aplicaciones (API,

Application Programming

Interface) estándar,

lograrán su objetivo. Una

API puede ser específica

para un programa, como

las APIs de The GIMP o

las de XMMS, o bien

El sonido digital profesional ha sido coto cerrado de sistemas propietarios como Apple Macintosh durante

mucho tiempo. Pero el sonido en Linux ha hecho enormes avances. Ahora podemos incluso ejecutar la

enorme cantidad de plugins VST directamente en nuestro estudio Linux. POR DAVE PHILLIPS

El sonido digital profesional ha sido coto cerrado de sistemas propietarios como Apple Macintosh durante

mucho tiempo. Pero el sonido en Linux ha hecho enormes avances. Ahora podemos incluso ejecutar la

enorme cantidad de plugins VST directamente en nuestro estudio Linux. POR DAVE PHILLIPS

PASARELA MUSICALEjecución de plugins de audio VST en Linux

PASARELA MUSICAL

Figura 1: El plugin VSTi Crystal controlado desde un teclado externo.

VST Audio Plugins • PORTADA

PORTADA • VST Audio Plugins

24 Número 06 W W W . L I N U X - M A G A Z I N E . E S

usuarios con una simple búsqueda en

Google: VST plugin. En el momento de

escribir este artículo el buscador indica

unas 187.000 coincidencias. Curiosa-

mente si buscamos por free VST plugin

aparecen casi 95.000 coincidencias.

El mundo de Linux tiene su propia API

para plugins. (Véase el cuadro titulado

“LADSPA”). Sin embargo, a pesar del

éxito de LADSPA y otras alternativas

nativas de Linux, la enorme cantidad de

plugins disponibles a través de la API de

VST provocan que el usuario de Linux

interesado en audio se encuentre en oca-

siones ante la necesidad de ejecutar un

plugin VST bajo Linux.

Este artículo muestra como configurar

Linux para dar cabida a la enorme colec-

ción de plugins VST desarrollados origi-

nalmente para sistemas Windows y Mac.

VST/VSTiLos plugins VST se han convertido en

componentes habituales en el estudio de

sonido Win/Mac. Algunos de los plugins

más avanzados son ahora componentes

estándar de la producción musical, y la

disponibilidad de excelentes plugins gra-

tuitos o de bajo coste proporciona proce-

sado de audio de alta calidad (a veces

incluso calidad profesional) al músico

aficionado o al estudio semiprofesional.

La API para plugins VSTi es una exten-

sión de VST que permite que el plugin

sea un instrumento (es decir, un sinteti-

zador, un sampler o un secuenciador).

Al igual que ha pasado con la API VST,

los plugins VSTi se han convertido en

componentes estándar de los programas

de música y sonido para Win/Mac.

Como se muestra en la Figura 1, el

instrumento típico VSTi es un sinteti-

zador por software, interpretable vía

MIDI, con control de parámetros en

tiempo real (manual o MIDI), y proba-

blemente con salida multicanal.

Hoy día, los programas de sonido en

Win/Mac admiten VST/VSTi de manera

A comienzos del año 2000, el desarro-

llador Richard W.E. Furse propuso un

primer diseño de una API para plugins

de audio en Linux. Los debates de la

lista de correo de Linux Audio Develo-

pers estimularon su propuesta y nació

LADSPA (Linux Audio Developers Sim-

ple Plugin API) [1].

Es importante recalcar el término Sim-

ple del acrónimo LADSPA. Los plugins

LADSPA no tratan de alcanzar el mismo

grado de complejidad en la interacción

con sus hosts que podemos encontrar

en los plugins VST. Sin embargo “sim-

ple” no significa falto de potencia: exis-

ten, de hecho, excelentes plugins

LADSPA, con un magnífico rendimiento.

Buena parte de la simplicidad de

LADSPA se basa en la manera en la que

administra los aspectos de interfaz grá-

fica de usuario: simplemente los ignora.

El juego de herramientas gráficas del

host debe proporcionar un conjunto de

elementos básicos adecuados, pero el

diseño de estos elementos es cosa del

programador de la interfaz gráfica de

usuario. Por tanto, al contrario que en el

mundo VST, un plugin LADSPA proba-

blemente tendrá diferente aspecto

según el programa que lo ejecute,

aunque las funcionalidades y el manejo

deben ser los mismos. Incluso, como la

API no suministra directrices sobre la

interfaz gráfica de usuario, es posible

ejecutar plugins LADSPA sin gráficos.

Otra consecuencia reseñable de la sim-

plicidad de LADSPA es su facilidad de

integración con las aplicaciones, tanto

nuevas como ya existentes. La API se

adoptó rápidamente por los desarro-

lladores, y a lo largo de los últimos cua-

tro años el soporte para LADSPA se ha

convertido en algo natural en las herra-

mientas de música y sonido en Linux.

Una enorme variedad de programas ha

adoptado la API: sistemas de grabación

en disco duro, procesadores digitales de

audio, secuenciadores audio/MIDI, sin-

tetizadores por software, editores de

archivos sonoros, reproductores multi-

media, etc.

La respuesta en tiempo real de LADSPA

es, por lo general, excelente, siempre

que tengamos un kernel de baja latencia

y el sistema de sonido ALSA o JACK.

Los desarrolladores de LADSPA han

aceptado esta simplicidad inherente, y

la propia API apenas ha sufrido cambios

desde la versión 1.0. Una extensión

notable ha sido la compatibilidad con

RDF (Resource Description Framework),

un mecanismo excelente para clasificar

plugins, fijar sus valores por defecto y

proporcionar valores de antemano. En

la Figura 2 se muestra a RDF en acción

con la lista de plugins LADSPA en el pro-

gramador de ritmos Hydrogen.

Si usamos una distribución de Linux

optimizada para audio, encontraremos

LADSPA

Figura 2: Plugins LADSPA listados en Hydrogen. Figura 3: Módulo de reverb TAP en Audacity.

VST Audio Plugins • PORTADA

25Número 06W W W . L I N U X - M A G A Z I N E . E S

WINE, parte del proyecto WINE, cuyo

objetivo es crear un entorno de emu-

lación que permita ejecutar programas

Windows en sistemas Linux. Kjetil tam-

bién creó dos clientes para vstserver: un

objeto para el entorno de síntesis y com-

posición Pd, y un plugin LADSPA que

funciona como host de los plugins VST.

Recientemente ha incorporado el cliente

vsti para permitir el uso de instrumentos

VST (VSTi). Por lo tanto, gracias a vst-

server ya se pueden ejecutar muchos

efectos VST e instrumentos en Linux.

Seguiremos los siguientes pasos para

instalar el entorno vstserver en nuestro

sistema:

• Descargamos, compilamos e

instalamos el último paquete

WINE de Kjetil, disponible en

[3].

• Descargamos, compilamos e

instalamos los últimos paque-

tes vstserver, k_vst~, ladspavst

y vsti disponibles igualmente

en [3].

• Fijamos la variable de entorno

VST_PATH, tal y como se

explica en la documentación de

vstserver. (La variable de

entorno VST_PATH indica al

servidor dónde buscar los plu-

gins VST).

habitual. La lista de programas compati-

bles es demasiado larga para recogerla

aquí. Se recomienda de nuevo una

búsqueda en Google a este respecto. La

noticia es que, como hemos comentado

antes, los usuarios de Linux ya pueden

hacer uso de los plugins VST/VSTi.

El primer desarrollo que permitió el

uso de VST/VSTi bajo Linux se la debe-

mos a Kjetil Matheussen, del NoTAM, un

centro de investigación musical y acús-

tica de Noruega. Los esfuerzos iniciales

de Kjetil se concretaron en “vstserver”,

que fue la base de una arquitectura

cliente/servidor para ejecutar plugins

VST. Vstserver se basa en la librería

LADSPA

LADSPA ya instalado y configurado. Los

usuarios de Mandrake encontrarán el

SDK de LADSPA y una colección de plu-

gins en el repositorio Thac (véase en

[11]). No se asuste, LADSPA es simple

también a la hora de instalar y configu-

rar.

Descargamos el fichero tar desde www.

ladspa.org, lo descomprimimos en el

directorio de usuario y accedemos al

nuevo directorio ladspa_sdk. Leemos el

fichero README y seguimos sus

instrucciones. Entramos en el directorio

src. Editamos el archivo makefile y eje-

cutamos make para compilar el SDK. A

continuación, como administrador, eje-

cutamos make install. A partir de este

momento ya podremos instalar y usar

algunos plugins LADSPA.

Sería interesante echarle un vistazo a

los links de http://linux-sound.org/

ladspa.html. Podemos probar la colec-

ción de Steve Harris, los plugins TAP de

Tom Scylagi, los excelentes filtros de

Fons Adriaensen, las colecciones de Tim

Goetze o Mike Rawes… en definitiva, es

cuestión de probarlas todas.

La Figura 3 muestra un módulo de

reverb TAP actuando sobre un fichero

de sonido en el editor Audacity.

Linux soporta asimismo otras APIs para

plugins. La arquitectura MAIA (Multime-

dia Applications Integration Architec-

ture) de David Olofson, es un intento de

solucionar algunos defectos de

LADSPA. Se diseñó como una API multi-

plataforma, aunque con especial ori-

entación a los sistemas UNIX. Desgra-

ciadamente la API MAIA no ha encon-

trado un hueco entre los progra-

madores, y el proyecto apenas ha evolu-

cionado desde comienzos de 2001.

La aparición más reciente en el mundo

de los plugins bajo Linux viene de mano

de los programadores Chris Cannam

(Rosegarden), Steve Harris (plugins

LADSPA SWH)y Sean Bolton. Definen

su propuesta, DSSI (Disposable Soft

Synth Interface), como un “LADSPA

para instrumentos”, como podemos

comprobar en la página Web del

proyecto [2]. Han diseñado DSSI con el

objetivo de arreglar ciertos problemas

de soporte para los sintetizadores por

software existentes en Linux, especial-

mente referentes al control MIDI.

Además su interfaz permite un puente

para ejecutar plugins VSTi. De

momento, se ha implementado única-

mente en el secuenciador Rosegarden.

Falta por ver si se gana el favor de los

programadores de software de audio

bajo Linux. En mi opinión es una API

muy prometedora, y los desarrolladores

interesados pueden remitirse al docu-

mento RFC (request for comments) que

encontrarán en la página Web de DSSI.

La Figura 4 muestra el secuenciador

Rosegarden ejecutandose con una

instancia del xsynth de Sean Bolton,

una prueba piloto de plugin para sinteti-

zadores DSSI.

Figura 4: El secuenciador Rosegarden funcionando bajo la API DSSI.

Kjetil), para poder utilizar el

plugin host de VST LADSPA. El

cliente vsti es un programa

independiente que describire-

mos más adelante.

Cada paquete incluye una lista completa

de detalles concernientes a la compi-

lación e instalación del software. Dicho

sea de paso, si queremos utilizar el sis-

tema de Kjetil, debemos descargar y

compilar el código fuente de WINE mo-

dificado por él mismo (disponible en la

página de vstserver). Vstserver es

extremadamente sensible respecto a la

versión de WINE de nuestro sistema, y

otras versiones pueden no funcionar.

Dos últimos apuntes: como se indica

en la documentación de vstserver, el

segundo paso requiere el VST SDK de

Steinberg. Sólo se necesitan dos archivos

para compilar el servidor y, aunque el

SDK es gratuito, no es de libre distribu-

ción, por lo que debe ser descargado de

forma separada. Asimismo, si la ruta de

VST está configurada correctamente pero

vstserver es incapaz de reconocer los

plugins, podemos probar a enlazar el

servidor y el objeto vstservant.so al

mismo directorio al que apunta

VST_PATH.

Cliente/ServidorVstserver [3] aguarda a su entrada a un

programa cliente. Como se mencionó

anteriormente, Kjetil creó dos clientes

para usar con vstserver:

• Un “objeto” para el entorno de

síntesis y composición, Pd.

• Un plugin LADSPA que fun-

ciona como host de los plugins

VST.

Describiremos estas dos opciones en las

siguientes secciones.

Pd y el objeto k_vst~Arrancamos el servidor tecleando vst-

server en un terminal. Veremos un breve

mensaje que nos indica que el servidor

está listo para recibir datos de los

clientes. Si tenemos instalado el maravi-

lloso Pd [8] en nuestro sistema, podemos

ejecutarlo con la siguiente orden, que le

añade las funcionalidades del objeto

k_vst~

pd -lib k_vst~

Esta orden da por hecho que estamos en

el directorio de usuario. Si arrancamos

Pd desde un directorio distinto, hemos

de incluir la ruta completa hasta el

objeto.

La Figura 5 nos muestra un plugin VST

dentro de un Pd patch. El patch enca-

mina la entrada de audio a través del

objeto k_vst~ (es decir, el plugin VST)

• Arrancamos el servidor desde

su directorio origen.

• Ejecutamos el cliente. Nece-

sitaremos Pd para k_vst~, y un

programa host adecuado (como

la excelente versión del editor

de sonido Snd realizada por

PORTADA • VST Audio Plugins

26 Número 06 W W W . L I N U X - M A G A Z I N E . E S

El sistema de sonido por defecto en

Linux ha cambiado recientemente de la

API OSS/Free (las iniciales OSS corres-

ponden a Open Sound System), a ALSA

(Advanced Linux Sound Architecture).

Ahora ALSA es el sistema de sonido por

defecto del kernel de Linux, para las

ramas en desarrollo y estables desde la

2.5/2.6 en adelante. En teoría es posible

usar LADSPA y VST en el sistema

antiguo, pero está altamente desaconse-

jado. Por mi parte recomiendo expresa-

mente usar ALSA como base de su sis-

tema de audio y MIDI.

ALSA tiene su sistema propio de plugins

para extender sus funcionalidades. No es

una interfaz multipropósito, pero sirve

para algunos usos muy interesantes. Por

ejemplo, el plugin dmix permite mez-

clado de sonido por software para sis-

temas que no tengan soporte para multi-

plexar fuentes de audio por hardware.

Por ejemplo mi portátil en principio sólo

puede ejecutar un programa de audio a

la vez. Pero si incorporamos el plugin

dmix (en el archivo ~/.asoundrc, véase la

documentación de ALSA para más

detalles), podemos reproducir varias

fuentes de audio.

JACK es un ejemplo verdaderamente

reseñable de desarrollo de software para

audio en Linux. Diseñado en origen por

Paul Davis (Ardour/Softwerk), se ha con-

vertido en el servidor de sonido robusto

de baja latencia por excelencia, permi-

tiendo interconexion I/O a cualquier

cliente JACK. Además proporciona un

mecanismo de control de transporte

para la administración síncrona de apli-

caciones compatibles. Si su sistema de

audio tiene miras profesionales, definiti-

vamente necesitará JACK.

Artsd y esd son los demonios del sis-

tema de sonido en KDE y GNOME. Se

usan típicamente para propósitos relati-

vamente simples, aunque ambos tienen

un gran potencial para eventos de

escritorio (incluso aRts incluye una API

para plugins). Sin embargo no están di-

señados para un entorno de audio profe-

sional y deberían desactivarse si usamos

KDE o GNOME en dichos entornos.

Sistemas de sonido en Linux

Figura 5: El objeto k_vst~ de Pd ejecutando un plugin VST.

hasta el exterior mediante la salida Out

de la tarjeta de sonido. Podemos admi-

nistrar el plugin VST controlando los

parámetros del efecto mediante las ba-

rras deslizantes, los mandos giratorios y

los interruptores del mismo modo que si

estuviésemos ejecutando el plugin bajo

Windows o Mac.

Se pueden encontrar más detalles del

patch mostrado en mi tutorial en http://

www.djcj.org/LAU/quicktoots/toots/

vst-plugins/. Dicho sea de paso, hemos

hallado mejor sonido configurando la

entrada y salida de Pd para JACK en

lugar de ALSA. (Véase el cuadro titulado

“Sistemas de sonido en Linux”). Si se

nos interrumpe el sonido con ALSA al

controlar los plugins, debemos probar

JACK.

El Cliente ladspavstUsar un plugin LADSPA para ejecutar un

plugin VST puede parecer extraño. Con

ladspavst de Kjetil vamos a tener un plu-

gin que hace de host para otros plugins.

Ladspavst es transparente al usuario,

sólo nos importarán sus funciones.

La Figura 6 muestra el plugin North-

Pole. Se trata de un filtro invocado desde

el menú de LADSPA del editor de sonido

Snd, el cual hemos personalizado conve-

nientemente. Como se puede ver, cada

plugin VST aparece en la lista como VST

plugin [plugin_name.dll] available from

vstserver, y se invoca del mismo modo

que cualquier otro plugin LADSPA.

Como se mencionó anteriormente, el

aspecto de cada plugin dependerá del

toolkit de la interfaz gráfica de usuario.

Sin embargo el plugin ladspavst propor-

ciona un interruptor para seleccionar la

interfaz del propio plugin VST si así lo

deseamos.

Uso de un plugin VSTi convsti

Como se mencionó anteriormente, el sis-

tema vstserver incluye también un

cliente vsti que nos permite usar plugins

VSTi. Este cliente vsti funciona con la

siguiente sintaxis:

vsti /path/to/nombre_plugin.dll

Observe de nuevo la Figura 1 para ver al

cliente vsti ejecutando el sintetizador

Crystal. Vstserver está abierto y

podemos ver el panel de conexiones

MIDI qjacktl (proporcionado por Rui

Nuno Capela) conectando mi teclado

MIDI a Crystal. Qjacktl también dispone

de un panel que no se ve en la imagen

que proporciona una interfaz gráfica

para realizar conexiones I/O.

El Proyecto FSTEl sistema FST (FreeST) [4] proporciona

otra manera de usar plugins VST/VSTi

bajo Linux. FST implementa una librería

en vez de un servidor. En palabras de su

desarrollador Paul Davis, FST es “…una

solución más adecuada para programas

de audio que deben soportar muchos

plugins VST, cuando los controles

requeridos en el cuadro de VSTserver no

están adecuadamente escalados”. La

parte mala es que “…un plugin que se

comporte mal puede colgar el host”.

Trabajando con WINETanto vstserver como libfst dependen de

versiones específicas de WINE. Como se

ha mencionado antes, la página de vst-

server proporciona una versión modifi-

cada de WINE. Esta versión está basada

en fuentes antiguas. Si quisiéramos una

versión más reciente, puede que compro-

metamos la estabilidad de vstserver. Para

estar al tanto de las últimas informa-

ciones respecto a la compatibilidad con

WINE revise el tutorial de VST en http://

www.djcj.org/LAU/quicktoots/toots/

vst-plugins/. �

VST Audio Plugins • PORTADA

27Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] LADSPA: http: //www.ladspa.org

[2] DSSI: http://dssi.sourceforge.net

[3] vstserver: Home http://www.notam02.

no/arkiv/src/

[4] Página de inicio FST: http://

linuxaudiosystems.com/fst/

[5] La página de compatibilidad VST-

Linux: http://www.djcj.org/LAU/

ladspavst/

[6] KVR Audio: http://www.kvraudio.com

[7] Uso de plugins VST/VSTi bajo Linux:

http://www.djcj.org/LAU/quicktoots/

toots/vst-plugins/

[8] Pd: http://crca.ucsd.edu/~msp/

software.html

[9] Lista de correo de LAU (Linux Audio

Users): http://www.linuxdj.com/audio/

lad/subscribelau.php3

[10] EL sitio de aplicaciones de sonido y

música para Linux: http://

linux-sound.org

[11] RPMS de Thac para Mandrake: http://

rpm.nyvalls.se/

RECURSOS

Figura 6: VST en funcionamiento con LADSPA con snd.

Pd (Pure Data) es un entorno de progra-

mación visual orientada a objetos,

creado por Miller Puckette. Esta di-

señado para crear sistemas arbitraria-

mente complejos de síntesis de audio y

procesado de vídeo. Los componentes

audio/vídeo se conectan virtualmente

para crear un patch Pd, y en último tér-

mino, enviar su salida a dispositivos

externos de audio y vídeo. En cuanto al

sistema de sonido para Linux, admite

ALSA y JACK, y respecto a los gráficos

3D es compatible con la librería GEM.

Pure Data

28

mentos no permanentes. De esta ma-nera, no sólo el estilo permaneceráintacto, también la dimensión y medidasde la página serán las correctas. Scribustiene una opción Save as Template en elmenú File, pero con usar Save as serásuficiente siempre que recordemos nosobrescribir la plantilla cuandoguardemos cambios posteriormente.

Preparando la ImpresiónHace años, si querías llevar un trabajo auna imprenta, era necesario usar archivo

la información semiestática, como el sis-tema de numeración y la distribución deelementos. Si observamos las tres imá-genes de la Figura 1, vemos cómoincluso páginas relativamente diferentespueden compartir elementos similares yun formato básico.

Lo que resulta vital es que las medidasde la página y el estilo sean idénticos a lolargo de todas las páginas. Para asegu-rarnos de esto, lo mejor es tomar unapágina ya finalizada y crear una plantillaa partir de ella, eliminando todos los ele-

En la anterior entrega se completóla portada y se propuso como guíaplantillas para crear las restantes

páginas. En este artículo se mostrarácomo darle los toques finales y ensamblarel periódico para la impresión.

PlantillasEn todo proyecto de maquetación(incluso en todo proyecto de diseño web,de hecho) un punto clave es la coheren-cia. Para poder guardar la coherencia esnecesario crear páginas que parezcanrelativamente similares incluso si alber-gan distinto tipo de contenido. Los ele-mentos básicos de la página, como el sis-tema para numerarlas, deben ser idénti-cos, así como los tipos de letra.

Nuestra publicación utiliza Gill Sans Bold,pero la elección de la tipografía y el estilo escosa suya. Sea el que sea, ha de mantenerseconstantes a lo largo del proyecto.

En autoedición, una plantilla es sim-plemente un archivo que contiene toda

En la tercera y última parte de la serie, daremos los toques finales a nuestro periódico Linux. Aprenderemos a

generar un PDF y descubriremos qué opina un profesional de la maquetación de nuestro proyecto.

POR JASON WALSH

PRÁCTICO • Scribus

28 Número 06 W W W . L I N U X - M A G A Z I N E . E S

LISTO PARA IMPRIMIRLISTO PARA IMPRIMIRLISTO PARA IMPRIMIRLISTO PARA IMPRIMIRLISTO PARA IMPRIMIRLISTO PARA IMPRIMIRLISTO PARA IMPRIMIRPlantillas y PDFs con Scribus

LISTO PARA IMPRIMIR

Algunos lectores estarán pensando, sin

duda, que nuestro sistema de importar

PDFs y volverlos a exportar como pági-

nas dobles es innecesariamente compli-

cado. ¿Por que no trabajamos directa-

mente sobre las páginas dobles en el

orden adecuado? Si tenemos la mala

suerte de producir el periódico completo

nosotros mismos, es mejor sin duda tra-

bajar directamente en las páginas de

Scribus. Pero en caso de que mucha

gente esté trabajando en páginas dife-

rentes, es mucho más simple considerar

cada página como un elemento indepen-

diente y emparejarlas adecuadamente

antes de imprimir.

¿Por qué exportar dos veces?

de algún programa estándar en la indus-tria tipográfica, como Quark XPress oMacromedia Freehand. Hoy en día, aúnse requiere usar un formato estándar,pero ya no es un formato propietario lim-itado a una aplicación: es el PortableDocument Format (PDF) de Adobe.

Como formato de fichero, el PDF tienedos ventajas muy importantes. Laprimera es que libera al usuario de usarprogramas específicos. En segundo lugar,considere que los formatos nativos deautoedición como los usados por QuarkXpress, InDesign e incluso Scribus son,por supuesto, editables. Esto es malacosa a la hora de imprimir. Si la imprentausa tipos de letra con medidas ligera-mente diferentes, el trabajo entero puedeimprimirse incorrectamente: las letrasestarán donde no deben, y habrá querehacer el proyecto por completo. Elremedio tradicional para este problemaera enviar el tipo de letra a la imprenta,algo que en realidad no es legal debido alos contratos de licencia. Sin embargo, elformato PDF se creó explícitamente parael intercambio de documentos, por loque esto ya no es un problema.

Como todas las aplicaciones profesio-nales de autoedición, Scribus es capazde generar PDFs. Estos PDFs pueden sertan simples o complejos como lorequiera el trabajo. Para crear nuestroperiódico en formato PDF, vaya al menúprincipal y seleccione File > Export >

Save page as PDF. Observeel cuadro de diálogo queaparece. ¿Complejo? Notenga miedo, es fácil decomprender.

Este menú está lleno deopciones. Antes de nada,en la pestaña General

seleccione Downsample

Images y fíjelo en 200dpi.200 puntos por pulgada esuna resolución suficiente-mente alta para imprimirun periódico. Esta resolu-ción relativamente baja esadecuada debido a que latinta se explayará por elpapel de baja calidadusado en periódicos. Paratrabajos de mayor calidadde impresión, como revis-tas, este parámetro ha defijarse en 300dpi o más. Sino hay problemas de

memoria o espacio en disco, Scribuspodrá con lo que se le eche. Tenga encuenta, no obstante, que si sus archivosde imagen son de baja resolución, pon-gamos por caso 72dpi, como los que unopuede encontrar en la World-Wide-Web,ni Scribus ni ningún otro programapodrá incrementar esa resolución “porarte de magia”. Podrá guardarlas a800dpi, pero si eran de baja resolución,seguirán siendo de baja resolución.

En la pestaña, Fonts, seleccione Embed

all fonts. De este modo todos los tipos deletra usados en el documento seincluirán en el PDF. Esta característicano sólo significa que el documento seimprimirá correctamente, sino que tam-bién se evitan problemas de licenciascon el tipo de letra.(Recuerde que es ilegalsuministrar los tipos deletra a la imprenta,aunque muchas le dejenhacerlo, ya que luegoborran el tipo de letratras su uso).

Las pestañas Extras ySecurity no nos interesande momento, vaya direc-tamente a la pestañaColor (véase la Figura 3),que es de vital importan-cia por razones discutidasen la primera y segundapartes de esta serie.

Repasando brevemente lo discutido, secomentó que las imágenes destinadas aser impresas se fijaban en modo de colorCMYK, mientras que las que se ven enpantalla eran configuradas en modoRGB. En el menú desplegable General,seleccione Output Intended for Print.

La pestaña Color tiene asimismo algu-nas opciones avanzadas muy intere-santes. Si selecciona Use Custom Rende-

ring Settings, podrá ajustar manual-mente la forma y frecuencia de los pun-tos mediotono. Esto forma parte del pro-ceso de selección, y si su imprenta leproporciona información específica, eseste el menú dónde deberá introducirla.En la mayoría de los casos, no obstante,lo más seguro es simplemente ignorar

Scribus • PRÁCTICO

29Número 06W W W . L I N U X - M A G A Z I N E . E S 29

Figura 1: El uso de plantillas da pie a la consistencia. Incluso páginas relativamente diferentes, como los

mostrados, se construyen a partir de una misma plantilla base.

cabida a dos páginas completas, una allado de la otra.

Seleccione New en el menu File. Estonos permitirá crear un meta-documentoque contenga nuestros archivos (véaseFigura 4). En nuestro caso, la páginatiene una altura de 386mm, exactamentela de una página simple. Sin embargo, laanchura es de 594mm, que es exacta-mente el doble del ancho de una páginasimple en nuestro proyecto. Scribus cam-biará automáticamente las medidas demilímetros a puntos.

El siguiente pasó será seleccionar laherramienta imagen de la barra de he-rramientas de Scribus y dibujar dos rec-tángulos idénticos en la página que ten-gan la misma longitud de alto que lapágina y la mitad de su anchura. Guardeesto, pues será nuestra plantilla básicade una doble página.

El siguiente paso será importar laspáginas y aquí es donde el asunto sevuelve espinoso. Cada página se reim-porta (Scribus la trata como una imagennormal) y se re-exporta como un PDF dela doble página completa.

La dificultad aquí es el ajuste, es decir,el orden en el que se colocan las páginas.Cada página está pareada con su opuestaen el orden de impresión, por lo que esteorden puede cambiar dependiendo delnúmero de páginas del proyecto.

Si tenemos un periódico de 48 páginas,la página 48 y la página 1 irán juntas,con la 48 en la parte izquierda de la hojay la 1 en la derecha. De esta maneracuando se doble por la mitad, la partederecha se convertirá en la portada. Dela misma manera, la página 2 y la 47

deberán ir pareadas, teniendo en cuentaque ahora estamos en el otro lado de lahoja y la página 2 estará a la izquierda yla página 47 a la derecha.

todo esto, ya que con la configuraciónpor defecto suele ir bien.

Este proceso debe repetirse para lascuatro páginas. Incluso las páginasdobles deben exportarse como unapágina impar y otra par separadamentepara ensamblarlas posteriormente. Tengaen cuenta que dos páginas situadas unaa continuación de la otra no se impri-mirán de esa manera, salvo en las pági-nas centrales.

Tarea TitánicaEnsamblar un periódico es una tareatediosa. Esa es la razón por la cual exis-ten tantos programas para posicionar laspáginas en el orden correcto. Pero estosprogramas que cuestan miles de dólaresse escapan del presupuesto de esteproyecto, entonces, ¿cómo lo haremos?

Pues muy fácilmente, aunque puedaresultar una experiencia algo laboriosa.Lo primero será crear una nueva páginalo suficientemente grande para dar

PRÁCTICO • Scribus

30 Número 06 W W W . L I N U X - M A G A Z I N E . E S

[1] 1ª parte de la serie: Jason Walsh: “Un

Periódico en Linux”,Linux Magazine,

número 4 / marzo 2005, p48.

[2] 2ª parte de la serie: Jason Walsh:

“Tipografía y Texto”,Linux Magazine,

número 5 / abril 2005, p50.

[3] Scribus: http://www.scribus.org.uk/

RECURSOS

Figura 2: El menú de exportación a PDF de

Scribus ofrece tantas alternativas como las

de una aplicación comercial.

Figura 3: La solapa de color de Scribus con-

tiene opciones muy sofisticadas.

Figura 5: Importación de dos páginas sencillas a una doble página.

Figura 4: Creación de una nueva meta-

página que contendrá las doble páginas.

Jason Walsh fue

director artístico en

el East Belfast

Observer desde su

lanzamiento en

enero de 2004 hasta

julio de 2004 y previamente ocupó

el mismo cargo en las revistas de

papel “couché” irlandesas Gor-

geous y CityCraic. En la actualidad

trabaja como periodista y con-

tribuye con Linux Magazine, Va-

riant, Mute, The Guardian y muchos

otros periódicos y revistas en temas

artísticos, de diseño y tecnología.

EL

AU

TO

R

Es muy fácil confundirse en este paso, por lo que serámejor hacer los cálculos con una hoja de papel con anterio-ridad. Un sólo error supondrá la impresión de las páginas enorden equivocado, lo que sería un desastre para un pe-riódico. En la imprenta, el equipo de pre-impresión ensam-blará las dobles páginas en un periódico completo, peroellos estarán trabajando con las dobles páginas propor-cionadas, por lo que si hubo algún error, habrá que rehacer-las. Esto puede salir caro si los PDFs ya se habían usadopara crear la cinta con la que se imprime el periódico.

Cada doble página se exporta como una sola hoja grandey se envía a la imprenta. Repita este proceso con todas laspáginas, en el orden adecuado, y eso es todo, el periódicoesta listo. Repítase esto a diario y ya está usted en el nego-cio de la publicación de diarios en Linux.

ArancelesA la hora de generar un PDF, al igual que al exportar unarchivo HTML, algunos programas tienen más calidad queotros. ¿Qué tal lo hace Scribus a este respecto?

Le enviamos nuestro periódico de pruebas a DavidHunter, un profesional de la pre-impresión habituado a tra-bajar con PDF’s generados con Quark e InDesign.

¿Qué te parece?“En honor a la verdad, me sorprende que esté generado

con Linux. Si no me lo hubieras dicho, no me habría dadocuenta sin mirar la meta-información. En líneas generalesestá muy bien, sin problemas graves”, nos comenta David.

¿Y respecto a los pequeños problemas?“Bien, las imágenes son un poco oscuras, pero no

exageradamente. Me comentaste que el editor de imá-genes, The GIMP, no trabajaba en modo CMYK. Creo queahí está el problema, más que en el propio Scribus. Detodas formas, como te he comentado, las páginas estánbien y se imprimen sin errores”.

ConclusionesÉsta serie de artículos ha sido un intento de examinar elproceso completo de publicar un periódico con Linux,usando el programa de código libre Scribus. La primeraparte [1] empezó con una descripción otros programas deautoedición, como Quark XPress. Se mostró cómo crear unnuevo documento, cómo administrar el color y cómodefinir partes de la página como las cabeceras.

En la segunda parte [2] se mostró cómo importar unaimagen y cómo situar texto en la página. Y en esta últimaentrega hemos descrito algunas tareas finales: cómo colo-car las páginas en orden y como generar un PDF, por ejem-plo. Por supuesto, es imposible abordarlo todo. Pero se haintentado ofrecer una guía para el principiante en su pro-pio proyecto de publicación con Scribus.

Aquellos que no han probado nunca Scribus deberíanverlo para creerlo. Cualquiera que se haya partido la cabezacon Microsoft Publisher o Ragtime entenderán lo inflexiblesque son a veces los programas propietarios de autoedición.Scribus es otra cosa. Scribus es un auténtico competidor deQuark y Adobe y seguro que no se quedan indiferentesviendo como surge Scribus. Sólo el tiempo dirá si Scribus yLinux se hacen un hueco en la industria de la autoedición. �

32

/etc/hotplug/usb/, el agente ejecuta el

script.

El acto de cargar un módulo típica-

mente dispara unos cuantos eventos más

de la conexión en

caliente, que de nuevo

invoca a otros agentes. Es

común que varios agentes

de conexión en caliente

trabajen juntos. Por ejem-

plo, cuando se conecta un

disco duro externo,

primero se carga el agente

USB y luego se carga el

agente de SCSI para mon-

tar las particiones indivi-

duales como dispositivos SCSI con la

ayuda del módulo usb-storage. Si se

conecta un conector Bluetooth, el agente

USB se ejecuta primero, seguido por un

agente Bluetooth llamado

bluetooth.agent.

La Lista NegraEl fichero /etc/hotplug/blacklist contiene

una lista de módulos que ningún agente

positivo para el dispositivo y luego

llama al agente apropiado. Un agente

es un script, normalmente almacenado

en el directorio /etc/hotplug, que se

encarga de manejar las

acciones asociadas a

estos eventos. En este

caso, el agente realiza

la tarea de añadir y re-

gistrar el nuevo disposi-

tivo.

Los pasos que el agente

realiza pueden variar

dependiendo de la dis-

tribución y del tipo de

hardware que se esté

instalando. El agente USB, para el hard-

ware que se conecta a este puerto en

caliente, puede ser un buen ejemplo. El

agente USB primero comprueba si el

controlador para el nuevo dispositivo

está disponible (por ejemplo, isdn) y

luego llama a modprobe para que cargue

el módulo. Si el agente encuentra un

script con el mismo nombre que el con-

trolador en el directorio

¿Es mucho pedir? Sólo quiero que

Linux ejecute el programa correc-

to cuando conecto una cámara

digital nueva, pero el sistema operativo

ha decidido no hacerlo. Esta situación es

bastante común, aunque ya ha

empezado a solucionarse. Linux debería

manejar cualquier clase de hardware

adecuadamente, pero la capacidad de

manejar dispositivos que se conectan o

desconectan a los puertos USB y Firewire

mientras el ordenador está encendido

(conocido como “conexión en caliente”

[1]) se ha llegado a convertir en algo

importante. Este artículo explica qué

hace un sistema Linux moderno para

manejar dispositivos que se le conectan

y por qué, a veces, no funcionan tal y

como estaba previsto.

Agentes SecretosCuando se conecta un dispositivo que

soporta conexión en caliente, el kernel

manda una señal de evento al sistema

de conexión en caliente. Dicho sistema

usa Udev para crear un fichero de dis-

PRÁCTICO • Hotplugging

32 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Conexión en caliente con Udev, HAL y D-Bus

ENCHUFADOSConexión en caliente con Udev, HAL y D-Bus

ENCHUFADOS

www.photocase.de

Lo que los

usuarios

quieren es

que el

hardware

funcione.

Las distribuciones

Linux actuales están progre-

sando mucho para conseguirlo. En

este artículo, vamos a investigar cómo funciona el sistema de

conexión en caliente. POR OLIVER FROMMEL, MARCEL HILZINGER Y RENÉ REBE

Figura 1: Tras modificar el

fichero de configuración de

Udev, el icono del escritorio

Gnome tiene una etiqueta

más intuitiva.

tiene permiso para cargar. La lista con-

tiene los módulos que el sistema carga

por otros servicios, así como los módulos

que impiden el control de energía.

Linux, normalmente, necesita un

fichero de dispositivo para interactuar con

un dispositivo. En una situación de

conexión en caliente, este fichero de dis-

positivo debe ser creado al vuelo cuando

se detecte el dispositivo nuevo. Como se

vio en la sección anterior, la conexión en

caliente usa Udev para crear el fichero de

dispositivo antes

de llamar al

agente.

NecesidadImperiosaUdev [1] es el

sucesor desig-

nado para los

ficheros de dis-

positivos estáticos y la mayoría de las dis-

tribuciones actuales lo usan. El propósito

de Udev es crear los ficheros de disposi-

tivos basado en reglas especificadas en el

fichero de configuración de Udev. Por

ejemplo, si se quiere asignar un fichero de

dispositivo distinto a sda1 al conector

MP3, se podría especificar este requisito

en las reglas de Udev.

Las reglas de Udev se almacenan en

/etc/udev/rules.d. Si se mira en este

directorio se encontrará unos ficheros

que describen los dispositivos típicos: en

Ubuntu es udev.rules, en Fedora

50-udev.rules. Udev lee estos ficheros en

orden alfabético. Si se quiere cargar una

regla Udev propia antes de las reglas

globales, hay que asignar un nombre de

fichero que se esté seguro que se

invoque antes que, por ejemplo

10-local.rules. La siguiente entrada

estaría bien para un conector MP3 sin

nombre:

BUS="usb", SYSFS{idProduct}=U

"1000", SYSFS{idVendor}="10d6",U

NAME="mp3disk"

Esto evita que el escritorio Gnome

muestre la etiqueta genérica sda1. En vez

de ello se muestra la etiqueta mp3disk,

que es más intuitiva (Figura 1). La herra-

mienta lsusb, que muestra los disposi-

tivos USB conectados, puede ayudar a

33

Hotplugging • PRÁCTICO

33Número 06W W W . L I N U X - M A G A Z I N E . E S

La solución de Suse Linux para la cone-

xión en caliente es diferente en parte y la

versión actual no hace uso de la arquitec-

tura HAL. Distingue entre (actualmente)

dispositivos desconocidos y configura-

dos y usa los programas hwup, hwdown,

hwstatus y hwscanqueue para controlar

las conexiones en caliente. Suse alma-

cena un fichero de configuración en

/etc/sysconfig/hardware para los disposi-

tivos configurados. Cuando el kernel re-

gistra un evento de conexión en caliente,

/sbin/hotplug carga el módulo del kernel

apropiado.

Sin HAL

Después de cargar el módulo del kernel,

hwup comprueba si existe un fichero de

configuración para el dispositivo de

/etc/sysconfig/hardware y, si es así, carga

el módulo especificado por el fichero. Si

hwup falla en la localización del fichero

de configuración, intenta localizar los

módulos requeridos leyendo los ficheros

*.usermap en /etc/hotplug/, como lo

hacen las otras distribuciones.

En el futuro, Suse va a crear un fichero

en /etc/sysconfig/hardware para cada

componente hardware y lo va a hacer sin

tener que usar los ficheros usermap.

Comparando las dos últimas versiones

de Suse se aprecia que Suse ya se está

encaminando en esta dirección. Así

como en la versión 9.1, solamente se

crean los ficheros de configuración para

los dispositivos de red, la 9.2 también lo

hace para los discos duros, los disposi-

tivos de CD/DVD y una variedad de dis-

positivos USB.

Después de que hwup haya finalizado, se

lanza el agente de conexión en caliente.

En el caso de un evento USB, el agente

será el agente USB; para los eventos de

red, será el agente de red y etc. Si el sis-

tema de conexión en caliente falla a la

hora de encontrar al agente adecuado,

lanza un agente genérico para crear el

fichero de dispositivo requerido. En Suse

Linux 9.2, el agente también busca en

/etc/sysconfig un fichero de configu-

ración para el servicio y lanza el servicio

apropiado.

Suse Linux tiene una solución simple

para capturar los errores que hacen a la

conexión en caliente algo más explícita.

Para habilitarlo, hay que establecer la

variable HOTPLUG_DEBUG a yes o

incluso a max en /etc/sysconfig/hotplug.

La última opción le indica al sistema que

registre cada paso que efectúe.

Iconos de Escritorio en Suse Linux

La versión 9.1 de Suse Linux o posterio-

res no crean los iconos del escritorio

para las unidades de disco. En vez de

ello, los usuarios tienen que usar el icono

Mi PC (como en Windows) o acceder a

las unidades directamente vía

drives:/URL. Esta solución no es muy

buena para los discos de memoria USB.

Por defecto, Suse abre una ventana de

Konqueror con el contenido de la parti-

ción del disco una vez que se haya

conectado, pero si se tiene esta carac-

terística deshabilitada o si simplemente

se cierra la ventana hay que volver a Mi

PC.

Suse Linux usa sus propios iconos para

drives:/URL. Se encuentran en

/usr/share/hotplug/DesktopTemplates/.

KDE añade el nombre al fichero

~/.kde/share/config/kio_drivesrc. Se

puede editar el fichero para asignar nom-

bres intuitivos y únicos a los disposi-

tivos. Por ejemplo, si se tiene dos discos

USB simplemente hay que editar las

entradas en [Used Names] para distin-

guirlos.

Para habilitar los iconos en el escritorio

para KDE en Suse, primero hay que

instalar los paquetes kdebase3-extra y

kdemultimedia3-extra. Hay que tener

cuidado si se tiene la versión Suse 9.2:

¡los paquetes sólo se encuentran en la

versión en DVD! Después de completar

la instalación, se pulsa con el botón dere-

cho del ratón en el escritorio KDE y se

selecciona Configure desktop... en el

menú desplegable. En la ventana Beha-

vior, hay que seleccionar Device Icons y

marcar Enable Icons on desktop. Luego

se puede usar la lista para especificar

que icono de dispositivo se quiere que se

muestre en el escritorio.

Después de instalar kdebase3-extra y

kdemultimedia3-extra, devices:/URL

también funcionará en Konqueror.

Cuadro 1: Conexión en Caliente con Suse Linux

Figura 2: El hal-device-manager con información detallada del adapta-

dor WLAN Prism2.

udevinfo -a -p /block/hda/hda1

...

SYSFS{idVendor}="10d6"

...

Este comando ayuda a descubrir los valo-

res específicos de los dispositivos que son

necesarios para las configuraciones espe-

ciales. Existe un “how-to” detallado para

crear ficheros Udev en [2]. El sitio web de

Fedora tiene un breve resumen del sis-

tema Udev [3].

Asignaciones PropiasUn fichero de asignaciones contiene una

o varias IDs que identifican de forma

unívoca un componente hardware.

Cuando un dispositivo que coincida con

encontrar los identificadores USB (IDs). Si

existe un fichero de dispositivo, udevinfo

-q ruta -n /dev/fichero muestra la ruta en

el SysFS (véase el Cuadro 2: “Ficheros de

Dispositivos con Udev”), pero no propor-

ciona el punto de montaje /sys. Se nece-

sita la ruta como parámetro (-p), con este

comando para obtener la información

SysFS:

PRÁCTICO • Hotplugging

34 Número 06 W W W . L I N U X - M A G A Z I N E . E S

En Linux las aplicaciones usan ficheros

de dispositivos para acceder al hard-

ware. Estos ficheros especiales situados

en el directorio /dev están definidos por

referencias a sus tipos, así como por sus

números mayores y menores, que los

enlaza con el kernel.

En el pasado, este directorio era un

repositorio para todo tipo de ficheros de

dispositivos, unidades de disco IDE y

SCSI, USB, IEEE1394 y dispositivos vir-

tuales. Esto significa que el directorio

/dev tiene miles de entradas.

Este sistema tiene algunas desventajas.

Por ejemplo, no se indica que disposi-

tivos existen realmente o han sido identi-

ficados correctamente por los contro-

ladores. Además, los ficheros de disposi-

tivos pueden cambiar a veces, dicho de

otro modo: el orden aleatorio en el que

los dispositivos se conectan al sistema

decide que dispositivo SCSI se ligará a

/dev/sg2.

Nuevos Mundos

Udev [1] es el sucesor de los ficheros de

dispositivos estáticos y la mayoría de las

distribuciones actuales lo usan. Udev se

basa en el mecanismo de conexión en

caliente que genera los ficheros de dis-

positivos según se requieran. Cuando un

dispositivo cambia, el kernel llama al

programa especificado en /proc/sys/ker-

nel/hotplug, típicamente /sbin/hotplug.

Dependiendo del tipo de dispositivo, el

programa cargará módulos, modificará

privilegios de acceso, configurará dis-

positivos de red o en el caso de Udev,

manejará nodos de dispositivos.

El subsistema Udev necesita algunos

detalles para ser capaz de crear un

fichero: el tipo de dispositivo (carácter o

bloque) y los números mayores y

menores. En el kernel 2.6 o posteriores

Udev referencia al sistema de ficheros

sys (SysFS, que normalmente se encuen-

tra en /sys) para descubrir esta informa-

ción.

Los dispositivos de bloques están locali-

zados en /sys/block y los de carácter en

/sys/class. Los números mayores y

menores se almacenan en un fichero

dev. Por ejemplo, el siguiente comando

indica los números para el primer disco

duro IDE, hda:

cat /sys/block/hda/dev

3:0

Udev puede analizar cualquier informa-

ción SysFS, como la clase del disposi-

tivo, nombre, número, etc., para crear los

dispositivos apropiados. Si los nombres

son estables. Udev puede incluso ejecu-

tar programas complejos para compro-

bar si debería configurar una impresora

que haya sido conectada en /dev/usb/lp0

o /dev/usb/lp1, basando la decisión en el

número de serie de la impresora. Es

incluso posible usar nombres arbitrarios

y llamar nodos, por ejemplo,

/dev/lp-epson y /dev/lp-kyocera.

Configuración de Udev

Udev tiene dos opciones de configu-

ración. Los ficheros en /etc/udev/rules.d

especifican los nombres de ficheros de

dispositivos, otros en /dev/udev/permis-

sions.d especifican los privilegios. Las

reglas por defecto crean ficheros de dis-

positivos que usan los nombres fami-

liares de Linux.

Al principio de cada regla, hay una o más

condiciones que tienen que ser deta-

lladas si Udev tiene que crear los ficheros

de dispositivos. A continuación le sigue

el nombre. Lo siguiente es una entrada

típica de las impresoras USB:

BUS="usb", KERNEL="lp[0-9]*",U

NAME="usb/%k"

Si el dispositivo está conectado al bus

usb y el nombre interno del kernel es lp

con un número arbitrario, Udev crea un

fichero con el nombre del kernel (tal y

como se indica con %k) en el directorio

/dev/usb.

Además de las reglas estáticas de este

tipo, también es posible llamar a progra-

mas externos. La página de ayuda de

man tiene un ejemplo para los CD-ROMs

IDE que comprueba si un directorio lla-

mado /proc existe para identificar el dis-

positivo como CD-ROM:

KERNEL="hd[a-z]", U

PROGRAM="/bin/cat /U

proc/ide/%k/media", U

RESULT="cdrom", U

NAME="%k", SYMLINK="cdrom%e"

En este ejemplo, Udev llama a /bin/cat

para el fichero /proc para todos los dis-

positivos cuyo nombre empiece por hd.

Si el fichero especifica el CD-ROM como

el medio, Udev recordará el nombre pero

creará adicionalmente un enlace sim-

bólico para cdrom. El parámetro %e le

indica a Udev que seleccione el próximo

número libre si un fichero con el mismo

nombre ya existe.

Una buena solución es el uso de los

números de serie de los dispositivos

para realizar la asignación:

BUS="usb", SYSFS{serial}=U

"HXOLL0012202323480", U

NAME="lp-epson"

Esta regla le dice a Udev que cree un

fichero de dispositivo, /dev/lp-epson, si

encuentra un dispositivo con el número

mencionado en su fichero serial bajo el

árbol de directorios de SysFS.

Udev y los Privilegios Las reglas para

los privilegios de acceso comprenden

tan solo una línea con valores separados

por el carácter dos puntos con el nom-

bre, el propietario, el grupo y los privile-

gios.

usb/lp*:root:lp:0660

Todos los ficheros de dispositivos llama-

dos usb/lp* pertenecen al usuario root y

al grupo lp. Los privilegios de acceso se

especifican en formato octal.

El nuevo modelo de conexión en caliente

está teniendo tal éxito que se está

usando incluso para arrancar el sistema.

Se llama a udev con las variables apro-

piadas para cualquier dispositivo cono-

cido en /sys/class y /sys/block.

Cuadro 2: Ficheros de Dispositivos con Udev

una de estas entradas se conecta al sis-

tema, el subsistema automáticamente eje-

cuta el programa especificado, que puede

ser un script.

Esto permite habilitar un adaptador

WLAN USB que la distribución no confi-

gure de forma adecuada. En nuestro labo-

ratorio, el sistema de conexión en caliente

detectó el adaptador con el chipset

Prism2, pero falló a la hora de ejecutar el

script que lanzaba las funciones WLAN

requeridas.

El comando lsusb nos proporcionó el ID

del dispositivo USB conectado. El ID del

vendedor en nuestro ejemplo es 0x0846 y

del dispositivo es 0x4110.

Ahora tan sólo hay que añadir los

siguientes valores hexadecimales a un

nuevo fichero llamado

/etc/hotplug/usb/prism2.usermap:

prism2 0x0003 0x0846 0x4110

0x0000 0x0000 0x00 0x00 0x00

0x00 0x00 0x00 0x0

La mayoría de las asignaciones se pare-

cen a ésta y tan sólo usan los cuatro

primeros valores. El primer valor especi-

fica que programa debe ejecutar el sis-

tema de conexión en caliente si los va-

lores que siguen en la línea coinciden. El

primer valor numérico es un campo de

bits que especifica el número requerido

de valores a coincidir. Si se quiere que la

conexión en caliente compruebe los dos

primeros valores, se necesita 0x0003. El

primer bit indica un valor de 1, el

segundo es 2 y los dos juntos es 3. El sis-

tema ignora el resto de las columnas del

registro y por ello se rellenan con el valor

0x00.

El script que se pretende ejecutar,

prism2, tiene que estar en el mismo direc-

torio y tiene que ser ejecutable, chmod

+x. En nuestro ejemplo, el script de

comienzo rc.wlan del paquete Prism2,

configura el interfaz wlan0 network y

luego solicita al servidor DHCP una direc-

ción IP:

#!/bin/sh

/etc/rc.wlan start

/sbin/ifconfig wlan0 up

/sbin/dhclient wlan0

Tras estos cambios, el adaptador USB

WLAN funcionó inmediatamente tras

conectarse. Desafortunadamente, nues-

tros intentos para configurar una cámara

de vídeo DV de la misma forma fallaron

debido al lamentable estado del subsis-

tema Firewire. El controlador IEEE1394

para el kernel actual no proporciona la

información SysFS que se necesita, así

que no hay otra alternativa que ejecutar

mknod para crear el fichero de disposi-

tivo.

Del Hardware a la AplicaciónOtra capa del sistema de conexión en

caliente proporciona una interfaz entre el

hardware y las aplicaciones. La capa de

abstracción de hardware (HAL, [4]) tiene

información detallada del hardware, que

se almacena en ficheros de información

de dispositivos (.fdi).

Se puede usar la capa HAL para realizar

cambios para dispositivos especiales. Por

ejemplo, un usuario resolvió los proble-

mas de su iPod que no se desregistraba

correctamente [5].

Los ficheros FDI son ficheros con for-

mato XML que proporcionan descrip-

ciones detalladas de los dispositivos. El

comando lshal muestra los detalles. El

hal-device-manager posee los mismos

datos pero con una interfaz gráfica

agradable (Figura 2). Los usuarios de

Suse tendrán que arreglárselas sin los

componentes HAL, ya que Suse tiene

una forma diferente de manejar los

detalles del hardware (véase el Cuadro

1: “Conexión en Caliente con Suse

Linux”).

En el futuro, las aplicaciones serán

capaces de preguntar los detalles del

hardware por D-Bus [6]. D-Bus es un sis-

tema de comunicación software en el

que las aplicaciones pueden conectarse y

registrarse ellas mismas para ciertos

eventos. Por ejemplo, un programa de

edición de vídeo podría necesitar saber

cuándo una cámara nueva se conecta a

un PC. El programa gnome-volume-pro-

perties, cuya ultima versión ha presen-

tado Gnome, usa D-Bus y HAL para aso-

ciar las aplicaciones con los eventos de

conexión en caliente (Figura 3).

Se espera que D-Bus juegue un papel

importante en las comunicaciones entre

aplicaciones en Gnome, aunque no hay

muchas aplicaciones que hagan uso de

esta característica en la actualidad.

Un Mundo Feliz – Algún DíaA pesar de todo el progreso hecho con

respecto a la detección de dispositivos, la

cosas aun no son perfectas. Los agentes

del sistema de conexión en caliente

necesitan información detallada del

hardware y esta información será obso-

leta en un sistema que tenga unos meses

de antigüedad. Una base de datos online

para los componentes hardware podría

ayudar y los usuarios podrían contribuir

con los detalles que hayan elaborado en

formato FDI.

El proyecto HAL se está moviendo

hacia esta dirección, dando al sistema de

conexión en caliente la información que

el kernel no puede proporcionar. Ya hay

unas cuantas distribuciones que han

empezado a utilizarlo. Esperemos que

Suse siga esta tendencia. Cuanto más

consistente sea la gestión del hardware en

Linux, mejor. �

Hotplugging • PRÁCTICO

35Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] Conexión en caliente en Linux: http://

linux-hotplug.sourceforge.net

[2] Como escribir nuestras propias reglas

Udev: http://www.reactivated.net/

udevrules.php

[3] Documentación Udev de Fedora:

http://fedora.redhat.com/docs/udev

[4] HAL: http://www.freedesktop.org/

Software/hal

[5] iPod con Udev: http://www.kgarner.

com/blog/archives/2005/01/11/

fc3-hal-ipod/

[6] D-Bus: http://www.freedesktop.org/

Software/dbus

RECURSOS

Figura 3: En Gnome 2.8, gnome-volume-

properties especifica que aplicación se eje-

cuta por cada evento de conexión en

caliente.

36

accesos más intuitivos. Uno de esos

clientes es MLDonkey.

El NúcleoMLDonkey ejecuta lo que se ha dado en

llamar núcleo, parecido a un demonio en

segundo plano. Algunas distribuciones

Entre los ejemplos más famosos de

redes donde se comparten archivos

encontramos a Morpheus, Gnutella, Bit-

Torrent o Donkey/eMule. Los clientes

más modernos pueden soportar múlti-

ples redes de intercambio de archivos

entre iguales y ofrecer a sus usuarios

Los programas para compartir

archivos en redes de intercambio

son probablemente las aplica-

ciones más controvertidas de nuestros

tiempos. Usuarios que ponen sus colec-

ciones completas de CDs en sus discos

duros e invitan a otros usuarios a

descargarlas han conseguido que la

industria musical y cinematográfica los

observe con recelo. Pero, hecho de

forma legal, el compartir archivos es

una forma excelente de que estén

disponibles sin necesidad de adquirir

alojamiento Web.

PRÁCTICO • MLDonkey

36 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Compartir archivos con MLDonkey y KMLDonkey

TRES EN UN BURRO

www.sxc.hu

El cliente multired MLDonkey propor-

ciona a los usuarios acceso a la ma-

yoría de redes donde se comparten

archivos. Os mostraremos cómo con-

figurar MLDonkey y cómo controlar

este cliente con una interfaz KDE lla-

mada KMLDonkey.

POR MIRKO ALBRECHT

incluyen el núcleo y una interfaz gráfica

de usuario (GUI). Otras, como Suse

Linux 9.2, simplemente incluyen el inter-

faz gráfica de usuario KDE KMLDonkey.

La experiencia nos indica que es mejor

compilar nuestra propia versión en lugar

de usar el programa suministrado por la

distribución. Los más arriesgados que-

rrán compilar el último código fuente

para mantenerse al tanto de la versión

puntera de desarrollo de MLDonkey, lo

que se convierte en una montaña rusa de

vez en cuando. Los desarrolladores de

esta tecnología para compartir archivos

están mejorando constantemente los

protocolos y los ajustes internos. Tam-

bién tiene sentido estar al tanto de los

cambios en cada una de las redes de

intercambio, las cuales usan sus propios

protocolos.

Dicho esto, la mayoría de usuarios

preferirá una versión estable. De nuevo,

la experiencia nos muestra que algunas

actualizaciones no son óptimas. Por

tanto, si tenemos una versión estable de

MLDonkey, lo más recomendable es

quedarse al margen de actualizaciones

dudosas que pueden afectar fácilmente

la estabilidad de nuestro núcleo.

Instalación de BinariosSi preferimos evitar la compilación de

código fuente podemos descargar

paquetes binarios desde la página Web

[1]. La página Spiralvoice [2], que es

una excelente fuente de descargas,

dispone de parches y un paquete cons-

tructor para MLDonkey. En la página

hay diversas versiones que incluyen los

parches. En el momento de imprimir

esta revista, la última versión oficial de

MLDonkey era la 2.5.28, y la última ver-

sión inestable era la número 2.5.29.

Los foros de MLDonkey (como el [3])

nos indicarán que la versión con más

reputación de estabilidad en opera-

ciones 24x7 y la mejor tasa de descarga

es el núcleo 2.5.16t. La “t” al final del

número de versión identifica la versión

como parcheada. La propia Spiralvoice

afirma que esta es la versión más

estable, y se refiere a la versión actual

como “de naturaleza experimental” [2].

He probado muchas versiones, y desde

luego estoy de acuerdo con esto.

Para instalar MLDonkey, primero

descomprimimos el paquete en un

nuevo directorio escribiendo tar xvfz

mldonkey-2.5.x.tar.gz. Al entrar en el

directorio deberíamos encontrar un

archivo llamado mlnet, el cual podemos

llamar directamente escribiendo ./mlnet.

Generalmente, las versiones precom-

piladas que Spiralvoice ofrece para

descargar funcionan bastante bien.

Estas versiones disponen de soporte

modular para la mayoría de las redes de

intercambio entre iguales. El código

puede ser mayor, pero esto no debe ser

problema para un equipo moderno.

Además, podemos usar la interfaz grá-

fica de usuario para deshabilitar

cualquier módulo que no necesitemos

más adelante.

Compilar un BurroCompilar MLDonkey desde el código

fuente nos proporciona una versión del

software que concuerda con nuestro

entorno hardware y nuestras aplica-

ciones deseadas. Debemos optar por la

versión mldonkey-2.5.16 con el parche

patch_pack16t.

Ambos archivos están disponibles

para ser descargados desde [2], pudien-

do seguir los pasos habituales para

descomprimirlos. Movemos los con-

tenidos del paquete del parche a la car-

peta creada cuando descomprimimos el

archivo tar principal /mldonkey-2.5.16.

Ahora nos movemos a este directorio y

escribimos patch -p0 < patch_pack16t

para instalar el parche.

Tendremos que configurar el makefile

en la misma carpeta. Hemos decidido

restringir el soporte de redes sólo a Bit-

Torrent, Fasttrack y a eDonkey2000. Y

no usaremos la interfaz gráfica de

usuario GTK por el momento. El

comando configure que consigue esto

es:

./configure --disable-gui U

--enable-batch U

--disable-opennap U

--disable-audiogalaxy U

--disable-gnutella U

--disable-gnutella2 U

--disable-soulseek U

--disable-openft U

--disable-cymes U

--enable-pthread

Si tenemos otras preferencias cambiare-

mos --disable (deshabilitar) por --enable

(habilitar) según nuestros deseos. Por

ejemplo, si sólo deseamos soporte para

eDonkey2000, simplemente ejecutare-

mos ./configure -disable-multinet sin

olvidar especificar el resto de preferen-

cias.

Este artículo se centrará en las redes

eDonkey, BitTorrent y Fasttrack

(Kaazaa), que son las más populares y

difundidas entre la comunidad de inter-

cambio de archivos. Sólo mencionar

todas las redes de intercambio de

archivos ocuparía más espacio que todo

este artículo. Pero si queremos aprender

más, siempre podemos consultar las

preguntas más frecuentes (FAQ) de

MLDonkey en [4]. Aquí encontraremos

bastante ayuda con los distintos módu-

los de redes que implementa MLDon-

key.

Para compilar MLDonkey necesita-

mos la herramienta Objective Caml

37

MLDonkey • PRÁCTICO

37Número 06W W W . L I N U X - M A G A Z I N E . E S

Figura 1: El primer paso es restringir el acceso al núcleo de MLDonkey asignando una con-

traseña.

el cual debe ocupar entre 3.0 y 3.5

MBytes.

Para ejecutar MLDonkey desde

cualquier lugar de nuestro sistema

debemos copiar mlnet al directorio

global escribiendo cp mlnet

/usr/local/bin. Por supuesto, necesita-

mos privilegios de administrador para

hacerlo. Para hacer que el archivo sea

ejecutable por todos los usuarios intro-

ducimos chmod a+x/usr/

local/bin/mlnet o asignamos a los

usuarios privilegios adecuados en nues-

tro sistema.

Inicio del NúcleoCualquier usuario puede ejecutar el

núcleo de MLDonkey en una ventana

terminal escribiendo mlnet. Si no

hemos puesto el núcleo en nuestra ruta

tendremos que cambiar a la carpeta

donde reside mlnet y escribir ./mlnet.

La primera vez que ejecutamos el pro-

grama, este crea una gran cantidad de

archivos y directorios en nuestro directo-

rio raíz. Para evitar este desorden y man-

tener los archivos concentrados en un

lugar definido debemos ajustar la variable

de entorno MLDONKEY_DIR. Para ha-

cerlo abrimos el archivo .bashrc de nue-

stro directorio raíz y añadimos la línea

export MLDONKEY_DIR="/ruta/a/direc-

torio-mldonkey", asegurándonos que

creamos el directorio antes. Ahora nos

conectamos de nuevo en la consola y apli-

camos los cambios.

Cuando tecleamos mlnet, las si-

guientes líneas deben aparecer en nues-

tra pantalla al margen de otra mucha

información:

Welcome to MLDonkey

S A V I N G S H A R E D F I L E S A N D

SOURCESU

on localtime: 12/ 9, 17:07:33

SAVED

Options correctly saved

Core started on localtime:U

1 2 / 9 , 1 7 : 0 7 : 3 3 ( 1 2 / 9 ,

17:07:33)

Disabling output to console,U

to enable: stdout true

Pulsamos [Ctrl]+[C] para finalizar el

programa, o bien podemos simplemente

cerrar la ventana terminal donde lan-

zamos el núcleo. Para no tener la

necesidad de mantener abierta una ven-

tana para ejecutar mlnet podemos

teclear mlnet -daemon en su lugar. Esto

hace que el núcleo se ejecute como

demonio en segundo plano, pudiendo

por tanto los usuarios desconectarse del

sistema sin cerrar mlnet. Para finalizar

el proceso en segundo plano introduci-

mos killall mlnet.

Administración del NúcleoAhora que el núcleo de MLDonkey se

está ejecutando en segundo plano hay

muchas formas de acceder al demonio.

Podemos incluso usar telnet si preferi-

(este es el lenguaje en el que se ha

escrito MLDonkey) versión 3.08 y

LablGTK 1.2.7. Podemos usar la fun-

ción wget de la distribución para

descargar los paquetes requeridos de

Internet durante la fase ./configure y

compilarlos. No obstante, si aplicamos

el parche patch_pack16t necesitaremos

nuevas versiones de ambas herramien-

tas. Para deshabilitar la instalación

automática de ambas herramientas

eliminaremos la opción --enable-batch

del comando configure. Si optamos por

deshabilitar la interfaz gráfica de

usuario (--disablegui) no necesitare-

mos actualizar LablGTK.

Para compilar ocaml y lablgtk, antes

de empezar debemos descargar las

fuentes desde [5] y desde [6]. Ahora

ejecutaremos tar xzfv para desempaque-

tarlos. Crear Objective Caml significa

abandonar la típica compilación en tres

fases:

./configure

make world opt opt.opt

make install

La sintaxis de lablGTK tampoco es la

habitual. De hecho necesitamos cuatro

pasos:

make configure

make

make opt

make install

En ambos casos necesitamos privilegios

de administrador para ejecutar make

install. Si tenemos Suse Linux 9.2 no

necesitaremos pasar por todos estos

problemas para compilar estas dos herra-

mientas, puesto que la distribución

incluye versiones recientes de ambas.

Simplemente ejecutaremos Yast para

instalarlas si aún no lo hemos hecho.

Tras dar este paso en nuestro camino

hacia las redes de pares, deberíamos ser

capaces de ejecutar configure en el

directorio /mldonkey-2.5.16 sin ningún

tipo de error. Si aún así tenemos proble-

mas compilando MLDonkey podemos o

olvidarnos del parche o usar la variante

patch_pack16r en su lugar. Los coman-

dos make depend y make nos generan el

ejecutable, puesto que no hay make

install. Para ejecutar MLDonkey como

usuario sin privilegios simplemente eje-

cutamos el núcleo de MLDonkey mlnet,

PRÁCTICO • MLDonkey

38 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 2: Para ejecutar el núcleo de MLDonkey de forma efectiva necesitamos abrir una serie

de puertos TCP y UDP en la configuración de nuestro cortafuegos.

mos un método espartano. Si escribimos

telnet localhost 4000 tendremos acceso a

la interfaz MLDonkey.

Si escribimos un interrogante en el

cursor telnet nos indica que s

searchkey lanzará una búsqueda,vr

muestra los resultados, y d result num-

ber lanza una descarga. El comando q

finaliza la interfaz. Si escribimos dos

interrogantes obtendremos ayuda

detallada.

Como alternativa a telnet, podemos

abrir una interfaz gráfica de usuario

basada en Web para Mldonkey escribi-

endo http://localhost:4080 en nuestro

explorador de Internet. También

podemos optar por alguna de las

muchas interfaces gráficas en su lugar.

La versión preempaquetada dispone

de una útil interfaz para la librería

GTK tal y como hemos mencionado

con anterioridad. Los usuarios del

escritorio de Gnome optarán con toda

probabilidad por una bien estruc-

turada e intuitiva interfaz gráfica de

usuario GTK.

Si preferimos gestionar MLDonkey

con nuestro explorador Web debemos

probar alemule, phpEselGui y Zuul.

Todas son interfaces gráficas de usuario

basadas en PHP.

KMLDonkeyHace tiempo que existe una interfaz

MLDonkey para el escritorio KDE. KML-

Donkey se ha convertido en un programa

realmente útil durante los últimos

meses. Como herramienta KDE genuina,

KMLDonkey usa la librería Qt, lo que

garantiza una integración sin fisuras con

el escritorio KDE. Podemos añadir kml-

donkey a nuestro panel de control KDE e

integrar enlaces ed2k (enlaces a descar-

gas de eDonkey en Internet). KMLDon-

key también tiene una interfaz estruc-

turada de forma lógica, que es autoex-

plicativa en la mayoría de las ocasiones.

Si preferimos instalar un binario KML-

Donkey, los usuarios de Suse des-

cubrirán una versión actual para Suse

9.1 y 9.2 en la página de Pacman [7]. La

versión suministrada con la actual dis-

tribución de

Suse 9.2 es

un antiguo

kmldon-

key-0.9.1.

La versión

actual de

KMLDonkey

cuando se

mandó a imprimir esta edición, kmldon-

key-0.10, está disponible para ser descar-

gada desde [8]. La construcción de la

aplicación desde las fuentes es algo

rápido y poco problemático. Para ha-

cerlo, primero descargamos el archivo

tar fuente, para entonces compilar e

instalar usando los siguientes comandos:

tar jxvf kmldonkey-0.10.tar.bz2

cd kmldonkey-0.10

./configure --prefix=$KDEDIR

make

su -c "make install"<I>

El directorio KDE para Suse Linux es

/opt/kde3, por ejemplo, por lo que la

MLDonkey • PRÁCTICO

39Número 06W W W . L I N U X - M A G A Z I N E . E S

Figura 3: Podemos añadir

el applet de MLDonkey al

panel de control KDE

para un mejor y más

rápido acceso al núcleo.

admin k0ntra5eña

(Figura 1).

Tendremos que

hacer algunos

ajustes más en

Settings | Confi-

gure Connection

(Configuración |

Configurar Cone-

xión) y en Prefe-

rences | Configure

MLDonkey (Pre-

ferencias | Confi-

gurar MLDonkey).

En el primer sub-

menú introducire-

mos la contraseña

y credenciales de

usuario que

acabamos de introducir. También

podemos configurar el modo de inicio

(KMLDonkey startup mode) para lanzar

el núcleo con la interfaz. Esto nos

ahorrará el problema de tener que lan-

zar el núcleo manualmente como

hemos descrito con anterioridad.

El segundo menú nos ofrece opciones

para las distintas redes de intercambio

que soporta MLDonkey. El área de redes

(Networks) nos permite habilitar y con-

figurar los módulos individuales.

Podemos asignar el valor false (Falso) a

una red para evitar usar esa red. Si

necesitamos habilitar una red, como

eDonkey2000, seleccionaremos true

(Verdadero).

eDonkey 2000KMLDonkey dispone de numerosos va-

lores predeterminados para la mayoría

de protocolos de intercambio entre

iguales. Pero

algunos necesitan

algo de atención,

como los de eDon-

key2000. Buscare-

mos la entrada

force_high_id en el

panel de la

derecha, debajo de

Network | Donkey

y le asignaremos

true como valor.

Esto indica al

servidor que debe

cortar las cone-

xiones con los

servidores que

sólo soportan ID

bajas y que busque servidores que per-

mitan ID altas.

Una ID baja no nos llevará muy lejos

en una red donde compartimos

archivos. Una ID baja significa más tra-

bajo administrativo para el servidor

Donkey, puesto que los puertos específi-

cos de Donkey (4661/tcp,4662/tcp y

4665/udp) están bloqueados por un

cortafuegos o no enrutados por un

router. Tenemos que permitir estos

puertos en nuestro propio núcleo

añadiéndolos a la configuración de

nuestro cortafuegos SuSEFirewall2 bajo

Services | Other services (Servicios |

Otros Servicios) como aparece en la

figura 2. Si nuestro sistema MLDonkey

se esconde detrás de un router, debe-

mos saber que la mayoría de los dispo-

sitivos disponen de una conveniente

interfaz Web que nos permite redirigir

conexiones para esos puertos a nuestra

máquina (normalmente llamados

“Servidores Virtuales” o algo similar).

Encontraremos más detalles en la docu-

mentación de nuestro router.

El núcleo debe asignarnos una ID

alta, lo que podemos comprobar de

forma sencilla desde la consola de

comandos de MLDonkey introduciendo

id. Si el resultado es nuestra propia

dirección IP, la asignación de una ID

alta ha funcionado, lo que significa que

nunca más estaremos al final de la lista

de clientes.

Últimos AjustesAlgunos usuarios sugieren ajustar el

valor max_connected_servers (Máximo

número de servidores conectados) lo

más alto posible. Esto significa que

algunos archivos se descargaran de

forma más rápida y, por lo menos al

principio, las consultas realizadas se

gestionan de forma más generosa. No

obstante, esto sobrecarga la red y puede

no gustarle a otros usuarios. Cada espa-

cio que ocupemos con una conexión a

un servidor es uno que otro usuario no

puede utilizar. Por tanto, ajustar el valor

a un valor más alto que el predetermi-

nado (“3”) no garantiza descargas más

rápidas, por lo que es mejor dejar el

valor como está.

El valor Bandwith (Ancho de banda)

nos permite especificar el ancho de

banda máximo y mínimo. La tasa má-

xima de subida de información

(max_hard_upload_rate) no debe ser

llamada oportuna es ./configure --pre-

fix=/opt/kde3. El enlace para el pro-

grama compilado se encuentra bajo el

subtítulo “Internet” en el menú KDE.

Podemos pulsar [Alt]+[F2] e introducir

kmldonkey para ejecutar la aplicación

directamente (suponiendo que el núcleo

de MLDonkey está ejecutándose).

ConfiguraciónTras lanzar KMLDonkey, lo primero que

debemos hacer es configurar la interfaz

del programa en la última pestaña

(Console). Justo en la parte inferior de

la pestaña está el lugar donde intro-

ducir la contraseña para acceder al

núcleo (hasta ahora cualquier usuario

de nuestra red local podía acceder a

nuestro núcleo usando telnet o vía

HTML. Por ejemplo, para que la con-

traseña sea k0ntra5eña, escribiríamos

lo siguiente en la consola: add_user

PRÁCTICO • MLDonkey

40 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Vista de la solapa “Búsqueda” de amule, otro front-end

para MLMule. En este caso buscamos copias de “El Quijote” - el libro,

ojo, nada ilegal (esperamos).

Figura 5: Vista de la solapa de transferencias con 3 archivos

descargándose y uno (en rojo) en estado de espera.

superior a 5 kbps para ADSL o a 3 kbps

para RDSI. La razón es que si el valor

elegido para subir archivos es muy alto

afectaría de forma significativa la tasa

de descarga. Por ejemplo, si la subida

de un archivo en una línea ADSL de

1000 kpbs alcanza el límite de subidas

de 128 kbps, lo más probable es que la

conexión se bloquee, bajando incluso la

velocidad del acceso normal a Internet

de forma dramática. La tasa de descarga

debe ser ajustada de acuerdo a nuestro

entorno, después de todo, nosotros

conocemos nuestra conexión a Internet

mejor que nadie. Nótese que, el valor 0

elimina los límites.

Path (Ruta) nos permite especificar

donde almacenar temporalmente los

archivos y descargas. Con esto con-

cluimos los ajustes principales, por lo

que podemos comenzar a compartir

archivos por primera vez. Por supuesto,

el núcleo de MLDonkey tiene muchos

detalles adicionales que podemos reto-

car hasta afinarlo completamente a

nuestro gusto. Encontraremos más

información en los numerosos foros que

hay en Internet respecto a MLDonkey,

por ejemplo, véase [3].

Descargas con KMLDonkeyLa interfaz del programa es muy intui-

tiva, estando las funciones distribuidas

en unas pocas pestañas. Servers (Servi-

dores) nos muestra una lista de los

servidores individuales para compartir

archivos y nos permite abrir o cerrar

conexiones con estos. Search

(Búsqueda) nos permite buscar

archivos en varias redes. Podemos

especificar el tipo

de archivo y

restringir su

tamaño. También

tiene sentido com-

probar la pestaña

Statistics (Estadís-

ticas) de vez en

cuando. Esta nos

ofrece interesante

información sobre

la capacidad de

descarga de nues-

tros clientes.

Una de mejores

funciones de KML-

Donkey es que

podemos integrar

el programa en

nuestro panel de control KDE. Para

hacerlo pulsamos con el botón derecho

sobre el área Kicker del panel de con-

trol y seleccionar Add | Applet |

MLDonkey Applet (Añadir | Applet |

MLDonkey Applet) para añadir el pro-

grama. Aquí también podemos configu-

rar un par de parámetros críticos del

núcleo (ver figura 3), incluyendo las

tasas de subida y descarga máximas.

De hecho el applet muestra las tasas

actuales para que las conozcamos de

forma rápida. Si la tasa de descarga es

muy baja para otras tareas que ten-

gamos podemos presionar el botón

“pausa” para indicar al núcleo de

MLDonkey que espere hasta que pulse-

mos Play para rehabilitar el núcleo.

Como hemos mencionado previa-

mente, ahora el navegador Web Kon-

queror reconoce la URL ed2k como pro-

tocolo válido. Si nos encontramos con

un enlace de este tipo en Internet, el

navegador añadirá la descarga al

núcleo actual con un solo clic de nues-

tro ratón.

ConclusionesTras acabar con la fase de instalación,

intercambiar de archivos en una red es

muy fácil. Gracias a cómodas interfaces

con funciones intuitivas como KML-

Donkey, cualquiera puede ofrecer

archivos a la comunidad y acceder a

descargas que otras personas han

puesto a nuestra disposición.

Tanto el núcleo como la interfaz grá-

fica de usuario han madurado. La inter-

operatibilidad normalmente no da pro-

blemas, y los cuelgues son práctica-

mente desconocidos. No obstante el

paquete MLDonkey aún necesita algo

de atención. Nos gustaría ver la insta-

lación automática basada en RPM que

elimina la necesidad de que los usua-

rios realicen tareas como copiar la apli-

cación en la posición adecuada del

árbol de directorios.

Confiemos en que la industria del

entretenimiento no arrase la comunidad

de intercambio de archivos con su

actual postura de oposición a cualquier

tipo de red de intercambio y que

reconozca el valor de la comunidad y

apoye a prometedoras herramientas

como MLDonkey. �

MLDonkey • PRÁCTICO

41Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] Página Web de MLDonkey: http://

www.mldonkey.org

[2] Binarios MLDonkey de Spiralvoice:

http://download.berlios.de/pub/

mldonkey/spiralvoice/

[3] Foro de MLDonkey: http://mldonkey.

berlios.de/modules.

php?name=Forums

[4] MLDonkey FAQ: http://www.nongnu.

org/mldonkey/faq.html

[5] Objective Caml: http://caml.inria.fr/

ocaml/

[6] Archivos fuente para lablGTK: http://

wwwfun.kurims.kyoto-u.ac.jp/soft/

olabl/lablgtk.html

[7] Binarios Suse para KMLDonkey: http://

packman.links2linux.org/?action=451

[8] Archivos fuente para KMLDonkey:

http://savannah.nongnu.org/

download/kmldonkey/kmldonkey-0.

10.tar.bz2

RECURSOS

Figura 7: Diálogo de amule para la configu-

ración del programa. En este caso, vemos la

sección correspondiente a la configuración

del núcleo.

Figura 6: Solapa de conexión de amule. Vemos en este caso los

servidores centrales y de pares disponibles.

42

rarnos de que los campos son los ade-

cuados desde el principio.

Ahora procedemos a añadir categorías

(como júnior, adultos, seniors, etc.) a

una segunda tabla llamada Categories

(Categorías) y, en una tercera tabla,

añadimos diferentes tipos de bolas para

jugar a los bolos (LaneMasters, Roto-

Grip, Ebonite, etc). Guardamos esta tabla

como Bowlingballs (Bolas de Bolos).

Estas dos tablas tienen dos columnas

cada una: una para el campo ID y otra

para los campos Categoría y Bolas para

jugar a los bolos respectivamente.

FormulariosRecordaremos de la primera parte del

taller que Knoda admite dos modos para

cada elemento. Para rellenar la tabla de

datos simplemente cambiaremos el

modo ver e introducimos los datos como

tiempo. El tipo de campo bool se usa

para entradas del tipo yes/no (sí/no) o

TRUE/FALSE (VERDADERO/FALSO).

MySQL y Postgres soportan tres estados

para este campo (por ejemplo, sí, no y

no lo sé).

En este taller crearemos una base de

datos para gestionar los socios de un

club local de bolos. Con este fin añadi-

remos los campos listados en la tabla 1

a la primera tabla comenzando con el

campo ID. Puesto que este campo

dispone de un contador automático, el

valor no puede ser cero. Este será nues-

tro indexado principal. Tras añadir los

campos seleccionamos Other Table

(Otra Tabla), la cual nombraremos

como Bowlers (Jugador de Bolos).

Debemos saber que Sqlite no permite

posteriores cambios en la estructura de

las tablas, por lo que deberemos asegu-

El mes pasado aprendimos a

realizar búsquedas en tablas

múltiples con Knoda. Este mes

descubriremos como crear tablas, formu-

larios e informes impresos.

Supondremos que en este taller vamos

a trabajar con el controlador Sqlite2, si

bien los ejemplos se pueden aplicar a

cualquier otra base de datos. Por ejem-

plo, el cuadro 1 nos muestra como con-

figurar Knoda como interfaz de MySQL.

Es posible que los usuarios de Suse

Linux 9.1 tengan que hacer algunos

ajustes. Si actualizamos KDE a la versión

3.3.2, es posible que YaST haya instalado

algunos paquetes antiguos de Knoda. Si

es nuestro caso, deberemos reinstalar

Knoda.

Creación de Base de DatosEjecutamos Knoda y seleccionamos el

controlador Sqlite2 en el diálogo de

selección de controladores. Ahora pul-

samos File | New | Database e introduci-

mos un nombre para la base de datos.

Ahora ésta debe aparecer en Current

database. Si no es así, la deberemos

seleccionar del menú desplegable. Para

crear una tabla pulsamos con el botón

derecho sobre Tables y seleccionamos

New. También tenemos la opción de pul-

sar File | New | Table en el menú.

En la pestaña Table - Unamed (Tabla -

Sin nombre) que aparece en la figura 1

pulsamos sobre New Field para añadir

columnas (campos) a la tabla. La

descripción de todos los rangos de cam-

pos en detalle va más allá del alcance de

este artículo. Baste decir que sólo los

campos de texto, número entero y punto

flotante nos ocuparían demasiado

PRÁCTICO • Knoda

42 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Administración de Bases de Datos con KDE

BIEN ORDENADOKnoda es un programa KDE amigable con el usuario que hace que la administración

de Bases de Datos sea una experiencia intuitiva. En la segunda parte de nuestro

taller investigaremos como crear formularios e imprimir informes con Knoda.

POR MARCEL HILZINGER

Figura 1: En marcha: creación de una nueva tabla con Knoda.

si se tratase de una hoja de cálculo nor-

mal. Para introducir datos en la tabla

principal es muy conveniente crear un

formulario de entrada de datos especí-

fico. Adicionalmente, el formulario nos

permitirá enlazar las tres tablas. Esto es

debido a que no necesitamos saber que

ID tiene cada categoría si añadimos

datos de categorías, puesto que simple-

mente la seleccionamos de un menú

desplegable.

Para crear un nuevo formulario, pul-

samos con el botón derecho sobre Forms

o seleccionamos File | New | Form en el

menú principal. Tras lanzar el ayudante

de formularios (ver Figura 2), lo primero

que tenemos que hacer es seleccionar la

fuente de datos. Para hacer esto, pul-

samos sobre el icono con los tres puntos

situado a la derecha de Datasource

(Fuentes de Datos). Seleccionamos las

tres tablas creadas con anterioridad y las

añadimos como fuentes de datos. Ahora

seleccionamos la tabla Bowlers

(Jugadores de Bolos) en el menú desple-

gable.

Cuando lanzamos el ayudante de for-

mularios, Knoda añade de forma

automática los elementos necesarios

para crear formularios. Si no estamos

seguros de la función de los iconos, sim-

plemente debemos mover el cursor sobre

cada icono para que Knoda nos muestre

una breve ayuda contextual al respecto

del icono. Ahora pul-

saremos sobre Lineedit-

field (Campo de texto

de una sola línea) y

luego sobre el formula-

rio (vacío). Esto indica

a Knoda que deseamos

añadir un campo al for-

mulario. Tendremos

que indicar a Knoda

tipo de datos y formato

de datos para este

campo. Con este fin

pulsamos sobre las pes-

tañas Data (Datos), For-

mat (Formato), Frame

(Borde) y Actions

(Acciones). Selec-

cionamos la tabla

Bowlers como fuente de

datos para el primer

campo y le asignamos

el campo Name (Nom-

bre). Repetimos los mis-

mos pasos para añadir

el resto de campos

excepto Category (Cate-

goría), Bowlingball (Bolas para jugar a

los bolos) y Paid (Pagado). Cambiamos

al modo visualización para probar el for-

mulario.

El campo Paid es boleano. O el miem-

bro ha pagado su cuota anual o no la ha

pagado. Pulsamos sobre el icono

Booleanfield (Campo Boleano) en la caja

de propiedades de este campo y

enlazamos el widget al campo Paid en la

tabla Bowlers. Simplemente para asegu-

rarnos que sabemos lo que hace la

casilla de marca introduciremos como

Label (Etiqueta) Membership fee paid

(Cuota de socio pagada).

Seleccionaremos Combobox (Caja

Combinada) para Category y para Bowl-

ingball. Tenemos que especificar dos

fuentes de datos. Primero seleccionamos

la tabla Bowlers como fuente para el

campo Category. Entonces selec-

cionamos la tabla Category como List-

datasource (Lista de la fuente de datos),

el ID como Listcolumn (Listar columna)

y Category como columna a mostrar.

Repetiremos estos pasos para crear un

menú desplegable para los distintos tipos

de bolas para jugar.

Por último añadiremos una barra de

navegación al formulario. Esta barra

permite que los usuarios se puedan

desplazar entre registros o añadan

43

Knoda• PRÁCTICO

43Número 06W W W . L I N U X - M A G A Z I N E . E S

Figura 2: El ayudante de formularios de Knoda.

Nombre del campo Tipo de campo

ID Auto incremental

Nombre Texto

Apellido Texto

Calle Texto

Código Postal Entero corto

Ciudad Texto

Categoría Entero corto

Cuota Anual Float corto

Pagado Boleano

BolaBolos Entero corto

Tabla 1: Tabla Ejemplo del Club de Bolos

menú principal o abrimos un nuevo

informe a través del menú desplegable

seleccionando Report. Para nuestro

primer informe necesitaremos selec-

cionar la tabla Bowlers en el diálogo de

fuente de datos.

Ahora pulsamos sobre el icono New

Field (Nuevo Campo) en la caja de

herramientas y luego sobre Datasection

(Sección de datos) para añadir el

campo. Al igual que en el asistente de

formularios, podemos usar las pestañas

del panel de la derecha de la ventana

para definir las propiedades del

informe. Como primer elemento selec-

cionamos el campo Name (Nombre).

Repetiremos este paso para los campos

Last name (Apellido) y Paid (Pagado).

Ahora cambiamos al modo ver para

observar el rudimentario informe, el

cual sólo nos muestra el nombre y

apellidos de todos los miembros junto a

la palabra TRUE (Verdadero) si el miem-

bro ha pagado su cuota. FALSE (Falso)

aparece junto a los datos de los miem-

bros que no han pagado.

nuevos registros de forma más cómoda

(ver figura 3). Si bien Knoda tiene ba-

rras de navegación para cada formula-

rio, no hay manera de cambiar su apa-

riencia.

InformesEs razonable que el presidente del club

de bolos desee saber si todos los socios

han pagado la cuota anual. Podemos

usar Knoda para generar informes que

faciliten al presidente esta valiosa infor-

mación. Seleccionamos File | New |

Report (Archivo | nuevo | Informe) en el

PRÁCTICO • Knoda

44 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 3: El producto acabado.

Figura 4: Para un simple informe, añadimos los campos requeridos como detalles.

Knoda soporta las bases de datos

MySQL y Postgresql al igual que Sqlite.

Adicionalmente, una interfaz genérica

ODBC soporta el acceso a cualquier

base de datos compatible con SQL. Para

que Knoda reconozca estas bases de

datos tenemos que instalar los paquetes

de desarrollo para las bases de datos a

las que accederemos antes de compilar

hk_classes. Esto permite a hk_classes

compilar los controladores de bases de

datos requeridos. Mysql necesita el

paquete mysql-devel, Postgres el

paquete postgresdevel, etc.

Tras acabar la compilación hk_classes y

Knoda, la selección de controladores

muestra la bases de datos para las

cuales hk_classes encontró los paquetes

de desarrollo. Debe haber una entrada

para MySQL. Trabajando como root

escribimos el siguiente comando para

lanzar la base de datos MySQL:

/etc/init.d/mysql start

Al menos debemos ver una línea con

Done (Terminado) u OK cuando se car-

gue la base de datos. De forma adi-

cional, Suse Linux nos indica que

indiquemos una nueva contraseña para

el usuario root de MySQL. Para hacerlo

escribimos mysqladmin -u root pass-

word seguido de la nueva contraseña.

Si no hacemos esto podremos acceder

al servidor MySQL sin comprobación de

usuario. Para acceder seleccionamos la

entrada MySQL en el diálogo de selec-

ción de controladores de Knoda. En la

siguiente ventana introducimos root

como User (Usuario) y pulsamos OK.

Para acceder de forma remota al servi-

dor MySQL mediante Knoda también

tenemos que especificar la dirección IO

o el nombre del anfitrión del servidor

mysql como Host. Normalmente ten-

dremos que suministrar un nombre de

usuario y contraseña.

Cuadro 1: Knoda y MySQL

Una lista de mayor longitud con este

formato sería confusa, por lo que debe-

mos añadir una opción para el pago.

Knoda mostrará todos los miembros que

no han pagado primero, y a conti-

nuación los que han pagado. Para añadir

esta opción pulsamos sobre el icono Sec-

tions (Secciones) en la caja de herra-

mientas. En el diálogo que aparece

añadimos la nueva sección Paid a las

existentes y pulsamos Exit (Salir).

El editor de informes tienen ahora dos

entradas: Sectionheader:paid (Cabecera

de la Sección:pagado) y

Sectionfooter:paid (Pie de la Sección :

pagado). Añadimos el campo Paid a la

cabecera de la sección, y dejamos Name

y Last name en la sección de detalle, y ya

hemos terminado.

Pero la verdad es que esta lista tam-

poco es la ideal para el presidente. La

lista que el presidente realmente necesita

es la de las personas que no han pagado,

para lo cual necesitamos hacer una con-

sulta. Podemos usar los resultados de

una consulta como fuente de datos para

el informe. Hay otra ventaja a este

método: podemos ordenar alfabética-

mente los resultados.

Para crear la consulta seleccionamos

File | New | Query (Archivo | Nuevo |

Consulta), pulsamos con el botón dere-

cho el campo de fuente de datos vacío y

seleccionamos Add datasource (Añadir

fuente de datos). En el siguiente diálogo

añadimos la tabla Bowlers usando el

menú desplegable. Ahora arrastramos

los siguientes campos a la matriz de la

consulta:

*Nombre *Apellido *Pagado

Añadimos =0 como criterio para la

columna Paid y No para la opción de Dis-

play. Si ahora cambiamos al modo de

visualización para lanzar la consulta y

todo ha funcionado correctamente,

Knoda nos mostrará una lista con los

nombres y apellidos de los miembros

que no han pagado su cuota. Para

ordenar alfabéticamente por el nombre

debemos indicar en la opción Sorting

(Ordenar) o Ascending (Ascendente) o

Descending (Descendente).

Ahora guardamos la consulta y

creamos un nuevo informe. En el

cuadro de diálogo de la fuente de

datos seleccionamos la consulta en

Based on (Basado en). Simplemente

podemos añadir los campos Name y

Last name a la sección de datos y

habremos acabado el informe para el

presidente.

¿Más?Si este taller ha abierto vuestro apetito,

visita la página Web del proyecto [1],

donde el autor dispone de una Wiki. La

lista de distribución de Knoda [2]

dispone de útiles pistas si tenemos pro-

blemas. Y los tutoriales [3] son útiles

para obtener más información respecto a

Knoda. �

Knoda• PRÁCTICO

[1] Página Web de Knoda: http://www.

knoda.org

[2] hk_classes y lista de distribución de

Knoda: https://lists.sourceforge.net/

lists/listinfo/hk-classes-discuss

[3] Tutoriales: http://hk-classes.

sourceforge.net/tutorials/

RECURSOS

46

estas ROMs alternativas de las Zaurus,que en algunos casos son un valor aña-dido que deberemos tener en cuenta a lahora de decidirnos por la adquisición deun determinado modelo.

Un Saurio en LibertadSin duda una de las ROMs más valiosases OpenZaurus[1]. Como la mayoría delos proyectos de software libre, éste partede un solo desarrollador que desea teneruna ROM completamente libre y mejo-rada para su Zaurus SL-5500. Poco apoco se ha ido convirtiendo en una dis-tribución LFS (Linux From Scratch)

caciones PIN consideradas superfluaspara dejar espacio libre a nuevos y nece-sarios drivers para las tarjetas wireless ybluetooth, nuevas librerías ncurses, con-solas shell, utilidades de compresión,etc. Mientras se jugaba con estas va-riantes se aprendía más y más sobre laestructura interna de la Zaurus y sobre elfuncionamiento de muchos de los pe-riféricos de la misma (dispositivos CF,pantalla, puerto de infrarrojos, pantallatáctil, batería) llegándose a planteararquitecturas alternativas que optimiza-ban el rendimiento global de la PDA. Eneste artículo repasaremos algunas de

Estamos acostumbrados a adaptarnuestras máquinas Linux aña-diendo una nueva versión del

kernel, cambiando de gestor de ventanaso habilitando el Composite de las XOrg.Todas estas tendencias también existenen el pequeño mundo de las Zaurus. Losusuarios han aprendido las técnicas bási-cas para poder crear versiones de ROMsque puedan ser almacenadas de maneracorrecta dentro de la memoria Flash delequipo. Naturalmente las primeras ver-siones de estas ROMs eran simples modi-ficaciones de la que trae por defecto laZaurus. Se eliminaban los juegos y apli-

PRÁCTICO • Zaurus

46 Número 06 W W W . L I N U X - M A G A Z I N E . E S

ROMs para dos Zaurus

ELIGIENDO MI ROMROMs para dos Zaurus

ELIGIENDO MI ROM

www.photocase.de

Con el paso del tiempo los usuarios de las Zaurus han aprendido a diseñar y a construir su propias variantes

de la ROM Linux que proporciona Sharp. El panorama actual está repleto de ROMs cada vez más completas y

potentes, llegando a ser un problema el poder responder a la pregunta ¿qué ROM puedo ponerle hoy a mi

Zaurus?. POR ALBERTO PLANAS

basada en entornos Opie[2] o GPE[3].Para quien no lo sepa, las PDAs Linuxtienen también su propio entorno gráfico,que es la parte encargadade gestionar las ventanas yeventos producidos por dis-positivos tales como lapantalla táctil, el teclado ola introducción de unanueva tarjeta de memoriaCF. La empresa TrollTechha desarrollado su propioentorno de ventanas parasistemas empotrados,Qtopia[4], basado en unaversión simplificada de lasQT denominada QT/Embedded[5]. Opie no esmás que un fork de la ver-sión 1.5 de Qtopia que ha idoadquiriendo su propia identidad pormedio de modificaciones más o menosimportantes tanto a nivel de API cómopor la selección de aplicaciones que leacompañan. Así Opie presenta opcionesde configuración y personalización através de estilos de las que carece Qtopia,además de aplicaciones para el visua-lizado de PDFs, navegadores webs y mul-titud de juegos. No todo el mundo deseaprogramar en QT/E y C++, así que ungrupo de programadores decidieronpoder realizar sus programas en GTK+ yC por medio de un nuevo entornodenominado GPE. A diferencia de Qtopia/ Opie éste necesita de un entorno X parapoder ejecutarse (XFree86 / KDrive), loque lo convierte en una aplicación máspesada. Por desgracia GPE no está en laactualidad tan evolucionado como Opie,

carece de aplicaciones esenciales deadministración y presenta numerososerrores que necesitan ser corregidos

antes de plantearse unuso serio del entorno.De todas maneras elpotencial de la opciónGTK+ y X WindowSystem es impresio-nante. ¿Os imagináisimportar una sesión Xde Thunderbird apli-cando sombras y trans-parencias por medio delComposite? Es intere-sante ver cómo hastaen los sistemas tanpequeños como la Zau-rus aparecen competi-

ciones tecnológicas entre KDE (Qtopia yOpie) / Gnome (GPE), lo que da una ideade la riqueza del software que nospodemos encontrar para estas PDAs.

Instalar OpenZaurus requiere un pro-ceso de escritura en la memoria FlashROM interna de la Zaurus. Lo primeroque hay que hacer es descargar de laweb de OpenZaurus[6]la última versióndisponible de esta dis-tribución (actualmentela 3.5.2, aunque posible-mente se pueda descar-gar la 3.5.3 para cuandose publique esteartículo). Para instalarOZ en una SL-5500 ten-dremos primero que ele-gir el entorno gráficoque deseamos usar y elperfil de la memoria delsistema. Para ser pro-ductivos desde unprimer momento, esaconsejable usar elentorno Opie y una dis-tribución de memoriaque reserve unos 40Mpara RAM y el resto delos 64M de la Zaurus,24M, para poder instalarnuestras aplicaciones.Nos aseguraremos de almacenar los dosficheros elegidos de la lista de descargaen la tarjeta CF bajo los nombres “zIm-age” para el kernel y “initrd.bin” y pro-cederemos al flasheado siguiendo lospasos descritos en la Cuadro 1 para elmodelo SL-5500. Si deseamos usar esta

ROM para otros modelos de Zaurus,descargaremos los ficheros adecuados yprocederemos a ejercer una presión en elteclado al estilo vulcaniano dependientedel modelo de la Zaurus. En la Figura 3se puede ver qué aspecto tiene unaOpenZaurus 3.5.2 con Opie.

No nos confundamos: esta ROM espara hackers, pero también puede serusada por usuarios normales deseosos

de tener un abanico deaplicaciones libres yactualizadas. Realmentees una distribución quenecesita un poco másde trabajo, pero paraadmirar su potenciadebemos entendercómo está construidaen la actualidad.

OpenZaurus no esmás que una de lasmúltiples distribucionesque pueden generarse apartir de otro proyectomenos conocido: bit-bake. Éste consta de unconjunto de scripts enPython que, a partir deun recetario o ficheros.bb, es capaz de generarprogramas compiladospara múltiples arquitec-turas. Con un sencillocomando podremos ir

generando desde paquetes paramáquinas Zaurus hasta una imagenROM de la última versión de OpenZau-rus en desarrollo. Es, por tanto, unframework para el nunca cómodo cross-compiling. Bitbake constituye el núcleodel proyecto OpenEmbedded[7], que se

47

Zaurus • PRÁCTICO

47Número 06W W W . L I N U X - M A G A Z I N E . E S

Figura 1: Menú de actua-

lización de la Zaurus. De las

tres opciones solo nos

interesa la número 4, que es

la que procederá a la carga de

la ROM desde la tarjeta SD o

CF.

Figura 2: Peligroso menú de ser-

vicio con múltiples opciones de

calibración, testeo y backup/

restore de la Zaurus.

01 #!/bin/sh

02 mkdir zaurus

03 cd zaurus

04 mkdir openembedded

05 mkdir bitbake

06 mkdir build

07 mkdir sources

08 svn co

svn://svn.berlios.de/bitbake/t

runk/bitbake

09 bk clone

bk://openembedded.bkbits.net/o

penembedded

Listado 1: install.sh

antes mencionados. Realmente estosproyectos son muy dinámicos y cambiancon mucha frecuencia por lo que esaconsejable ir actualizando cada ciertotiempo nuestras copias locales con estoscomandos:

cd bitbake

svn up

cd ../openembedded

bk pull; bk -r co -q

Ahora necesitamos crear un fichero deconfiguración dentro del directoriobuild/conf (ver Listado 2) que contendrálas principales directivas del entorno. Eneste fichero indicaremos cual es el proce-sador para el que deseamos generarbinarios, para qué distribución en parti-cular vamos a crear imágenes ROMs y

paquetes y, finalmente, qué versión delkernel usará nuestra distribución. El pro-ceso es muy flexible, por lo que esrecomendable consultar la docu-mentación[10] de la web de openembed-

ded. Antes de compilar nada necesitare-mos establecer la siguiente variable deentorno:

export BBPATH=$HOME/zaurus/U

build:$HOME/zaurus/U

openembedded

Perfecto, ahora si queremos generar laimagen ROM de Opie y OpenZaurus solotendremos que escribir, dentro del direc-torio build el comando bitbake

opie-image. Observaremos tranquila-mente cómo se van a ir descargando lospaquetes en código fuente de los compi-ladores, el kernel y del resto del sistemade manera automática. En una primera

ha separado de éste por cuestiones decomodidad. Ahora el objetivo de Open-Embedded es el de aglutinar en un soloproyecto el conjunto de descripciones depaquetes y arquitecturas que deberácompilar bitbake. Para aclarar los con-ceptos vamos a instalar los proyectos bit-bake y openembedded, y diseñaremosun fichero .bb para el programa aircrack

(ver artículo anterior) que añadiremos anuestro repositorio para una compilacióncruzada automática.

Suponiendo que se tiene instalado losprogramas de control de versiones Sub-version[8] y BitKeeper[9], instalar y usarbitbake y openembedded va a resultar delo más sencillo. Solo hay que ejecutar elpequeño script del Listado 1. Éste seencargará de crear los directorios ade-cuados y descargar los dos proyectos

PRÁCTICO • Zaurus

48 Número 06 W W W . L I N U X - M A G A Z I N E . E S

01 # Usar como plantilla

openembedded/conf/local.conf.s

ample

02 DL_DIR =

"${HOME}/zaurus/sources"

03 BBFILES =

"${HOME}/zaurus/openembedded/p

ackages/*/*.bb"

04 BBMASK = ""

05 PREFERRED_PROVIDERS =

"virtual/qte:qte

virtual/libqpe:libqpe-opie"

06 PREFERRED_PROVIDERS += "

virtual/libsdl:libsdl-qpe"

07 PREFERRED_PROVIDERS += "

virtual/${TARGET_PREFIX}gcc-in

itial:gcc-cross-initial"

08 PREFERRED_PROVIDERS += "

virtual/${TARGET_PREFIX}gcc:gc

c-cross"

09 PREFERRED_PROVIDERS += "

virtual/${TARGET_PREFIX}g++:gc

c-cross"

10 MACHINE = "collie"

11 DISTRO = "openzaurus-3.5.3"

12 IMAGE_FSTYPES = "jffs2 tar"

13 BBINCLUDELOGS = "yes"

14 CVS_TARBALL_STASH =

"http://www.treke.net/oe/sourc

e/"

Listado 2: local.confEl proceso de escritura en la memoria

Flash ROM generalmente requiere intro-

ducir combinaciones secretas de teclas y

acceder a peligrosos menús del sistema.

Si bien es cierto que se corre un riesgo al

cambiar el contenido de la memoria

Flash, si se respeta el procedimiento no

sucederá nada irreparable. Vamos a

describir los pasos que hay que dar para

flashear la SL-5500 y la C860.

Modelo SL-5500

• Asegurarse que se tiene una CF de

32M o más formateada en FAT16.

• Almacenar en la CF los ficheros zI-

mage e initrd.bim (o solo es Ospack si

se va a recuperar la ROM original);

introducirla en la ranura de la PDA.

• Enchufar la Zaurus a la corriente.

• Abrir la pestaña trasera que impide la

apertura de la tapa de la batería.

• Pulsar las teclas “C” y “D” mientras se

presiona el botón trasero de reset.

• Esperar dos o tres minutos mientras

los dos LEDs de la Zaurus se

mantienen fijos y encendidos. Este es

el momento crítico del procedimiento,

hay que dejar que el proceso continúe

sin interrupciones.

• Pulsar otra vez el botón trasero de

reset de la PDA.

• Colocar la tapa, cerrar la pes≠taña de

seguridad y encender la Zaurus.

Modelo C860 – Modo Flash

• Almacenar en una SD o CF de 64M los

ficheros updater.sh, zImage.bin e ini-

trd.bin

• Abrir la pestaña trasera para poder

sacar la tapa de la batería y la propia

batería. Esperar 5 segundos.

• Introducir la batería y la tapa, cerrar la

pestaña y enchufar la Zaurus.

• Pulsar el botón “OK” del teclado mien-

tras se pulsa el botón trasero de

encendido.

• Seleccionar la cuarta opción del menú

en Japones (ver Figura 1). Por si

alguien tiene curiosidad la primera

opción es para salir de este menu, la

segunda realiza algún tipo de chequeo

en la máquina y la tercera formatea la

memoria flash interna.

• Ahora sale otro menú en Japones,

selecciona la opción 2 si la ROM está

en la CF, si está en la ranura SD selec-

ciona la opción 3.

Modelo C860 – Modo NAND

• Abrir la pestaña de la batería y extraer

la tapa y la batería de la Zaurus.

• Esperar 10 segundos (en algunos

casos se ha documentado que hay que

esperar hasta 5 minutos la primera vez

que se realiza este procedimiento).

• Introducir la batería y la tapa.

• Pulsar las teclas “D” y “M” a la vez

que se coloca la pestaña trasera en su

posición original (cerrado).

• En la pantalla sale un menú en ingles

(ver Imagen 2) extremadamente peli-

groso. Es aconsejable usar solo la

opción 10 de la tercera página (NAND

Flash Restore).

Cuadro 1: Preparando los Flashers

etapa bitbake compilará el paquete GCCde manera nativa para nuestra máquina,pero indicando que el código que debegenerar ha de ser para el procesador queusa la Zaurus (procesadores ARM). Coneste compilador se irán generando losbinarios para nuestra plataforma de des-tino y todo esto lo tenemos automati-zado gracias a bitbake.

Incluir un paquete es tan sencillocomo crear un directorio para la nuevaaplicación y poner dentro de él unfichero .bb que indique cómo generarla.El programa aircrack para la búsquedade claves WEP no está dentro de open-embedded. Lo incluiremos nosotroscreando el directorio con un mkdir ope-

menbedded/packages/aircrack y creare-mos el fichero .bb adecuado (ver Listado3). Generaremos de manera rápida unpaquete instalable directamente en nues-tra Zaurus con el comando:

bitbake -b $HOME/openembedded/U

packages/aircrack/U

aircrack_2.1.bb

Creo que es ahora cuando ya podemosentender la importancia, la versatilidad yla potencia de este proyecto. ¡A crearficheros .bb para la Zaurus!

La Cacko ROMCuando adquirimos una Zaurus de lafamilia de las Cxxx lo más probable esque venga en Japones. El primer paso es,por tanto, adaptarlo a algún idioma quepodamos entender (vale, nos confor-mamos con el inglés). De entre todas lasopciones posibles de traduc-ción la mejor es directamentesobreescribir la ROM deSharp por la Cacko ROM. Éstaes una variante de la ROMoriginal en la que se han eli-minado algunas aplicacionescomo el diccionario inglés-japonés para dejar espacio aotras cómo el reproductormultimedia Kino2. Esta ROMha pasado por varios procesosde refinamiento y ahora esposible descargar la versión1.22[11] junto con un primerpaquete de corrección deerrores[12]. El proceso deinstalación de esta ROM tienedos partes, en una primera parte parti-cionaremos la memoria y en la siguienteescribiremos los datos de la ROM en lamemoria Flash de la Zaurus. Lo primeroque hay que hacer es asegurarse dedescargar y almacenar los tres ficherosque componen la ROM en una CF de 64Mtal y como se indica en la Tabla 1 (epí-

grafe Modelo C860 – Modo Flash). Siseguimos los pasos ahí indicados la Zau-rus arrancará desde la tarjeta de memoriaCF y mostrará un menú ncurses condiversas opciones. Deberemos selec-cionar 5 Flash Repartition e introducir 27cuando nos pregunte por el tamaño de lapartición raíz. Finalizada esta etapa elsistema se reiniciará solo y, antes de queempiece de nuevo la carga del sistemaoperativo, deberemos repetir todos lospasos hasta volver a visualizar el menúen modo texto anterior. Es en esta nues-tra segunda visita cuando podremosseleccionar la opción 1 Install new ROM.Ya sólo nos queda esperar a que resetee

de nuevo y dejar, ahora sí,que cargue el nuevo sistemaoperativo para poder disfru-tar de su nueva estética (verFigura 4).

Otra opción, pero porahora menos utilizada, con-siste en instalar la versiónde OpenZaurus para estemodelo. Esta alternativa iráadquiriendo cada vez másinterés en cuanto tengamosun kernel 2.6 completa-mente estable, ya que estaversión promete rendimien-tos nunca vistos antes eneste tipo de dispositivos. Pordesgracia debido a temas de

patentes y especificaciones cerradas nopodremos disfrutar, a falta de algún mila-gro, de las tarjetas SD en las máquinasSL-5500 bajo kernel 2.6.

Unas X solo para mayoresHay un desarrollo que realmente merecela pena mencionarlo aquí, y es la

Zaurus • PRÁCTICO

49Número 06W W W . L I N U X - M A G A Z I N E . E S

Figura 3: Escritorio

por defecto de una

OpenZaurus con Opie.

01 DESCRIPTION = "802.11 sniffer

and WEP key cracker for

Windows and Linux"

02 SECTION = "console/network"

03 PRIORITY = "optional"

04 LICENSE = "GPL"

05 SRC_URI =

"http://www.cr0.net:8040/code/

network/aircrack-${PV}.tgz"

06

07 EXTRA_OEMAKE = "'CC=${CC}'

'BIND=${CC}' 'AS=${CC} -c'

'CPP=${CPP}' \

08 'CFLAGS=-I. -DUNIX

${CFLAGS}' 'INSTALL=install' \

09 'BINFLAGS=0755'

'INSTALL_D=install -d'"

10

11 do_compile() {

12 oe_runmake

13 }

14

15 do_install() {

16 oe_runmake

prefix=${D}${prefix} \

17 BINDIR=${D}/${bindir}

MANDIR=${D}/${mandir}/man1 \

18 install

19 }

Listado 3: aircrack_2.1.bb

mejor consejo que podemos dar es inten-tar restaurar la ROM original. Si estamostrabajando con una SL-5500 podemosencontrar la ROM de Sharp en http://

www.elsix.org/downloads/

5500v313Ospack.zip. Descargaremos esefichero, lo descomprimiremos y copiare-mos el fichero así obtenido en una CFpara volver a flashear desde ahí siguiendolos pasos ya indicados en la Tabla 1. LaROM de Sharp viene acompañada poruna serie de aplicaciones más o menosútiles que tendremos que descargar desdeotra dirección[14].

En caso de que el error se presente enel modelo C860 tendremos que acceder aotro de los menús secretos de la Zaurus.Usaremos el procedimiento descrito en laTabla 1 bajo el epígrafe Modelo C860 –

Modo Flash. La idea consiste en volver avolcar el contenido íntegro de la memo-ria NAND de la Zaurus que esta traía defábrica. Podemos descargar este con-

tenido desde [15] y copiarlo a una tarjetaSD o CF de más de 128M. Con ella intro-ducida en la ranura correspondiente,activaremos el menú de servicio e iremosa la tercera página / opción 10 (NAND

Flash Restore) para completar la restau-ración de la ROM original. �

pdaXrom[13]. Su objetivo es entregaruna distribución Linux completamentebasada en XFree86 (KDrive realmente)con un gestor de ventanas estándar. Enla actualidad se pueden usar los gestoresMatchbox, IceWM, Fluxbox, FVWM yXFCE entre otros. La ventaja esencial deusar XFree frente a las opciones Qtopia /Opie / GPE es la inmediatez a la hora deportar nuevas aplicaciones a estaplataforma, de hecho solo hay que ver lalista de aplicaciones existentes para estaROM (AbiWord, Dillo, XEmacs, Firefox,The Gimp …). Realmente impresionantees también, por desgracia, la cantidad derecursos de memoria que necesita tantoen RAM como en espacio de almace-namiento. Es por eso que esta ROM tienemás sentido en otros modelos como laC3000 que incorpora un disco duro de4.4G, aunque en la actualidad no hayninguna versión que soporte completa-mente este modelo tan moderno. Todollegará.

Qué Hacer Cuando Algo vaMalEn cierta manera nos sentimos respon-sables de incitar al lector a jugársela consu amado cacharrito. El procedimiento deescritura de la ROM no está exento deriesgos, y la variedad y atractivo de lasROMs es tan grande que es difícil de evi-tar el deseo de ir cambiando cada pocotiempo la de nuestra Zaurus. Si poralguna razón algo falla y la PDA deja dearrancar tras un flasheado interruptus, el

PRÁCTICO • Zaurus

50 Número 06 W W W . L I N U X - M A G A Z I N E . E S

[1] OpenZaurus: http://www.openzaurus.

org/

[2] Opie: http://opie.handhelds.org/

cgi-bin/moin.cgi/

[3] GPE: http://gpe.handhelds.org/

[4] Qtopia: http://www.trolltech.com/

products/qtopia/

[5] QT/E: http://www.trolltech.com/

products/embedded/index.html

[6] OpenZaurus 3.5.2 http://www.

openzaurus.org/official/unstable/3.5.2/

sl5000,sl5500/

[7] OpenEmbedded: http://www.

openembedded.org/

[8] Subversion: http://subversion.tigris.

org/

[9] BitKeeper: http://www.bitkeeper.com/

[10] OpenEmbedded GettingStarted:

http://openembedded.org/cgi-bin/

moin.cgi/GettingStarted

[11] Cacko ROM 1.22: http://cacko.oesf.

org/downloads/rom/1.22/

slc7x0-Qtopia-1.22-1346311204.zip

[12] Cacko ROM 1.22 HotFix A: http://

cacko.oesf.org/downloads/rom/1.22/

cacko-qtopia-rom-hotfix_1.22a_arm.

ipk

[13] pdaXrom: http://www.pdaxrom.org/

[14] Sharp ROM Utilidades: http://www.

elsix.org/downloads/5500v310Apps.

zip

[15] Backup NAND: http://downloads.

conics.net/pda/zaurus-sl-c700/

service-menus/original-backups/

RECURSOS

Figura 4: Cacko ROM en una SL-C860.

Bonita selección de iconos ¿verdad?

Alberto Planas es

desarrollador de

aplicaciones bajo

entornos libres

desde hace varios

años. Aficionado a

la tecnología

desde siempre,

alterna sus horas

de sueño con las

horas dedicadas al

estudios de las Redes Bayesianas, pro-

gramación con las QT,

perfeccionamiento de C++, desarrollo

en Java y mil cosas más.

EL

AU

TO

R

Si se encuentra repitiendo tareascomplejas que se realizan paso apaso en OpenOffice [1], podría

ser hora de crear una macro. OpenOfficesoporta una gran variedad de opcionesde programación. La versión 1.1 pre-sentó el concepto de puentes, que per-mite a los usuarios añadir su propiocódigo en C, C++, Java o Python. En laversión 2.0, que está a punto de salir deun momento a otro, el paquete básico deOpenOffice soportará también la Interfazde Lenguaje Común (CLI), que permite alos usuarios añadir sus propios progra-mas en Javascript y C#. De todos loslenguajes que se pueden usar en

OpenOffice, quizás el Basic sea la opciónmás sencilla. Este artículo describe comoempezar con la creación de macros enBasic.

EmpecemosLa programación en Basic comienza en elmenú Tools | Macros, que tiene dosentradas: Record macro, grabación de unamacro a través de un uso interactivo yMacro…, que abre una ventana nueva(Figura 1).

La ventana ayuda a organizar lasmacros que acompañan a la distribuciónOpenOffice y que permite manejar lasmacros propias.

Los programas Basic se asignan a unmódulo y a una biblioteca, que pordefecto son Module1 y Standard. Unmódulo nuevo contendrá el métodoMain, que es básicamente un marco detrabajo vacío sin ningún código (tan solocontiene algunos comentarios con REM).Pulsando en Edit aparece el editor ymuestra el marco de trabajo de la función(Figura 2).

Ahora se pueden usar todas las carac-terísticas del Basic. Seleccionando Help |Contents se muestra la ayuda de Basicque tiene OpenOffice con una lista de fun-ciones (Macros and Programing | Com-

mands | Alphabetical list …).

51

Macros OpenOffice• PRÁCTICO

51Número 06W W W . L I N U X - M A G A Z I N E . E S

Creación de Macros en Basic en OpenOffice

MACROMÁTICA

El paquete de ofimática OpenOffice puede usar un amplio abanico de scripts y macros para automatizar ta-

reas repetitivas. La solución más sencilla es usar el dialecto Basic que tiene integrado. Este artículo ayuda a

empezar a programar con este lenguaje sorprendentemente sofisticado. POR OLIVER FROMMEL

www.photocase.de

La palabra reser-vada Sub designauna función, quese llama Main

en este caso. Enrealidad,OpenOffice no seinteresa porlos nombres yempieza aanalizar el códigoa partir de laprimera funciónque se encuentraen el módulo de la macro. Output es unacadena que contiene una parte constante,“Son las “ y la salida de la funciónTime(), que proporciona la hora del día.El operador & concatena estas partes paraobtener una única cadena de caracteres.Se puede dejar fuera los paréntesis de lafunción Time, no afecta a la salida.

Por último, la función MsgBox muestraun cuadro de diálogo. El primerparámetro es el texto que se quiere que semuestre y el segundo define el tipo de laventana del cuadro de diálogo. El 0 eneste ejemplo significa que el cuadro dediálogo sólo contendrá un botón de“Aceptar”. Un 1 adicionalmente mostraríaun botón de “Cancelar” y hay otras va-riantes con botones de Si/No y otras com-binaciones. MsgBox también devuelve unvalor que indica que botón ha pulsado elusuario. En nuestro ejemplo no se hahecho nada en concreto con este valor.

Este DocumentoHacen falta algo más que las funciones deBasic si lo que se quiere es acceder a losdocumentos de OpenOffice, lo queimplica acceder a los objetos e interfacesUNO (véase el Cuadro 1). El punto deacceso a esta jerarquía de objetos es This-

Document, una palabra reservada quehace referencia al documento en el que seestá ejecutando el script. Éste puede serun documento de texto, una hoja de cál-culo o incluso un dibujo. ThisDocument

es el objeto padre que proporciona losmétodos para navegar por el árbol deldocumento.

Pero antes de hacer esto, vamos adeclarar algunas variables. De nuevo, estoes opcional y no es muy difícil. La palabrareservada Dim nos ayudará a hacerlo. Elnúmero de elementos en una lista (array)hay que ponerlo entre paréntesis (10). Ellenguaje Basic usa este sistema a diferen-

cia de otros lenguajes de programación: elparámetro no hace referencia al númerode objetos sino al índice más alto. Asípues, List(10) proporciona una lista de 11elementos, desde List(0) hasta List(10).Las variables en Basic no se diferenciancon mayúsculas y minúsculas, es decir,que Mi_Variable es la misma variable quemi_variable.

El script tiene que comprobar si se estáejecutando dentro de un documentoOpenOffice. Para ello, se usa el métodosupportsService() de la referencia del do-cumento:

oDoc = ThisComponent U

If oDoc.supportsService U

("com.sun.star. U

text.TextDocument") Then

Además de este método, el objeto del do-cumento también tiene una funcióninteresante getText(). La función no pro-porciona el texto del documento, sino unareferencia a un servicio de texto que con-tiene varios métodos, incluido métodospara mover el cursor a través del texto(por ejemplo createTextCursor).

El servicio de texto tiene otra funciónllamada createEnumeration(), que enu-mera los párrafos en el documento, peroaun no nos proporciona el texto. Por elcontrario, un párrafo tiene unas 150propiedades que describen de forma pre-cisa el estilo.

Se puede acceder al texto normal de unpárrafo llamando a createEnumeration(). Siel documento contiene una tabla, OpenOf-fice generará un mensaje de error en estepunto porque createEnumeration no puedereconocer elementos tabla. Hay que añadiren este caso control de excepciones.

El método String() proporciona el textode un elemento. El lenguaje Basic usapara los bucles una construcción que

A continuación vamos a escribir losiguiente en el marco de trabajo:

Sub Main

Output = "Son las " &

Time()

MsgBox Output, 0

End Sub

PRÁCTICO • Macros OpenOffice

52 Número 06 W W W . L I N U X - M A G A Z I N E . E S

OpenOffice trae soporte directo para

Basic, eliminando la necesidad de inter-

faces externas. El lenguaje Basic por sí

mismo no es exactamente difícil, pero

necesitará algunas de las avanzadas ca-

racterísticas de Basic para trabajar con la

compleja arquitectura de OpenOffice.

OpenOffice tiene una interfaz de progra-

mación de lenguaje independiente

denominada UNO (Universal Network

Objects). UNO sigue el paradigma actual

para el diseño de software (con soporte

para los denominados patrones de di-

seño [2], servicios e interfaces). La carga

del programador [3] y la documentación

de las API [4] dan testimonio de la

importancia de UNO en la programación

de OpenOffice.

OpenOffice Basic no soporta el rango

completo de características de UNO, ya

que el propio lenguaje Basic es bastante

simple. Por ejemplo, Basic no soporta

tipos complejos de datos, como tablas

hash, que asignan valores a palabras

claves. Esta carencia de tablas hash hace

difícil programar lo que en un principio

pensé que podría ser un ejemplo sen-

cillo: un script que contara el número de

apariciones de una palabra en el texto.

Una tabla hash (o array asociativo) con

la palabra de búsqueda como clave sería

una solución ideal para este ejemplo.

Pero esto nos llevaría a un montón de

programación extra en OpenOffice

Basic. De hecho, tendría que implemen-

tar mi propia tabla hash, que va más allá

del objetivo de este artículo.

A diferencia de OpenOffice Basic, el

interfaz general de UNO está orientado a

objetos. Este contraste nos lleva a algu-

nas peculiaridades: por ejemplo,

algunos métodos se le aplican directa-

mente a las propiedades. Dicho de otro

modo, un programador no necesita lla-

mar a una función como circle.radius()

ya que puede usar directamente el atri-

buto circle.radius. Esto ocasiona algunas

confusiones en la práctica, ya que se

pueden usar ambas notaciones.

Cuadro 1: UNOComplicado, Basic Simple

Figura 1: La ventana de administración de macros de OpenOffice Basic.

empieza con Do y termina con Loop paraanalizar las enumeraciones. La condiciónde salida puede seguir a cualquiera deestas palabras. Si la salida aparece al finaldel bucle, el script recorrerá el bucle almenos una vez.

Nuestra macro de ejemplo escribe eltexto que analizamos usando este métodoa un fichero. El nombre del fichero seespecifica por la variable Filename. Loraro es tener que usar un número paraabrir el fichero; una llamada a Freefile()

proporciona ese número. Ahora se puedepasar el número del fichero y el nombre aOpen() para abrir el fichero y escribir:

Open Filename For Output U

As #FileNo

El comando Print con el número delfichero como primer parámetro permiteañadir líneas al fichero: Print #FileNo

String. Sin el número del fichero, OpenOf-fice abre un cuadro de diálogo cuando sellama a Print. Después de añadir laslíneas, hay que cerrar el fichero. Una lla-mada a Close con el número del ficherocomo argumento se encarga de ello. El lis-tado 1 muestra la macro completa.

Para ejecutar el script, hay que hacerclick con el botón derecho del ratón en ellado izquierdo en la segunda línea (véasela Figura 2). Este botón ejecuta el scriptpara el documento actual. Si OpenOfficeencuentra algún error de sintaxis, inmedi-atamente informa del error ejecutando elscript y mostrando el error en un cuadro

de diálogo. Desafortunadamente, losmensajes de error son bastante genéricosy no son bastante útiles a la hora deresolver los problemas (por ejemplo,“Object variable not assigned”). Un“generic error” sucede si se intenta ejecu-tar el script mientras la ventana de laayuda es el documento actual.

El botón con las llaves permite ejecutarel código paso a paso. Se puede selec-cionar el nombre de una variable y luegopulsar el botón con las gafas para ver elvalor de la variable en el campo Watch enla esquina inferior izquierda de la ven-tana. De nuevo se aplican las restric-ciones mencionadas previamente.

ConclusiónEl interfaz UNO para OpenOffice propor-ciona a los autores de scripts una he-rramienta potente de programación paralas aplicaciones ofimáticas. Pero la pro-gramación de OpenOffice no es unaexperiencia tan intuitiva como cabríaesperar. El sistema es tan complejo comoCORBA [6] o J2EE [7] y suponeconocimientos de conceptos modernoscomo arquitectura de componentes ypatrones de diseño.

Las habilidades previas necesarias paraprogramar macros en OpenOffice colocala tarea más allá del alcance de unusuario final y más bien en el área de losprogramadores aficionados o profesio-nales, quienes, con las habilidades nece-sarias, encontrarán todo un mundo porexplorar. �

Macros OpenOffice• PRÁCTICO

53Número 06W W W . L I N U X - M A G A Z I N E . E S

01 Sub Main

02 Dim oDoc As Object

03

04 Filename =

"/home/oliver/output.txt"

05

06 oDoc = ThisComponent

07 title$ =

oDoc.DocumentInfo.Title

08

09 If

oDoc.supportsService("com.sun.

star.text.TextDocument") Then

10 FileNo = Freefile()

11 Open Filename For Output As

#FileNo

12

13 oText = oDoc.getText()

14 oParagraphs =

oText.createEnumeration()

15

16 Do While

oParagraphs.hasMoreElements()

17 oPar =

oParagraphs.nextElement()

18 oTexts =

oPar.createEnumeration()

19 Do While

oTexts.hasMoreElements()

20 oText = oTexts.nextElement()

21 Print #FileNo oText.string

22 If oText.string ="" Then

23 Print #FileNo

24 Endif

25 Loop

26 Loop

27 Endif ' If

oDoc.supportsService(..)

28 Close #FileNo

29 End Sub

Listado 1: Exportador Simple de Texto

[1] OpenOffice: http://www.OpenOffice.

org

[2] Patrones de Diseño: http://en.

wikipedia.org/wiki/

Design_pattern_%28computer_scienc

e%29

[3] Guía para Desarrolladores: http://api.

OpenOffice.org/docs/

DevelopersGuide/DevelopersGuide.

htm

[4] Referencias para UNO: http://api.

OpenOffice.org/docs/common/ref/

com/sun/star/moduleix.html

[5] Tutorial de Starbasic de Sun: ftp://

docs-pdf.sun.com/817-3924/817-3924.

pdf

[6] CORBA: http://www.corba.org

[7] J2EE: http://java.sun.com/j2ee

RECURSOS

Figura 2: Cuando se crea una nueva macro, OpenOffice genera una función Main vacía, como se

muestra en el editor integrado.

DESARROLLO • Perl

54 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Dicho esto, las herramientas de fuente

abierta todavía están muy en la linea de

Quicken y Microsoft Money e implican

una gran cantidad de esfuerzo y disci-

plina.

Los contables amateur normalmente

no tienen tiempo para rellenar tantas

entradas detalladas, sin mencionar la

compleja instalación que necesita Gnu-

cash. En otras palabras, ésta no es una

En contra de la opinión popular, la

gente rica no es más desafortu-

nada que la gente que no tiene ni

un duro (perdón, ni un euro). Se podrán

escuchar los suspiros de alivio, induci-

dos por la miseria, por todo el país, al

irse los miedos a la abundancia. Y por

primera vez en años la gente volverá a

atreverse a comprobar su estado

financiero. Continúe leyendo para des-

cubrir como.

A excepción de algunos excéntricos

que prefieren apiñar sus riquezas bajo

alguna loseta de sus villas, hay cada vez

más gente que está volviendo a progra-

mas tales como Gnucash para manejar

sus cuentas y depósitos. Los programas

de gestión de cuentas ayudan a poner

sus cuentas en orden, dándole un for-

mato pulcro e incluso con gráficos.

Un visor extensible para sus finanzas personales

BALANCE FINAL

Un útil guión en Perl que le permite una visión inmediata de su estado financiero, incluyendo los balances de

múltiples cuentas y las inversiones en bolsa. Incluso permite al usuario incluir sus propios módulos enchufa-

bles. POR MICHAEL SCHILLI

01 #!/usr/bin/perl -w

02 #############################

03 # C o n t a d o r d e j u d í a s -

Interprete

04 # Contabilidad Monetaria

05 # Mike Schilli, 2004

06 # ([email protected])

07 #############################

08 use strict;

09

10 use lib

11'/en/algún/lugar/de/Modulandia';

12

13 use Log::Log4perl qw(:easy);

14 Log::Log4perl->easy_init(

15 $ERROR);

16

17 use Plugger;

18 my $string = join '', <>;

19

20 my $plugger = Plugger->new();

21 $plugger->init();

22 $plugger->parse($string);

Listado 1: Contador de judías

ww

w.s

xc.h

u

Perl • DESARROLLO

55Número 06W W W . L I N U X - M A G A Z I N E . E S

La clave account define una nueva

cuenta (account). Un deposito en

acciones comienza con stock y cash

(efectivo) es… bueno, está bastante

claro ¿no? El guión beancounter del Lis-

tado 1 es el intérprete de estos datos

financieros. Analiza las definiciones de

las cuentas, averigua el precio de las

acciones y añade las perdidas y ganan-

cias para ofrecer un estado financiero.

Tecleando beancounter money en la

linea de ordenes se ejecutará el guión,

pero hay una forma más fácil. Haciendo

que el archivo de configuración money

sea ejecutable y añadiendo la línea she-

bang: #!. En otras palabras money uti-

liza como intérprete beancounter en vez

de perl.

Si en vez de utilizar una hiper-mo-

derna shell Zsh, se usa la antigua Bash,

no se podrá añadir el guión a la linea

she-bang. En vez de eso, hará falta un

envoltorio C, que es precisamente lo que

ofrece el siguiente programa en C, bean-

count.c:

main(int argc, char **argv) {

execv("/usr/bin/U

beancounter", argv); }

A continuación se compila beancount.c

de la siguiente manera:

cc -o beancount beancount.c

Esto permite usar el ejecutable bean-

count como el interprete para los datos

financieros en la she-bang:

#!/usr/bin/beancount

account Barclays

################################

# ticker shares at

stock VOD.L 10 120.17

# ...

Si el archivo con este código, money, es

ejecutable, sólo hay que teclear money,

para lanzar el contador de dinero.

Aunque parezca un archivo de configu-

ración, realmente se ha obtenido un

guión ejecutable. La Figura 2 muestra el

resultado ¡Práctico!

Ampliando con PluginsEl interprete del Listado 1 es bastante

escaso: Crea una instancia de un objeto

del tipo Plugger, llama a init() para ini-

cializar la arquitectura subyacente para

el plugin y pasa el archivo de configu-

ración, que previamente se lee desde la

entrada estándar usando < >, al

método del plugin del sistema parse().

La estructura plugger en el Listado 2

interpreta la primera palabra de cada

linea como una orden. Pero sin los plu-

gins no es capaz de interpretar nada. De

hecho, todo lo que hace es ignorar las

lineas del archivo money que están

comentadas, es decir, todas las que

comienzan con #.

Automáticamente plugger.pm analiza

cualquier modulo que se añada al direc-

torio Plugger/ durante la compilación.

La línea 7 tira del modulo de CPAN Mo-

dule::Pluggable [2], que maneja todo

esto. Las lineas 8 y 9 establecen al indi-

cador require y establecen la ruta de

búsqueda a los plugins relativa al direc-

torio actual o a la ruta @INC.

Estos Plugins no tienen un constructor

new(), en contraste con la típica aproxi-

mación orientada a objetos, pero si una

función init(), que es invocada por Plug-

ger.pm, el maestro de todos los plugins,

para cada uno de los módulos plugin

que encuentre. Module::Pluggable

añadirá el método plugins() automática-

mente a su anfitrión, la clase Plugger.

Así, plugins() devolverá una lista con

los nombres de todos los plugins descu-

biertos. Las lineas 31 y 32 usan este

mecanismo para iterar por la lista com-

pleta de plugins con la función init().

Para permitir que un plugin conozca a

su invocador y ejecutar el método del

invocador, se necesita que Plugger.rpm

pase una referencia de $ctx (contexto) al

método init() de cada plugin. Esto es

simplemente una referencia al único

objeto existente de Plugger, el gestor del

plugin. Esta referencia permite a un plu-

gin publicar instrucciones al gestor Plug-

ger. Como Plugger interpreta las ordenes

en una archivo de configuración, el plu-

gin llama al método de gestión

register_cmd() para registrar nuevas

ordenes.

Asistente de ArgumentosEl listado 3 ofrece un ejemplo de plugin

en el directorio Plugger/: Account.pm

utiliza el mecanismo register_cmd()

recién descrito, para enseñar al gestor

de plugin la orden account:

$ctx->register_cmd("account",

\&start, \&process,U

herramienta fácil ni fácilmente amplia-

ble. En contraste con esto, el guión en

Perl que presentamos este mes está di-

señado para el resto de personas, que

prefieren no gastar más de diez minutos

al mes actualizando los balances ban-

carios pero que a pesar de eso les gusta

comprobar el valor de sus inversiones

diariamente.

El sistema permite ampliaciones a

bases de módulos enchufables(plugins),

permitiendo a los usuarios aplicar esce-

narios de cambio de divisas o de los

impuestos a tener en cuenta y facilitar la

adaptación sin tener que caminar sin

rumbo a través de los menús de compli-

cados programas.

Es muy fácil sobre-dimensionar las

cosas. Por ejemplo, no tiene sentido

desarrollar un módulo para el frac-

cionamiento de acciones, que solo ocurre

una vez cada pocos años; unos cuantos

pasos manuales son suficientes para ges-

tionar el fraccionamiento (en otras pa-

labras, no se puede contentar a todo el

mundo). El guión beancounter intenta

encontrar la cueva del tesoro. Tiene la

funcionalidad básica que permite a los

usuarios una suma total de múltiples

cuentas y valores bursátiles, pero deja

suficiente margen para que los usuarios

gestionen sus propios requisitos.

Guión InterpretadoLos usuarios pueden definir los datos de

sus cuentas en un archivo llamado

money, como se muestra en la Figura 1.

Figura 1: Un archivo de configuración define

los detalles de la cuenta del titular. Al mismo

tiempo, el archivo es un guión ejecutable.

\&finish);

Dentro de los limites de la estructura,

este forro doble le indica al interprete la

palabra clave account en el archivo de

configuración. Plugger puede llamar a la

función process() en

Plugger/Account.pm pasarle los elemen-

tos fraccionados de la linea de configu-

ración como argumentos. Plugger.pm

también llama a la función start()

mostrada en el Listado 3, linea 21, antes

de comenzar a interpretar el archivo de

configuración y acaba llamando a la

función finish() (linea 84).

El plugin contable hace uso de este

mecanismo para fijar el valor total para

todas las cuentas definidas, que se alma-

cena en la variable global account_total,

a cero antes de comenzar a analizar.

Aún es necesario decidir donde definir

un contador de esta clase, al que

Account.pm y otros plugins necesitan

tener acceso. El módulo Plugger.pm crea

un hash llamado

%MEM para este

propósito. El módulo

pasa una referencia

al hash %MEM a

cualquier cosa que

utilice la función

mem() en la línea 36

para preguntar por

una referencia. Por

ejemplo, un plugin

tal como Account.pm

puede hacer lo si-

guiente:

$ctx->mem()->U

{account_total} = 0;

para fijar una variable para que otros

plugins con una referencia al gestor de

plugin Plugger puedan tener acceso,

gracias a $ctx. De hecho, esta técnica

demuestra cómo los plugins

Account.pm y Position.pm pasan infor-

mación: Primero Account.pm pone

account_total a cero. Position.pm, que

es utilizado por cada definición de stock

o de cash, evalúa esto y lo agrega a

account_total.

Un Poco de ColorSupongamos que quisiéramos que

Account.pm mostrara la línea superior y

el balance de una cuenta en azul y en

DESARROLLO • Perl

56 Número 06 W W W . L I N U X - M A G A Z I N E . E S

01 #############################

02 package Plugger;

03 #############################

04 use strict;

05 use warnings;

06

07 use Module::Pluggable

08 require => 1,

09 search_path =>

10 [qw(Plugger)];

11

12 our %DISPATCH = ();

13 our %MEM = ();

14

15 #############################

16 sub new {

17 #############################

18 my ($class) = @_;

19

20 bless

21 my $self = {}, $class;

22

23 return $self;

24 }

25

26 #############################

27 sub init {

28 #############################

29 my ($self) = @_;

30

31 $_->init($self)

32 for $self->plugins();

33 }

34

35 #############################

36 sub mem { return \%MEM; }

37 #############################

38

39 #############################

40 sub parse {

41 #############################

42 my ($self, $string) = @_;

43

44 for (sort keys %DISPATCH) {

45 $DISPATCH{$_}->{start}

46 ->($self)

47 if $DISPATCH{$_}

48 ->{start};

49 }

50

51 for (split /\n/, $string) {

52

53 s/#.*//;

54 next if /^\s*$/;

55 last if /^__END__/;

56 chomp;

57

58 my ($cmd, @args) =

59 split ' ', $_;

60

61 die

62 "Instrucción desconocida:

$cmd"

63 unless

64 exists $DISPATCH{$cmd};

65

66 $DISPATCH{$cmd}

67 ->{process}

68 ->($self, $cmd, @args);

69 }

70

71 for (sort keys %DISPATCH) {

72 $DISPATCH{$_}->{finish}

73 ->($self)

74 if $DISPATCH{$_}

75 ->{finish};

76 }

77 }

78

79 #############################

80 sub register_cmd {

81 #############################

82 my ($self, $cmd, $start,

83 $process, $finish)

84 = @_;

85

86 $DISPATCH{$cmd} = {

87 start => $start,

88 process => $process,

89 finish => $finish,

90 };

91 }

92

93 1;

Listado 2: Plugger.rpm

Figura 2: El contador de dinero beanconteren acción. Llamando al

guión desde la linea de ordenes se obtiene un resumen a todo

color de las cuentas y el balance del estado financiero.

negrita. El módulo de CPAN

Term::ANSIColor maneja esto bastante

bien. Agregando una etiqueta :constants

a la directiva use se exportan las cons-

tantes del los atributos del texto, tales

como BLUE, BOLD y RESET (volver a los

tipos estándar) al espacio de nombres

del guión llamado. Esto permite que se

publiquen directivas print como por

ejemplo

print BLUE, BOLD,

"In blue and bold!",U

RESET;

a la salida secuencial ANSI mostrará el

texto en azul y negrita en la terminal

actual antes de llamar a RESET para

volver al tipo normal para las siguientes

directivas de impresión.

Precios de Acciones enLíneaEl plugin Position del Listado 4 recupera

los precios actuales de las acciones (con

un retraso de 20 minutos) desde la

página Yahoo financial utilizando otro

modulo del CPAN,

Finance::YahooQuote. Una función

exportada, getonequote() obtiene el sím-

bolo del ticker por ejemplo ITX.MC para

las acciones de Inditex en el IBEX 35 de

Madrid, o PIXR para Pixar en el Nasdaq

de Nueva York. Hay una lista con los

símbolos de los ticker del mercado

español en [3].

Ya que beancounter puede necesitar

los mismos precios de acciones varias

veces, Position almacena el precio en

una cache durante 10 minutos. El mo-

dulo de CPAN Cache::Cache tiene una

interfaz sumamente fácil, con set(), que

establece una entrada de cache y get(),

Perl • DESARROLLO

57Número 06W W W . L I N U X - M A G A Z I N E . E S

001 #############################

002 package Plugger::Account;

003 #############################

004 use strict;

005 use warnings;

006 use Term::ANSIColor

007 qw(:constants);

008

009 #############################

010 sub init {

011 #############################

012 my ($class, $ctx) = @_;

013

014 $ctx->register_cmd(

015 "account", \&start,

016 \&process, \&finish

017 );

018 }

019

020 #############################

021 sub start {

022 #############################

023 my ($ctx) = @_;

024

025 $ctx->mem()

026 ->{account_total} = 0;

027 }

028

029 #############################

030 sub account_start {

031 #############################

032 my ($ctx, $name) = @_;

033

034 print BOLD, BLUE,

035 "Account: $name\n",

036 RESET;

037

038 $ctx->mem()

039 ->{account_subtotal} = 0;

040 $ctx->mem()

041 ->{account_current} =

042 $name;

043 }

044

045 #############################

046 sub account_end {

047 #############################

048 my ($ctx, $name) = @_;

049

050 print BOLD, BLUE;

051 printf "%-47s %9.2f\n\n",

052 "Subtotal:", $ctx->mem()

053 ->{account_subtotal};

054 print RESET;

055 }

056

057 #############################

058 sub account_end_all {

059 #############################

060 my ($ctx) = @_;

061

062 print BOLD, BLUE;

063 printf "%-47s %9.2f\n\n",

064 "Total:", $ctx->mem()

065 ->{account_total};

066 print RESET;

067 }

068

069 #############################

070 sub process {

071 #############################

072 my ($ctx, @args) = @_;

073

074 my $c =

075 $ctx->mem()

076 ->{account_current};

077 account_end($ctx, $c)

078 if $c;

079 account_start($ctx,

080 $args[1]);

081 }

082

083 #############################

084 sub finish {

085 #############################

086 my ($ctx) = @_;

087

088 my $c =

089 $ctx->mem()

090 ->{account_current};

091 account_end($ctx, $c)

092 if $c;

093 account_end_all($ctx);

094 }

095

096 #############################

097 sub position {

098 #############################

099 my (

100 $type, $ticker,

101 $n, $at,

102 $price, $value,

103 $gain

104 )

105 = @_;

106

107 unless (defined $ticker) {

108 printf "%-47s %9.2f\n",

109 $type, $value;

110 return;

111 }

112

113 my $clr =

114 $gain > 0 ? GREEN: RED;

115

116 printf

117 "%-8s %-10s %9.3f %9.3f"

118 . " %7.2f %9.2f"

119 . " %s(%+9.2f)%s\n",

120 $type, $ticker, $n, $at,

121 $price, $value, $clr,

122 $gain, RESET;

123 }

124

125 1;

Listado 3: Account.pm

rales sin colisionar con otras aplica-

ciones. Los usuario simplemente llaman

a $cache->set() y $cache->get().

Hombre Rico, HombrePobrePor supuesto que beancounter está total-

mente sobre-diseñado para ser una sim-

ple herramienta de estado de cuentas. Es

obvio que se trata de un trabajo de

astronautas de la arquitectura; gracias a

Joel Spolsky por dar en el clavo en [4].

La estructura del plugger realmente

recupera su sentido cuando se necesita

agregar una funcionalidad específica del

usuario sin modificar el código original.

El plugin Plugger/TaxedPosition.pm

del Listado 5 es un buen un ejemplo.

Plugger/TaxedPosition.pm resta el 50 por

ciento de impuestos de (los posibles)

beneficios definido por txstock. Este

modo de “Sueño de isla desierta” ofrece

una línea de balance que indica el resul-

tado de vender las acciones y pagar

unos impuestos del 50 por ciento. Taxed-

Position no restará nada si la inversión

se perdió, sino que ofrecerá el valor

nominal de las acciones después de li-

quidar las perdidas.

Dependiendo del escenario, los usua-

rios pueden escribir nuevos plugins para

nuevas palabras clave, añadiéndolos a la

estructura y modificando el sistema.

Mientras que TaxedPosition.pm se refiera

a la función price() definida en Posi-

tion.pm, tiene sentido utilizar una heren-

cia o un mecanismo de interfaz para

enlazar TaxedPosition.pm y Position.pm.

que obtiene la entrada de la cache poste-

riormente. La implementación incluye

una cache en memoria llamada

Cache::MemoryCache y Cache::FileCache

una cache persistente basada en

archivo. El plugin Position.pm la utiliza

del siguiente modo

my $cache = Cache::U

FileCache->new(

{ namespace =>U

'Beancount',

default_expires_in U

=> 600,

});

para crear un objeto en la cache y mane-

jar todos los detalles, como un almace-

namiento eficiente en archivos tempo-

DESARROLLO • Perl

58 Número 06 W W W . L I N U X - M A G A Z I N E . E S

001 #############################

002 package Plugger::Position;

003 #############################

004 use strict;

005 use warnings;

006 use Log::Log4perl qw(:easy);

007 use Finance::YahooQuote;

008 use Term::ANSIColor;

009

010 #############################

011 sub init {

012 #############################

013 my ($class, $ctx) = @_;

014

015 DEBUG "Registering @_";

016

017 $ctx->register_cmd(

018 "stock", undef,

019 \&process, undef

020 );

021 $ctx->register_cmd("cash",

022 undef, \&process_cash,

023 undef);

024 }

025

026 #############################

027 sub process {

028 #############################

029 my ($ctx, $cmd, @args) =

030 @_;

031

032 my $value =

033 price($args[0]) *

034 $args[1];

035 my $gain =

036 $value - $args[2] *

037 $args[1];

038

039 Plugger::Account::position(

040 ucfirst($cmd),

041 @args[ 0 .. 2 ],

042 price($args[0]),

043 $value,

044 $gain

045 );

046

047 my $mem = $ctx->mem();

048 $mem->{account_subtotal} +=

049 $value;

050 $mem->{account_total} +=

051 $value;

052 }

053

054 #############################

055 sub process_cash {

056 #############################

057 my ($ctx, $cmd, @args) =

058 @_;

059

060 my $mem = $ctx->mem();

061 $mem->{account_subtotal} +=

062 $args[0];

063 $mem->{account_total} +=

064 $args[0];

065

066 Plugger::Account::position(

067 ucfirst($cmd),

068 (undef) x 4,

069 $args[0], undef);

070 }

071

072 use Cache::FileCache;

073

074 my $cache =

075 Cache::FileCache->new(

076 {

077 namespace => 'Beancount',

078 default_expires_in =>

079 600,

080 }

081 );

082

083 #############################

084 sub price {

085 #############################

086 my ($stock) = @_;

087

088 DEBUG

089 "Fetching $stock quote";

090

091 my $cached =

092 $cache->get($stock);

093

094 if (defined $cached) {

095 DEBUG "Cached: $cached";

096 return $cached;

097 }

098

099 my @quote =

100 getonequote $stock;

101

102 die "$stock failed"

103 unless @quote;

104 $cache->set($stock,

105 $quote[2]);

106

107 return $quote[2];

108 }

109

110 1;

Listado 4: Position.pm

Puesto que la estructura del plugger no

tiene clases, TaxedPosition.pm en la línea

10 del listado 5 simplemente define un

gestor AUTOLOAD que canaliza las lla-

madas desde funciones desconocidas a

Position.pm.

Para facilitar la salida de pantalla y

asegurar la manejabilidad, el plugin

Position.pm gestiona todas las salidas

por pantalla. La función position()

espera los datos para un elemento de

salida: tipo, símbolo del ticker, número,

precio de compra, precio actual, valor

total actual, pérdidas y ganancias, pro-

porcionando la salida cuidadosamente

ajustada a formato de los resultados. Las

entradas de efectivo solamente necesi-

tan las columnas de la izquierda y la

derecha.

Sus propios plugins deberían utilizar

el método de posición de

Plugger::Account que “imprime” igual

que TaxedPosition.pm. La función

price() en Position.pm también debería

ser útil para sus propios plugins.

InstalaciónEs necesario que tanto el guión bean-

counter como el envoltorio de C compi-

lado beancount se guarden en /usr/bin y

deben ser ejecutables. Plugger.pm (Lis-

tado 2) y todos los plugins bajo /Plugger

deben estar en una de las rutas @INC de

su entorno Perl. Si no es así se puede

utilizar una linea como esta

use lib '/home/mschilli/U

perl-modules';

en el guión Perl beancounter para pu-

blicar la ruta, suponiendo que Plugger y

compañía se encuentran en el directorio

indicado aquí. Los módulos

Module::Pluggable, Finance::YahooQuote

y Term::ANSIColor están disponibles en

CPAN y la mejor forma de instalarlos es

usando la propia shell de CPAN. Tras

haber hecho esto ¡Nada impedirá que

Perl dirija nuestras finanzas! �

Perl • DESARROLLO

59Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] Listados: http://www.linux-magazine.

es/Magazine/Downloads/06/

[2] Tutorial sobre Module::Pluggable:

http://www.perladvent.org/2004/6th

[3] Simbolos (Ticker)para las acciones

españolas: http://es.finance.yahoo.

com/q/cq?d=v1&s=%40mce.mc

[4] Artículo de Joel Spolsky, “Don’t let

Architecture Astronauts scare you”:

http://www.joelonsoftware.com/

articles/fog0000000018.html

RECURSOS

01 #############################

02 package

03 Plugger::TaxedPosition;

04 #############################

05 use strict;

06 use warnings;

07 use Log::Log4perl qw(:easy);

08

09 #############################

10 sub AUTOLOAD {

11 #############################

12 no strict qw(vars refs);

13

14 (my $func = $AUTOLOAD) =~

15 s/.*::/Plugger::Position::/;

16 $func->(@_);

17 }

18

19 #############################

20 sub init {

21 #############################

22 my ($class, $ctx) = @_;

23

24 $ctx->register_cmd(

25 "txstock", undef,

26 \&process, undef

27 );

28 }

29

30 #############################

31 sub process {

32 #############################

33 my ($ctx, $cmd, @args) =

34 @_;

35

36 my $value =

37 price($args[0]) *

38 $args[1];

39 my $gain =

40 $value - $args[2] *

41 $args[1];

42

43 my $tax = $gain / 2;

44

45 $value -= $tax

46 if $gain > 0;

47 $gain -= $tax if $gain > 0;

48

49 Plugger::Account::position(

50 ucfirst($cmd),

51 @args[ 0 .. 2 ],

52 price($args[0]),

53 $value,

54 $gain

55 );

56

57 my $mem = $ctx->mem();

58 $mem->{account_subtotal} +=

59 $value;

60 $mem->{account_total} +=

61 $value;

62 }

63

64 1;

Listado 5: TaxedPosition.pm

Figura 3: El gestor de plugin Plugger.pm utiliza Module::Pluggable para analizar los plugins

que están bajo Plugger:: y llama a sus funciones init(). Entonces los plugins llaman a regis-

ter_cmd() a su vez para registrar la orden con el método de llamada.acción. Llamando al guión

desde la linea de ordenes se obtiene un resumen a todo color de las cuentas y el balance del

estado financiero.

DESARROLLO • Python

60 Número 06 W W W . L I N U X - M A G A Z I N E . E S

una serie de ejemplos, desarrollados en

Python, llegaremos a crear nuestras

propias escenas de visualización.

InstalaciónPara poder realizar todas las pruebas que

se van sugiriendo y las que se os ocu-

rran, es necesario tener instalado Python

y VTK con soporte para Python. Además

la tarjeta gráfica de nuestro ordenador

debe tener OpenGL funcionando.

Hay dos maneras de conseguir instalar

VTK: la primera es descargar los binarios

para nuestro sistema. En el caso de SuSE,

Red Hat (Fedora) ó Mandrake nos bastará

con buscar los siguientes paquetes rpm,

por ejemplo para Mandrake 10.1:

vtk-4.2.2-5mdk.i586.rpm vtk-python-

4.2.2-5mdk.i586.rpm vtk-tcl-4.2.2-

5mdk.i586.rpm vtk-examples-4.2.2-

5mdk.i586.rpm vtk-devel-4.2.2-

5mdk.i586.rpm

Estos paquetes los podemos bajar, por

ejemplo para Mandrake 10.1, desde

RedIris en [1]:

La otra manera es instalarlo a partir

del código fuente,que se explica en el

Cuadro 1.

Modelos de Objetos VTKPara los inexpertos en el mundo de la

visualización, vamos a explicar de un

modo sencillo la estructura de VTK;

porque esto permite que comprendamos

mejor cada uno de los pasos que iremos

realizando. Por un momento, imaginad

que estáis en la butaca del cine, viendo

una película de animación, como por

ejemplo “La Edad de Hielo”. Si nos cen-

tramos en una única escena y la describi-

mos, vemos personajes animados

(actores), luces de diferentes tonali-

dades, cámaras que modifican el punto

de vista, propiedades de los personajes

(color, forma, etc.). Aunque no lo creáis

todos estos conceptos son la base de la

visualización gráfica. Veamos dicha

estructura.

El toolkit de visualización VTK está

diseñado a partir de dos modelos clara-

mente diferenciables: el modelo gráfico y

el modelo de visualización.

• Modelo gráfico. El modelo grá-

fico captura las principales ca-

racterísticas de un sistema grá-

fico 3D, de un modo fácil de

entender y usar (ver Figura 1).

La representación gráfica en 3D

ofrece la posibilidad de crear

mundos virtuales en un orde-

nador, lo cual unido a la visualización

permite al usuario explorar y entender,

rápidamente, sistemas complicados. Esto

es posible gracias al avance de lenguajes

orientados a objetos, que ofrecen la posi-

bilidad de crear software de mejor cali-

dad y más fácil de mantener.

Entre las diferentes herramientas de

visualización, representación 3D y

procesamiento de imágenes, cabe

destacar VTK (Visualization Toolkit),

código abierto cuyo núcleo está imple-

mentado en C++ y que soporta

envolturas (“wrappers”) para TCL,

Python y Java; permitiendo el desarrollo

de aplicaciones complejas de un modo

eficiente y mediante scripts sencillos. Por

todo ello, VTK se emplea en la visua-

lización médica, la visualización indus-

trial, reconstrucción de superficies a par-

tir de digitalización láser o nubes de

puntos desorganizados, etc.

En lo que sigue veremos los conceptos

básicos en los que se basa VTK para

poder generar una escena y, mediante

Visualización 3D con VTK (Visualization Toolkit)

GRÁFICAS 3DVisualización 3D con VTK (Visualization Toolkit)

GRÁFICAS 3D

Hoy por hoy, la representación gráfica 3D y su visualización forman parte de nuestra vida cotidiana; basta

fijarse en el mundo del entretenimiento, en la industria del juego y en el soporte de hardware y software para

tales fines. ¿Quién en su ordenador personal no ha instalado un juego, visto una película, renderizada en 3D?

POR ANA M. FERREIRO FERREIRO Y JOSÉ A. GARCÍA RODRÍGUEZ

Python • DESARROLLO

61Número 06W W W . L I N U X - M A G A Z I N E . E S

Con cualquier editor de texto, creamos

el fichero cone.py. Lo primero es importar

desde Python el paquete VTK; esto es tan

sencillo como escribir la siguiente línea:

import vtk

Ahora que ya podemos

instanciar cualquier objeto

de VTK, sin más que

escribir vtk.nombre_clase,

necesitamos crear nuestra

ventana de renderizado

vtk.vtkRenderWindow, a la

que llamaremos renWin y

a la que asociamos un área

de renderizado vtk.vtkRenderer (que

denominamos ren), mediante el método

AddRenderer(). Escribamos las siguien-

tes líneas de código:

ren=vtk.vtkRenderer()

renWin=vtk.vtkRenderWindow()

renWin.AddRenderer(ren)

iren=vtk.U

vtkRenderWindowInteractor()

iren.SetRenderWindow(renWin)

Para poder manipular la cámara median-

te el ratón se ha instanciado el objeto

vtkRenderWindowInteractor (denomi-

nado en el código como iren). Nótese

que la ventana de renderizado renWin,

se asocia al objeto de interacción iren

mediante el método SetRenderWindow.

En este momento no se aprecia la utili-

dad del mismo, paciencia… ya compren-

deréis su importancia cuando tengamos

un actor en nuestra escena.

Guardamos el fichero y

en la línea de comandos

ejecutamos el programa,

tecleando python cone.py…

¡No ocurre nada! Esto es

porque debemos inicializar

la interacción del usuario e

indicar que la ventana de

renderizado permanezca

visible hasta que el usuario

finalice la ejecución de la

misma cerrándola. Para ello basta

escribir

iren.Initialize()

iren.Start()

Si ejecutamos nuevamente el programa,

cuál es nuestra sorpresa que se abre una

ventana de color negro con sus botones

de minimizar, maximizar y cerrar; y que

sólo se cierra cuando el usuario lo estima

oportuno (Figura 3). Esta ventana va a ser

“el contenedor” de nuestra pequeña

escena. Nótese que las dos líneas de

código que acabamos de escribir deben

de estar al final del fichero. Las demás

líneas que escribamos a partir de este

momento debemos situarlas justo antes.

La abstracción se basa en la

industria del cine. Los objetos

básicos que constituyen este

modelo son: vtkRenderer,

vtkRenderWindow, vtkLight,

vtkCamera, vtkProp, vtkProper-

ty, vtkMapper, vtkTransform.

En la Tabla 1 se describen cada

uno de estos objetos.

• Modelo de visualización. El

papel del modelo gráfico es

transformar datos gráficos en

imágenes, mientras que el

papel de modelo de visuali-

zación transforma información

en datos gráficos; esto significa

que el modelo de visualización

es el responsable de construir

la representación geométrica

que se renderiza mediante el

modelo gráfico. VTK se basa en

la aproximación de los datos

para transformar la informa-

ción en datos gráficos. Hay dos

tipos básicos de objetos,

descritos en la Tabla 2, involu-

crados en dicha aproximación:

vtkDataObject y vtkProcessOb-

ject.

Los diferentes tipos de datos que pueden

constituir un objetos son, entre otros,

puntos, rectas, polígonos, puntos estruc-

turados, mallas estructuradas y no

estructuradas, etc. (ver Figura 2).

Mi Primera EscenaYa estamos preparados para construir

nuestra primera escena. Situaros en el

papel de director de cine. En los si-

guientes ejemplos veremos el modo de

emplear las clases que acabamos de

describir. Para ello, tal como se men-

ciona al comienzo, instanciaremos VTK

desde Python.

Figura 1: Estructura del modelo gráfico.

Figura 2: Tipos de datos: a) datos poligonales, b) puntos estructurados c) malla no estruc-

turada d) malla estructurada.

Figura 3: Ventana de ren-

derizado por defecto.

Para crear nuestro primer actor no nos

vamos a complicar demasiado, porque

ya queremos ver algo. VTK

contiene una serie de clases

que nos permiten crear

objetos tridimensionales

sencillos, como son: esfera

(vtkSphereSource), cono

(vtkConeSource), cilindro

(vtkCilinderSource), etc.

Para nuestro ejemplo

hemos escogido un cono,

sin embargo, puedes optar

por cualquiera de los otros

objetos. El siguiente código nos permite

crear nuestro primer “actor”,

cone=vtk.vtkConeSource()

coneMapper=vtk.U

vktPolyDataMapper()

coneMapper.SetInput(cone.U

GetOutput())

coneActor=vtk.vtkActor()

coneActor.SetMapper(coneMapper)

Mediante el objeto vtk.vtkConeSource

creamos una representación poligonal

de un cono, que hemos llamado cone.

La salida del cono (cone.GetOutput())

es un conjunto que se aso-

cia al “mapper” (coneMap-

per)

(vtk.vtkPoly-

DataMapper)

vía el método

SetInput().

Creamos el

actor (objeto

que se va

renderizar) al

que se le aso-

cia la repre-

sentación

geométrica que aporta

coneMapper. Nótese que

los pasos aquí indicados

son los que en general,

necesitamos seguir para poder cons-

truir un actor (Figura 4).

Cuando creamos un actor, no se

incluye por defecto en la escena. Es

necesario añadirlo al Renderer median-

te AddActor, y posteriormente ren-

derizar la escena. Esto se logra escri-

biendo,

ren.AddActor(conoActor)

renWin.Render()

Si volvemos a ejecutar visualizamos un

cono de color gris (color que se muestra

por defecto) dentro de nuestra ventana

(Figura 5). Además, es en este instante

donde se aprecia la interacción con el

ratón; con el botón izquierdo puedes

rotar la cámara, el botón central permite

trasladarla, y con el botón derecho nos

acercamos o alejamos del objeto.

Además, habrás observado que en la

escena, por defecto se incluye una luz

DESARROLLO • Python

62 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 5: Cono dentro de

la escena.

01 import vtk

02

03 # Generamos la estructura para

ver un cono

04 cone = vtk.vtkConeSource()

05 c o n e M a p p e r =

vtk.vtkPolyDataMapper()

06

coneMapper.SetInput(cone.GetOu

tput())

07 coneActor = vtk.vtkActor()

08

coneActor.SetMapper(coneMapper

)

09

10 # Crear fuente de esfera,

mapeador y actor

11 esfera = vtk.vtkSphereSource()

12 e s f e r a M a p p e r =

vtk.vtkPolyDataMapper()

13 esfera.SetPhiResolution(10)

14 esfera.SetThetaResolution(20)

15 esfera.SetCenter(0.3,0.0,0.0)

16

esferaMapper.SetInput(esfera.G

etOutput())

17 esferaActor = vtk.vtkActor()

18

esferaActor.SetMapper(esferaMa

pper)

19

esferaActor.GetProperty().SetC

olor(0.7,0.0,0.25)

20

esferaActor.GetProperty().SetO

pacity(0.75)

21

esferaActor.GetProperty().SetL

ineWidth(1)

22

23 # C r e a m o s : R e n d e r e r ,

RenderWindow,

RenderWindowInteractor

24 ren = vtk.vtkRenderer()

25 renWin = vtk.vtkRenderWindow()

26 renWin.AddRenderer(ren)

27 i r e n =

vtk.vtkRenderWindowInteractor(

)

28 iren.SetRenderWindow(renWin)

29

30 # Añadimos el actor en el área

de renderizado (Renderer)

31 ren.AddActor(coneActor)

32 ren.AddActor(esferaActor)

33

34 #Fijamos el color de fondo, el

tamaño y hacemos zoom sobre

35 #el area de Renderizado

36 ren.SetBackground(1, 1, 1)

37 renWin.SetSize(450, 425)

38 camera=ren.GetActiveCamera()

39 ##camera.Zoom(1.5)

40

41 coneActor.RotateX(30)

42 coneActor.RotateY(45)

43

conepro=coneActor.GetProperty(

)

44 conepro.SetColor(0,0.6,1)

45 ##conepro.SetOpacity(0.5)

46 conepro.SetLineWidth(2)

47 ren.ResetCamera()

48 ##camera=ren.GetActiveCamera()

49 camera.Zoom(1.5)

50

51 cone.SetResolution(40)

52

53 iren.Initialize()

54 renWin.Render()

55 iren.Start():

Listado 1: cono_esfera.py

Figura 4: Pasos que en general hay que seguir para crear un

actor.

para poder visualizar los objetos ilumi-

nados.

Prueba a comentar la línea

renWin.Render(). ¿Qué ocurre? Como te

habrás dado cuenta el cono ya no

aparece, esto es porque cada vez que

añadimos un actor es necesario ren-

derizar la escena, porque sino no se rea-

liza un refresco de la misma y es como si

no hubiésemos añadido un nuevo actor.

Propiedades de ObjetosSi has seguido el tutorial hasta este

punto, habrás creado tu cono de color

gris. Pero probablemente no estés

demasiado satisfecho, porque todos te-

nemos el mismo cono gris y tú lo querías

blanco y el fondo azul, por ejemplo. A lo

largo de este apartado veremos como

modificar la ventana de renderizado, la

cámara, propiedades del actor, etc. Al

final, podrás realizar todos aquellos

cambios que te apetezcan.

Habrás observado que la ventana de

renderizado se abre con un tamaño pre-

determinado. Para fijar el tamaño de

dicha ventana es necesario emplear el

método SetSize, donde indicamos el alto

y el ancho en pixels,

renWin.SetSize(450,325)

Si lo que pretendemos es cambiar el

color de fondo de la escena

(vtkRenderer) empleamos el método Set-

Background(RGB), donde le pasamos el

color deseado en formato RGB. Si quere-

mos un fondo azul bastaría escribir

ren.SetBackground(0.0, 0.0, 1)

Como dijimos, el área de renderizado

(vtkRenderer) coordina la cámara y las

luces. Mediante el método GetActive-

Camera() se accede a la cámara creada

en la escena, así podemos aplicarle todos

los métodos del objeto vtkCamera para

poder modificar la visualización según

queramos. Si lo que pretendemos es que

todos nuestros actores se vean en su

totalidad dentro del área de renderizado

es necesario llamar al método ResetCa-

mera(). En las siguientes líneas se reco-

gen algunos de los métodos relativos a la

cámara

ren.ResetCamera()

Python • DESARROLLO

63Número 06W W W . L I N U X - M A G A Z I N E . E S

Para instalar VTK partir del código

fuente, que podemos descargar desde

la Web de VTK, http://www.vtk.org/

get-software.php, podemos elegir

bajar una de las versiones en .tgz ó

acceder al CVS y descargar la última

versión. En el segundo caso crearemos

una carpeta que se llame VTK en /opt y

para acceder al repositorio CVS

tecleamos:

cvs -d :pserver:U

[email protected]

kitware.com:/cvsrootU

/VTK login

@KL(responder con el password:

vtk)

Para bajar el código fuente

tecleamos:

cvs -d :pserver:U

[email protected]

kitware.com:/cvsrootU

/VTK checkout VTK

En cualquier caso para compilar VTK,

necesitaremos el CMake, que se puede

obtener en http://www.cmake.org/

HTML/Download.html. Si lo preferi-

mos también podremos obtener el

CMake desde el CVS:

cvs -d :pserverU

:[email protected]

org:/cvsroot/CMakeU

login password: cmake

y para descargarlo:

cvs -d :pserver:U

[email protected]

org:/cvsroot/CMakeU

co CMake

Una vez hayamos descargado e insta-

lado CMake, podemos compilar VTK.

Para ello entraremos en la carpeta

donde tenemos VTK y teclearemos

desde la línea de comandos:

cmake -i

Nos preguntará lo que queremos com-

pilar de forma interactiva: hemos de

prestar atención y cuando nos pre-

gunte si queremos instalar los wrap-

pers para Python hemos de contestar

afirmativamente ya que por defecto no

lo hace.

Después basta teclear:

make

make install

Cuadro 1: Instalación deFuentes VTK

Objeto Descripción

vtkDataObject clase genérica que per-

mite representar diferentes tipos de datos.

Los objetos de datos consisten en estruc-

turas geométricas y topológicas (puntos y

celdas), y también en atributos asociados,

tales como escalares o vectores.

vtkProcessObject objeto que hace referen-

cia a filtros, que actúan sobre los actores

modificándolos.

Tabla2: Modelo de

Visualización

Figura 6:Comportamiento de los métodos de la cámara. a) Azimuth - flechas rojas; b) Pitch -

flechas azul celeste; c) Yaw - flechas azul oscuro; d) Elevation - flechas verdes; e) Roll -

flecha amarilla. La esfera blanca representa el foco.

sucediendo es que el

ángulo de rotación ha

colocado la cámara justo

en un punto que evita que

visualicemos el objeto

dentro de la escena. En la

Figura 6 explica de un

modo sencillo el modo en

que actúan cada uno de

estos métodos respecto

del foco (representado por

una esfera blanca).

A partir de este punto

comentad las líneas de

código correspondientes a

los métodos que actúan

sobre la cámara, dejando

únicamente la línea came-

ra.Zoom(1.5). Así vamos

viendo cada cosa por sepa-

rado, después ya tendréis

tiempo de mezclar código.

Ahora que sabemos modificar la

escena, debemos recordar que el cono

continúa viéndose en un color gris un

poco apagado. Para acceder a las

propiedades de cualquier actor vtkActor

se emplea el método GetProperty(), que

devuelve una instancia del objeto

vtkProp asociado a dicho actor. Las

siguientes líneas permiten modificar el

color, la transparencia y grosor de las

líneas:

conepro=coneActor.GetProperty()

conepro.SetColor(1,0.2,0)

conepro.SetOpacity(0.5)

conepro.SetLineWidth(3)

conepro.SetResolution(40)

conepro.U

SetRepresentationToWireframe()

La última línea de este código se indica

que queremos ver la estructura básica

que constituye el actor, es decir el ma-

llado. Por defecto,

VTK tiene asocia-

das teclas rápidas

a la escena: si

tecleas la letra “s”

se ven todos los

objetos renderiza-

dos (ver Figura 7),

mientras que si

tecleas la letra

“w”, se visualiza

sólo la malla (ver

Figura 8). Ahora

apreciarás mejor

la diferencia entre mallado y estructura

renderizada, no hay nada mejor que

poder ver las cosas.

La línea conepro.SetResolution(40)

modifica la resolución con la que se ren-

deriza el cono. Este método no es ge-

neral para todos los actores, sino para

ciertos objetos que VTK ya incluye,

como son: esfera (vtkSphereSource),

cono (vtkConeSource), cilindro (vtkCilin-

derSource), etc.

Cualquier objeto puede rotarse,

escalarse, obtener su dimensiones, etc.,

utilizando las propiedades de un vtkAc-

tor en particular(si queréis más informa-

ción, basta consultar las ayuda de VTK

sobre vtkProp3D, que es la clase padre).

Para rotar nuestro cono y escalarlo basta

escribir

coneActor.RotateX(30)

coneActor.RotateY(45)

coneActor.SetScale([1,3,2])

Ahora ya sabéis crear vuestra propia

escena, modificar sus propiedades,

añadir un actor con las opciones que

queráis y modificar la cámara. En caso

de que quisierais añadir más actores a

vuestra ventana de renderizado basta

seguir el mismo procedimiento que

hemos empleado para crear nuestro

cono. En el Listado 1 se añade a la

escena un cono y una esfera que se inter-

secan (Figura 9). �

camera=ren.GetActiveCamera()

camera.Azimuth(60)

camera.Pitch(5)

camera.Yaw(5)

camera.Roll(50)

camera.Elevation(20)

camera.Zoom(1.5)

Los métodos Azimuth, Pitch, Yaw,

Roll,Elevation se ocupan de rotar la

cámara o el punto de foco en diferentes

direcciones y, como argumento, se pasa

un ángulo de rotación. Lo mejor es que

juegues un poco con la cámara y veas

lo que ocurre probando cada uno de

estos métodos por separado. Por ejem-

plo, para ver como afecta el método

Azimuth aplicado a la cámara, comenta

las restantes lineas de código, porque

sino estarías mezclando distintos méto-

dos de rotación y uno así no sabe real-

mente lo que ocurre. Si en algún

momento el actor desaparece de la

escena no te preocupes, lo que está

DESARROLLO • Python

64 Número 06 W W W . L I N U X - M A G A Z I N E . E S

[1] RPMs VTK de Mandrake: ftp://ftp.

rediris.es/sites3/carroll.cac.psu.edu/

mandrakelinux/official/10.1/i586/

media/contrib/

[2] Kitware. VTK: http://www.kitware.org

[3] Enthought. Scientific python: http://

www.scipy.org

[4] MayaVi: http://mayavi.sourceforge.net

[5] Código de este artículos: http://www.

linux-magazine.es/Magazine/

Downloads/05

RECURSOS

Ana M. Ferreiro Ferreiro y José A.

García Rodríguez estudiaron

matemáticas, pero la informática

les apasiona, y a ella dedican gran

parte de su tiempo.

LO

SA

UT

OR

ES

Figure 7: Vista de la superficie

del cono.

Figura 9: Escena con dos

actores que se intersecan.

Figura 8: Vista de la malla del cono.

Rsnapshot [1] le proporciona al

administrador un espacio para

guardar backups del sistema. La

herramienta Rsnapshot deja intervalos

largos, configurables entre backups com-

pletas y crea nuevas backups diarias

incrementales en el sistema, lo que

ahorra mucho espacio comparado con

un backup completo. La lógica rota-

cional que subyace bajo el sistema hace

un uso intensivo de los enlaces duros.

Bajo la capota, Rsnapshot utiliza SSH y

Rsync. Decidí instalar el tarball de 89Kb

en uno de mis laboratorios de sistemas,

que ejecutan Slackware 10, pero si prefiere

DEB y los paquetes RPM se los puede

descargar de [1]. El siguiente comando es

todo lo que se necesita para instalarlo en

el sistema con soporte para Perl:

tar xvzpf U

rsnapshot-1.1.6.tar.gz

cd rsnapshot-1.1.6

./configure --sysconfdir=/etc

su

make install

El siguiente paso es copiar el fichero de

configuración de muestra

cp /etc/rsnapshot.conf.defaultU

/etc/rsnapshot.conf

y eliminar el comentario

#cmd_cp /bin/cp

Esta opción se descomenta para hacerlo

compatible con los sistemas BSD. Elimi-

nando el comentario se habilita GNU cp lo

que nos da mayor funcionalidad. El si-

guiente paso es configurar los intervalos en

los que Rsnapshot se ejecutará. Vamos a

decirle a Rsnapshot que cree diariamente

backups y los guarde durante una semana:

interval daily 7

Cuatro Semanas no es unDíaDecidí que realizar backups cada siete

días no era bastante. Por otro lado, no

quiero almacenar más imágenes diarias.

Mi solución fué configurar los backups

semanalmente, por ejemplo, uno por

semana y decirle a Rsnapshot que man-

tuviera los backups por cuatro semanas:

interval weekly 4

A propósito, se necesita utilizar etiquetas

como separador de caracteres en el

archivo de configuración. Como quiero

que la reserva diaria se ejecute a las 23h

y la reserva semanal a las 3h de cada

domingo, tengo que añadir lo siguiente

al fichero crontab:

0 23 * * * U

/usr/local/bin/rsnapshot

0 3 * * 0 U

/usr/local/bin/rsnapshot

Por supuesto que Rsnapshot aún no sabe

cuales son los ficheros a los que debe

realizar

el backup.

Por ejemplo, para realizar

un backup de mi directorio home en el

mismo sistema:

backup /home localhost/backups/

Pero, ¿qué utilidad tiene una copia de

seguridad en un mismo disco? La expe-

riencia nos dice que los discos duros, o

al menos la que yo he tenido, son

propensos a morir aunque se traten bien.

Necesito salvar el backup en una

máquina remota para mi tranquilidad.

Como mi servidor de ficheros tiene la IP

10.0.0.140, la siguiente línea lo hará

posible:

backup /home/ U

[email protected]:/backups/

Evidentemente, se supone que se trabaja

con acceso SSH al servidor de ficheros.

He cubierto la funcionalidad básica de

Rsnapshot pero el programa tiene un mon-

tón más de virguerías. La excelente página

de ayuda y el HOWTO en la página web

contienen bastante información intere-

sante, tal como includes, excludes y trucos

de cómo realizar backups de bases de datos

abiertas. Y ahora ¡a pasar un buen rato

realizando imágenes de backups! �

65

La Columna de Charly • ADMINISTRACIÓN

65Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] Rsnapshot: http://www.rsnapshot.org

RECURSOS

Darwin Streaming Server …….……66

Un vistazo a cómo configurar versiones

libres del servidor Quicktime de Apple

en Linux.

Admin Workshop: Identd……….… 69

El protocolo Ident asigna un nombre de

usuario a una conexión TCP/IP.

SYSADMIN

El principio que hay detrás de Rsnapshot no es nada nuevo: uti-

liza Rsync y SSH para realizar las copias de seguridad a otro

equipo. Lo que hace que Rsnapshot sea especial es su sencilla

configuración y su gran colección de características.

POR CHARLY KÜHNAST

El día a día del Administrador de Sistemas: Rsnapshot

EN LA DIANA

66

ya que proporciona unas cuantas confi-

guraciones útiles.

Después de instalar el fichero de con-

figuración y las cuentas del usuario y del

grupo, el administrador puede lanzar el

servidor tecleando /usr/local/sbin/Dar-

wingStreamingServer. La opción -d le

indica al servidor que se ejecute en

segundo plano. [Ctrl-C] cierra el servi-

dor. El script /usr/local/sbin/streamin-

gadminserver.pl habilita el interfaz de

administración web.

Configuración WebSi se ve el mensaje Launching Streaming

Server…, se puede usar el interfaz web.

Para ello, hay que teclear la URL http://

direccion_del_servidor:1220/ en el nave-

gador web. Si el servidor y el navegador

se están ejecutando en la misma

máquina, se puede teclear localhost

como dirección del servidor, o teclear el

nombre de la máquina o la dirección IP.

Si se prefiere, se puede ejecutar el Dar-

winStreamingServer sin interfaz web, se

edita el fichero de configuración manual-

mente y se teclea killall -HUP Darwin-

StreamingServer para indicarle al servi-

dor que lea el fichero de configuración

para que sean efectivos los cambios.

en Debian, Suse 9.1 y Fedora Core 3. Si

se prefiere compilar el código fuente, el

Cuadro “Hágalo Usted Mismo” propor-

ciona algunas pistas útiles.

Aunque el programa funciona bien en

diversas distribuciones, el script de insta-

lación puede que no. Por ejemplo, el

grupo de usuario requerido puede ser

que no exista - y esto implica que hay

que agregarlo de forma manual como

usuario root: groupadd qtss. El fichero de

configuración que acompaña la distribu-

ción de código fuente sirve también de

poco. Se debe usar el fichero de configu-

ración que viene en el paquete binario,

El servicio de streaming de vídeo es

aún bastante infrecuente bajo

Linux. Los servidores gratuitos a

menudo presentan la desventaja de sólo

soportar sus propios formatos y los pro-

ductos comerciales suelen ser excesiva-

mente caros. El servidor Real, por ejem-

plo, funciona bastante bien, pero cuesta

unos cuantos miles de dólares. El servidor

Basic es gratuito, pero sólo soporta un

máximo de cinco clientes y deja de fun-

cionar después de un año de servicio [1].

Servidor Gratuito MP3 yMPEG 4Una excepción positiva: Apple ha lan-

zado la mayor parte de la funcionalidad

del servidor Quicktime bajo una licencia

de código abierto, la Apple Public Source

License [2]. El servidor Darwin Strea-

ming Server (DSS) puede manejar el po-

pular formato de audio MP3, Quicktime

y vídeo MPEG4. Antes de poder bajarse

el software del servidor, hay que regis-

trarse en el sitio web de Apple [3].

Una vez registrado se navega a la

página DSS en [4] y se pulsa Streaming

Server 5.0.1 en Source Code para bajar el

servidor. Otra posibilidad es bajarse el

paquete Red Hat 9.0, que funciona bien

El servidor Darwin de Apple es una versión gratuita del servidor comer-

cial Quicktime. Puede manejar los formatos MP3 y MPEG4 y posee una

interfaz web. POR OLIVER FROMMEL

MP3 y MPEG4 con el servidor Darwing

STREAMING MEDIA

ADMINISTRACIÓN • Darwin

66 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 1: La pantalla principal de la interfaz

web con estadísticas del servidor activo.

Tras conectarse, usando la interfaz

web, con las credenciales establecidas

durante el proceso de instalación; el

servidor Darwin solicitará otra con-

traseña en la próxima página; esta con-

traseña se usará para los MP3

entrantes, que el servidor será capaz de

distribuir.

Luego el servidor solicitará que se con-

firme si se desea usar encriptación SSL

para la conexión. El servidor Darwin

necesita algunos paquetes software adi-

cionales para poder usar SSL: las bi-

bliotecas OpenSSL, el módulo Perl

Net::SSLeay y sobre todo, un certificado

SSL válido. El interfaz web seguro

escucha en el puerto 1240. Desde luego,

si se está ejecutando Darwin en casa o

en un entorno de confianza, se puede

usar sin SSL.

Un Directorio para TodoSe necesita la ruta para los ficheros de

vídeo, por defecto es /usr/local/movies,

que es el directorio donde el script de

instalación sitúa el fichero de ejemplo.

Por último, Darwin ofrece la posibilidad

de usar el puerto 80 para el streaming,

que puede ser de gran ayuda si hay que

navegar a través de cortafuegos. Se

puede cambiar todas estas opciones pos-

teriormente en el interfaz web. Después

de completar estas configuraciones, la

ventana principal del interfaz web

debería aparecer (Figura 1).

Como se mencionó anteriormente, los

ficheros de vídeo de ejemplo se situaron

en el directorio maestro,

/usr/local/movies, durante la instalación.

Para reproducir estos ficheros en Linux,

se necesita un reproductor que soporte el

formato MPEG4 y el protocolo RTSP. Si

se intenta usar MPlayer [5], se tiene que

recompilar la aplicación con la biblioteca

LIVE [6]. La mayoría de los reproduc-

tores, como el cliente VideoLAN vlc [7],

necesitan la biblioteca Ffmpeg [8] para

los ficheros MPEG4.

MPEG4: Hágalo UstedMismoLa codificación manual de ficheros

MPEG4 es toda una ciencia. El tener el

material de vídeo ya digitalizado en la

máquina es un paso importante para lle-

gar al objetivo, pero queda todavía un

largo camino por recorrer antes de con-

seguir un MPEG4:

• Extraer el audio del original y

almacenarlo en un fichero

aparte (usando ffmpeg -vn, por

ejemplo).

• Codificar la pista de audio

usando faac para obtener un

fichero con formato AAC.

• Usar ffmpeg para convertir el

vídeo en formato MPEG4.

• Añadir el vídeo y el audio a un

contenedor MPEG4 usando

mp4creator del paquete

MPEG4IP [9]. El término téc-

nico para esto es multiplexado.

La opción -hint de mp4creator

añade los “hints” al fichero, es

decir, una serie de etiquetas

que el servidor usará para

avanzar o retroceder de forma

rápida por el fichero.

El paquete MPEG4IP incluye reproductores

MPEG4 con y sin GUI. El Listado 1 muestra

la salida de la utilidad mp4info para uno

de los ficheros MPEG4 de ejemplo.

La primera pista es una pista de audio

en formato AAC, seguido de una pista de

vídeo y por último los “hints”. Estas pis-

tas son seguidas por datos de la escena y

descriptores de objetos, que no nos

hacen falta en este momento.

Reproducción MP3El servidor Darwin puede también

manejar ficheros MP3, pero necesita una

lista de reproducción para hacerlo. Para

crear la lista, hay que pulsar en Playlists

en la columna del lado izquierdo de la

interfaz web. En lo alto, a la derecha,

junto al campo grande, se pueden obser-

var dos enlaces: New MP3 Playlist para

los ficheros MP3 y New Movie Playlist

para las películas (Figura 2). Si se pulsa

Darwin • ADMINISTRACIÓN

67Número 06W W W . L I N U X - M A G A Z I N E . E S 67

Figura 2: El servidor Darwin tiene enlaces

para crear listas de películas y MP3s en la

parte de arriba a la derecha de la interfaz de

usuario.

01 $ mp4info sample_100kbit.mp4

02 mp4info version 1.1

03 sample_100kbit.mp4:

04 Track Type Info

05 1 audio MPEG-4 AAC LC, 70.031 secs, 28 kbps, 22050 Hz

06 2 video MPEG-4 Simple @ L3, 70.000 secs, 63 kbps, 192x240 @ 15.00 fps

07 3 hint Payload MP4V-ES for track 2

08 4 hint Payload mpeg4- generic for track 1

09 5 scene BIFS

10 6 od Object Descriptors

Listado 1: Salida de la Utilidad mp4info

Para compilar el servidor Darwin desde

el código fuente, primero hay que

descomprimir el fichero zip tecleando

unzip DarwinStreamingSrc5.0.1.1.zip.

Luego hay que entrar en el directorio

que se crea tras ejecutar este comando,

DarwinStreamingSrc5.0.1.1 y teclear

./Buildit. El script ./Install colocará los

ficheros en los directorios correctos:

/usr/local/bin y /usr/local/sbin para los

programas y /etc/streaming para los

ficheros de configuración. El script de

instalación también solicita que se intro-

duzca un nombre de cuenta y una con-

traseña para la administración del servi-

dor Darwin.

Desafortunadamente el script contiene

algunos errores: Buildit falla a la hora de

colocar los ficheros donde Install espera

encontrarlos, apareciendo el mensaje:

copying qtpasswd to

/usr/local/bin/qtpasswd

cp: cannot stat `qtpasswd': No

such file or directory

Hay que comprobar la salida del script

de instalación para corregir la loca-

lización y copiar los ficheros a este sitio

de forma manual. Si no se logra

localizar los ficheros, hay que ejecutar

find

# find -name "qtpasswd"

./qtpasswd.tproj/qtpasswd

Hay que copiar este fichero al lugar

donde el script de instalación espera

encontrarlo: cp

./qtpasswd.tproj/qtpasswd

/usr/local/bin. Hay que repetir este paso

para todos los ficheros requeridos.

Hágalo Usted Mismo

en New MP3 Playlist, aparece una página

web como la mostrada en la Figura 3.

Los campos de texto en la parte de arriba

son para el nombre de la lista y el punto

de montaje, es decir, para la parte de la

URL que los programas reproductores

usarán para encontrar la lista. Y como

buena medida, probablemente se desee

seleccionar el género musical correcto

para la canción en la caja bajo los cam-

pos.

Se puede establecer el modo de repro-

ducción para la lista en la parte de arriba

de la derecha de la ventana. El modo de

reproducción puede ser Sequential,

Sequential Looped o Weighted Random

(Secuencial, Secuencial con Repetición o

Aleatorio). Para asegurarse que Darwin

realmente reproduce las pistas de forma

aleatoria, hay que introducir un cero en

la caja de texto Repetition. De otra

forma, el servidor reproducirá cada pista

al menos una vez antes de repetir una.

El campo a la izquierda de la interfaz

muestra una lista de las pistas de audio

disponibles y el campo de la derecha

muestra las pistas que están en la lista de

reproducción actual. El uso inteligente

de Javascript por parte de los progra-

madores de Apple, permite al usuario

arrastrar y soltar las pistas desde un

campo al otro. Se puede hacer doble clic

para cambiar de directorio, pulsar en el

enlace Open Folder bajo el campo de

texto.

Reproducción Secuencial oAleatoriaHay un campo para el peso en el modo

Weighted Random siguiendo al nombre

de la pista en el campo de la derecha.

Cuanto mayor sea el número introducido

aquí, con mayor frecuencia Darwin

reproducirá el fichero MP3. Después de

completar la lista, hay que pulsar Save

Changes al pie de la ventana.

La página web que se muestra a con-

tinuación contiene un resumen de la lista

de reproducción que se ha configurado

pero que en realidad no se está ejecu-

tando. Pulsando en el icono del estado

de la lista hará que se reproduzca. Los

reproductores MP3 pueden acceder a la

secuencia con http://

nombre_del_servidor:8000/

punto_de_montaje.

Darwin almacena ficheros de registro

en un directorio bajo

/var/streaming/playlists que coinciden

con el nombre de la lista de reproducción.

La extensión del fichero .err es para el re-

gistro de errores, .config apunta a la con-

figuración, .log es el fichero de registro y

.playlist es la propia lista de reproducción.

Por defecto Darwin sólo usa un direc-

torio central /usr/local/movies para los

ficheros de audio y vídeo. El comando

createuserstreamingdir pepe crea un

árbol de directorio Sites/Streaming bajo

el directorio home del usuario llamado

pepe. Pepe puede almacenar sus

archivos de audio y vídeo aquí. Los

reproductores pueden acceder a estos

ficheros usando la dirección rtsp://

nombre_del_servidor/~pepe/movie.mp4.

ProblemasLa complejidad de todo esto hace difícil

determinar donde exactamente ha

surgido un problema si realmente algo

ha ido mal. Los reproductores no son

muy explícitos a la hora de informar de

un error y esto, a menudo, deja al

usuario preguntándose si el reproductor

ha sido incapaz de localizar el archivo en

el servidor o si el problema es simple-

mente que falta algún codec.

El servidor tampoco ayuda a arrojar

algo de luz sobre el asunto. Aunque el

servidor Darwin genera ficheros de re-

gistro, su contenido en la mayoría de los

casos es bastante inútil. Por ejemplo,

/var/streaming/logs/Error.log no tiene ni

un simple informe de error, y mucho

menos pistas sobre como remediar el

problema.

La entrada Error Log en el interfaz web

lleva al usuario a los mismos datos

insignificantes. Al menos, los ficheros de

registro de las lista de reproducción con-

tienen algún detalle que puede ayudar

encontrar la dirección para solucionar el

problema.

ConclusiónDesde un punto de vista técnico, el servi-

dor Darwin tiene bastante potencial. Per-

mite poder instalar una solución de

streaming de forma gratuita en combi-

nación con otras herramientas gratuitas

como FFMpeg y MPEG4IP.

Desafortunadamente, la facilidad de

uso es aún un asunto pendiente - a pesar

del buen diseño de la interfaz web de

Darwin. Irónicamente, la instalación y la

solución de problemas no son algo que

parezca muy complicado para alguien

familiarizado con el software, pero el

soporte para Linux probablemente no

esté en lo alto de la lista de prioridades

de Apple. �

Nombre Función

/usr/local/sbin/DarwinStreamingServer Programa principal

/usr/local/sbin/streamingadminserver.pl Script Perl para la interfaz de usuario Web

/etc/streaming/ Directorio de configuración

/etc/streaming/streamingserver.xml Fichero de configuración del servidor

/var/streaming/logs Directorio de ficheros de registro

Tabla 1: Ficheros y Rutas Importantes

[1] Servidor Básico Helix: http://forms.

real.com/rnforms/products/servers/

eval/mbps.html

[2] Licencia de Código Abierto de Apple:

http://www.opensource.apple.com/

apsl

[3] Registration: https://signin.apple.com

[4] Darwin Streaming Server: http://

developer.apple.com/darwin/projects/

streaming/

[5] MPlayer: http://www.mplayerhq.hu

[6] Biblioteca LIVE para RTSP: http://

www.live.com/liveMedia

[7] VideoLAN: http://videolan.org/vlc/

[8] FFMpeg: http://ffmpeg.sourceforge.

net

[9] MPEG4IP: http://mpeg4ip.

sourceforge.net

RECURSOS

ADMINISTRACIÓN • Darwin

68 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 3: El interfaz de usuario web para las

listas de reproducción que permite arrastrar

y soltar las pistas para añadirlas a la lista.

Continuando con la exposición del

mes pasado respecto a los proce-

sos de servidores basados en

inetd [1], en artículo de este mes ana-

lizamos el protocolo Ident como ejemplo

de las posibilidades y peligros de los

servidores basados en Linux. El objetivo

básico del protocolo de servidores Ident

es la asignación de un nombre de

usuario en una máquina cliente a una

conexión TCP.

Tanto FTP, IRC como SMTP utilizan a

menudo Ident. Cuando se establece una

conexión FTP y, dependiendo de la con-

figuración del servidor, algunos servi-

dores FTP solicitan al cliente la identifi-

cación del usuario local que ha abierto la

conexión. En la Figura 1 podemos ver un

gráfico del proceso.

El servidor FTP se convierte en un

cliente del protocolo Ident. Abre una

conexión en el puerto 113 de la máquina

que solicita la conexión. Debido a que

sólo se permite que los procesos root se

conecten a este puerto (el puerto está

comprendido en el rango “privilegiado”

debajo del rango de 1024), se puede con-

fiar en que la respuesta proporcione

información precisa.

El protocolo en sí mismo es bastante

simple. El código del cliente Ident envía

los números de los dos puertos para la

conexión FTP al servidor Ident (en la

figura 1, los puertos son el 33812 y el

12). Entonces el demonio Ident com-

prueba el sistema en búsqueda del

usuario propietario del proceso ligado al

puerto 33812, devolviendo la ID del

usuario. Algunos demonios simplemente

devuelven un hash en su lugar.

Seguridad en IdentIdent es una aplicación heredada cons-

truida cuando la mayoría de los equipos

Unix eran sistemas multiusuario que

normalmente se ubicaban en centros de

cálculo, siendo gestionados por uno o

varios administradores. Si un usuario

hacia mal uso de un equipo y atacaba un

servidor de Internet, por ejemplo, los

administradores tenían métodos senci-

llos de detectar al usuario atacante.

La instalación del demonio Ident per-

mitía a los administradores rastrear la

actividad de los servidores. El operador

del servidor que había sucumbido a un

ataque simplemente llamaba al admi-

nistrador del centro de ordenadores

donde se originó el ataque e informaba

de la ID de usuario que estaba conec-

tado. Esto permitía a los administradores

locales comprobar la cuenta y descubrir

rápidamente al “malvado”.

Por supuesto, el servicio Ident solo

ayuda en casos directos. Los atacantes

con un poco de habilidad pueden encon-

trar fácilmente caminos para evitar estas

defensas. Por tanto, Ident no es una pro-

tección para los servidores en ningún

caso, en especial considerando el hecho

de que el protocolo no soporta la auten-

tificación o la autorización.

Problemas ComunesIdent puede ser un riesgo para la

seguridad del cliente. El usuario que se

conecte a un servidor no fiable le pro-

porciona mucha información adicional

sobre la máquina cliente. Esta informa-

ción puede ser usada para atacar al

cliente. Para combatir esto, algunas

implementaciones de Ident envían un

hash (realizado con el nombre de

usuario encriptado y la marca de

fecha/hora) en lugar de la ID, almace-

nando el nombre de usuario en un

archivo de registro. En este caso, el

servidor remoto nunca ve las creden-

ciales.

Puesto que Ident se remonta a la era

en la que los equipos host eran adminis-

trados de manera centralizada, su utili-

Identd • ADMINISTRACIÓN

69Número 06W W W . L I N U X - M A G A Z I N E . E S

En la edición del último mes del taller de administración introducimos herramientas que ayudan a los admi-

nistradores a poner en marcha distintos servicios. Este mes os mostraremos cómo usar el protocolo Ident

para asociar un nombre de usuario con una conexión TCP. POR MARC ANDRÉ SELIG

En la edición del último mes del taller de administración introducimos herramientas que ayudan a los admi-

nistradores a poner en marcha distintos servicios. Este mes os mostraremos cómo usar el protocolo Ident

para asociar un nombre de usuario con una conexión TCP. POR MARC ANDRÉ SELIG

Pistas desde dentro: Identd en servidores basados en Linux

LOS SIN NOMBRE

69

Figura 1: Cuando un cliente abre una conexión, el servidor FTP solicita que se identifique el

usuario que solicita la conexión.

Pistas desde dentro: Identd en servidores basados en Linux

LOS SIN NOMBRE

dad hoy en día es restringida. La mayoría

de los usuarios de Internet disponen de

su propio equipo y son sus propios

administradores. Por tanto, estos usua-

rios pueden hacer que su demonio Ident

responda con lo que ellos deseen. En

otras palabras, los operadores de sistema

nunca deben confiar en las respuestas de

un demonio Ident y, por supuesto, no

utilizarlas con fines identificativos.

Me permito enfatizar que Ident no es

una buena herramienta para proteger

equipos, pero sí una herramienta

forense. Mucho servidores de Internet

(especialmente los demonios IRC y

SMTP) requieren que Ident se esté ejecu-

tando por parte del cliente. Si un usuario

no ha lanzado el servicio desde el lado

del cliente puede ocurrir un retraso en el

inicio de la conexión. Este retraso se

debe a que el cliente rechaza la solicitud

entrante de Ident y por el servidor

esperando la repuesta hasta que se agote

el tiempo de espera.

Por tanto, sí tiene sentido instalar

Ident en nuestra máquina. Revisemos

como configurar el demonio para ilustrar

algunas situaciones comunes que ocu-

rren cuando se configura un servidor.

Configuración de IdentLa mayoría de las distribuciones Linux

tienen al menos una implementación

Ident. Puesto que el servicio no se usa

habitualmente, es lógico usar el super

servidor inetd o el Xinetd [1] para lanzar

Ident. Si optamos por la variante que usa

el inetd heredado tendremos que añadir

las siguientes líneas a /etc/inetd.conf:

ident stream tcp nowait nobodyU

/usr/sbin/in.identd

Si nuestra distribución soporta Xinetd te-

nemos que crear un archivo llamado

/etc/xinetd.d/identd y añadir las líneas

que aparecen en el Listado 1. Algunas dis-

tribuciones disponen de una configu-

ración de ejemplo, la cual sólo tenemos

que habilitar. Para hacerlo en inetd. sim-

plemente eliminamos los signos “#” al

principio de las correspondientes líneas.

En Xinetd tenemos que cambiar la línea

disable = yes para el servicio a disable =

no para habilitarlo.

Tras cambiar la configuración, el admi-

nistrador necesita enviar una señal HUP

para indicar al super servidor de Internet

que analice gramaticalmente la nueva

configuración (killall -HUP inetd o killall

-HUP xinetd).

Filtros de PaquetesPuede que configurar y lanzar un demo-

nio no sea suficiente. Muchos de los

actuales equipos disponen de cortafuegos

de protección externos o locales. Un filtro

de paquetes (Packet Filter) correctamente

configurado bloqueará todos los paquetes

Ident. El bloqueo de estos paquetes Ident

explica los retrasos al conectarse a algunos

servidores de Internet, puesto que el filtro

de paquetes simplemente elimina

cualquier paquete entrante cuyo destino

sea el puerto 113. La mayoría de los servi-

dores no esperarán a los paquetes de

respuesta mucho tiempo, pero esto aún

puede causar un retraso de algunos segun-

dos al iniciar una conexión.

Para evitarlo debemos abrir un agujero

en nuestro cortafuegos. La herramienta

IPTables en Linux 2.4 o superior nos per-

miten configurar las reglas para aceptar

paquetes entrantes desde un servidor

Ident y enviar la respuesta adecuada.

Como root, simplemente escribimos las

siguientes líneas para abrir un par de agu-

jeros en nuestro filtro de paquetes:

iptables -I INPUT -p U

tcp --dport U

ident -j ACCEPT

iptables -I OUTPUT -p U

tcp --sport U

ident -j ACCEPT

Routers de AccesoLa configuración en la que estamos traba-

jando funciona correctamente suponiendo

que nos conectemos a Internet directa-

mente usando un módem, RDSI o ADSL.

Si es un router el que nos proporciona la

conexión y enruta los paquetes a Internet

tendremos que modificar las reglas del

cortafuegos de nuestro router para ges-

tionar Ident (ver figura 2). Como hacer

esto depende del router que tengamos.

Evitando NATPuede que nos preguntemos qué ocurre si

nuestra red utiliza “Network Address

Translation” (NAT – Traducción de direc-

ciones de red) para compartir una única

dirección IP entre una serie de clientes.

Un simple filtro de paquetes no fun-

cionará. Los requerimientos Ident

entrantes siempre usan el puerto reser-

vado 113. necesitaremos un cortafuegos

inteligente que recuerde qué equipo ha

abierto la conexión a una dirección IP

remota para asignar el paquete Ident

correctamente.

Para evitar esta confusión y al mismo

tiempo evitar retrasos mientras iniciamos

las conexiones FTP, IRC o de otro tipo,

configuraremos nuestro filtro de paquetes

para que rechace los paquetes ident en

lugar de simplemente dejarlo. Otra regla

IPFilter se ocupará de esto:

iptables -I INPUT -p tcp -- U

dport ident -j REJECT U

--reject-with tcp-reset

Esta regla indica al equipo solicitante que

el servicio requerido no está disponible.

En lugar de esperar que el tiempo de

respuesta se agote, el equipo remoto

puede terminar de establecer la conexión

si necesidad de más esperas. �

[1] Marc André Selig, “Ángeles y Demo-nios”: Linux Magazine Número 5.

[2] RFC 1413, Protocolo Ident: http://www.

faqs.org/rfcs/rfc1413.html

RECURSOS

ADMINISTRACIÓN • Identd

70 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 2: Podemos configurar nuestro router

para que deje pasar los datos relacionados

con Ident.

01 # file /etc/xinetd.d/identd

02 service ident

03 {

04 socket_type = stream

05 protocol = tcp

06 wait = no

07 user = nobody

08 server = /usr/sbin/in.identd

09 disable = no

10 }

Listado 1: Entrada Xinetdpara identdUtilidad

mp4info

Bienvenidos a Linux UserÉsta es la sección dedicada a la presentación de software interesante y útil que nos ayuda

en nuestro quehacer diario con el escritorio Linux. Aquí aprenderemos a utilizar

software estándar de una manera más eficiente, adquiriremos valiosos

conocimientos y descubriremos apasionantes nuevas aplicaciones.

Herramientas: KVocTrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72La enseñanza de idiomas actual se basa en el contexto, pero sin un amplio

bagaje de palabras elementales, estaremos perdidos al salir del aula. KVoc-

Train le ayuda a cimentar su vocabulario de otros idiomas.

Desktopia: Skippy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76¿Por qué no añadir un poco de estilo si nuestro gestor de ventanas es dema-

siado aburrido o espartano para nuestros gustos? Skippy es un imaginativo

paginador de ventanas con funciones de previsualización integradas

Aplicaciones: ScummVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78El motor SCUMM es la base de casi todas las aventuras gráficas de Lucasfilm

Games/LucasArts. Ahora los fanáticos de estos juegos pueden ejecutarlos en

Linux gracias a ScummVM.

Linea de Comandos: tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82La herramienta tr es realmente útil. Este comando tan simple permite reem-

plazar cadenas en archivos de texto. Ya sea reemplazando letras o eliminando

espacio en blanco, le sorprenderá la versatilidad de tr.

Educación:Accesibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84En este artículo nos enfrentamos al tema de la accesibilidad y la tecnología

adaptativa desde un punto de vista educativo. Daremos un repaso al estado

actual de las soluciones y normas relacionadas con la atención a la diversidad

que tiene origen en deficiencias perceptivas o cognitivas y trataremos de

demostrar que el software libre está llegando a la madurez en este campo

también.

Trucos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90En el día a día del usuario y desarrollador de Linux, nos topamos con proble-

mas de toda suerte e índole, que se resuelven con dosis de imaginación e

intuición. Esta sección reúne los mejores soluciones para el beneficio de

todos.

La enseñanza de idiomas actual se basa en el

contexto, pero sin un amplio bagaje de palabras

elementales, estaremos perdidos al salir del aula.

KVocTrain le ayuda a cimentar su vocabulario de

otros idiomas.

POR KEVIN DONNELLY.

CLASE DEIDIOMAS

Aprenda vocabulario con KVocTrain.

CLASE DEIDIOMAS

KVocTrain es una herramienta

que le ayuda a aprender pa-

labras de vocabulario de un

idioma extranjero. El programa KVoc-

Train forma parte de la KDE Edutain-

ment Suite y fue escrito originalmente

por Ewald Arnold. Funciona bajo el

mismo principio que las tarjetas de

vocabulario. Todo lo que necesita hacer

es introducir palabras e información

sobre ellas y luego pedirle a KVocTrain

que se le examine. Le preguntará las

palabras y evaluará su tasa de aciertos.

Configurar KVocTrain.Para configurar KVocTrain, abrimos la

aplicación (K -> Edutainment ->

Idiomas -> KVoctrain) y seleccionamos

Vocabulario -> Añadir idioma -> Otro

Idioma, y pulsamos Sí. Hacemos clic en

el botón Añadir información del idioma

de la base de datos de KDE para añadir

un idioma (véase la Figura 1). En este

caso hemos seleccionado Sur de Europa

-> Grecia. A lo largo de este artículo

usaremos el griego como idioma de

ejemplo, pero se pueden seguir los mis-

mos pasos para configurar KVocTrain en

otro idioma. Utilizamos el mismo pro-

cedimiento para añadir el castellano,

seleccionando Europa Occidental ->

España para acabar.

Pulsamos en la pestaña Ver, y cam-

biamos el tipo de letra. El idioma griego

tiene unas reglas de pronunciación bas-

tante claras, por lo que en realidad no

necesitamos las ayudas de pronun-

ciación de la asociación internacional

de fonética (IPA), pero si lo necesita

para el idioma que esté aprendiendo,

cambie al tipo de letra fonética apro-

piado. El tipo de letra Doulos,

disponible en la misma página que Gen-

tium, es una buena elección. Pulse

Aceptar para finalizar. Podemos acceder

al cuadro de nuevo desde Opciones ->

Opciones generales (véase Figura 2).

En la ventana principal, ajustamos las

columnas pulsando y arrastrando las

divisiones de la cabecera hasta que que-

den dispuestas de manera óptima en

nuestra pantalla. Para cambiar el orden

de aparición de los idiomas, pulse

Vocabulario -> Establecer idioma ->

Original -> Griego para poner el griego

en la primera columna, y Vocabulario ->

Establecer idioma -> Traducción -

>Español para poner el castellano en la

segunda columna. De hecho podemos

tener tantos idiomas como queramos,

por lo que, por ejemplo, podemos exami-

narnos de griego y escocés de la misma

manera. Podemos añadir el galés como

tercer idioma (con Añadir idioma, como

describiremos un poco más adelante) y

usamos Establecer idioma para asignarla

a una columna.

Vamos a crear una lista de vocabulario

nueva, por lo que vamos a Vocabulario -

> Propiedades del documento y relle-

namos alguna información a modo de

resumen del documento en la pestaña

General (ver Figura 3). Dejamos las otras

pestañas tal como están por el momento.

A continuación, guardamos la lista de

vocabularios con un nombre de fichero

adecuado. La extensión debe ser .kvtml,

que puede ser leída por otros programas

de KDE Edutainment, como el

KWordQuiz.

Ahora podemos configurar el idioma

griego propiamente dicho. Desde Voca-

bulario -> Propiedades del idioma, re-

llenamos las características básicas de

cada idioma (por ejemplo, el artículo

LINUX USER • Ktools

72 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Ktools • LINUX USER

73Número 06W W W . L I N U X - M A G A Z I N E . E S

el vocabulario en una gran lista, tiene

más sentido segmentarla de alguna ma-

nera, de manera que

podamos revisar partes

específicas. KVocTrain uti-

liza el concepto de lec-

ciones para esto, por lo

que añadiremos una lec-

ción. Nos vamos a Vocabu-

lario -> Propiedades del

documento, y pulsamos

Nuevo en la pestaña Lec-

ciones (ver Figura 4), e

introducimos un nombre

para la lección.

Cuando se trata de nom-

brar lecciones, se suelen

elegir temas en vez de

tipos de palabras, por lo

que elegiremos Gente para el nombre de

la lección. La lección gente contendrá

palabras relacionadas con profesiones.

También podemos crear una lección lla-

mada Viajes. Por supuesto, si cam-

biamos de parecer con respeto al tipo de

palabras que vamos a asociar a la lec-

ción, podemos regresar a la pestaña Lec-

ciones más tarde para cambiar la descrip-

ción. La lección a la cual se ha asociado

una palabra se lista en la

primera columna de la

ventana principal, y

podemos reasignar la pa-

labra a otra lección desde

allí o desde el cuadro de

diálogo de la propia pa-

labra.

Introducción depalabrasAhora podemos empezar

a introducir palabras. En

primer lugar pulsamos en

Opciones para asegu-

rarnos de que Edición

entre líneas no está selec-

cionada. Si lo está, la de-seleccionamos.

Si sabemos que tenemos pocas palabras

para introducir podemos fijar esta elec-

ción por defecto seleccionándolo en la

lista desplegable en la parte superior de

la ventana principal. Esto significa que

no tendremos que seleccionarla por se-

parado para cada nueva palabra. Presio-

definido, nombres personales, etc.).

Aunque nada nos impide introducir todo

Figura 1: Adición de un idioma en KVocTrain.

Figura 2: Usamos la pestaña Ver en

Opciones generales para configurar los tipos

de letra.

Figura 3: Añadimos infor-

mación de resumen en la

pestaña General del

cuadro Propiedades del

documento.

Este artículo usa el griego como un

ejemplo de idioma que puede aprender

con KVocTrain. El primer paso es confi-

gurar los tipos de letra necesarios y la

disposición del teclado para el idioma

que vamos a utilizar. Por lo tanto insta-

laremos un tipo de letra que muestre

letras griegas y configuraremos el

teclado en griego.

Varios tipos de letra incluyen caracteres

griegos, pero como pasa con las letras

latinas, unas se ven mejor que otras. El

tipo de letra con mejor pinta que hemos

encontrado bajo licencia GPL es Bit-

stream Charter, pero la más bonita sin

discusión es la Gentium de Victor Gault-

ney [2], que aunque no es GPL, no tiene

restricciones para usos no comerciales.

Hay un buen número de tipos de letra en

la misma página Web que están diseña-

dos especialmente para el griego. Una

vez nos hayamos decidido, la descar-

gamos en un directorio y la descom-

primimos si es necesario. Nos vamos al

KDE Control Center, seleccionamos Sys-

tem Administration -> Font Installer y

pulsamos en el botón Administrator

Mode de manera que el tipo de letra esté

disponible para todos los usuarios. Intro-

ducimos la clave secreta y pulsamos el

botón Add Fonts. Exploramos hasta la

ubicación del archivo de tipo de letra, lo

seleccionamos y pulsamos OK.

KFontInstaller instalará el tipo de letra en

/usr/local/share/fonts. Debemos cerrar la

sesión y volverla a abrir para que todos

los programas puedan reconocer el

nuevo tipo de letra.

Lo siguiente será configurar el teclado

para poder introducir palabras tanto

con el juego de letras griego como en

en latino. Para ello nos vamos a

Regional & Accessibility-> Keyboard

Layout dentro del KDE Control Center.

En la pestaña Layout, marcamos

Enable keyboard layouts. Nos

desplazamos por la lista hasta encon-

trar el teclado griego, pulsamos sobre

él y luego sobre Add. Ahora

deberíamos tener dos disposiciones de

teclado en la lista de Active layouts.

Una vez que hayamos tecleado en

Apply, aparecerá un icono en el system

tray. Pulsando sobre este icono

podremos cambiar entre las dos dis-

posiciones de teclado. Puede resultar

molesto tener que estar cambiando del

teclado al ratón sólo para cambiar la

disposición del teclado. Podemos

establecer un atajo de teclado. Ya

existe uno por defecto (Ctrl+Alt+K),

pero nos permitirá sólo cambiar al

griego pero no regresar al que español,

dado que en la nueva disposición la

combinación no recae en las mismas

teclas. Para resolver esto selec-

cionamos el teclado griego en el

cuadro Active layouts, marcamos

Include Latin layout en la parte inferior

de la pantalla y pulsamos Apply. El

atajo de teclado conmutará ahora entre

ambas disposiciones.

Un consejo: en la pestaña Swiching

Options, es conveniente marcar Applica-

tion en Switching Policy. Esto relaciona

cualquier cambio de disposición de

teclado con el programa desde donde se

hizo, de manera que si estamos en

teclado griego con KVocTrain y abrimos

un terminal no nos encontremos te-

cleando con caracteres griegos.

La disposición de teclado griego se

parece suficientemente a la española

como para no necesitar pegatinas. Pero

si lo queremos aún más fácil, podemos

configurar una disposición de teclado

híbrido, usando alguna tecla poco

usada, como la tecla de Windows, para

generar los caracteres griegos en las

teclas que especifiquemos.

Tipo de letra griego y disposición del teclado

deseada, sólo tenemos que posi-

cionarnos sobre la línea en cuestión y

pulsar el botón Suprimir (véase figura

6). No olvide ir guardando el trabajo

realizado cada cierto tiempo.

Aunque el cuadro de diálogo de los

términos tiene un buen número de pes-

tañas, no es necesario preocuparse

mucho por ellas de momento. Las pes-

tañas permiten introducir gran cantidad

de información acerca del término. Esta

información puede ser útil más adelante,

pero hasta dónde llegar en este punto es

cosa suya. La pestaña Adicional permite

incorporar ejemplos,

sinónimos, etc. La pes-

taña Elección múltiple

permite añadir palabras

de pronunciación o sig-

nificado similar, de

manera que KVocTrain

pueda examinarle con

un test multirespuesta

(Aprendizaje ->

(idioma) -> Crear elec-

ción múltiple). Quizás la

pestaña más importante

es la denominada Conju-

gación (véase Figura 7),

que se activa sólo si el tipo de palabra es

Verbo. Podemos seleccionar el tiempo

verbal de la lista desplegable y añadir la

forma adecuada para cada persona en

singular y plural. Están configurados

siete tiempos verbales por defecto, pero

podemos añadir mas yendo a Vocabu-

lario -> Propiedades del documento y

seleccionando la pestaña Tiempos.

Si únicamente queremos una lista de

palabras a secas, podemos acelerar el

proceso de introducción de datos selec-

cionando Opciones -> Edición entre

líneas. De esta manera KVocTrain se

comporta prácticamente como una hoja

de cálculo: podemos añadir las palabras

haciendo doble clic directamente en las

celdas sin tener que preocuparnos de la

información adicional. Probablemente

esta es la mejor manera de añadir frases,

dado que no encajan de manera ade-

cuada en el cuadro de diálogo de los tér-

minos.

La hora de la verdadLlegó el momento del trabajo duro. En

primer lugar, tenemos que configurar

una consulta. Pulsamos en Opciones ->

Opciones de consulta, y nos vamos a la

pestaña Grupos. Pulsamos el botón

Nuevo. Si por ejemplo queremos exami-

narnos del vocabulario de viajes,

tecleamos Viajes como nombre de la

consulta. Este sistema de consultas per-

mite configurar un buen número de tests

para examinarnos de grupos palabras de

nuestro vocabulario.

En la pestaña Consulta (véase Figura

8) podemos fijar un tiempo límite para

contestar (en segundos), así como

especificar si se muestra la respuesta

transcurrido el tiempo, o bien se pasa a

la siguiente pregunta. En la Figura 8 se

ha elegido un límite de 2 minutos y

mostrar la respuesta.

La pestaña Umbrales nos permite

especificar que segmentos del vocabu-

lario se incluirán en el test. En la lista

desplegable Lección, seleccionamos Con-

tenido en, y pulsamos en Viajes en la

parte derecha del cuadro. Las listas

desplegables de la parte inferior del

cuadro nos permiten seleccionar ciertos

tipos de palabras de la lección (por ejem-

plo nombres, etc.), elegir con qué fre-

cuencia debe aparecer la palabra, etc.

Las últimas cuatro listas desplegables

pueden estar sombreadas debido a que

namos la tecla Insert de nuestro teclado

para conseguir una nueva línea y

entonces hacemos doble clic en la nueva

celda de la columna de griego. Se abrirá

una ventana mayor donde poder insertar

detalles de la palabra. Pulsamos Ctrl +

Alt + K para cambiar a griego y, en el

campo Expresión de la pestaña Común,

tecleamos d-a-s-k-a-l-o-w (véase Figura

5). Si usamos SuSE podemos presio-

namos Alt +; y la letra para que

aparezca con tilde. Seleccionamos Sus-

tantivo de la lista desplegable Tipo (que

se refiere a los tipos de palabra), y selec-

cionamos Sustantivo masculino de la

lista desplegable que aparece disponible

a la derecha (nótese que podemos añadir

otras lecciones, tipos de palabra, etc.,

sobre la marcha con sólo hacer clic sobre

el icono a la derecha de los campos de

entrada). Pulsamos sobre Aplicar,

apartamos la ventana y vemos que el tér-

mino ha sido insertado en la celda. A

continuación hacemos doble clic en la

celda Español, presionamos Ctrl + Alt

+ K, introducimos profesor en el campo

Expresión, seleccionamos Sustantivo en

tipo de palabra y pulsamos sobre Aplicar

de nuevo.

Si estamos introduciendo un buen

número de palabras de golpe, cosa bas-

tante probable, se vuelve molesto tener

que regresar a la ventana

de diálogo cada pocos

segundos. Para solu-

cionar esto, podemos

fijar la ventana de pa-

labras pulsando el

segundo botón situado

abajo a la izquierda de la

ventana. Esto la sitúa

perfectamente justo al

lado de la ventana prin-

cipal.

El hecho de usar las

listas desplegables para

introducir el género de

los nombres permite que KVocTrain le

examine al respecto Aprendizaje ->

(idioma) -> Entrenamiento de artículos.

Puede ser aconsejable escribir el artículo

definido junto a cada palabra, de manera

que sea más fácil recordar su género.

Para ello, introducimos el artículo

definido al mismo tiempo que el término

en el campo respectivo.

Continuamos añadiendo palabras en

las categorías (lecciones) elegidas. Si por

error introducimos una palabra no

LINUX USER • Ktools

74 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: KVocTrain nos per-

mite dividir el vocabulario en

lecciones.

Figura 5: Añadimos un término al vocabu-

lario.

Figura 6: La ventana principal de KVocTrain.

están controladas por la pestaña

Bloqueo, que especifica cuándo se debe

dejar de preguntar una palabra. Por el

momento vamos a deshabilitar tanto Blo-

queo como Caducidad de esa pestaña.

Para guardar la configuración de la con-

sulta Viajes, pulsamos sobre Retención

en la pestaña Grupos y luego pulsamos

Aceptar para cerrar el cuadro de diálogo.

A continuación seleccionamos Apren-

dizaje -> Español -> Crear consulta

aleatoria (si tenemos más de dos

idiomas seleccionados en KVocTrain nos

aparecerá seguidamente un menú que

nos permite elegir qué idioma será nues-

tro objetivo). Se irán mostrando las pa-

labras en griego una a una (véase Figura

9). Tendremos dos minutos para teclear

la respuesta correcta y presionar Enter. Si

nos equivocamos se mostrará un men-

saje a tal efecto, y nuestra respuesta se

mostrará en rojo. Podemos volver a

intentarlo, o bien pasar a la siguiente

palabra. Si no sabemos la respuesta,

podemos pulsar No lo sé. KVocTrain

pasará al siguiente término y nos pre-

guntará por la palabra que no supimos al

final de la serie. Si queremos que nos

muestre la traducción debemos pulsar

sobre Mostrar todo: aparecerá la

respuesta correcta en verde y podemos

presionar Enter para pasar a la siguiente

palabra.

Cuando terminemos, todas las pa-

labras usadas en el test aparecerán con

una marca verde, mostrando que están

aún en el grupo de palabras a preguntar.

Cada vez que ejecutemos la consulta de

Viajes se nos preguntarán todas las pa-

labras de la lección Viajes. Pero llegará

un momento en el que sepamos la ma-

yoría de las palabras. Entonces nos

interesará obviarlas y concentrarnos en

las que no sabemos. Para ello volvemos

a la consulta de nuevo y en la pestaña

Bloqueo marcamos Bloqueo y Caducidad.

Por defecto, la palabra contestada correc-

tamente no se volverá a preguntar de

nuevo hasta pasado un día. Podemos

cambiar el periodo por defecto para ajus-

tarlo a nuestras necesidades. Si volve-

mos a ejecutar el test de nuevo y contes-

tamos todas correctamente observare-

mos que ya no están marcadas de verde

(ya no están el grupo de palabras a pre-

guntar). En vez de esto, aparecerán mar-

cadas de rojo, indicando que están blo-

queadas por el momento.

Si este método para repasar nuestro

vocabulario no nos termina de con-

vencer, KVocTrain también nos ofrece un

tipo de test basado en el método desa-

rrollado por Sebastian Leitner. Este

método se basa en preguntar cada pa-

labra al menos cuatro veces, y más de

cuatro las que nos ofrezcan dudas. El

método se explica en el manual de KVoc-

Train. Para habilitar este modo, mar-

camos Método alternativo de aprendizaje

en la pestaña Consulta del cuadro

Opciones -> Opciones de consulta.

Consideraciones FinalesKVocTrain es un programa útil para

aquellos que buscan ampliar su vocabu-

lario. Sin embargo, tiene algunas pegas.

Quizás la mas importante es que no se

ha actualizado desde hace algún tiempo,

a pesar de los recientes debates en las

listas de correo de KDE relativos a

acometer una versión actualizada. Su

diseño no es perfecto, por ejemplo no

hay manera de eliminar los siete tiempos

verbales, y sería ideal poder elegir un

tipo de letra distinto para cada idioma. Y

lo que es peor: el tipo de letra selec-

cionado para la ventana principal no es

la que se usa en el cuadro de introduc-

ción de palabras, que usa el tipo por

defecto de KDE.

Si buscamos un programa de tarjetas

de vocabulario más simple, KDE ofrece

también KWordQuiz de Peter Hedlund

[3]. Si ha entendido este artículo no ten-

drá problemas con KWordQuiz. Este pro-

grama es más sencillo y no permite seg-

mentar la lista de vocabulario ni el grado

de configuración de los tests de KVoc-

Train. Además con KWordQuiz sólo

podremos usar dos idiomas, mientras

que con KVocTrain podemos usar cuan-

tos queramos.

Tanto KWordQuiz como KVocTrain uti-

lizan el mismo formato de archivo

.kvtml, pero debemos tener en cuenta

que si abrimos un fichero hecho con

KVocTrain en KWordQuiz y lo

guardamos desde este último podemos

perder información (la relativa a los

tiempos verbales, por ejemplo). Además

es importante señalar que la información

que se pregunta en estos programas no

se limita a vocabulario de idiomas. En la

página de KVocTrain podemos encontrar

archivos para descargar relativos a escri-

tura japonesa, escala musical, psicología

y muchas cosas más. �

Ktools • LINUX USER

75Número 06W W W . L I N U X - M A G A Z I N E . E S

[1] Página Web de KVocTrain: http://edu.

kde.org/kvoctrain/

[2] Página Web de SIL: http://www.sil.org/

computing/catalog/

show_software_catalog.asp?

by=cat&name=Font

[3] Página Web de KWordQuiz: http://

www.peterandlinda.com/kwordquiz/

RECURSOS

Figura 7: La pestaña Conjugación nos per-

mite introducir información relativa a los

tiempos verbales.

Figura 8: Especificamos las opciones de la

consulta en la pestaña Consulta.

Figura 9: Introduzca la traducción correcta

del término mostrado en la ventana Consulta

aleatoria.

¿Por qué no añadir un poco de estilo si nuestro gestor de ventanas es demasiado aburrido o espartano para

nuestros gustos? Skippy es un imaginativo paginador de ventanas con funciones de previsualización

integradas. POR ANDREA MÜLLERn. BY ANDREA MÜLLER

Trabajando con el paginador de pantallas Skippy.

PREVISUALIZADORDE VENTANAS

[Figura 1: Si Skippy nos devuelve este men-

saje de error y no arranca, es posible que nue-

stro gestor de ventanas está usando [F11]

como tecla de acceso rápido.

Casi cualquier gestor de ventanas

nos ofrecerá una lista de ventanas

mostrando un menú con las ven-

tanas activas cuando pulsamos o presio-

namos la tecla apropiada. Si el progra-

mador que desarrolló el gestor de ven-

tanas tiene un mínimo de conocimientos

de trucos gráficos, la lista puede que

añada algunos iconos a los nombres del

programa. Pero un selector de ventanas

no acelerará el proceso de cambiar entre

ventanas si estamos trabajando con una

selección de navegadores y ventanas ter-

minal distintas. Skippy [1], realizado por

Hyriand, al rescate: en lugar de darnos

una simple lista, Skippy muestra la ven-

tana de la aplicación activa en modo pan-

talla completa.

SofisticadoLos gestores de ventanas afrontan de dis-

tinta forma la gestión de ventanas activas

y Skippy es muy selectivo con los gestores

que soporta. Para asegurarnos de que se-

remos capaces de cambiar entre progra-

mas basados en GUI, necesitaremos un

gestor de ventanas compatible con

Gnome o NetWM, como Waimea. La

página Web del gestor de ventanas o un

vistazo rápido al archivo readme sumi-

nistrado con el gestor nos debería aclarar

estos aspectos. Adicionalmente, los

desarrolladores de Skippy muestran una

lista de gestores soportados por Skippy en

su página Web. Entre los gestores soporta-

dos encontramos Fluxbox 0.9.9, XFWM4

icewm o WindowMaker.

La compatibilidad con Gnome es una

opción de los dos últimos gestores de esta

lista, teniendo que habilitar el parámetro

--enable-gnome configure al construir el

programa. Si simplemente lo instalamos

desde el CD de nuestra distribución, nues-

tra versión de WindowMaker debe fun-

cionar correctamente, puesto que la ma-

yoría de las distribuciones habilitan el

soporte de Gnome. Debian y Mandrake

Linux tienen diferentes sabores de icewm.

El paquete icewm-gnome funcionará con

Skippy, mientras icewm nos ofrece una

pequeña versión del gestor de ventanas

con soporte Gnome.

ArranqueSkippy no se incluye con la mayoría de la

distribuciones, lo que normalmente sig-

nifica tener que construir la herramienta

Trabajando con el paginador de pantallas Skippy.

PREVISUALIZADORDE VENTANAS

LINUX USER • Desktopia

76 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Desktopia • LINUX USER

77Número 06W W W . L I N U X - M A G A Z I N E . E S

dice X Error of failed request: BadAccess

(attempt to access private resource denied,

como en la figura 1, Skippy simplemente

intenta decirnos que no puede reservar la

tecla de acceso rápido [F11]. Esto ocurre

si nuestro gestor de ventanas actual usa la

tecla [F11] o una combinación de ésta y

otra tecla como acceso rápido. Por ejem-

plo, Fluxbox conmuta al escritorio

número 11 cuando pulsamos [F11]. Para

usar el selector de ventanas a pesar de

esto, o modificamos la tecla rápida en

nuestro gestor de ventanas o en Skippy. El

archivo de configuración .skippyrc nos

indica que atajo de la pantalla mostrará la

ventana. Comprobaremos la sección [ge-

neral] en busca de la siguiente línea

keysym = F11

y reemplazaremos F11 con una tecla que

no se use. Por supuesto, no podemos usar

teclas alfanuméricas normales. Nuestras

opciones están restringidas a las teclas de

función o a las especiales. Muchos usua-

rios de Skippy seleccionan la tecla [Scroll

Lock], puesto que la mayoría de los

gestores de ventanas no usan esta tecla.

Para asignar esta tecla debemos editar la

línea .skippyrc de la siguiente manera:

keysym = Scroll_Lock

Tras solventar los conflictos de teclado y

lanzar Skippy, no volveremos a verlo

mucho, puesto que Skippy simplemente

se esconde en segundo plano hasta que

presionamos la tecla especificada en

.skippyrc ([F11] por defecto). Cuando lo

hacemos, Skippy mueve las ventanas

activas a primer plano para obtener

instantáneas de ellas antes de cambiar al

modo de pantalla completa y ofrecernos

una vista preliminar de los programas

activos (figura 2).

Las ventanas inactivas se muestran

como semitransparentes, siendo las ven-

tanas activas de Skippy de color malva.

Podemos usar las teclas de flecha para

conmutar entre los distintos programas y

seleccionar la ventana que necesitemos

presionando [Enter]. Como alternativa

podemos simplemente pulsar sobre la

aplicación que necesitemos. Skippy nos

muestra una herramienta de consejo para

la ventana actual. La herramienta de con-

sejo refleja el contenido actual de la barra

de título de esa ventana.

Cuando seleccionamos una ventana,

Skippy mueve esa ventana al primer

plano y vuelve al modo escritorio. Si

queremos cerrar la vista previa sin selec-

cionar una ventana presionaremos

[Escape].

Skippy se pierda algunas veces y nos

muestra ventanas que ya han sido ce-

rradas, pero si presionamos [Ctrl-F11] en

lugar de [F11] le indicamos a Skippy que

actualice la vista previa.

Configuración a MedidaSi bien el esquema de color que por

defecto usa Skippy quita el hipo, puede

que no se ajuste al diseño preconfigu-

rado de nuestro escritorio. El archivo de

configuración .skippyrc nos permite ajus-

tar la vista previa a nuestro propio gusto.

La sección [normal] define los colores

para las ventanas inactivas, y la sección

[highlight] para las ventanas activas. Las

opciones para el esquema de color usan

el mismo nombre para las dos secciones.

Por ejemplo, tint = es la opción del

color de la ventana, y border = nos per-

mite definir el color del marco.

Skippy aceptará el valor de los colores

en formato y con nombres HTML.

Podemos ejecutar kcolorchooser para

descubrir los valores HTML. Para

averiguar que colores conoce el sistema

ejecutamos showrgb | less. Las entradas

del listado 1 nos dan una vista previa

que muestra las ventanas inactivas en

azul y el programa activo en amarillo

claro. Las líneas que comienzan con el

signo (#) son comentarios de las

opciones individuales. �

usando el código fuente. Podemos descar-

gar el archivo del programa desde [1]. Tras

instalar las librerías imlib2 (Mandrake

Linux llama a este paquete libimlib2) y

freetype junto al paquete de desarrollo

apropiado en nuestra máquina, simple-

mente deberemos escribir make para com-

pilar Skippy. Entonces, como usuario root,

introducimos make install para instalar el

programa en /usr/local/bin.

Skippy analiza el archivo .skippyrc en

nuestro directorio de inicio para su con-

figuración. No tenemos que crear este

archivo nosotros mismos, puesto que

Skippy viene con una plantilla lista para

ser usada. El archivo se almacena como

.skippyrc-default en el directorio del

código fuente del gestor de ventana.

Podemos escribir el siguiente comando

cp skippyrc-default ~/.skippyrc

para copiar el archivo a la ruta adecuada.

Adelante con la VentanasSi escribimos…

skippy &

… arrancamos Skippy como tarea en

segundo plano. Si vemos un mensaje que

1] Skippy: http://thegraveyard.org/

skippy.php

[2] Estándares de freedesktop.org: http://

www.freedesktop.org

01 [normal]

02 #brillo

03 brightness = 0.0

04 #Color de la ventana

05 tint = light sky blue

06 #Grado de trsnaparencia (de 0

s 255) - cuanto más pequeño el

valor,

07 #más transparente la ventana

08 opacity = 200

09 #Color del borde

10 border = SteelBlue

11

12 [highlight]

13 brightness = 0.05

14 tint = #FFFFB8

15 opacity = 255

16 border = #A4A7A2

Listado 1: Definición de colores e~/skippyrc

Figura 2: Skippy nos proporciona una vista

preliminar de las ventanas activas.

RECURSOS

El motor de aventuras gráficas

SCUMM (“Script Creation Utility

for Maniac Mansion”) fue desa-

rrollado por Ron Gilbert para Maniac

Mansion, un juego lanzado al mercado

por Lucasfilm Games en 1987. Lucasfilm

Games, más tarde rebautizado como

LucasArts, fue realizando continuas

mejoras en el motor y lo utilizó para

toda una serie de clásicos de la aventura

gráfica.

La Historia

Las aventuras gráficas basadas en el

motor SCUMM implementaron una

nueva característica genial. Los

jugadores ya no tenían que teclear

instrucciones para controlar a los actores

del juego, solamente bastaba con señalar

objetos para habilitar acciones escondi-

das. Este género es conocido como

“Point & Click Adventure”.

Debido a que LucasArts [1] y otras

compañías hicieron un gran esfuerzo en

78

El motor SCUMM es la base de casi todas las

aventuras gráficas de Lucasfilm Games/

LucasArts. Ahora los fanáticos de estos jue-

gos pueden ejecutarlos en Linux gracias a

ScummVM. POR CHISTIAN BAUN

LINUX USER • ScummVM

78 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Reanimando clásicos con ScummVM

¡A JUGAR!

79

ScummVM • LINUX USER

79Número 06W W W . L I N U X - M A G A Z I N E . E S

el apartado gráfico de estos juegos, estas

aventuras tienen un gran encanto a

pesar de carecer de complejos efectos

3D. Unas melodías pegadizas y sus

inteligentes estrategias terminan por

hacer de la aventura gráfica bajo

SCUMM un producto redondo. Para

poder ejecutar estos juegos en otros sis-

temas operativos, los

desarrolladores de

ScummVM [2] han

reprogramado el

motor del juego.

ScummVM no es un

emulador, sino que

utiliza la información

específica de cada

juego para mostrar los

gráficos, reproducir

los sonidos y permitir

una inigualable juga-

bilidad en cada aven-

tura. ScummVM no

sólo funciona bajo

Linux: lo hace también en los princi-

pales sistemas operativos. (Véase el

Cuadro 1: “ScummVM bajo otros sis-

temas operativos”). El cuadro 2: “Juegos

Compatibles” contiene una lista de los

juegos que funcionan con ScummVM en

el momento de escribir estas líneas.

Instalación

Se puede descargar el paquete RPM

desde la página de ScummVM [2]. El

paquete funcionará con cualquier dis-

tribución basada en RPM, como Man-

drake, Suse y Fedora. Con permisos de

administrador, tecleamos la siguiente

instrucción para instalar el paquete:

rpm -Uvh U

scummvm-0.6.1b-1.i386.rpm

Los paquetes están también disponibles

para Debian Sarge y Sid. Los usuarios de

Debian pueden instalar ScummVM

desde su medio de instalación, o bien

desde un repositorio de paquetes Debian

ejecutando apt-get.

Tecleamos scummvm en un terminal y

aparece la ventana principal, que no

mostrará ningún juego la primera vez.

Para añadir una aventura, copiamos sus

archivos a un directorio. Existe una lista

de los archivos necesarios para los jue-

gos compatibles en [5]. Después de copi-

arlos, seleccionamos Add game en la

ventana principal de ScummVM y explo-

ramos hasta llegar al directorio creado.

Cuando lo encontremos, seleccionamos

Choose y ScummVM incluirá la aventura

en el menú principal (véase Figura 2).

Al hacer doble clic en el título

comienza dicha aventura. La tabla 1

muestra una lista de atajos de teclado.

Existe una lista más completa de atajos

de teclado en el archivo README [6],

incluido en cualquier versión de Scum-

mVM.

ScummVM se puede ejecutarse en otros

sistemas operativos, además de Linux.

La maquina virtual de ScummVM fun-

ciona en la mayoría de variedades de

Unix, incluyendo Irix, Solaris, MacOs X y

BSD. Los usuarios de PDA’s con Palm OS

o Windows CE también pueden ejecutar

con ScummVM juegos antiguos, al igual

que los usuarios de Windows. Incluso

existe una versión de ScummVM para la

consola Dreamcast.

Los usuarios de Windows están

empezando a migrar a ScummVM, a

pesar de que podrían ejecutar las aven-

turas originales de manera nativa. La

gran cantidad de ventajas de ScummVM

mejora la satisfacción del jugador. Por

ejemplo, la mayoría de las tarjetas de

sonido actuales carece de drivers para

DOS, por lo que si se ejecutan bajo MS-

DOS estarán los juegos estarán mudos

sin el motor ScummVM.

Cuadro 1: ScummVM bajo otros sistemas operativo

Figura 1: Sam y Max en su lucha en pro de la ley y el orden.

[Ctrl+z] o [Alt+x] Salir de ScummVM

[Alt+Enter] Conmuta el modo pan

talla completa

[F5] Hace aparecer la pantalla

Save/Load/Quit

[Space] Pausa la aventura (sólo

en los juegos de Lucas

film/LucasArts)

[+] y [-] Aumenta/disminuye la

velocidad del texto

Tabla 1: Atajos de Teclado

Aunque las

aventuras gráficas

tipo “Point &

Click” han desa-

parecido casi por

completo de las

tiendas, existe

una notable oferta

de juegos de

segunda mano en

Internet. Además

de esto, los

creadores de

Beneath a Steel

Sky y Flight of the

Amazon Queen,

Revolution Soft-

ware e Interactive

Binary Illusions respectivamente, han

eliminado las restricciones en las licen-

cias de ambos juegos. De esta manera,

los jugadores pueden descargar los jue-

gos desde la página Web de ScummVM.

Muchas distribuciones incluyen estos

dos juegos como parte del paquete.

Podemos usar el menú Options para

configurar los gráficos de ScummVM y

la salida de audio. La pestaña Graphics

nos permite conmutar el modo a pan-

talla completa. En la pestaña Audio

podemos administrar la salida de audio,

aunque la configuración por defecto

debería funcionar para la mayoría de las

tarjetas. Por último, en la pestaña Misc

especificamos el directorio donde Scum-

mVM guardará nuestras puntuaciones.

Filtro Gráfico

Cuando el juego “Maniac Mansion” salió

al mercado, las tarjetas gráficas soporta-

ban resoluciones de 640x480 píxeles

como mucho, algunas de sólo 320x240.

Para evitar un

aspecto pixelizado

en el modo a pan-

talla completa, los

programadores de

ScummVM han

desarrollado un fil-

tro gráfico. Usa

suavizado de bor-

des para represen-

tar los gráficos

originales a ma-

yores resoluciones.

Si no fuera por esto, los píxeles podrían

apreciarse individualmente con claridad.

La Figura 3 muestra los gráficos origi-

nales a la derecha, y los de ScummVM a

la izquierda.

ScummVM no siempre utiliza los

archivos originales para la salida de

audio. En vez de eso, puede reproducir

archivos MP3 u Ogg Vorbis. Esta carac-

terística tiene mayor importancia para

los dispositivos PDA con poca memoria

de almacenamiento, que para los orde-

nadores de sobremesa.

Conclusión

Aquellos afortunados lectores que no se

hayan desecho de sus viejas aventuras

gráficas, después de tanto tiempo,

agradecerán la oportunidad que les

brinda ScummVM para revivir estas

aventuras en las enormes pantallas de

hoy en día. A pesar de mantener la

interfaz gráfica original, estos clásicos

de la aventura gráfica darán a sus

seguidores suficiente acción como para

mantenerlos felices durante horas, días

y meses. �

LINUX USER • ScummVM

80 Número 06 W W W . L I N U X - M A G A Z I N E . E S

[1] LucasArts: http://www.lucasarts.com

[2] ScummVM: http://www.scummvm.

org

[3] Adventure Soft: http://www.

adventuresoft.com

[4] Revolution Software: http://www.

revolution.co.uk

[5] Lista de archivos necesarios para los

juegos compatibles: http://www.

scummvm.org/documentation.

php?view=datafiles

[6] ScummVM README: http://cvs.

sourceforge.net/viewcvs.py/

scummvm/scummvm/

README?rev=release-0-6-1b

RECURSOS

Podemos usar ScummVM para ejecutar

los siguientes juegos de aventuras gráfi-

cas de Lucasfilm Games/LucasArts [1]

bajo Linux:

• Maniac Mansion

• El día del Tentáculo

• Zak McKracken

• Loom

• Monkey Island 1 y 2

• Curse of Monkey Island

• Indiana Jones 3 y 4

• The Dig

• Full Throttle

• Sam & Max (Figura 1)

Juegos de otros fabricantes que también

usan el motor SCUMM y funcionan con

ScummVM:

• Simon the Sorcerer 1 y 2 (Adventure

Soft [3])

• Flight of the Amazon Queen (Interac-

tive Binary Illusions; Figura 2)

• Beneath a Steel Sky (Revolution Soft-

ware [4])

• Broken Sword 1 y 2 (también de Revo-

lution)

Cuadro 2: Juegos Compatibles

Figura 2: Usamos el menú principal para configurar ScummVM y para

empezar a jugar.

Figura 4: Beneath a Steel Sky, un apasion-

ante juego de ciencia ficción, funcionando

bajo ScumVM.

Figura 5: Pantalla de configuración de Scum-

mVM.

Figura 3: La figura

de la izquierda

muestra el efecto

del filtro gráfico de

ScummVM. La

misma figura sin

filtrar a la derecha.

La utilidad tr reemplaza caracteres

en archivos de texto. Para ello lee

la entrada estándar y envía los

resultados a la salida estándar. Por

supuesto, podemos utilizar los ope-

radores tradicionales para redirigir

ambos flujos. De hecho, cuando tr brilla

de verdad es en combinación con otras

órdenes del intérprete de comandos.

Reemplazos SimplesEl comando tr recibe dos cadenas como

argumento y reemplaza todas las coinci-

dencias del primer argumento con el

segundo argumento. Puede sonar com-

plicado, veamos el siguiente ejemplo.

Con la siguiente sentencia cambiamos

cada carácter “e” que haya en “Petro-

nila”, por el carácter “a”:

$ echo Petronila | tr 'e' 'a'U

Patronila

Por supuesto que podemos especificar la

cadena sobre la que queremos reem-

plazar en un fichero. Con tr '1' '2' <

prueba.txt reemplazaremos cualquier

“1” que aparezca en prueba.txt por “2” y

enviaremos el resultado a la salida están-

dar. Debemos tener en cuenta que cada

carácter que pasamos como argumento

se interpreta de manera independiente,

es decir, cada carácter se reemplaza por

su contraparte en el segundo argumento.

De esta manera, tr 'abc' 'xyz' reem-

plazará “a” por “x”, “b” por “y” y “c”

por “z”. Si la segunda cadena es más

corta que la primera, tr sustituirá los que

no tengan contraparte por el último

carácter del segundo argumento.

Por ejemplo, si escribimos tr 'abc' 'z'

reemplazaremos cada “a”, cada “b” y

cada “c” por “z”. Sin embargo, tr es inca-

paz de sustituir correctamente “ä” por

“ae”. Al no ser las cadenas de la misma

longitud, cada “ä” se sustituye sólo por

“a”. Para este tipo de sustitución, se

recomienda usar sed.

Mayúsculas/Minúsculastr puede ser extremadamente útil si

necesitamos intercambiar mayúsculas y

minúsculas. La mejor opción es definir

dos argumentos como vectores de letras

minúsculas y mayúsculas, por ejemplo:

tr 'a-z' 'A-Z' < prueba.txt

O si lo prefiere, también es posible del

siguiente modo:

tr [:lower] [:upper:] U

< prueba.txt

Todo Salvo…El comando tr tiene algunos parámetros

que nos permiten tener mayor control.

Por ejemplo, podemos usar la opción -d

para borrar:

tr -d '0-9' < prueba.txt

que provoca que todos los números

pasen a mejor vida. Si combinamos esta

opción con -c, tenemos una manera aún

mejor de eliminar contenido superfluo.

Si queremos suprimir cualquier cosa

excepto espacios en blanco, letras en

mayúscula y letras en minúscula,

usamos -c para indicarle a tr qué es lo

que no tiene que borrar:

tr -c -d 'A-Z a-z' < prueba.txt

En combinación con -s, tr nos permite

reducir el tamaño de un archivo, algo

útil si tuviéramos, pongamos por caso,

un archivo .log lleno de espacios en

blanco. La opción -s aguarda el paso de

82

La herramienta tr es realmente útil. Este comando tan simple permite reemplazar cadenas en archivos de

texto. Ya sea reemplazando letras o eliminando espacios en blanco, le sorprenderá la versatilidad de tr.

POR HEIKE JURIK

LINUX USER • Línea de comandos

82 Número 06 W W W . L I N U X - M A G A Z I N E . E S

El uso de tr y dos2unix

LOST IN TRANSLATION

83

Línea de comandos • LINUX USER

83Número 06W W W . L I N U X - M A G A Z I N E . E S

uno o dos argumentos. Por ejemplo, tr -s

' ' < prueba.txt borra todos los espacios

en blanco de un archivo. Pero si sólo

necesitamos eliminar los dobles espacios

o tabulaciones, e insertar un espacio

simple en su lugar, podemos suministrar

dos argumentos a tr -s:

tr -s [:blank:] ' ' < prueba.txt

En este caso, tr reemplazará espacios en

blanco contiguos o tabulaciones por

espacios simples.

Entre Dos MundosSi hemos tenido ocasión de intercambiar

ficheros entre sistemas Windows y

Linux, habremos comprobado que sue-

len aparecer caracteres extraños al final

de las líneas. Y si, por ejemplo, tratamos

de abrir un archivo ASCII creado en Win-

dows con el editor Vim, encontraremos

extraños caracteres ^M. La razón de todo

esto es que los dos sistemas usan símbo-

los distintos para el carácter nueva línea.

Mientras que Windows usa \r\n para

nueva línea, Linux únicamente usa \n.

tr puede ayudarnos a migrar archivos

ASCII entre los dos sistemas. Mediante:

tr -d '\r' < textowin >U

textolinux

Eliminamos el carácter \r extra del final

de cada línea, con lo que tenemos la con-

versión. La opción -d indica a tr que

elimine el carácter no deseado. Con el

operador < logramos procesar textowin,

y con > enviamos el resultado “limpio”

al archivo llamado textolinux.

Conversores AlternativosLas herramientas dos2linux y unix2dos

son también útiles si necesitamos con-

vertir de acá para allá entre sistemas

Linux y Windows. Para convertir un

archivo de texto Windows al formato

adecuado para Linux, simplemente

tecleamos:

$ dos2unix -n textowin U

textolinux

dos2unix: converting file U

textowin to textolinux U

in UNIX format ...

Esta sentencia usa la opción -n, que nos

permite especificar tanto un fichero de

entrada como uno nuevo de salida. La

página man contiene más detalles y con-

sejos. La opción -k mantiene la informa-

ción de fecha y hora original, y la opción

-o escribe los cambios directamente en el

archivo original. El comando unix2dos

hace exactamente lo mismo, pero en sen-

tido contrario:

unix2dos -n textolinux textowin

En algunos sistemas, estos comandos

son enlaces simbólicos a los programas

fromdos y todos, respectivamente. Estos

programas tienen una sintaxis ligera-

mente distinta y parámetros también

diferentes. Es recomendable usar la

opción -b para crear una copia de seguri-

dad, incluso si estamos creando un

archivo nuevo. También debemos tener

en cuenta que la opción -a elimina todos

los retornos de carro cuando se le indica

a fromdos (y no sólo los precedidos por

un avance de línea). Si especificamos -a

con el comando todos, convertiremos

todos los avances de línea en pares CR-

LF (retorno de carro-avance de línea). El

comportamiento por defecto en este caso

será convertir sólo aquellas líneas que

no están precedidas de un retorno de

carro.

Los dos ejemplos de dos2unix y

unix2dos mostrados anteriormente ten-

drán en este caso el siguiente aspecto:

cat textowin | fromdos -a U

> textolinux

cat textolinux | todos -a U

> textowin

CombinadosEl comando tr realmente brilla en todo

su esplendor cuando se usa en combi-

nación con otras órdenes de la línea de

comandos. Por ejemplo, imaginemos un

gran número de archivos con espacios en

blanco en el nombre de archivo y quere-

mos reemplazar estos espacios con

guiones bajos. Un bucle for, el comando

mv y tr nos ayudarán a realizar la

operación:

$ for i in *; do mv -v "$i" U

`echo $i | tr ' ' '_'`; done

'archivo con espacio' -> U

'archivo_con_espacio'

'archivo con espacio 2' -> U

'archivo_con_espacio_2'

Si traducimos esto a cristiano, la senten-

cia quedaría algo como: para todos los

archivos en el directorio actual, renom-

bramos los archivos tal y como nos

indica el resultado de aplicarle tr. �

Nueva línea: La sintaxis para la nueva

línea en los ordenadores está basada en

las máquinas de escribir. Hay un botón

de avance de línea y otro de retorno de

carro. Los sistemas operativos tienen

distintos métodos de tratar la nueva

línea. Mientras que Linux usa un simple

avance de línea (\n), DOS y Windows le

añaden un retorno de carro (\r\n).

GLOSARIO

Heike Jurzik

estudió Alemán,

Informática e

Inglés en la Uni-

versidad de Colo-

nia, Alemania. Descubrió Linux

en 1996 y quedó fascinada con

la potencia de la línea de coman-

dos desde ese momento. En su

tiempo libre puede que la

encuentre en clases de folclore

irlandés, o visitando Irlanda.

LAAUTORA

Un artículo sobre accesibilidad no

está tan lejos de un artículo

sobre localización como podría

pensarse: ambas tecnologías están desti-

nadas a solventar los problemas que pre-

senta la diversidad de nuestros alumnos,

sea lingüística y cultural, sea perceptiva

o intelectiva; y para ambos tendremos

que bucear en la configuración no están-

dar de los dispositivos de interrelación

con el ordenador.

Siento que el artículo que ahora me

propongo escribir es urgente porque es

un campo bastante desconocido en

castellano y poco tratado en inglés. La

última versión del Linux Accessibility

HOWTO (hay traducción: Accesibilidad-

Cómo [1]) es de 2002, y que yo sepa no

existe un repaso de las nuevas iniciativas

y desarrollos desde un punto de vista

educativo. Y sin embargo el asunto está

de plena actualidad: las administra-

ciones públicas están llegando a acuer-

dos con instituciones como la ONCE

para trabajar en la adaptación del soft-

ware educativo [2] a las necesidades de

los alumnos discapacitados. ¿Qué hay

84

En este artículo nos enfrentamos al tema de la

accesibilidad y la tecnología adaptativa desde

un punto de vista educativo. Daremos un repaso

al estado actual de las soluciones y normas rela-

cionadas con la atención a la diversidad que

tiene origen en deficiencias perceptivas o cogni-

tivas y trataremos de demostrar que el software

libre está llegando a la madurez en este campo

también.

En este artículo nos enfrentamos al tema de la

accesibilidad y la tecnología adaptativa desde

un punto de vista educativo. Daremos un repaso

al estado actual de las soluciones y normas rela-

cionadas con la atención a la diversidad que

tiene origen en deficiencias perceptivas o cogni-

tivas y trataremos de demostrar que el software

libre está llegando a la madurez en este campo

también.

POR JUAN RAFAEL FERNÁNDEZ GARCÍA

LINUX USER • Educación

84 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Accesibilidad en 2005

TODOS NECESITAMOS AYUDA

85

Educación • LINUX USER

85Número 06W W W . L I N U X - M A G A Z I N E . E S

cación software o un aparato. General-

mente se define en términos de las

necesidades de los usuarios de dicho

producto o servicios (…) Así pues, la

usabilidad se encarga de todo lo que

influya en el éxito y la satisfacción del

usuario.” En cambio la accesibilidad

indica “la facilidad con la que algo puede

ser usado, visitado o accedido en general

por todas las personas, especialmente

por aquellas que poseen algún tipo de

discapacidad. Para promover la accesibi-

lidad se hace uso de ciertas facilidades

que ayudan a salvar los obstáculos o ba-

rreras de accesibilidad del entorno, con-

siguiendo que estas personas realicen la

misma acción que pudiera llevar a cabo

una persona sin ningún tipo de dis-

capacidad. Estas facilidades son lla-

madas ayudas técnicas.” Basta leer las

dos definiciones para darse cuenta de

que los dos conceptos comparten el 99%

de su genoma: se basan en la facilidad

de uso y se distinguen por los destinata-

rios. La usabilidad tiene destinatarios

específicos, un target, luego es un con-

cepto con un origen posiblemente co-

mercial; por el contrario la accesibilidad

generaliza. Y tiene su apoyo en obliga-

ciones impuestas por las legislaciones

nacionales. Quizás debamos insistir en

esta distinción: la primera tiene que ver

con la eficacia; la segunda con los dere-

chos de todos al acceso a las nuevas tec-

nologías. Y del mismo modo que no

podíamos aceptar una informática para

occidentales que se defiendan en inglés,

no podemos aceptar páginas o herra-

mientas que excluyan a los que son

diferentes.

Los entornos integrados de escritorio

(Gnome, KDE) han especificado normas

que deben cumplir las aplicaciones

creadas con sus herramientas de desa-

rrollo[3]. Estas guías pre-

tenden definir un concepto

bastante borroso, el de la

intuitividad. Había un chiste

de firma de correo electrónico

que decía que la única interfaz

intuitiva es el pezón; yo diría

que llamamos intuitivo a a

aquello a lo que nos hemos

acostumbrado, como a que

haya una opción “Guardar”

bajo la entrada de menú

“Archivo”. Estas guías inciden

en la integración y coherencia

de la interfaz de usuario, y en

el énfasis en la usabilidad y la accesibili-

dad.

Este artículo ha sido escrito dos veces,

y espero tener que volver a redactarlo

con las aportaciones y críticas que

genere. Comencé con el enfoque que me

parecía evidente, los discapacidades,

hasta que me di cuenta de que herra-

mientas de generación del sonido

hablado las podemos necesitar todos, o

que la informática debe responder a la

cuestión del tamaño de los tipos de letra

en terminales de cualquier tamaño, o

prever salidas alternativas a la visual. En

el momento actual está ordenado por

tecnologías, por supuesto pensando

siempre en su función auxiliar.

Tamaños y coloresEmpecemos por lo evidente, con perdón.

Aquí y en el extranjero las adaptaciones

más desarrolladas están dirigidas a las

personas con deficiencias visuales.

Siguen distintas estrategias, dependien-

do del tipo de deficiencia. Pero es impor-

tante que estén integradas en la interfaz

de usuario y no depender de aplica-

ciones individuales: la solución no está

en poder utilizar unas pocas aplicaciones

adaptadas, sino en que todo el entorno

esté modificado en función de las necesi-

dades del usuario.

Los nuevos entornos integrados son

configurables desde el arranque: en la

figura 1 vemos la ventana de configu-

ración de las tecnologías de asistencia en

Gnome. Para empezar los escritorios per-

miten configurar el tamaño de letra y

ventanas y el número y contraste de co-

lores simultáneos mediante lo que lla-

man temas; se han creado temas espe-

ciales de alto contraste, y las personas

con problemas de daltonismo o disfun-

ciones neurológicas de cualquier tipo

hoy día? No soy especialista en el campo

pero espero abrir un camino que otros

recorran.

Cuando el dios Theuth le presentó al

rey de todo Egipto Thamus su invención

de las letras con las palabras “Este

conocimiento, oh rey, hará más sabios a

los egipcios y más memoriosos, pues se

ha inventado como un fármaco de la

memoria y de la sabiduría” [3] estaba

presentando la tecnología como una

ayuda, como prótesis de los seres

humanos. ¿Qué son una estaca, un

abrigo, un coche, sino extensiones que

nos hacen más fuertes, más adaptables a

nuevos medios y más rápidos que otros

seres de la naturaleza?

Hace tiempo que pienso que lo mejor

de los libros es que nos permiten

escuchar a los mejores de todos los tiem-

pos, consiguen que Aristóteles me hable

y puedo utilizar libros para aprender a

leerle en el griego en el que daba sus

conferencias (y desde el artículo anterior

puedo escribirlo en mi portátil). Hoy día

un ordenador es una máquina que nos

completa, que hace de memoria y nos

ahorra cálculos, que nos permite comu-

nicarnos con personas que no están físi-

camente presentes y obtener informa-

ción instantáneamente. Todos los

humanos necesitamos ayudas.

Idades VariasLos teóricos se llenan la boca con las

palabras usabilidad y accesibilidad.

Hasta tenemos una nueva abreviatura

para geeks, a11y. Pensemos la relación

entre ambos conceptos y su importancia.

Según la wikipedia “la usabilidad es la

medida de la facilidad de uso de un pro-

ducto o servicio, típicamente una apli- Figura 2: Tema de alto contraste.

Figura 1: Tecnología de asistencia en Gnome.

pueden configurar el comportamiento

cromático de todo el entorno. En la

figura 2 hemos seleccionado un tema de

alto contraste, y además hemos reducido

la resolución de pantalla para que todo

aparezca de mayor tamaño.

Es tradicional también el uso de lupas

y ampliadores de zonas de pantalla,

desde el clásico xmag hasta los integra-

dos magnifier o kmag. La imagen 3 nos

muestra en acción lo que los traductores

de Gnome llaman el magnificador de

pantalla.

Una última adaptación tiene que ver

con los llamados timbres o pitidos (beep)

visuales: el sistema no puede esperar

que los usuarios oigan basándose en

alarmas sonoras; el funcionamiento de

un programa en su interacción con el

usuario tiene que ofrecer una vía alterna-

tiva de información, en este caso visual

(parpadeos, ventanas emergentes), para

comunicar avisos o solicitar decisiones.

Síntesis del hablaEs fácil no caer en la cuenta: pensamos

en accesibilidad y pensamos en la

ceguera; y sin embargo los ciegos no

necesitan una interfaz gráfico de

usuario. Los ciegos se bastan con una

terminal, incluso una consola. Un ciego

no necesita ventanas. Y todos sabemos

que Linux y los sistemas operativos

Posix son el paraíso de los amantes de la

línea de órdenes: con la línea de órdenes

se navega por Internet, se chatea, se

escucha música, se programa, se

imprime, se investigan los problemas

leyendo los registros, se solucionan.

¿Cómo lee una pantalla un ciego?

Pidiéndole al ordenador que lea para él.

Es decir, con un

programa de sínte-

sis de voz.

Aunque existen

sintetizadores

hardware que fun-

cionan con GNU

Linux (puede con-

sultarse la lista en

el Accesibilidad-

Cómo o en la

ayuda de emacs-

peak: DoubleTalk

PC, DoubleTalk LT,

LiteTalk, Braille ‘n

Speak, Type ‘n

Speak, Braille Lite,

Apollo 2 from Dol-

phin, or Accent SA) e IBM creó una ver-

sión de ViaVoice para GNU Linux, la sín-

tesis de voz por software se llama festi-

val, obra del Centre for Speech Technol-

ogy Research de la Universidad de Edim-

burgo (por completar la exploración dire-

mos que flite --festival light-- es su ver-

sión ligera, y hay otro motor, FreeTTS,

que funciona en java). Los programas de

síntesis del habla necesitan bibliotecas

de voces, que en nuestro caso están pro-

porcionadas por FestVox (algunas de

estas voces son no-libres en sentido

Debian) o Mbrola.

Festival puede utilizarse como un pro-

grama de línea de órdenes; podemos uti-

lizar la siguiente línea para escuchar este

mismo artículo

festival --language spanishU

--tts acces.txt

Mi experiencia es que la calidad de la

salida dependerá de la calidad de la voz.

La voz en castellano (festvox-ellpc11k)

suena bastante metálica y artificial, es la

voz de una máquina, pero totalmente

inteligible; las voces en inglés están bas-

tante más avanzadas.

Pero hablábamos de integración plena:

veíamos en la figura 1 que era posible

configurar nuestro ordenador para que

desde el primer momento el sistema nos

diera una respuesta auditiva; esto se

logra instalando festival como un servi-

cio y activando el lector de pantalla de

gnopernicus (Gnome), kmouth o KTTS,

KDE Text-to-Speech System (KDE).

Insisto: ¿para qué quiere un ciego ven-

tanas? Los sistemas anteriores son útiles

para paliar deficiencias visuales no se-

veras, pero ahora necesitamos solu-

ciones alternativas. Necesitamos lec-

tores de pantalla. La primera opción la

proporciona como siempre emacs

(¿saben el chiste? Emacs es un gran sis-

tema operativo, lástima que no tenga un

buen procesador de textos) con speech-

dispatcher y Emacspeak. El Accesibili-

dad-Cómo nos relaciona otros cuantos

lectores, con salidas a hardware o por

software. Entre ellos speakup necesita

que se parchee el núcleo (en Debian

disponemos de los parches para los

núcleos 2.4.x); he encontrado referen-

cias a que Janina Sajka, directora de

investigación y desarrollo de tecnología

en la Fundación Americana para Ciegos

(http://www.afb.org) y ciega ella misma,

lo utiliza. screader está disponible en

Debian y tiene salida para festival.

El tecladoYa sabemos mucho sobre la configu-

ración a bajo nivel del teclado porque

hemos trabajado en la instalación de dis-

tintos mapas de teclado. Ahora vamos a

intentar dar respuesta a aquellos alum-

nos que tienen problemas motóricos a la

hora de pulsar de forma coordinada las

teclas y no pueden utilizar un ratón.

En primer lugar creo que todo el

mundo sabe ya que nuestra configu-

ración de teclado qwerty está diseñada

expresamente para dificultar el tecleado.

Tiene su origen en la necesidad de ralen-

tizar las pulsaciones porque la mecánica

de las máquinas de escribir iniciales no

podían seguir el ritmo de un mecanó-

grafo experto: se dispersaron las teclas

correspondientes a los caracteres y com-

binaciones más frecuentes, de manera

que los dedos tuvieran que recorrer el

máximo espacio y tardaran el máximo de

tiempo. Esta disposición era provisional

y hoy día absurda; fue corregida en los

teclados Dvorak, y sólo una inercia

LINUX USER • Educación

86 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 3: Magnificador de pantalla de Gnome.

Figura 4: Filtros de la accesibilidad del

teclado.

Educación • LINUX USER

87Número 06W W W . L I N U X - M A G A Z I N E . E S

que se puede definir el tiempo a partir

del cual se rechaza una pulsación man-

tenida o repetida y se devuelve una señal

anunciándolo. Las “teclas de con-

mutación” devuelven una señal (normal-

mente un beep auditivo) cuando se

pulsa una tecla de conmutación (mayús-

culas…). Por último explicaremos el con-

cepto de “teclas persistentes” (sticky

keys, “pegajosas” ha traducido el equipo

de KDE; figura 5): permiten sustituir las

combinaciones simultáneas de teclas por

pulsaciones consecutivas.

¿Es posible emular el ratón con un

teclado? Sí, activando las “teclas del

ratón”. Con ellas activadas es posible uti-

lizar el teclado numérico para dirigir los

movimientos del puntero.

No he encontrado documentación

específica actualizada sobre el uso de

teclados especializados, adaptaciones

para una sola mano, etc., salvo las

capacidades de configuración del proto-

colo XKB.

El ratónHemos hablado del manejo de la interfaz

con la única ayuda del teclado; puede

darse el caso contrario: el usuario sólo

puede utilizar un apuntador de algún

tipo, y no puede acceder al teclado.

Recordaremos que para el sistema opera-

tivo los ratones son dispositivos que

envían señales que se traducen a posi-

ciones en la pantalla y a pulsaciones;

cualquier dispositivo del que se conozca

la señal, sea ratón, joystick, mando a dis-

tancia o switch puede hacer el papel de

apuntador. Y las versiones modernas de

las X Windows permiten el uso simultá-

neo de dos apuntadores, se forma enca-

denada (uno es dominante) o indepen-

diente entre ellos. Cualquier switch de

los que se utilizan en educación especial

es factible de ser utilizado también en

GNU Linux: sólo depende de que se

comunique con el sistema operativo

mediante estándares conocidos o se

hagan públicas sus especificaciones.

KMouseTool es una aplicación de KDE

que realiza los clics por el usuario. Está

pensado para personas que sufren dolor

al pulsar el ratón (cada vez son más fre-

cuentes tendinitis, síndrome del túnel

carpal…). Actúa cuando el puntero se

detiene brevemente (el tiempo es config-

urable) disparando un click. En el modo

de arrastre deja pulsado el apuntador y

espera antes de liberarlo; si durante esta

pausa movemos el ratón espera a que

terminemos antes de dejar de pulsar.

Para sustituir al teclado se dispone de

los llamados “teclados de pantalla” o

“teclados virtuales”. El más elemental es

el que recoge la imagen 6: xvkbd mues-

tra un mapa del teclado en pantalla y

permite la pulsación sobre una tecla que

se envía al programa que tenga el foco.

Más desarrollado y complejo de uso es

gok, el “Gnome On-screen Keyboard”

(figura 7). No se limita a mostrar una

copia virtual de teclados reales; puede

crear teclados que, de forma dinámica,

en función del contexto, incluyan teclas

para lanzar aplicaciones, u opciones de

la interfaz de usuario de la aplicación

que tenga el foco. Esta función propor-

ciona un acceso eficiente a los elementos

de la interfaz y elimina la necesidad de

utilizar el teclado y sus atajos.

En otro orden de cosas, una alternativa

a la entrada por teclado de textos es el

uso de sistemas de entrada predictiva.

Dasher (figura 8) está diseñado para

situaciones donde la entrada por teclado

es impráctica (PDAs, móviles) o imposi-

ble (movimiento del puntero con la

cabeza o los ojos). Es un programa inter-

nacionalizado, se puede trabajar en

español, y en las pruebas lo he encon-

trado algo inestable.

Reconocimiento del HablaSegún la definición de Romañach

Cabrero en el documento de la ONCE

citado en la bibliografía, la tecnología de

reconocimiento de voz “consiste en regis-

incomprensible --y muy humana-- nos

hace resistirnos a aprender ¡y a enseñar!

una solución tecnológica que es manifi-

estamente mejor. ¿Pero no es eso lo que

le pasa a GNU Linux?

Es posible manejar un entorno de ven-

tanas sin el uso del ratón. De hecho si lo

que utilizamos con más frecuencia es un

editor de textos y quizás un navegador

nuestro trabajo será más rápido sin el

ratón, porque no deberemos levantar los

dedos de las teclas para ir a coger el

apuntador. Centrándonos en Gnome, hay

una serie de combinaciones de teclas pre-

definidas para las tareas más frecuentes

(se les llama “atajos” y suelen aparecer

como recordatorio en los menús), y es

posible configurar estas combinaciones

para evitar interferencias entre progra-

mas y adaptarlas a nuestro gusto o nues-

tras posibilidades. Quizás la combinación

más importante que debamos aprender

es Alt-F1, que nos despliega el menú de

aplicaciones. Alt-Tab recorre cíclicamente

las aplicaciones abiertas, Alt-F4 cierra la

aplicación que tenga el foco… El incon-

veniente evidente es que deberemos

recordarlas.

Pero las personas que no pueden

manejar un ratón probablemente nece-

siten ayuda en su manejo del teclado. La

extensión AccessX del protocolo X cubre

este campo[5]. En primer lugar es posi-

ble definir “teclas lentas” (figura 4), pro-

cedimiento por el que sólo se recoge una

pulsación de tecla si se mantiene pul-

sada durante un tiempo definido; las

teclas lentas responde al problema de fil-

trar las pulsaciones involuntarias de per-

sonas con problemas de coordinación en

sus movimientos. De forma relacionada,

existen las “teclas de rebote”, filtro por el

Figura 7: Gnome On-screen Keyboard.accesi-

bilidad del teclado.

Figura 6: Teclado virtual xvkbd.

Figura 5: Activación de las extensiones de

accesibilidad del teclado.

trar la voz del usuario y,

a partir del análisis de la

forma y del mensaje de

la voz, realizar tareas

predeterminadas. Su uso

más habitual es la con-

versión del mensaje

hablado a texto escrito

(dictado automático de

documentos) y el manejo

de un ordenador”. Sobre

esta última función, el

manejo del ordenador, se

ha trabajado en Linux.

El “Accesibilidad-

Cómo” habla de

FreeSpeech (http://

freespeech.sourceforge.

net), del proyecto Open-

Mind. He explorado las

páginas del proyecto y

no encuentro ficheros

posteriores a 2002, y

aunque la lista de

correo sigue viva (con

dos mensajes en lo que

va de año) deduzco que

es un proyecto no muy activo. Espero

que alguien desmienta esta afirmación.

CVoiceControl (http://www.kiecza.net/

daniel/linux/) es un proyecto de Daniel

Kiecza abandonado en 2002. Ambas apli-

caciones tenían un aspecto alentador.

Otras soluciones (por ejemplo Xvoice)

dependen de la presencia en el sistema

del motor no-libre de IBM ViaVoice Dicta-

tion for Linux.

Cambiando de aires, Robert Tucker,

en correo a la lista <linuxfortranla-

[email protected]> de 6 de

marzo de 2005, nos pone al día del

estado de la tecnología del

reconocimiento del habla en GNU Linux.

Informa de que “en la actualidad los dos

proyectos más avanzados de

reconocimiento del habla en Linux son

Sphinx y Perlbox”.

Sphinx (http://cmusphinx.sourceforge.

net/html/cmusphinx.php) no es una apli-

cación destinada a usuarios finales, sino

un conjunto de bibliotecas. Han sido

desarrolladas y utilizadas por compañías

telefónicas (incluida Telefónica I+D)

para sus servicios de contestador

automático y atención automatizada al

cliente. Mantiene tres versiones

simultáneas: Sphinx-2 es la versión más

rápida y ligera; Sphinx-3 es más avan-

zada y precisa, mientras que finalmente

Sphinx-4 está escrita en

java. Sphinx-2 es la

única de las tres ver-

siones que funciona en

tiempo real.

Perlbox Voice (figura 9)

es una aplicación perl-

Tk que utiliza festival

para generar habla y

Sphinx-2 para convertir

órdenes habladas de un

diccionario a órdenes

que la máquina entiende

(abrir una ventana, lan-

zar navegador…). En el

foro del sitio web de la

aplicación se ha discu-

tido la adaptación a

idiomas diferentes del

inglés; no me consta

que se haya terminado.

No conozco ninguna

aplicación libre que

permita el dictado de

texto sin restricciones.

Y sin embargo tengo la

impresión de que la

tecnología, Sphinx, está ahí, que sólo

falta un proyecto que ate los cabos suel-

tos y se los ponga al alcance del usuario

final.

Y en el próximo númeroHasta ahora sólo hemos tocado la super-

ficie de la accesibilidad en GNU

Linux[6]. Debemos examinar los sis-

temas alternativos de comunicación

entre la máquina y el ordenador (morse,

braille), la disponibilidad o no de aplica-

ciones destinadas a los alumnos con

deficiencias cognitivas, la accesibilidad

en la web, un cambio de enfoque para

examinar todas estas herramientas y

especificaciones desde el punto de vista

pedagógico, el necesario balance final…

¿Nos vemos en el próximo número? �

LINUX USER • Educación

88 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 8: Dasher.accesibilidad

del teclado.

Figura 9: El control de perlbox-

voice.

[1] Los Cómo del LDP, Libre Documenta-

tion Project están disponibles en el

paquete doc-linux-html; existe traduc-

ción en el sitio de la sede española del

LDP (http://es.tldp.org) y paquete

Debian doc-linux-es.

[2] Ejemplo en Andalucía: http://www.

andaluciajunta.es/SP/AJ/CDA/

ModulosComunes/

MaquetasDePaginas/

AJ-vMaqCanalNot-01/

0,20446,214288_214445_70680,00.

html. Lo que habría es que compro-

bar es el seguimiento del proyecto;

existe el antecedente de 11Linux

(ftp://ftp.once.es/pub/accessibility/

Linux/OnceLinux/), abandonado (¿ter-

minado?) desde el año 2000.

[3] Platón, Fedro, 274a ss.

[4] Véanse las GNOME Human Interface

Guidelines 2.0, disponibles en el

paquete dog-gnome-hig.

[5] http://accessibility.freestandards.org/

modules.

php?name=Content&pa=showpage&

pid=34 nos recuerda que gran parte

de estas soluciones ya estaban prefi-

jadas en las especificaciones del pro-

tocolo XKB. El grupo de trabajo se

plantea como objetivo “identificar y

adoptar un subconjunto de la especi-

ficación XKB que permita propor-

cionar las propiedades y compor-

tamientos estándar del teclado que

necesitan las personas con proble-

mas de movilidad”.

[6] Para leer más:

(1) Linux Accessibility Resource Site,

LARS (http://lars.atrc.utoronto.ca/)

(2) Josephine Ciuca, Speak to me,

Linux, en http://applications.linux.

com/applications/05/01/18/2148234.

shtml, 19 de enero de 2005

(3) http://www.once.es/

appdocumentos/once/comun/

SS-PUB-CL-Tecnologia%20y %20dis

capacidad%20visual% 20doc.zip

(4) Noticia Software libre y personas

disminuidas, de amphora, en Liberto

nia (http://libertonia.escomposlinux.

org/story/2003/6/13/1729/26171), junio

de 2003

(5) Hilo abierto por Javier Sánchez,

cicero, en Barrapunto en julio de 2004

(http://barrapunto.com/article.

pl?sid=04/07/18/

0919243&mode=thread)

RECURSOS

Juan Rafael Fernández García es

profesor de educación secun-

daria y tiene una larga experien-

cia en la traducción y docu-

mentación del software libre. Ha

sido coordinador de uno de los

Centros que participan en la

experiencia andaluza de integrar

las TIC en la educación y actual-

mente trabaja como asesor de

formación del profesorado.

EL AUTOR

Éste mes, nuestro director, Paul C.Brown nos cuenta como crearuna lista sin repeticiones a partir

de una columna de Calc, la hoja de cál-culo de OpenOffice, y como correr esosimprescindibles programas DOS (como“Monkey Island”) sin tener que recurrira un emulador de grandes proporcionestipo qemu o bochs.

He de explicar que mi distro es de esaseclécticas (léase: un horrible híbrido).Empezó su vida como una Mandrake 9.2(no os riáis los de Debian, que os oigo).Ahora mismo es una especie de mons-truo de Frankenstein que comprendepaquetes de MDK 9.2, 10.0, 10.1, 10.2,

PLF y cosas compiladas por mi mismocon sus respectivas dependencias yajustes. Más que evolucionar, se hadesparramado y cada nueva “mejora” hasupuesto romper una docena de cosasque ya funcionaban satisfactoriamente.

Lo último ha sido el sonido.

Pasando Lista¿Qué es lo que suele ocurrir? Pues que loque empieza su vida como un “sucio yrápido hack”, después no hay manera delibrarse de él. Algo así como lo que lepaso a MS-DOS, que empezó su vidacomo QDOS, que no irán las siglas deQuick Disk Operating System ni nada por

el estilo, sino de Quick and Dirty Opera-ting System, y fíjate tú: más de 15 añoscon un parche.

En este sentido, tomamos decisionestodos los días que son provisionales perose quedan para siempre. Tomemos elcaso de las hojas de cálculo: condemasiada frecuencia hacen de sustitu-tos de bases de datos.

Imaginemos que administras unpequeña empresa con tres progra-madores y quieres seguirle la pista a lasdiferentes tareas y las horas que les dedi-can a cada una cada uno de los desarro-lladores. ¿Vas a crear una base de datospara tan poca cosa? Las respuesta a eso

LINUX USER • Trucos

90 Número 06 W W W . L I N U X - M A G A Z I N E . E S

LISTAS Y JUEGOSLos mejores trucos salidos de los teclados de los expertos

LISTAS Y JUEGOS

En el día a día del usuario y desarrollador de Linux, nos topamos con problemas de toda suerte e índole, que

se resuelven con o mucha, poca o ninguna ayuda de la comunidad, con Google, Dogpile, o Usenet, pero

siempre con dosis de imaginación e intuición. Esta sección reúne los mejores soluciones para el beneficio de

todos. Soluciones que no se encuentran googleando o que se encuentran, pero o que son insatisfactorias,

incompletas o directamente mal planteadas. POR PAUL C. BROWN

Trucos • LINUX USER

91Número 06W W W . L I N U X - M A G A Z I N E . E S

nombre de nuestro macro(ver Figura 2). Yo lo he lla-mado newname, por quedevuelve un nuevo nom-bre y sólo un nuevo nom-bre cuando lo encuentraen una lista sobre el queitera.

Pulsamos en el New para habilitar elmacro en la lista. Después escogemos elnuevo macro de la lista y pulsamos enEdit. Abriremos una IDE bastante chula(ver Figura 3) que nos permite escribirscripts en BASIC. Nuestro macro es enrealidad muy corto (véase Listado 1).BÁSICamente, lo que hace es iterar através de un matriz de entrada(search_list), comparándola con unmatriz destino (in_target_list) y devuelveel primer nombre del matriz de entradaque no se encuentra en el matriz de des-tino. Pero ¿de dónde salen esos matrices?Esos matrices son un grupo de celdas dela hoja de cálculo. Si la lista de la quequeremos sacar los nombres se hallaocupando las celdas A1 a la A10, elBASIC de OOo interpreta eso como unamatriz bidimensional donde, en nuestrocaso, search_list(A,1) es el primer ele-mento, search_list(A,2) es el segundo, yasí sucesivamente.

La matriz de destino es la columnadonde ya se han insertado nombres. Portanto, si vamos a poner los nombres denuestros empleados en la columna E,tendremos que comprobar que el nom-bre buscado no esté en las celdas de lacolumna E por encima de la celda dondese encuentra la función, ya que esas cel-das ya contendrán otros nombres de lalista que hemos encontrado.

¿Confuso? Yo también. Veámoslo conun ejemplo. Guardemos nuestra funcióny salgamos del editor pulsando en elicono del disco y cerrando la ventana deleditor. Ahora, en la celda E2 escribamos:

=NEWNAME($A$2:$A$50;$E$1:$E1)

(Me imagino que ya sabréis que hace eldólar ¿no? Evita que la dirección que lesucede cambie cuando copiamos la fór-mula a otra celda, zoquete). Veremoscomo aparece el primer nombre de lalista contenida en A2..A50 en la celda.Esto, por supuesto, se podría haber con-seguido simplemente con

=A1

Pero ahoracopiemos el con-tenido de E2 al porta-papeles, escojamos acontinuación las cel-das E3..E50.¡Oooooh! Nosaparece la lista sinrepeticiones… y sinomisiones (ver Figura 4).

Ahora es pan comidosumar las hora de cada programadorindividual para calcular el misérrimosalario que les vamos a pagar con unaformula del tipo

{=SUM(($A$2:$A$50=$E2U

)*$C$2:$C$50)}

(suponiendo que las horas se hallan enla columna Cx). Esto es una fórmula dematriz (ver las llaves que la encierran).Es decir, contiene como argumentos ele-mentos que han de tomarse como

es: Pues sí, por que, paracuando te quieres darcuenta, los tres desarro-lladores se han convertidoen diez o veinte y elnúmero de proyectos seha multiplicado por cinco.

Enhorabuena por laexpansión. Pero si el documento que uti-lizaste para controlar al personal empezósiendo un hoja de cálculo, probable-mente siga siendo una hoja de cálculo.

A lo hecho, pecho, como suele decirse.Es final de mes y ahora tienes que sacarun lista de todas las horas trabajadaspara saber lo que se les debe a cada uno.Tienes una hoja como el que se ve en laFigura 1. ¿Qué vas a hacer? ¿Contar amano a cada programador a mano e irapuntando en un post-it los datos? Apartede lame, esa solución es ineficiente, yaque, si algo nos enseñan las máquinas esque, si bien programadas y configuradas,los ordenadores cometen bastantesmenos errores que los humanos ¿y si teolvidas de incluir ese nuevo programadorfinlandés? Todo tu presupuesto al garete.Así que, lo suyo, es dejar este tipo de tra-bajo a la hoja de cálculo.

Lo primero que necesitamos es poderreproducir la lista de programadores sinrepeticiones. Esto, que se hace muy fácilcon un GROUP BY con una consulta parabases de datos SQL (¿ves? Te lo dije), noes tan sencillo de hacer con una hoja decálculo. De hecho, no hay ninguna fun-ción que nos facilite esta tarea en Calc…pero tenemos Basic. Sí, señoras yseñores, es relativamente sencillo coneste lenguaje, similar al VisualBasic deMSOffice, escribir una función para Calcutilizando lo que OpenOffice.org conocecomo “macro”.

Lo primero es, con nuestra hoja de cál-culo abierto, escoger Tools > Macros >

Macro de la barra de menús. En la ven-tana de diálogo, en el cuadro de texto delángulo superior izquierdo, escribimos el

e01 function

newname(search_list,in_target_l

ist)

02

03 dim i,j as integer

04 dim found as boolean

05

06 found=True

07 newname=""

08

09 for i=lbound(search_list,1) to

ubound(search_list,1)

10 found=False

11 for

j=lbound(in_target_list,1) to

ubound (in_target_list,1)

12 if

search_list(i,1)=in_target_lis

t(j,1) then found=True

13 next

14 if found=False and

search_list(i,1)<>"" then

15 newname=search_list(i,1)

16 exit for

17 endif

18 next

Listado 1: Macro

“newname”

Figura 1: La lista de progra-

madores, tareas y horas.

Figura 2: Ventana de diálogo de creación de

macros.

matriz. Para editar uno de estos mons-truos y hacer que se comporte comouna fórmula de matriz, hemos de pulsar[May]+[Ctrl]+[Enter] al terminar laedición. En este caso, la fórmula buscaen el rango comprendido entre las cel-das A2…A50 valores que sean iguales a

E2. Si encuentra unaigualdad, se devuelve

1, si no 0. El resul-tado se multi-

plica por losvalores corres-

pondientes saca-dos de las celdasC2…C50, teniendo

como efectofinal, que sólose sumen losvalores

correspondientes al programador cuyonombre aparece en E2.

Una vez escrita la primera fórmulapara el primer programador, podemoscopiar y pegar la fórmula de la manerahabitual para el resto. El resultado es quese suman las horas por cada uno de losprogramadores (ver Figura 4). ¡Ja!Además es dinámico: Si añadimos

nuevos programadores a la lista o asig-namos nuevas tareas a programadoresexistentes, la lista se automodifica comotiene que ser.

¿No es genial?

Guybrush ThreepwoodRulezYa veíamos en el artículo dedicado aQemu en el número 5 de Linux Maga-zine, lo importante que se está haciendoel poder correr múltiples sistemas opera-tivos bajo uno “padre”. En ese artículo secitaba el ejemplo de un programa de laempresa, importantísimo, que nadiepuede (ni tiene tiempo para) reescribir yque, vaya por dios, sólo funciona bajoDOS.

Todos sabemos que programa es ese:¡The Curse of Monkey Island, porsupuesto! Pero, seamos realistas,señores, correr todo un señor emuladorcomo Qemu, Bochs o VMWare paraseguir las peripecias de Guybrush es,como diríamos en inglés, un poco“overkill”, es decir, exagerado. Inclusodosemu, que ni siquiera se comportamuy bien con estos juegos, y que unavez conseguí configurar y hacer correr,aunque me sale urticaria cada vez quepienso que lo voy a tener que volver autilizar, vale la pena.

Para estos casos de tan imperiosanecesidad, de hecho, tenemos dos he-rramientas a medida: Dosbox [3] yScummvm [4]. El primero no es, nipretende ser, a diferencia de dosemu yWine, un verdadero emulador de otrosistema operativo, sino que incluyemejoras y “transportes” a medios(emulando, por ejemplo, antiguas tar-

jetas de sonido a través del driver desonido) al sistema Linux que permitencorrer con un mínimo de problemas…¡JUEGOS!

No hay que crear discos virtuales nizarandajas en Dosbox. Basta “montar”un directorio C: con cualquiera de nues-tro directorios existentes. Por ejemplo: sitenemos un montó de juegos (compra-dos legalmente, claro) en el directorio/home/mi_dir/dosgames/, bastaría conhacer

mount c /home/mi_dir/dosgames/

en el shell de Dosbox para disponer deuna flamante unidad C: donde hacernuestros pinitos.

Para cambiarnos a la unidad C: (Dos-box arranca en un directorio virtual, Z:)haríamos:

c:

Si tienes problemas para conseguir losdos puntos (:), prueba a mantener pul-sado la tecla Alt y pulsando 5 y 8 en elteclado numérico. Cuando sueltes Alt,los dos puntos deberían aparecer.

Ya podemos correr cualquier juego quese halle en los directorios y subdirecto-rios de C: (ver Figura 5).

Otra alternativa para estos programases ScummVM. Pero ya hablamos deScummVM en otro artículo en éstenúmero (ver las sección de Linux User)y, por tanto, no me explayaré.

Pero, vamos, que no todo va a ser pro-gramar interfaces para bases de datos,digo yo. Otro día os explico como hagomi Cous-cous de gambas y pescado. �

LINUX USER • Trucos

92 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: A la izquierda, la lista original de

programadores, tareas y horas. A la derecha

la lista generada de programadores y sus

horas sumadas.

Figura 3: La IDE de desarrollo de OpenOffice.org.

Figura 5: Dosbox ejecutando Indiana Jones and The Fate of

Atlantis.

Más del 30% de descuento respecto al precio de portada: Consigue 12 números por 54’90 Euros y todos los DVDs ¡Gratis!

A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios para que renueves tu subscripción. Ésta se renovaráautomáticamente cada año. Recibirás una confirmación aproximadamente 30 días antes del final de tu periodo de subscripción, pero no serequiere que hagas nada para seguir suscrito.

¡No te pierdas Linux Magazine nunca más! La subscripción te asegura que recibas los conocimientos Linux de más alta calidad en tu domiciliocada mes.

Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el preciode todos los números que no hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.

Linux Magazine es algo más que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre.Suscribiéndote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre allá donde haga falta.

PATENTES

95Número 06W W W . L I N U X - M A G A Z I N E . E S

No Todo está PerdidoA pesar de ello, según los especialistas en

jurisprudencia consultados, las patentes

“idiotas” serán casi imposibles de aplicar.

Es dudoso que un juez condene a una

pequeña empresa de software por vul-

nerar, y los siguientes ejemplos van en

serio, la patente de Amazon que registra

a favor de la librería “el uso de un clic

para realizar una compra”. ¿O qué tal que

le lleven a juicio a uno por violar la

patente concedida a Van Loobroek Albert

Ariaan M de Holanda que contempla el

cálculo de una lista de la compra basada

en una receta de cocina (la innovación

técnica se halla en el uso del monitor y la

impresora para tal cálculo)? Por supuesto

que también Microsoft puede meternos

un pleito por no respetar su patente

525484 registrada en la oficina de

patentes de Nueva Zelanda que dice que

Redmond ha inventado y posee el pro-

ceso por el cual un documento generado

por un procesador de textos y almace-

nado en un único fichero XML pueda ser

manipulado por aplicaciones que entien-

dan XML. Demandas sin mérito en una

tribunal de justicia… siempre y cuando el

juez sepa de qué se está hablando.

Por que, si bien la demanda de Ama-

zon y del señor Van Loobroek son fáciles

de explicar y demostrar que son ridículos,

el de Microsoft, que para la mayoría de

los lectores de Linux Magazine es tan

Las patentes amenazan los cimientos de la sociedad de la información.

… Y AHORA EN SERIO

dos mil líneas de código y ya estás

infringiendo la patente de alguien”.

La mayor parte de las PYMEs de

desarrollo del software, que componen el

90% de las empresas del sector en

Europa, simplemente no podrán soportar

otro gravamen más y tendrán que cerrar

sus puertas, no sólo destruyendo el tejido

básico del desarrollo de software europeo,

sino que eliminando toda posibilidad de

innovación que desde este sector se

pudiera producir.

Pero no sólo afectaría a las empresas,

si la ley sobre patentes se aplicase al pie

de la letra, las patentes impedirán el

desarrollo sin previo paso por caja a uni-

versidades, laboratorios y demás institu-

ciones científicas. El parón tecnológico

en el área del desarrollo de software

sería casi completo.

En el desarrollo del software libre el

parón sería total. Si tenemos en cuenta

que la mayor parte de los proyectos de

software libre se desarrollan por grupos

de usuarios sin ánimo de lucro y el resto

dependen de “la buena voluntad” de

empresas del sector, es lógico suponer

que los primeros no podrán afrontar los

costes del pago de patentes o litigios por

infracciones y que los segundos retirarán

su apoyo a proyectos que no generan

beneficios directos y que incluso podrían

producir pérdidas por culpa de las

patentes.

Patentes. Es un tema demasiado

grave como para no comentarlo.

Como sabéis, y dejando monser-

gas a aparte, estamos a un tris de conver-

tir Europa en el equivalente “patente-

mente” hablando de Estados Unidos,

lugar de ensueño éste, donde existen fir-

mas cuya única actividad consiste en aca-

parar patentes para llevar a juicio y

obtener compensaciones para quienes los

infringen a sabiendas o por ignorancia.

El Colmo del RidículoMicrosoft está presionando para que el

gobierno europeo apruebe una legis-

lación que no obligue a presentar

ninguna evidencia de invento para con-

ceder una patente, lo que exime a la

empresa solicitante de seguir la línea de

trabajo y producir algo a partir de esa

patente. Con una ley así ¿qué las

patentes protegen la innovación? Y una

mierda. De aprobarse estaríamos en los

albores de una nueva era de ciber-sqwat-

ting, donde, en vez de cuatro “listos”

acaparando dominios web de marcas

comerciales para después extorsionar a

sus legítimos dueños para su cesión,

cuatro poderosas empresas que aca-

parasen la mayor parte de las patentes,

extorsionarían a todas las demás para

que éstas últimas pudiesen desarrollar

cualquier cosa. Por que, tal y como me

dijo Miguel de Icaza una vez “escribes

Normalmente dedico esta sección a algún chiste personal o público. A reírme de actitudes o posturas que me

parecen risibles, pero, últimamente, se me atraganta la risa y la sonrisa se me hiela en los labios. No hay

nada de gracioso sobre lo que voy a contar, a pesar de que en el número 1 de Linux Magazine [1], hice un

chiste sobre ello. POR PAUL C. BROWN

nuestro propio cerebro, so pena de

fuertes multas y costes legales.

Sector en Crisis PermanenteCon la demanda de que no se apruebe la

directiva europea sobre patentes, no es

como si estuviérase pidiendo que se pro-

teja artificialmente a un sector deficitario

o anticuado, como si del gremio del cali-

brado de ruedas de carro de tracción ani-

mal se tratase, con todos mis respetos

hacia los profesionales de ese sector. Los

desarrolladores de software, empresas y

particulares, no piden al gobierno

europeo protección contra el libre mer-

cado. Todo lo contrario: el libre mercado

es el que existe ahora, un mercado sin

patentes de software, donde una PYME

puede competir en un área muy duro,

muy cambiante, pero sin el peligro aña-

dido de pleitos por infracciones a patentes

irrazonables.

Con la legislación propuesta en el parla-

mento europeo, se fulminará legalmente y

de un plumazo un mercado abierto. Uti-

licemos una símil fácil de entender. Todos

recordaréis la movida que los pequeños y

medianos comerciantes protagonizaron

contra las grandes superficies y los hora-

rios de apertura indiscriminados. Existe

ahora una ley en España que obliga a las

grandes superficies a cerrar ciertos días.

Lo que es más, impide la saturación de

grandes superficies limitando el número

de grandes almacenes que pueden abrirse

por kilómetro cuadrado. No voy a

meterme en si estas leyes son justas o no,

pero son proteccionistas. Sirven para pro-

teger a los pequeños tenderos en un mer-

cado libre (o “descontrolado”, dirían

algunos). Estas medidas están destinadas

a limitar la libertad de los comerciantes,

en este caso los grandes comerciantes.

Sin embargo, la aprobación de la direc-

tiva de patentes europea, aplicado a los

horarios de apertura de las tiendas sería el

equivalente de decir: “Hola, soy Car-

refour. Como yo abro en domingo, tú no

puedes abrir nunca” o, aún peor: “Hola,

soy Carrefour. Como he tenido la idea de

abrir en domingo, tú no puedes abrir

nunca”. Eso no es exactamente lo que se

entiende como libre mercado.

Haz Algo… ¡Ahora!Si eres desarrollador, el primer paso con-

siste en registrar tu software. No ani-

mamos a nadie a que haga un software

que en un principio se pretendía libre, pri-

vativo, sino que se registre el código,

algoritmos , etc., junto con la licencia en

uno de los registros de la propiedad in-

telectual. Al ser un registro público, en

caso de conflicto, uno puede referirse

siempre al registro y esto aclarará

cualquier duda legal sobre el origen del

software en cuestión e impedirá tanto vio-

laciones de licencia como posibles

demandas de patentes.

Segundo, difunde la información sobre

lo nocivo que son patentes a todo el

mundo que cree que le pueda afectar y se

haya sumido en la ignorancia.

Recordemos que esto incluye a casi todos.

Fotocopia este artículo (ahí va nuestro

“permiso explícito y por escrito”) y dáselo

a leer a tus amigos, compañeros de tra-

bajo, jefes y socios comerciales. Existen

muchos documentos similares en Internet

con el mismo objetivo (ver el cuadro de

Recursos). Difúndelos.

Tercero, y casi lo más urgente en este

momento, hay que impedir que la direc-

tiva de patentes propuesta al parlamento

europeo se apruebe. Desafortunada-

mente, en un parlamento donde el absen-

tismo de los eurodiputados es la norma

en vez de la excepción, la falta de quorum

es sinónimo de aprobación. Hace falta

una mayoría absoluta de votos en contra

para parar la moción. Visita uno de las

webs reseñados en el cuadro Recursos y

averigua como puedes ayudar y que

pasos puedes tomar para inclinar la ba-

lanza a favor de la socialmente justo.

A menudo es tan sencillo como rellenar

un formulario o mandar un correo elec-

trónico.

Suerte. �

claro como el agua, para un profano entra

en el terreno de la magia negra tecnoló-

gica y un juez no versado en las artes

informáticas podría considerarlo lo bas-

tante esotérico como para merecer ser

contemplado en un juicio.

Pero incluso una resolución favorable

en un tribunal de justicia para la industria

del software española resolvería poco, ya

que la legislación española no se basa en

la jurisprudencia, sino en la inter-

pretación de las leyes. Que un juez decida

que una demanda por violación de

patente no tenga mérito no significa que

otro juez de otro tribunal vaya hacer lo

mismo, aún si hablamos de la misma

patente.

Y, en todo caso, sólo la amenaza de

demanda es suficiente para hacer desistir

en el desarrollo a la mayoría de los

creadores de software por el desorbitado

coste y riesgo que entrañaría un proceso

judicial.

El Maravilloso Mundo de losVericuetos LegalesRizando el rizo, la jurisprudencia

española contempla la figura de “tercero

de buena fe”. Imaginemos que desarro-

llamos una aplicación, original, libre de

infracciones de patentes (harto difícil,

esto, pero en fin) y lo distribuimos bajo la

licencia GPL. Y ahora llega otra empresa,

llamémosle “MacPiratas S.L.”, y decide

que le gusta, quita toda referencia a los

autores originales y a la licencia, esconde

el código fuente y se lo vende a una ter-

cera empresa, “MacIluso S.A.”, para su

comercialización. Concedámosle a esta

tercer empresa el beneficio de la duda y

supongamos que desconoce la condición

original de software libre del producto ini-

cial. Esta tercera empresa es lo que se

conoce como “tercero de buena fe” y, si

bien uno puede pleitearse con el violador

de la GPL original, el tercero de buena fe

es intocable.

Incluso puede darse el rocambolesco

caso de que, si el juez decide que el ter-

cero de buena fe no tienen ninguna

culpa en lo que se refiere a la infracción,

exima a éste de cualquier tipo de pena,

incluyendo el cese de la comercia-

lización del producto. El resultado de

esto es que el “tercero de buena fe”

puede, a continuación, solicitar una

patente sobre nuestro producto y, a efec-

tos prácticos, impedir que sigamos

desarrollando un proyecto que salió de

PATENTES

96 Número 06 W W W . L I N U X - M A G A Z I N E . E S

Plataforma europea en contra de las

patentes de software: http://www.

nosoftwarepatents.com/

Fundación en pro de la Infraestructura

de Información Libre (FFII): http://www.

ffii.org/

Proinnova, plataforma española a favor

de la libertad de innovación: http://

proinnova.hispalinux.es/

RECURSOS

Artículo supuestamente humorístico del

autor sobre las patentes: http://www.

linux-magazine.es/issue/01/Humor.pdf

OTROS RECURSOS

EVENTOS

97Número 05W W W . L I N U X - M A G A Z I N E . E S

Linux World South AfricaFecha: 17-20 Mayo

Ciudad: Johanesburgo,Sudáfrica

Sitio Web:

www.linux-

worldexpo.co.za

II GUADEC-ESFecha: 19-21 Mayo

Ciudad:A Coruña

Sitio Web:

http://2005guadec-

es.org

aKademy 2005Fecha: 27 Agosto - 4 Septiembre

Ciudad:Málaga,España

Sitio Web:

http://dot.kde.org

Información de Contacto

DirectorPaul C. Brown

CoolaboradoresPaul C. Brown, Jose Manuel González Vida, JuanRafael Fernández, Pedro Orantes, José María Ruíz,Alberto Planas.

TraductoresPaqui Martín Vergara, Paul C. Brown, Jesús ReyesDelgado, Antonio Rueda, Víctor Tienda.

MaquetaciónSergio Hardasmal

Diseño de PortadaPinball([email protected])

Diseño de PublicidadFeedback(www.f-back.com)

Publicidadwww.linuxmagazine.com.es/pub/

Para EspañaPaul C. [email protected]@linuxnewmedia.esTel.: (+ 34) 951 010 556Móvil.: (+ 34) 655 036 836Fax.: (+ 34) 951 010 516

Sergio Hardasmal [email protected].: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516

Para el Resto del MundoBrian Osborn [email protected] Tel.: (+49) 6509 910 495Fax.: (+49) 6509 910 497

Director EditorialPaul C. Brown

Director de ProducciónSergio Hardasmal [email protected]

Subscripciones: www.linuxmagazine.com.es/magazine/subs

Precios Subscripción (12 números + 1 DVD cada 3 números) España: 49,50 €Europa: 59,90 €Resto del Mundo - Euros: 79,90 €Resto del Mundo - Dólares U.S.A.: $94,90 €

Tel.: (+34) 951 010 556Fax.: (+34) 951 010 516 [email protected]

Linux MagazineLinux New Media Spain, S.L.Avda. Juan López Peñalver, 2129590 - Campanillas Málaga ESPAÑA [email protected].: (+34) 951 010 556Fax.: (+34) 951 010 516

www.linux-magazine.es - Españawww.linux-magazine.com - Mundowww.linux-magazine.de - Alemania

Si bien se toman todas las medidas posibles paragarantizar la precisión del contenido de los artículos publi-cados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en larevista. Asimismo, Linux Magazine no compartenecesariamente las opiniones vertidas por suscolaboradores en sus artículos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupu-losamente para confirmar que está libre de virus y errores.

Copyright y Marcas Registradas © 2004 Linux NewMedia Spain, S.L. Linux New Media Spain S.L. prohíbela reproducción total o parcial de los contenidos deLinux Magazine sin su permiso previo y por escrito.Linux es una Marca Registrada de Linus Torvalds.

Impreso en Alemania

Impresión: Dierichs Druck + Media GmBH

Distribución: SGEL

Depósito Legal: MA-116-2005

ISSN edición impresa: 1576-4079

ISSN edición online: 1699-2237

Calendario de Eventos

Evento Fecha Ciudad Sitio WebSolutions Linux

php tropics 11-15 Mayo Cancún,México www.phparch.com/tropics

LinuxWorld South Africa 17-20 Mayo Johanesburgo,Sudáfrica www.linuxworldexpo.co.za

Xtech 2005 24-27 Mayo Amsterdam,Holanda www.xtech-conference.org

II GUADEC-ES 19-21 Mayo A Coruña http://2005.guadec-es.org

Wind River 2005 User 22-25 Mayo Orlando,Floria,EE.UU. www.windriverevents.com

XTech 2005 24-27 Mayo Amsterdam,Holanda www.xtech-conference.com

LinuxWorld Italia 24-26 Mayo Milán, Italia www.linuxworldexpo.it

LinuxWorld Conference & Expo New York 25-26 Mayo Nueva York,EE.UU. www.linuxworldexpo.com

5 European Tcl/Tk User Meeting 27-28 Mayo Bergish Gladbach www.t-ide.com/tcl2005e/tcl2005.html

GUADEC 2005 29-31 Mayo Stuttgart,Alemania http://2005.guadec.org

Red Hat Summit 1-3 Junio Nueva Orleans,EE.UU. www.redhat.com/promo/summit

LinuxWorld Conference & Expo Tokyo 1-3 Junio Tokyo, Japón www.idg.co.jp/expo/lw

Linux Forum Asia 2005 15-16 Junio Hong Kong,China www.linuxforumasia.com

LinuxTag 2005 22-25 Junio Karlsruhe,Alemania www.linuxtag.org

I Congreso de Tecnologías del Software Libre 7-8 Julio A Coruña http://congreso.gpul.org

2005 Linux Symposium 20-23 Julio Ottawa,Canadá www.linuxsymposium.org

Campus Party 2005 25-31 Julio Valencia,España http://web5.campus-party.org

Usenix Security Symposium 1-5 Agosto Baltimore,MD,EEUU www.usenix.org

aKademy 2005 27 Agosto - 4 Septiembre Málaga http://dot.kde.org

98

HTML CONBLUEFISHEl poderoso editor

de HTML Bluefish

nos trae gratuita-

mente edición

HTML eficiente y profesional con

una licencia GPL. Descubre por

que no necesitas una herramienta

de edición de HTML comercial

teniendo a mano este editor libre

sencillo de usar.

PRÓXIMO NÚMERO

98 Número 06 W W W . L I N U X - M A G A Z I N E . E S

En portada el mes que viene,examinamos emuladores,máquinas virtuales y el célebre APIWINE. Veremos técnicas que nospermitirán ejecutar software di-señado para otros sistemas bajoLinux y aprenderemos a instalarXP en Linux con VMWare 4.5.2.También estudiaremos como co-rrer MacOs X en una ventana Linuxsobre un PowerPC. Le daremos unrepaso a como funciona User-Mode Linux que nos permite correrun Linux como un proceso dentrode otro Linux.

BOLETÍN LINUXMAGAZINEEl Boletín de Linux

Magazine te da la oportu-

nidad de ver lo que se

avecina en el siguiente

número de Linux

Magazine e incluye

enlaces a artículos que

aparecen en nuestro sitio

web antes de que la ver-

sión impresa llegue a los

quioscos. Suscríbete en

www.linuxmagazine.es

/boletin.

Julio 2005: Número 7

PRÓXIMO NÚMERO

A LA VENTA: JUNIO DE 2005

EMULADORES

EN EL DVD: SUSE 9.2COMERCIALAdemás, Linux Magazine, con el

número 7, viene con un DVD de

lujo: la versión comercial y com-

pleta de SuSE 9.2. Esta versión NO

se puede descargar gratuitamente,

ya que contiene software comercial

(aplicaciones, drivers, etc.) que

con la versión de descarga se ten-

drían que instalar por separado. El

toque profesional de SuSE hace que

éste sea la distro ideal para la empresa y el

usuario final.

Además, el DVD de capa dual viene con 7,5 Gigabytes de software,

casi el doble de lo que trae un DVD convencional.

Un broche de oro para un número de lujo.