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.
[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
kitware.com:/cvsrootU
/VTK login
@KL(responder con el password:
vtk)
Para bajar el código fuente
tecleamos:
cvs -d :pserver:U
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
org:/cvsroot/CMakeU
login password: cmake
y para descargarlo:
cvs -d :pserver:U
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.
Top Related