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

Page 1

Desarrollo Patentes

Desktopía

LINUX MAGAZINE

Python: 3D en tiempo El peligro amenaza el Skippy: previsualización real con VTK desarrollo del software de ventanas activas

KVocTrain Edición en Una ayuda al vocabulario

NÚMERO 06

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

Multimedia

Las herramientas y técnicas de los expertos

MainActor

MULTIMEDIA

Transcode Plugins VST/VSTi

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

Q-DVD-Author

MLDonkey Descarga todo lo que necesitas en las redes de pares p36

MLDonkey

OpenOffice

Macros OpenOffice

Aprende a programar macros para tus aplicaciones p51

ScummVM

ScummVM

p78

Scribus (III)

Recupera los clásicos juegos de aventuras desde Linux

WWW.LINUX- MAGAZINE.ES

Castellano


¡Hazte con tus ejemplares atrasados! #1

• Número 1: Especial Redes - Servidores de correo TLS MediaWiki - Konversation - DVD Fedora Core 3 ... • Número 2: Hardware Linux - PCs Silenciosos - Gestor de ventanas Twin - Backups con Konserve ... • Número 3: Seguridad para todos - Configuración

#2

iptables con Shorewall - Ruby Rails - Domótica ... • Número 4: Redes Wireless - Scribus - Radio USBHackeando con Zaurus - DVD Mandrake 10.1 ... • Número 5: Email seguro - Seguridad Wireless - Gimp con Python - Bluetooth - QEMU - QTCanvas - Scribus (II)

#3

¡No esperes a que se agoten!

¡pídelos ya! #4

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


EDITORIAL

EL PORQUÉ DE LAS COSAS Estimado Lector de Linux Magazine ay 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 salvavidas para aquellos desencantados o escaldados de otras alternativas bien conocidas 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 absolutamente 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 Windows. 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 sensació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

H

Nos sentimos orgullosos de nuestros orígenes como pu-

conseguir la blicación, que se remonta a los primero días de la tan ansiada revolución Linux. Nuestra revista hermana, la publicación aceleración 3D. alemana Linux Magazin, fundada en 1994, fue la primera revista dedicada a Linux en Europa. Desde aquellas tem¿Qué hizo pranas fechas hasta hoy, nuestra red y experiencia han Ubuntu? crecido y se han expandido a la par que la comunidad Instaló y conLinux a lo ancho y largo del mundo. Como lector de Linux figuró los driMagazine, te unes a una red de información dedicada a la distribución del conocimiento y experiencia técnica. vers sin ningún No nos limitamos a informar sobre el movimiento Linux problema. y de Software Libre, sino que somos parte integral de él. Estupendo ¿no? Sin embargo, me quedé con el resquemor de no disquetes que había creado para empezar haberlo resuelto yo solito. la instalación. En el otro… Dios mío, eso En un thread en Usenet, otra vez sobre sí ha sido una pesadilla. La máquina era Ubuntu, un usuario comenta: (es, si se recupera de la experiencia) una […] me decidí a dar el paso final e AMD nuevecito, montada según mis instalar la Debian, para lo cual elegí la especificaciones precisas para correr Ubuntu. Y todo ha ido *casi* perfecto. Lo Linux y en el que ya corría felizmente del casi lo pongo por: Fedora, dos configuraciones diferen1.- En la instalación, no me deja ciadas de Mandrake y LinEspa. Sin establecer una contraseña de supe- embargo, la experiencia de correr el rusuario ó root […]. instalador de OpenBSD parece haberla 2.- A la hora de ejecutar el dselect, mancillado para siempre. Los Mandrakes quisiera que me apareciesen todos los no arrancan y LinEspa ha desaparecido paquetes habidos y por haber bajo Linux directamente. Por arte de birli-birloque la […]. partición de Fedora quedó intacta. Juro 3.- En el modo normal, se me inicia el que seguí las direcciones del OpenBSD y modo gráfico, cuando yo quiero que se creé una partición para él solito, pero me me inicie en modo texto[…]. ha dejado un erial de devastación en mi A lo cual le contestan: disco duro. Algo habré hecho mal sin Si deseas usar Debian, ¿por qué no duda y los apóstoles del sistema operainstalas Debian en lugar de Ubuntu? tivo demoniaco (lo digo por su mascota, Ubuntu no te aportará nada, aparte de ojo) estarán riéndose y renegando de mí limitaciones como las que describes y a partes iguales por no dar con la formula problemas. mágica, nada obvia, por cierto, que me Y es que, es lo de siempre: o eliges fle- habría transformado en un un feliz xibilidad, lo que te complica la insta- usuario de OBSD. lación y configuración, pero te evita “liChico, no sé. mitaciones” y “problemas”, ya que deja Sinceramente creo que ambas posturas que sea el usuario quien configure a su tienen su lugar y gracias a Linux, se gusto y a la medida de su sistema. O puede empezar con la facilidad de uso y eliges facilidad de uso y te resignas a acabar con la flexibilidad en unos pocos deshacer y rehacer para resolver las “li- pasos, así que, a fin de cuentas, nada es mitaciones” y “problemas” que plantean tan malo como todo eso. las instalaciones “asistidas”. Volviendo al tema de BSD, he intentado 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 Paul C. Brown había manera que me reconociese los Director

WWW.LINUX- MAGAZINE.ES

Número 06

3


CONTENIDOS • Linux Magazine nº 6

PORTADA 10 MainActor Con algunos trucos y efectos especiales, MainActor puede ofrecernos unos impresionantes títulos de apertura.

14 Q-DVD

PRÁCTICO 28 Scribus Damos los toques finales a nuestro periódico Linux. Aprendemos a generar un PDF y descubrimos qué opina un profesional de la maquetación de nuestro proyecto.

Q-DVD-Author proporciona una interfaz amigable para controlar el proceso de realización de DVDs de vídeos bajo Linux.

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?

19 Handyman Transcode es una útil herramienta para manipular archivos de vídeo desde la línea de comandos.

32 HotPlugging En este artículo, vamos a investigar cómo funciona el sistema de conexión en caliente.

36 MLDonkey

23 Audio

El cliente multired MLDonkey proporciona a los usuarios acceso a la mayoría de redes donde se comparten archivos.

El sonido en Linux ha hecho enormes avances. Ahora podemos incluso ejecutar la enorme cantidad de plugins VST directamente en nuestro estudio Linux.

6 93 95 97 97 98

4

Editorial Noticias Suscripciones Noticias del Más Allá: Patentes Información de Contacto Eventos Próximo Número

Número 06

Vemos como empezar a programar macros con el BASIC de OpenOffice para ampliar las prestaciones de nuestras aplicaciones ofimáticas.

DESARROLLO 54 Perl Un útil guión en Perl que nos permite una visión inmediata de nuestro estado financiero, incluyendo los balances de múltiples cuentas y las inversiones en bolsa.

LINUX MAGAZINE 3

51 Macros OpenOffice

42 Knoda En la segunda parte de nuestro taller investigaremos como crear formularios e imprimir informes con Knoda

WWW.LINUX- MAGAZINE.ES


Linux Magazine nº 6 • CONTENIDO

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.

69 Demonios Este mes os mostraremos cómo usar el protocolo Ident para asociar un nombre de usuario con una conexión TCP.

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

LINUX USER 71 Linux User 72 KVocTrain KVocTrain nos ayuda a cimentar el vocabulario de otros idiomas utilizando una serie de tarjetas de palabras virtuales.

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.

ADMINISTRACIÓN 84 Educación

65 La Columna de Charly 66 Darwin El servidor Darwin de Apple es una versión gratuita del servidor comercial Quicktime. Puede manejar los formatos MP3 y MPEG4 y posee una interfaz web.

76 Desktopia Skippy es un imaginativo paginador de ventanas con funciones de previsualización integradas.

WWW.LINUX- MAGAZINE.ES

En este artículo nos enfrentamos al tema de la accesibilidad y la tecnología adaptativa desde un punto de vista educativo.

90 Trucos 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.

Número 06

5


LINUX USER NOTICIAS

Schlagwort sollte hier stehen

NOTICIAS LINUX LINUX EN LA TELE Linux Magazine y Mundo Digital (Canal Málaga, los martes 8 de la tarde) han acordado 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 Magazine, 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 sistema operativo todavía.

El espacio consistirá en tutoriales, demostraciones y presentaciones que ayudarán a los televidentes a dar sus

primeros pasos en Linux, abarcando 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 programación del shell, uso de aplicaciones sofisticadas y configuració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 sistema operativo de consumo y profesional. http://www.mundodigital.net/ http://www.linux-magazine.es/

PREDICAR CON EL EJEMPLO Novell está dejando atrás su fama de empresa-dinosaurio que estuvo a punto de perder el tren de la innovación tecnológica a marchas forzadas. Desde que adquirió SuSE por lo que parece allá por el pleistoceno, 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-

6

Número 06

ce, Debra Anderson, el cerebro 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 interesante es que ese 50% fueron todos voluntarios. Los problemas (por que haberlos, haylos) que

surgieron en el transcurso del experimento, han sido remitidas a los desarrolladores de OpenOffice y otros proyectos GNU/Linux para su análisis, para que sirvan de guía para mejorar las aplicaciones utilizadas 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 consiste en diferencias de usabilidad. [Saber] las diferencias entre el kernel de Linux y el de Windows no es un requisito 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 progresiva migración de la totalidad de los escritorios de Novell a Linux, sólo puede ir en aumento. http://www.novell.com

WWW.LINUX- MAGAZINE.ES

AL SUPER CON LINUX 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 empresas líderes de cadenas de supermercados de alimentación, ha decidido migrar 10.000 estaciones “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

SCO ON THE ROCKS... OTRA VEZ han sido migrados al Red Hat Enterprise Server. Los factores que más han pesado a la hora de la elección del software han sido, según un portavoz de la cadena de supermercados, que es un software que permite “una mayor fluidez 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 sistemas”. 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íodo el año anterior. Los beneficios totales para el año fiscal 2005 han sido de 196,5 millones 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/

Y si para Red Hat no parece que hay más que parabienes, en SCO tratan desesperadamente de acaparar el temporal 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 llevaba 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 contabilidad”. Y desde luego las cifras son para que cualquiera las repasase con detenimiento: 23,3 millones de dólares de perdidas netas sobre ganancias de 42,8 millones de beneficios, un caída considerable si comparamos con las cifras del 2003: ganancias netas de 5,4 millones 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 ganancias fueron de escasamente 800 mil dólares. Aún así, cabe preguntarse quien narices sigue pagando por este espúreo producto. Los beneficios 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 operativos, 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 adaptarse, ni quiso jugar limpio en el difícil mercado TI. http://www.itmanagers jour nal.com/article.pl?sid=05/04/ 02/1529226

LINUX MAGAZINE Y LOS JUGONES Linux Magazine estuvo presente en la LAN Party de Reus, en Tarragona celebrado el … pasado. A la party acudieron más de …. jugadores y aficionados que dedicaron … días a jugar a Counterstrike, Quake o simplemente a navegar y chatear sin parar. Linux Magazine estuvo presente gracias a la empresa de

8

Número 06

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 ignorancia 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 Magazine y a los especialistas de Symbian iban dirigidas a conocer como se podía montar un servidor de juegos bajo Linux, área que prometemos cubrir en futuras ediciones de la revista. http://www.reuslanparty. com http://www.simbionet.com

WWW.LINUX- MAGAZINE.ES

DIAS DE VINO Y ROSAS 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 usuarios 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 objetivos 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 permitir que las nuevas versiones de Office puedan ejecutarse bajo ningún entorno que no sean para los que desarrollan “oficialmente”, es decir, Windows 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 complete 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 GenuineCheck.exe busca explícitamente HKLMSOFTWARE WineWineConfig para comprobar si contiene la clave RegOpenKeyExA(). De encontrarlo se genera un error irrecuperable y el proceso de instalación se detiene y no puede continuar. Teniendo OpenOffice y MySQL… ¡Ay que penita, pena! http://www.winehq.com


Multimedia • PORTADA

Técnicas Multimedia en Linux

PELÍCULAS Y MÚSICA 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 os 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 discos. En los últimos años, el énfasis se ha enfocado hacia la incorporación de dispositivos que, en su momento, se consideraban 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 ordenadores para la gestión contenidos generados con cámaras digitales o equipos de audio digital. Los usuarios de Linux, que podemos definir como un grupo proactivo técnicamente hablando, son habitualmente 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,

L

EN PORTADA MainActor

. . . . . . . . . . . . . . . . . . . . . . .10

Es evidente que podemos realizar películas caseras, pero, ¿podemos añadirles títulos, créditos u otros mensajes de texto? Os mostraremos cómo añadir texto a vuestros vídeos con MainActor.

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. Usaremos 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.

secuenciadores, sintetizadores u otras herramientas distintas disponibles en Internet. El problema es que habitualmente es difícil encontrar documentación práctica respecto a cómo usar estas herramientas en situaciones reales. En el reportaje de portada de este mes veremos de forma práctica algunas herramientas 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í remarcaremos algunas tareas comunes y mostraremos algunas herramientas útiles, lo que puede que induzca a descubrimientos 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 profesional. Continuaremos 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 nuestros vídeos digitales en DVD. Y el artículo “Manitas: Conversión y Procesado de vídeos con Transcode” hace un repaso a la utilidad

WWW.LINUX- MAGAZINE.ES

Transcode, una herramienta rápida y flexible 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 software de audio disponible para Linux. Linux ha experimentado un gran avance en la industria musical, atrayendo la atención de los expertos, si bien la infraestructura de audio de Linux es un mundo en sí mismo. Hubo un tiempo en que los miles de plugins de audio VST/VSTi desarrollados 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 aventuras grabando audio y vídeo en Linux. ■

Número 06

9


PORTADA • MainActor

Títulos de vídeo con MainActor.

GRANDES TITULARES

El programa de edición de vídeo MainActor parece tener un generador de títulos rudimentario. Pero con algunos trucos y efectos especiales, MainActor puede ofrecerle unos impresionantes títulos de apertura. POR TIM SCHÜRMANN

A

cabamos de volver de las vacaciones, nuestro monedero está vacío, y nuestras cintas de vídeo están llenas de imágenes de playas paradisiacas y tripas al sol. A continuación hemos editado el vídeo en nuestro ordenador 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 generador de títulos está muy escondido y nos proporciona solamente funcionalidades básicas. Pero no temamos, unos pequeños trucos y unos conocimientos elementales de efectos de vídeo nos ayudarán a crear unos títulos más que satisfactorios.

La Instalación. MainActor es un programa comercial de edición de vídeo desarrollado por MainConcept. La página de MainActor [1]

10

Número 06

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 distribuciones, 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 ejecutar MainActor.

Títulos en MainActor. Antes de empezar, deberíamos considerar la estructura y el material que tenemos 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 escenas van cambiando. Por ejemplo, si hemos visitado diferentes lugares en

WWW.LINUX-MAGAZINE.ES

nuestras vacaciones, podemos usar títulos 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 subtítulo más tarde. Si no hemos encontrado un subtítulo genuino, lo primero será visionar todo el material original antes de empezar a editar. 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 congelada. 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 consideraremos en este artículo está basado en


MainActor • PORTADA

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 material de vídeo seleccionando Add multimedia files del menú de la ventana del navegador. El icono situado más a la

Cuadro 1: Bienvenido a bordo 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 conector 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, respectivamente. En el cuadro Capture File introducimos un nombre de fichero y la ruta donde MainActor guardará la informació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 continuación modprobe ohci1394. Por último reiniciamos MainActor.

Figura 1: El vídeo de fondo se encuentra colocado en la línea temporal (abajo derecha). El resultado 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.

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 directorio 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, necesitaremos 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 generador 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 mantenemos pulsado el botón izquierdo y

WWW.LINUX-MAGAZINE.ES

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 muestra las opciones para el elemento seleccionando 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

Cuadro 2: Procesar como una pila 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é elementos se situarán en primer plano y cuáles en segundo plano. Las pistas de vídeo funcionan como una pila de rodajas 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 elementos en las pistas 1 y 2, es decir, que estarán por encima de los títulos.

Número 06

11


PORTADA • 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.

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

Cuadro 3: Formatos soportados por MainActor Importa: DV AVI Multi File *.dzl (multiples archivos tipo 1 pertenecientes a una misma película); DV AVI Type 1 *.avi; DV AVI Type 2 *.avi; DV DIF *.dif, *.dv (formato 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 Network Graphics; Portable Pixmap; Postscript; Psion Serie 3 Bitmap; Psion Serie 5 Bitmap; Qrt Raytracer; Raw; Rayshade; SciTex Continous Tone; Sillicon Graphics RGB; SoftImage TIFF Revision 6; Truevision Targa; VRML2; Vista; Vivid RayTracer; 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.

12

Número 06

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.

ventana, puede incluso haberse desprendido. Para arreglar esto usamos las barras de control para mover el título hasta el centro de la pantalla. A continuación seleccionamos un Color que sea fácilmente distinguible respecto del fondo.

Transición Gradual. Si visionamos la película en la ventana de previsualización (usando del símbolo play, un triángulo apuntando hacia la derecha), el título aparecerá y desaparecerá de manera súbita. Para conseguir 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 transparencia en la ventana de previsualización. El perfil se ha modificado por completo. Para cambiar este comportamiento, necesitamos añadir otra asa.

WWW.LINUX-MAGAZINE.ES

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 configuració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 diferentes, es imposible saber a qué imagen hace referencia el cuadro clave y viceversa. 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 ventana 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.

Engalanado Usemos 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


MainActor • PORTADA

Figura 4: El logo del título. MainActor recorta el verde y lo reeemplaza con el fondo.

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íxeles en Europa. Si la imagen es de distinto tamaño, MainActor la cambiará a la fuerza, lo que puede provocar una distorsión notable.

Pantalla azul Para 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. MainActor 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 adelantado 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 MainActor. 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, arrastramos el logo hasta la pista V2 en la línea de tiempo, y arrastramos igualemente 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 muestra una pequeña barra para indicar que se ha asignado 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, Figura 5: Para seleccionar un color para el efecto de clave de color, podemos pulsar primero utilizaremos la pipeta y haremos clic en el área verde de la sobre la X para ventana de previsualización. eliminar la entrada. Esto quita de la vista algunas Cuando tengamos todo configurado, opciones irrelevantes. pulsamos en Export para dar salida al En primer lugar elegimos el color que resultado final. MainActor reemplazará con el fondo de Perspectivas pantalla en el Color Keyer. Para elegir el color, primeramente debemos pulsar El método que hemos seguido permite sobre la barra de color. Podemos selecmucha creatividad a la hora de hacer los cionar el color directamente en la ventítulos. Podemos aplicar también varios tana que aparece, o coger la pipeta y pulefectos de MainActor a nuestro logo. Por sar en alguna parte de la previsuaejemplo, si queremos conseguir un lización que contenga el color que neceefecto trémulo como el del logotipo de sitamos (véase la Figura 5). Después de “Buscando a Nemo”, arrastramos el que hayamos elegido el color, pulsamos efecto Glue desde el grupo Filter / 2DOK. No nos debemos asustar si MainAcWarp de la ventana del navegador, hasta tor no actualiza la previsualización el logo en la línea de tiempo. Hacemos automáticamente. En este caso debemos doble clic para abrir la configuración en actualizar de manera manual. la ventana Effects y seleccionamos Effect Al igual que hicimos con el nombre de -> Original for Progress. Esto hará que el los creadores, queremos que el logo logo se estremezca todo el tiempo. Para aparezca y desaparezca gradualmente. impedir esto, añadimos otro cuadro Podemos seguir los mismo pasos: de clave al perfil. El segundo cuadro clave nuevo lo que necesitamos es un perfil de debería alcanzar el borde final antes que la opacidad. la posición donde desaparece el logo. Esto ayuda a los espectadores a leer el Salida contenido antes de que desaparezca. Podemos aplicar el efecto Color Keyer Una vez hemos añadido los creditos para completar secuencias de video si del comienzo de la película, podemos estamos dispuestos a crear la típica exportar los resultados. MainActor secuencia del reportero y la imagen de tiene una selección de formatos de safondo. lida en Timeline / Export. Si estamos Debemos usar los efectos con mocreando un DVD, seleccionamos Video deración. Debemos meditar cuándo es + Audio, y MPEG, debajo de Format. apropiado añadir títulos: un logo chillón Pulsamos en Format options y selecque rota y rebota no pega mucho en un cionamos DVD bajo MPEG Type. Frame ■ vídeo de meditación, por ejemplo. size nos debería mostrar la resolución DV. Pulsamos en OK para volver atrás, y rellenamos el campo Export as con el RECURSOS nombre del archivo. Debemos asegu[1] Página de MainConcept: http://www. rarnos de tener deshabilitada la opción mainconcept.com/index_flash.shtml Only export yellow In/Out segment.

WWW.LINUX-MAGAZINE.ES

Número 06

13


PORTADA • Q-DVD

Creación de DVDs en Linux

LA TOSTADORA VALIENTE 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 amigable para controlar el proceso. POR MARCO KRAUS

P

or 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 edición populares como Kino o MainActor tienen la posibilidad de exportar a formato 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 de Ficheros Además del sistema de ficheros (normalmente UDF Bridge), el estándar Vídeo DVD también detalla los nombres de los ficheros y las rutas. Las películas se almacenan en los llamados ficheros VOB (Video Object). Los ficheros VOB almacenan una mezcla de contenidos (multiplexado), como vídeo, audio y posiblemente subtítulos. Junto a ellos existen una serie de ficheros IFO que contienen información de control como una selección de capítulos, y los ficheros BUP, que

14

Número 06

son copias de seguridad de los contenidos IFO. Las copias de seguridad son importantes porque los DVDs son más propensos a los errores que los CD normales debido a la alta densidad de almacenamiento. Los ficheros VIDEO_TS.VOB y VIDEO_TS.IFO le indican al reproductor de DVD donde tiene que empezar a reproducir. La guía no oficial “DVD Specification Guide” [4] contiene más detalles sobre la estructura de los ficheros.

DVDauthor En Linux, la herramienta de línea de comandos dvdauthor permite a los usuarios crear una imagen DVD completa con la estructura detallada anteriormente 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 realmente interfaces para DVDauthor. DVDauthor tiene una colección de herramientas para masterización, como ifogen, que genera ficheros IFO. Desafortunadamente, el uso de DVDauthor no es algo trivial. Se nece-

WWW.LINUX-MAGAZINE.ES

sita un fichero XML que controle la generació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 DVDauthor para leer la documentación y el tutorial de los ficheros de control [5].


Q-DVD • PORTADA

soporte para configuraciones gloListado 1: Un fichero de bales. La opción Scan system no funcontrol simple de ciona todavía en la versión actual, DVDauthor aunque el autor del programa nos 01 <dvdauthor> informó que en la actualidad el tra02 <vmgm /> bajo de desarrollo se está enfocando 03 <titleset> en este punto. 04 <titles> Las configuraciones por defecto 05 <pgc> esperan que los ficheros binarios 06 <vob file="video1.mpg" /> estén situados en /usr/local/bin, 07 <vob file="video2.mpg" /> aunque la mayoría de las distribu08 </pgc> ciones almacenan estos ficheros en 09 </titles> /usr/bin. El comando whereis dvdau10 </titleset> thor le indica donde están realmente 11 </dvdauthor> Figura 1: Escalado automático de imágenes de Qsituados los ficheros. DVD-Author. Aunque Q-DVD-Author se mostró tamaño correspondiente del formato PAL bastante estable en nuestro laboratoEliminando los dolores de rio, es conveniente ir salvando el trabajo o NTSC. La conversión no es destructiva, cabeza con una GUI es decir, no afecta al fichero original del realizado a intervalos regulares. Además Las dos interfaces gráficas de usuario más disco, así que se podrán usar imágenes de de la simple función guardar, se puede conocidas son DVDStyler[6] y Q-DVDnuestro álbum de fotos particular sin coexportar a un fichero de proyecto comAuthor[7]. Ambos proyectos son relativarrer ningún riesgo. patible con DVDauthor en formato XML mente jóvenes y aun están en fase beta. Para rematar el menú principal, se le y continuar trabajando con el fichero Pero a pesar de que aún hay que limarle puede añadir una música de fondo selecdesde la línea de comandos. No hay funalgunas asperezas, ambos son funcionales cionando Add Sound. Además del forciones de importación para los ficheros y proporcionan una enorme ventaja. mato de audio típico MPEG2 y PCM/WAV, de los proyectos de DVDauthor. Desafortunadamente, en la actualidad el programa también soporta los formatos El siguiente paso es añadir los ficheros ambos programas carecen de las rutinas MP3 y Ogg. reales de las películas al proyecto. Selecde transformación de flujo de vídeo, por lo Es conveniente preparar y crear el resto cionando Add Movie en el cuadro de diáque se necesita un fichero MPG2 compatide los otros menús antes de comenzar logo. Una selección múltiple agrupará ble con DVD. La mayoría de los programas con los enlaces entre páginas y su navevarias secuencias para crear una única de edición de vídeo pueden exportar el gación. Por ejemplo, hay que diseñar un película. vídeo a un formato adecuado, lo que promenú de selección de capítulos antes de Menú Principal porcionará la fuente para poder empezar. poder enlazarlo con el menú principal. El DVDStyler es más intuitivo y fácil de menú DVDAuthor|Add Menu añade un Es una buena idea crear los menús del manejar que Q-DVD-Author. Pero en la menú vacío al proyecto. DVD en el mismo orden en que se visuaactualidad, DVDStyler no soporta ni DVDMenu|Rename Menu permite asiglizarán. El menú principal, que será lo música ni capítulos. Si se busca un punto narle un nombre intuitivo, como “Selecprimero que el reproductor muestre, es de entrada rápido y simple, DVDStyler es cionar Capítulo”. Los siguientes pasos son siempre el menú VMGM seleccionado un buen candidato. Si se necesita algo los mismos que hemos visto para el menú cuando el programa se ejecuta. Hay cuatro más complejo, será mejor que se empiece principal. botones debajo de la ventana principal, con Q-DVD-Author. aunque actualmente tan solo Q-DVD-Author, que se basa en las biestán implementados Add bliotecas QT, va por la versión 0.0.8alpha. Background y Add Sound. Add Algunas características aún no están Background abre una ventana implementadas, tal y como sugiere el en la que hay que seleccionar número de versión tan bajo. Pero, las funel fichero que contiene la imaciones que han sido completadas se han gen que se usará de fondo. El probado y son muy estables. programa automáticamente configura la imagen selecPreparación cionada en el menú en el que Lo primero es introducir el nombre del se está trabajando. No hay que proyecto y del directorio de trabajo, preocuparse por el tamaño de donde se albergarán los ficheros del DVD la imagen. Si la imagen es una vez terminado, en Tools|Setup. La demasiado grande o demasiasolapa Path contiene los detalles de la do pequeña, Q-DVD-Author ruta para las herramientas DVDauthor. abrirá el cuadro de diálogo Figura 2: Menú contextual con los elementos de naveQ-DVD-Author tan solo usa esta configuResize (Figura 1), donde se gación. ración para el proyecto actual, no tiene podrá convertir la imagen al

WWW.LINUX-MAGAZINE.ES

Número 06

15


PORTADA • Q-DVD

mento de texto, aparece un cuadro de diálogo para establecer la fuente, el tamaño, el color y la justificació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 Figura 3: El Cuadro de Diálogo de fuentes de Q-DVDdel menú contextual abre de Author. nuevo el cuadro de diálogo de las fuentes, así que el elemento de Ayudas a la Navegación menú Matrix sólo servirá para hacer camLas ayudas sirven para enlazar los elebios que afecten a la geometría. Esta solumentos del menú con las secuencias de ción proporciona resultados pobres para vídeo. Se representan como botones que los gráficos, así que será preferible usar el los usuarios pueden pulsar para saltar al desplegable bajo Edit que abre el cuadro siguiente menú o para visualizar una de diálogo de imágenes (Figura 4). secuencia de vídeo. La versión actual Creación de Ayudas a la puede usar tanto textos como imágenes Navegación para esto. Los elementos Collection y Vamos a poner una imagen de Tux que Movie aun no han sido implementados en apunte al submenú Selección de Capítulos la versión disponible. Y el elemento que se creó anteriormente. Para ello, se Frame no está todavía terminado. selecciona el texto y luego se escoge Pulsando el botón derecho del ratón en Define as button del menú desplegable. la ventana principal, se desplegará un Durante el transcurso de nuestras pruemenú contextual con elementos de navebas, descubrimos que la versión actual gación (Figura 2). Como alternativa, se del software presenta algunos problemas puede usar la entrada DVDmenu en la cuando se intenta modificar los elementos barra de menús. Cuando se selecciona un elemento de botón. Es conveniente establecer el texto o una imagen, aparece un cursor tamaño y la posición de la ayuda a la con forma de cruz, que permite selecnavegación exactamente antes de usar la cionar un marco para definir el tamaño característica. Esto puede ahorrar basdel elemento. Si se selecciona un eletantes dolores de cabeza cuando se tra-

Figura 4: Manipulación avanzada de imágenes.

16

Número 06

Cuadro 1: Problemas Estructurales 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 eliminaciones habían corrompido el fichero XML. Hay que asegurarse de planear bien el proceso para no tener que modificarlo y evitar que se produzca este fallo en la versión actual.

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, simplemente hay que seleccionar la secuencia. El menú que muestra el tiempo, hace referencia al capítulo actual, pero volveremos 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 flechas del reproductor de DVD. Las solapas Normal, Highlighted y Selected permiten modificar de forma individual los botones de texto para cada una de estas selecciones.

Figura 5: Definiendo la funcionalidad de los elementos de navegación.

WWW.LINUX-MAGAZINE.ES


Q-DVD • PORTADA

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 imagen con el menú Selección de Capítulos, donde se seleccionará un submenú como objetivo del salto.

Selección de Capítulos del Submenú 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áticamente asigna marcas de capítulos a intervalos. 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 colocar 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

Cuadro 2: Mejoran del proceso de tostado La implementación del cuadro de diálogo para la grabación de DVD de Q-DVDAuthor es minimalista: hace el trabajo, pero puede que no sea de su total agrado y no proporcione todas las caracterí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.

apunte al menú VMGM para cada botón de capítulo.

DVD Slideshow Ya estaría completo nuestro DVD, pero Q-DVD-Author tiene otra virguería: DVDSlideshow. Probablemente se haya dado cuenta del enorme botón rotulado con Add slideshow en Add movie en el lado


PORTADA • Q-DVD

Figura 6: Interfaz integrado para DVDSlideshow.

izquierdo de la ventana del programa. Si se pulsa este botón se muestra una interfaz 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.

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 transiciones, como se especificó en Continue. Generar los filtros consume tiempo. Si se pulsa el botón OK se abre la ventana de generación, donde se podrá especificar algunos parámetros específicos del proyecto para el slideshow, como el directorio de trabajo y el nombre de la película. Cuando se pulse el botón Generate 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 DVD

Tras preparar los datos y los menús, toca el turno de generar la estructura del DVD. El cuadro de diálogo CommandQueue 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á familiarizado con las herramientas, es mejor dejar los valores por defecto. Probablemente se quiera tener deseleccionado el casillero Don’t execute Burn DVD (está deseleccionado por Figura 7: Edición manual de generación de comandos defecto). Esto hace Si se selecciona DVD-Slideshow se que el programa genere la estructura en el muestra un campo de texto vacío (Figura directorio correspondiente pero evita que 6). A continuación hay que pulsar en la grabe en el DVD. Q-DVD-Author usa un Select images para añadir un número de cuadro de texto para mostrar al usuario imágenes que se usarán como materia las tareas que está realizando cuando se prima para realizar el slideshow. El lance el proceso de generación. botón Continue proporciona un cuadro Una vez finalizado (y esto puede tardar de diálogo con filtros que permiten al un rato dependiendo del tamaño del usuario especificar las transiciones y la proyecto), se puede ejecutar xine para música de fondo. Tan solo tiene sentido comprobar la estructura de los datos en seleccionar una imagen de fondo si se disco: sabe que las imágenes del álbum no van a cubrir toda la pantalla. Para especificar xine dvd://working/directoryU

18

Número 06

WWW.LINUX-MAGAZINE.ES

/VIDEO_TS

Es conveniente verificar los resultados antes de pasarlo a un DVD. Se puede grabar en el DVD directamente desde el programa QDVD-Author habilitando la opción Burn DVD en el cuadro de diálogo CommandQueue. El proceso de grabación usa herramientas 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 muestra en la pantalla del PC. Se debe tener los elementos de navegación y los textos alejados de los bordes de la pantalla. Incluso debería comprobarse que los colores coinciden y que el reproductor de DVD puede leer el disco.

En un Futuro Q-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 implementarse. Parece como si Q-DVD-Author estuviera destinado a ser una herramienta profesional de masterización en el futuro y por la información que disponemos parece que probablemente consiga su objetivo. ■

RECURSOS [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: sourceforge.net

http://dvdauthor.

[6] DVDStyler: sourceforge.net

http://dvdstyler.

[7] Q-DVD-Author: sourceforge.net

http://qdvdauthor.


Conversión de vídeo • PORTADA

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

EL MANITAS

• 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 individuales de vídeo y audio y para la lectura de secuencias de vídeo, como las proporcionadas por tarjetas de televisión. El siguiente paso aplica módulos de filtro 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 también pueden añadir o eliminar fotogramas 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 salida, los cuales manejan los datos codificándolos aplicando una variedad de códigos de vídeo y audio para crear los archivos requeridos.

Conversiones de Formato Simples El siguiente comando de Transcode convierte un archivo MPEG1 o MPEG2 en un archivo AVI en formato MPEG4:

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

T

ranscode es una herramienta que convierte archivos de vídeo de un formato a otro. También podemos usar Transcode para otras manipulaciones 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 desilusione. Transcode [1] es solo un programa de línea de comandos con muchos controles basados precisamente en la línea de comandos. Como la mayoría de herramientas no basadas en interfaz gráfica, la gran ventaja de Transcode es su

flexibilidad, siendo su mayor debilidad su usabilidad. Aquellos que prefieran un estilo basado en interfaz gráfica pueden elegir entre los que ofrecen interfaces amigables para las funciones especiales de Transcode (ver tabla 1). Pero ninguno de estos programas llega al potencial de Transcode. Transcode tiene un diseño estrictamente modular. Las funciones críticas residen en módulos externos que solo se cargan cuando se necesitan. Transcode proporciona tres tipos de módulos diferentes que se corresponden con los tres pasos del proceso de conversión de archivos de Transcode:

WWW.LINUX- MAGAZINE.ES

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 muestra 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.

Listado 1: Ejemplo de Codificación con Múltiples Pasos 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

Número 06

19


PORTADA • Conversión de vídeo

Puesto que Transcode exporta audio como 128 kbps MP3 de forma predeterminada, todo lo que tenemos que hacer es ajustar la tasa de bits de la banda sonora a 48 kbps usando la opción -b.

Por supuesto que la calidad de un vídeo depende en gran parte de la calidad 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 suficiente 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.

Adivina la Tasa de Bits

Más Vale Prevenir

La 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 calcular 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).

Transcode 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 realiza la conversión. Podemos habilitar

Listado 2: Análisis las barras negras 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 ...

Tabla 1: Interfaces de Transcode Nombre dvd::rip

Página Web http://www.exit1.org/dvdrip/

g4l

http://gv4l.sourceforge.net/

Ripmake

http://www.lallafa.de/bp/ripmake.html

ranscode. kavi2svcd

http://www.cornelinux.de/web/

Descripción Interfaz gráfica especializado en copias DVDs. Interfaz gráfica de Transcode V4L para manipular material de vídeo TV. Programa de línea de coman dos que facilita una serie de aplicaciones comunes de Kavi2svcd convierte archivos AVI a linux/kavi2svcd/ index.html súpervideo CD.

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

vob dv ffmpeg mplayer

v4l / v4l2 xvid mpeg2

20

Descripción 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. Lee archivos DVD VOB. Podemos crear el archivo usando el comando tccat de Transcode. Lee DV vídeo. Accede a todos los codecs proporcionados por la librería ffmpeg. La detección del formato es realizada de forma automática. Ejecutamos el reproductor mplayer para decodificar vídeo. Por tanto, Transcode puede soportar cualquier codificador que soporte el reproductor mplayer. Lee la señal de vídeo directamente desde un dispositivo Video4Linux, como una tarjeta de TV. Lee video MPEG4. Importa vídeo MPEG.

Número 06

WWW.LINUX- MAGAZINE.ES

Figura 1: La resolución completa de los vídeos PAL es de 720x576 píxeles. La imagen 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 formato original en nuestro PC.

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 proceso hasta en un diez por ciento.

Análisis vs. Prueba y Error Puesto que los resultados de una conversió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 caracterí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 evaluar 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 codificación de 128 kbps de forma predeterminada, tiene sentido bajar manualmente la tasa a 48 kbps, puesto que un valor más alto no mejorará la calidad del resultado, solo incrementando el tamaño del archivo.


Figura 3: La barras negras solo ocupan espacio al codificar. Su eliminación ahorra espacio. Figura 2: Para eliminar al distorsión debemos alargar la imagen un poco lateralmente, para hacer que los “huevos” sean redondos.

Los valores entre corchetes en el resultado de tcprobe indican los ajustes predeterminados para Transcode. El programa usará estos valores si pasamos los datos vírgenes con valores formateados que no reconozca.

Pequeño pero Poderoso La 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 ligeramente, 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-

Listado 3: Busqueda de fotogramas entrelazados 01 transcode -i e4.mpv -J 32detect=verbose=1 02 ... 03 (0) frame [000086]: (1) = 2141 | (2) = 2161 | (3) = 10 | interlaced = yes 04 ...

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 TV Los usuarios con grabadoras digitales de vídeo basadas en Linux, como VDR, puede que quieran almacenar grabaciones de TV en formatos de alta compresió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 sincronizació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 almacenaje 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 Limitada Si 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 desperdicio 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-


PORTADA • Conversión de vídeo

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 excepción). Un poco de matemáticas nos puede ayudar. Solo por motivos de claridad no vamos a considerar los píxeles de la izquierda y de la derecha. Si eliminamos 56 líneas en lugar de 58 eliminaremos 112 en total. Las 576 líneas del sistema PAL menos las 112 que eliminamos dejan 464, número divisible por 16. Esto nos deja con -j 56,0,56,0, pudiendo usar una abreviatura para pasarle la orden a Transcode: -j 56. El programa corta simétricamente por defecto

Entrelazado Entrelazado 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 desentrelazado para eliminar las líneas. Transcode usa el filtro 32detect (ver listado 3) para comprobar si el material original del vídeo contiene los fotogramas entrelazados. Transcode devuelve una línea por cada fotograma. Si aparecen fotogramas interlazados (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 optimizada en cuanto a velocidad del filtro smart deinterlacer de VirtualDub para el espacio color YUV. VirtualDub es un programa Windows de gran difusión que

22

Número 06

siguiente comando para convertir los datos originales en VDR a un formato de vídeo Xvid:

Figura 4: Para ahorrar incluso más espacio podemos reducir el ancho a 640 píxeles conservando una buena definición.

transcode -i e4.mpv -p c0.mpa U -o targetfile.avi -y xvid4 -w U 1650 -j 56 -J smartyuv -Z U 640x384,fast

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 correctamente en la mayoría de los casos.

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, combinada con la resolución seleccionada resulta en un valor BPP de 0.267, el cual debe ser suficientemente alto para la calidad deseada.

Cálculo en Masa

Flexible y Poderoso

Para 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 reproductores 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 corregir 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 (factor 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

Este artículo apenas entra en el enorme número de funciones de Transcode. La distribución Transcode viene adicionalmente con una serie de prácticas herramientas 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.

WWW.LINUX- MAGAZINE.ES

Listado 4: Resultado de tcprobe 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

RECURSOS [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/


VST Audio Plugins • PORTADA

Ejecución de plugins de audio VST en Linux

PASARELA MUSICAL

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

E

n el mundo del software de puede ser más general y ser usada por Los desarrolladores de programas base sonido digital, un plugin es un distintos programas. pueden concentrarse en diseñar sistemas componente extra que extiende Diseñar un programa que cumpla una y motores más robustos y flexibles, las funcionalidades del programa base. interfaz estándar para los plugins tiene mientras que los desarrolladores de pluUn plugin puede proporcionar un efecto mucho interés para los programadores. gins pueden hacer lo propio en su traespecial, como reverbajo, sin tener que preocuberación, puede ser un parse de cómo se ensaminstrumento MIDI, como blarán con los programas un sintetizador multitímque harán de host. Por brico General MIDI, o supuesto, son los usuarios puede ser un interfaz para quienes salen ganando con un secuenciador MIDI. todo esto. El programa base y el En el mundo de la plugin deben acordar en música bajo Windows o qué, cómo y cuándo van a Mac, la API para plugins comunicarse. Si el proVST de Steinberg se ha grama y el plugin se convertido en la interfaz ponen de acuerdo en una más comúnmente acepInterfaz de Programación tada. Este formato VST de Aplicaciones (API, (Virtual Studio Technology) Application Programming de Steinberg para plugins Interface) estándar, salió al mercado a finales lograrán su objetivo. Una de los 90. El actual estánAPI puede ser específica dar VST2 apareció en 1999. para un programa, como Podemos hacernos una las APIs de The GIMP o idea de su popularidad Figura 1: El plugin VSTi Crystal controlado desde un teclado externo. las de XMMS, o bien entre los desarrolladores y

WWW.LINUX- MAGAZINE.ES

Número 06

23


PORTADA • VST Audio Plugins

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. Curiosamente 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 ocasiones ante la necesidad de ejecutar un plugin VST bajo Linux.

Este artículo muestra como configurar Linux para dar cabida a la enorme colección de plugins VST desarrollados originalmente para sistemas Windows y Mac.

VST/VSTi Los 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 gratuitos o de bajo coste proporciona procesado 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 extensión de VST que permite que el plugin sea un instrumento (es decir, un sintetizador, 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 sintetizador por software, interpretable vía MIDI, con control de parámetros en tiempo real (manual o MIDI), y probablemente con salida multicanal. Hoy día, los programas de sonido en Win/Mac admiten VST/VSTi de manera

LADSPA A comienzos del año 2000, el desarrollador 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 Developers estimularon su propuesta y nació LADSPA (Linux Audio Developers Simple Plugin API) [1]. Es importante recalcar el término Simple 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 “simple” no significa falto de potencia: existen, 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

Figura 2: Plugins LADSPA listados en Hydrogen.

24

Número 06

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 probablemente 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 simplicidad de LADSPA es su facilidad de integración con las aplicaciones, tanto nuevas como ya existentes. La API se adoptó rápidamente por los desarrolladores, y a lo largo de los últimos cuatro años el soporte para LADSPA se ha convertido en algo natural en las herramientas 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, sintetizadores por software, editores de archivos sonoros, reproductores multimedia, 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 programador de ritmos Hydrogen. Si usamos una distribución de Linux optimizada para audio, encontraremos

Figura 3: Módulo de reverb TAP en Audacity.

WWW.LINUX- MAGAZINE.ES


VST Audio Plugins • PORTADA

habitual. La lista de programas compatibles 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 debemos a Kjetil Matheussen, del NoTAM, un centro de investigación musical y acústica 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

WINE, parte del proyecto WINE, cuyo objetivo es crear un entorno de emulación que permita ejecutar programas Windows en sistemas Linux. Kjetil también creó dos clientes para vstserver: un objeto para el entorno de síntesis y composició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 vstserver 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 paquetes 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 plugins VST).

LADSPA LADSPA ya instalado y configurado. Los usuarios de Mandrake encontrarán el SDK de LADSPA y una colección de plugins en el repositorio Thac (véase en [11]). No se asuste, LADSPA es simple también a la hora de instalar y configurar. 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 ejecutamos make para compilar el SDK. A continuación, como administrador, ejecutamos make install. A partir de este momento ya podremos instalar y usar algunos plugins LADSPA.

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, especialmente referentes al control MIDI. Además su interfaz permite un puente

para ejecutar plugins VSTi. De momento, se ha implementado únicamente 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 documento 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 sintetizadores DSSI.

Sería interesante echarle un vistazo a los links de http://linux-sound.org/ ladspa.html. Podemos probar la colecció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 (Multimedia Applications Integration Architecture) de David Olofson, es un intento de solucionar algunos defectos de LADSPA. Se diseñó como una API multiplataforma, aunque con especial orientación a los sistemas UNIX. Desgraciadamente la API MAIA no ha encontrado un hueco entre los programadores, y el proyecto apenas ha evolucionado desde comienzos de 2001.

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

WWW.LINUX- MAGAZINE.ES

Número 06

25


PORTADA • VST Audio Plugins

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

Arrancamos el servidor desde su directorio origen. Ejecutamos el cliente. Necesitaremos Pd para k_vst~, y un programa host adecuado (como la excelente versión del editor de sonido Snd realizada por

Kjetil), para poder utilizar el plugin host de VST LADSPA. El cliente vsti es un programa independiente que describiremos más adelante. Cada paquete incluye una lista completa de detalles concernientes a la compi-

Sistemas de sonido en Linux El sistema de sonido por defecto en Linux ha cambiado recientemente de la API OSS/Free (las iniciales OSS corresponden 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 desaconsejado. Por mi parte recomiendo expresamente usar ALSA como base de su sistema 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 mezclado de sonido por software para sistemas que no tengan soporte para multiplexar 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

26

Número 06

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 convertido en el servidor de sonido robusto de baja latencia por excelencia, permitiendo interconexion I/O a cualquier cliente JACK. Además proporciona un mecanismo de control de transporte para la administración síncrona de aplicaciones compatibles. Si su sistema de audio tiene miras profesionales, definitivamente necesitará JACK. Artsd y esd son los demonios del sistema de sonido en KDE y GNOME. Se usan típicamente para propósitos relativamente simples, aunque ambos tienen un gran potencial para eventos de escritorio (incluso aRts incluye una API para plugins). Sin embargo no están diseñados para un entorno de audio profesional y deberían desactivarse si usamos KDE o GNOME en dichos entornos.

WWW.LINUX- MAGAZINE.ES

lación e instalación del software. Dicho sea de paso, si queremos utilizar el sistema de Kjetil, debemos descargar y compilar el código fuente de WINE modificado 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 distribució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/Servidor Vstserver [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 funciona como host de los plugins VST. Describiremos estas dos opciones en las siguientes secciones.

Pd y el objeto k_vst~ Arrancamos el servidor tecleando vstserver 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 maravilloso 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 encamina la entrada de audio a través del objeto k_vst~ (es decir, el plugin VST)


VST Audio Plugins • PORTADA

Pure Data Pd (Pure Data) es un entorno de programación visual orientada a objetos, creado por Miller Puckette. Esta diseñado para crear sistemas arbitrariamente 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érmino, 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.

hasta el exterior mediante la salida Out de la tarjeta de sonido. Podemos administrar el plugin VST controlando los parámetros del efecto mediante las barras 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 ladspavst Usar un plugin LADSPA para ejecutar un plugin VST puede parecer extraño. Con ladspavst de Kjetil vamos a tener un plugin 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 NorthPole. Se trata de un filtro invocado desde el menú de LADSPA del editor de sonido Snd, el cual hemos personalizado convenientemente. 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 proporciona un interruptor para seleccionar la interfaz del propio plugin VST si así lo deseamos.

Figura 6: VST en funcionamiento con LADSPA con snd.

Uso de un plugin VSTi con vsti Como se mencionó anteriormente, el sistema 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 FST El 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 WINE Tanto vstserver como libfst dependen de versiones específicas de WINE. Como se

WWW.LINUX- MAGAZINE.ES

ha mencionado antes, la página de vstserver proporciona una versión modificada de WINE. Esta versión está basada en fuentes antiguas. Si quisiéramos una versión más reciente, puede que comprometamos la estabilidad de vstserver. Para estar al tanto de las últimas informaciones respecto a la compatibilidad con WINE revise el tutorial de VST en http:// www.djcj.org/LAU/quicktoots/toots/ ■ vst-plugins/.

RECURSOS [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: linuxaudiosystems.com/fst/

http://

[5] La página de compatibilidad VSTLinux: 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/

Número 06

27


PRÁCTICO • Scribus

Plantillas y PDFs con Scribus

LISTO PARA IMPRIMIR

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

E

n la anterior entrega se completó la portada y se propuso como guía plantillas para crear las restantes páginas. En este artículo se mostrará como darle los toques finales y ensamblar el periódico para la impresión.

Plantillas En todo proyecto de maquetación (incluso en todo proyecto de diseño web, de hecho) un punto clave es la coherencia. Para poder guardar la coherencia es necesario crear páginas que parezcan relativamente similares incluso si albergan distinto tipo de contenido. Los elementos básicos de la página, como el sistema para numerarlas, deben ser idénticos, así como los tipos de letra. Nuestra publicación utiliza Gill Sans Bold, pero la elección de la tipografía y el estilo es cosa suya. Sea el que sea, ha de mantenerse constantes a lo largo del proyecto. En autoedición, una plantilla es simplemente un archivo que contiene toda

28

Número 06

la información semiestática, como el sistema de numeración y la distribución de elementos. Si observamos las tres imágenes de la Figura 1, vemos cómo incluso páginas relativamente diferentes pueden compartir elementos similares y un formato básico. Lo que resulta vital es que las medidas de la página y el estilo sean idénticos a lo largo de todas las páginas. Para asegurarnos de esto, lo mejor es tomar una página ya finalizada y crear una plantilla a partir de ella, eliminando todos los ele-

mentos no permanentes. De esta manera, no sólo el estilo permanecerá intacto, también la dimensión y medidas de la página serán las correctas. Scribus tiene una opción Save as Template en el menú File, pero con usar Save as será suficiente siempre que recordemos no sobrescribir la plantilla cuando guardemos cambios posteriormente.

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

¿Por qué exportar dos veces? Algunos lectores estarán pensando, sin duda, que nuestro sistema de importar PDFs y volverlos a exportar como páginas dobles es innecesariamente complicado. ¿Por que no trabajamos directamente sobre las páginas dobles en el orden adecuado? Si tenemos la mala suerte de producir el periódico completo

WWW.LINUX- MAGAZINE.ES

nosotros mismos, es mejor sin duda trabajar directamente en las páginas de Scribus. Pero en caso de que mucha gente esté trabajando en páginas diferentes, es mucho más simple considerar cada página como un elemento independiente y emparejarlas adecuadamente antes de imprimir.


Scribus • PRÁCTICO

de algún programa estándar en la indusmemoria o espacio en disco, Scribus Repasando brevemente lo discutido, se tria tipográfica, como Quark XPress o podrá con lo que se le eche. Tenga en comentó que las imágenes destinadas a Macromedia Freehand. Hoy en día, aún cuenta, no obstante, que si sus archivos ser impresas se fijaban en modo de color se requiere usar un formato estándar, de imagen son de baja resolución, ponCMYK, mientras que las que se ven en pero ya no es un formato propietario limgamos por caso 72dpi, como los que uno pantalla eran configuradas en modo itado a una aplicación: es el Portable puede encontrar en la World-Wide-Web, RGB. En el menú desplegable General, Document Format (PDF) de Adobe. ni Scribus ni ningún otro programa seleccione Output Intended for Print. Como formato de fichero, el PDF tiene podrá incrementar esa resolución “por La pestaña Color tiene asimismo algudos ventajas muy importantes. La arte de magia”. Podrá guardarlas a nas opciones avanzadas muy intereprimera es que libera al usuario de usar 800dpi, pero si eran de baja resolución, santes. Si selecciona Use Custom Rendeprogramas específicos. En segundo lugar, seguirán siendo de baja resolución. ring Settings, podrá ajustar manualconsidere que los formatos nativos de En la pestaña, Fonts, seleccione Embed mente la forma y frecuencia de los punautoedición como los usados por Quark all fonts. De este modo todos los tipos de tos mediotono. Esto forma parte del proXpress, InDesign e incluso Scribus son, letra usados en el documento se ceso de selección, y si su imprenta le por supuesto, editables. Esto es mala incluirán en el PDF. Esta característica proporciona información específica, es cosa a la hora de imprimir. Si la imprenta no sólo significa que el documento se este el menú dónde deberá introducirla. usa tipos de letra con medidas ligeraimprimirá correctamente, sino que tamEn la mayoría de los casos, no obstante, mente diferentes, el trabajo entero puede bién se evitan problemas de licencias lo más seguro es simplemente ignorar imprimirse incorrectamente: las letras con el tipo de letra. estarán donde no deben, y habrá que (Recuerde que es ilegal rehacer el proyecto por completo. El suministrar los tipos de remedio tradicional para este problema letra a la imprenta, era enviar el tipo de letra a la imprenta, aunque muchas le dejen algo que en realidad no es legal debido a hacerlo, ya que luego los contratos de licencia. Sin embargo, el borran el tipo de letra formato PDF se creó explícitamente para tras su uso). el intercambio de documentos, por lo Las pestañas Extras y que esto ya no es un problema. Security no nos interesan Como todas las aplicaciones profesiode momento, vaya direcnales de autoedición, Scribus es capaz tamente a la pestaña de generar PDFs. Estos PDFs pueden ser Color (véase la Figura 3), tan simples o complejos como lo que es de vital importanrequiera el trabajo. Para crear nuestro cia por razones discutidas periódico en formato PDF, vaya al menú en la primera y segunda principal y seleccione File > Export > partes de esta serie. Save page as PDF. Observe el cuadro de diálogo que aparece. ¿Complejo? No tenga miedo, es fácil de comprender. Este menú está lleno de opciones. Antes de nada, en la pestaña General seleccione Downsample Images y fíjelo en 200dpi. 200 puntos por pulgada es una resolución suficientemente alta para imprimir un periódico. Esta resolución relativamente baja es adecuada debido a que la tinta se explayará por el papel de baja calidad usado en periódicos. Para trabajos de mayor calidad de impresión, como revistas, este parámetro ha de fijarse en 300dpi o más. Si Figura 1: El uso de plantillas da pie a la consistencia. Incluso páginas relativamente diferentes, como los no hay problemas de mostrados, se construyen a partir de una misma plantilla base.

WWW.LINUX- MAGAZINE.ES

Número 06

29


PRÁCTICO • Scribus

Figura 2: El menú de exportación a PDF de Scribus ofrece tantas alternativas como las de una aplicación comercial. Figura 5: Importación de dos páginas sencillas a una doble página.

todo esto, ya que con la configuración por defecto suele ir bien. Este proceso debe repetirse para las cuatro páginas. Incluso las páginas dobles deben exportarse como una página impar y otra par separadamente para ensamblarlas posteriormente. Tenga en cuenta que dos páginas situadas una a continuación de la otra no se imprimirán de esa manera, salvo en las páginas centrales.

Tarea Titánica Ensamblar un periódico es una tarea tediosa. Esa es la razón por la cual existen tantos programas para posicionar las páginas en el orden correcto. Pero estos programas que cuestan miles de dólares se escapan del presupuesto de este proyecto, entonces, ¿cómo lo haremos? Pues muy fácilmente, aunque pueda resultar una experiencia algo laboriosa. Lo primero será crear una nueva página lo suficientemente grande para dar

30

Número 06

WWW.LINUX- MAGAZINE.ES

Figura 4: Creación de una nueva metapágina que contendrá las doble páginas.

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

RECURSOS [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/

EL AUTOR

Figura 3: La solapa de color de Scribus contiene opciones muy sofisticadas.

cabida a dos páginas completas, una al lado de la otra. Seleccione New en el menu File. Esto nos permitirá crear un meta-documento que contenga nuestros archivos (véase Figura 4). En nuestro caso, la página tiene una altura de 386mm, exactamente la de una página simple. Sin embargo, la anchura es de 594mm, que es exactamente el doble del ancho de una página simple en nuestro proyecto. Scribus cambiará automáticamente las medidas de milímetros a puntos. El siguiente pasó será seleccionar la herramienta imagen de la barra de herramientas de Scribus y dibujar dos rectángulos idénticos en la página que tengan la misma longitud de alto que la página y la mitad de su anchura. Guarde esto, pues será nuestra plantilla básica de una doble página. El siguiente paso será importar las páginas y aquí es donde el asunto se vuelve espinoso. Cada página se reimporta (Scribus la trata como una imagen normal) y se re-exporta como un PDF de la 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 opuesta en el orden de impresión, por lo que este orden puede cambiar dependiendo del nú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 hoja y la 1 en la derecha. De esta manera cuando se doble por la mitad, la parte derecha se convertirá en la portada. De la misma manera, la página 2 y la 47

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 Gorgeous y CityCraic. En la actualidad trabaja como periodista y contribuye con Linux Magazine, Variant, Mute, The Guardian y muchos otros periódicos y revistas en temas artísticos, de diseño y tecnología.


Es muy fácil confundirse en este paso, por lo que será mejor hacer los cálculos con una hoja de papel con anterioridad. Un sólo error supondrá la impresión de las páginas en orden equivocado, lo que sería un desastre para un periódico. En la imprenta, el equipo de pre-impresión ensamblará las dobles páginas en un periódico completo, pero ellos estarán trabajando con las dobles páginas proporcionadas, por lo que si hubo algún error, habrá que rehacerlas. Esto puede salir caro si los PDFs ya se habían usado para crear la cinta con la que se imprime el periódico. Cada doble página se exporta como una sola hoja grande y se envía a la imprenta. Repita este proceso con todas las páginas, en el orden adecuado, y eso es todo, el periódico esta listo. Repítase esto a diario y ya está usted en el negocio de la publicación de diarios en Linux.

Aranceles A la hora de generar un PDF, al igual que al exportar un archivo HTML, algunos programas tienen más calidad que otros. ¿Qué tal lo hace Scribus a este respecto? Le enviamos nuestro periódico de pruebas a David Hunter, un profesional de la pre-impresión habituado a trabajar 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 dado cuenta sin mirar la meta-información. En líneas generales está 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 que ahí está el problema, más que en el propio Scribus. De todas formas, como te he comentado, las páginas están bien y se imprimen sin errores”.

Conclusiones Ésta serie de artículos ha sido un intento de examinar el proceso completo de publicar un periódico con Linux, usando el programa de código libre Scribus. La primera parte [1] empezó con una descripción otros programas de autoedición, como Quark XPress. Se mostró cómo crear un nuevo documento, cómo administrar el color y cómo definir partes de la página como las cabeceras. En la segunda parte [2] se mostró cómo importar una imagen y cómo situar texto en la página. Y en esta última entrega hemos descrito algunas tareas finales: cómo colocar las páginas en orden y como generar un PDF, por ejemplo. Por supuesto, es imposible abordarlo todo. Pero se ha intentado ofrecer una guía para el principiante en su propio proyecto de publicación con Scribus. Aquellos que no han probado nunca Scribus deberían verlo para creerlo. Cualquiera que se haya partido la cabeza con Microsoft Publisher o Ragtime entenderán lo inflexibles que son a veces los programas propietarios de autoedición. Scribus es otra cosa. Scribus es un auténtico competidor de Quark y Adobe y seguro que no se quedan indiferentes viendo como surge Scribus. Sólo el tiempo dirá si Scribus y Linux se hacen un hueco en la industria de la autoedición. ■


PRÁCTICO • Hotplugging

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

ENCHUFADOS Lo que los usuarios www.photocase.de

quieren es que el hardware funcione. Las distribuciones Linux actuales están progresando 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

¿

Es mucho pedir? Sólo quiero que Linux ejecute el programa correcto 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 Secretos Cuando 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-

32

Número 06

positivo para el dispositivo y luego /etc/hotplug/usb/, el agente ejecuta el llama al agente apropiado. Un agente script. es un script, normalmente almacenado El acto de cargar un módulo típicaen el directorio /etc/hotplug, que se mente dispara unos cuantos eventos más encarga de manejar las de la conexión en acciones asociadas a caliente, que de nuevo estos eventos. En este invoca a otros agentes. Es caso, el agente realiza común que varios agentes la tarea de añadir y rede conexión en caliente gistrar el nuevo dispositrabajen juntos. Por ejemtivo. Figura 1: Tras modificar el plo, cuando se conecta un Los pasos que el agente fichero de configuración de disco duro externo, realiza pueden variar Udev, el icono del escritorio primero se carga el agente dependiendo de la disGnome tiene una etiqueta USB y luego se carga el tribución y del tipo de más intuitiva. agente de SCSI para monhardware que se esté tar las particiones indiviinstalando. El agente USB, para el hardduales como dispositivos SCSI con la ware que se conecta a este puerto en ayuda del módulo usb-storage. Si se caliente, puede ser un buen ejemplo. El conecta un conector Bluetooth, el agente agente USB primero comprueba si el USB se ejecuta primero, seguido por un controlador para el nuevo dispositivo agente Bluetooth llamado está disponible (por ejemplo, isdn) y bluetooth.agent. luego llama a modprobe para que cargue La Lista Negra el módulo. Si el agente encuentra un script con el mismo nombre que el conEl fichero /etc/hotplug/blacklist contiene trolador en el directorio una lista de módulos que ningún agente

WWW.LINUX- MAGAZINE.ES


Hotplugging • PRÁCTICO

dispositivo antes de llamar al agente.

Necesidad Imperiosa Udev [1] es el sucesor designado para los ficheros de dispositivos estáticos y la mayoría de las distribuciones actuales lo usan. El propósito de Udev es crear los ficheros de dispositivos 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

Figura 2: El hal-device-manager con información detallada del adaptador WLAN Prism2.

tiene permiso para cargar. La lista contiene 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 dispositivo 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

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 herramienta lsusb, que muestra los dispositivos USB conectados, puede ayudar a

Cuadro 1: Conexión en Caliente con Suse Linux La solución de Suse Linux para la conexión en caliente es diferente en parte y la versión actual no hace uso de la arquitectura HAL. Distingue entre (actualmente) dispositivos desconocidos y configurados y usa los programas hwup, hwdown, hwstatus y hwscanqueue para controlar las conexiones en caliente. Suse almacena un fichero de configuración en /etc/sysconfig/hardware para los dispositivos configurados. Cuando el kernel registra 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 dispositivos de CD/DVD y una variedad de dispositivos 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 sistema 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 configuració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 posteriores 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-

WWW.LINUX- MAGAZINE.ES

ción del disco una vez que se haya conectado, pero si se tiene esta caracterí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 nombres intuitivos y únicos a los dispositivos. Por ejemplo, si se tiene dos discos USB simplemente hay que editar las entradas en [Used Names] para distinguirlos. 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 derecho del ratón en el escritorio KDE y se selecciona Configure desktop... en el menú desplegable. En la ventana Behavior, 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.

Número 06

33


PRÁCTICO • Hotplugging

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 proporciona el punto de montaje /sys. Se necesita la ruta como parámetro (-p), con este comando para obtener la información SysFS:

udevinfo -a -p /block/hda/hda1 ... SYSFS{idVendor}="10d6" ...

Este comando ayuda a descubrir los valores específicos de los dispositivos que son necesarios para las configuraciones especiales. Existe un “how-to” detallado para

crear ficheros Udev en [2]. El sitio web de Fedora tiene un breve resumen del sistema Udev [3].

Asignaciones Propias Un fichero de asignaciones contiene una o varias IDs que identifican de forma unívoca un componente hardware. Cuando un dispositivo que coincida con

Cuadro 2: Ficheros de Dispositivos con Udev En Linux las aplicaciones usan ficheros de dispositivos para acceder al hardware. 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 virtuales. Esto significa que el directorio /dev tiene miles de entradas. Este sistema tiene algunas desventajas. Por ejemplo, no se indica que dispositivos existen realmente o han sido identificados correctamente por los controladores. Además, los ficheros de dispositivos 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 dispositivos según se requieran. Cuando un dispositivo cambia, el kernel llama al programa especificado en /proc/sys/kernel/hotplug, típicamente /sbin/hotplug. Dependiendo del tipo de dispositivo, el programa cargará módulos, modificará privilegios de acceso, configurará dispositivos 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 encuentra en /sys) para descubrir esta información. Los dispositivos de bloques están localizados en /sys/block y los de carácter en

34

Número 06

/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:

IDE que comprueba si un directorio llamado /proc existe para identificar el dispositivo como CD-ROM: KERNEL="hd[a-z]", U PROGRAM="/bin/cat /U

cat /sys/block/hda/dev

proc/ide/%k/media", U

3:0

RESULT="cdrom", U

Udev puede analizar cualquier información SysFS, como la clase del dispositivo, nombre, número, etc., para crear los dispositivos apropiados. Si los nombres son estables. Udev puede incluso ejecutar programas complejos para comprobar 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 configuración. Los ficheros en /etc/udev/rules.d especifican los nombres de ficheros de dispositivos, otros en /dev/udev/permissions.d especifican los privilegios. Las reglas por defecto crean ficheros de dispositivos que usan los nombres familiares de Linux. Al principio de cada regla, hay una o más condiciones que tienen que ser detalladas 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 programas externos. La página de ayuda de man tiene un ejemplo para los CD-ROMs

WWW.LINUX- MAGAZINE.ES

NAME="%k", SYMLINK="cdrom%e" En este ejemplo, Udev llama a /bin/cat para el fichero /proc para todos los dispositivos cuyo nombre empiece por hd. Si el fichero especifica el CD-ROM como el medio, Udev recordará el nombre pero creará adicionalmente un enlace simbó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 nombre, el propietario, el grupo y los privilegios. usb/lp*:root:lp:0660 Todos los ficheros de dispositivos llamados 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 apropiadas para cualquier dispositivo conocido en /sys/class y /sys/block.


Hotplugging • PRÁCTICO

una de estas entradas se conecta al sistema, el subsistema automáticamente ejecuta el programa especificado, que puede ser un script. Esto permite habilitar un adaptador WLAN USB que la distribución no configure de forma adecuada. En nuestro laboratorio, 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:

de vídeo DV de la misma forma fallaron debido al lamentable estado del subsistema 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

Un Mundo Feliz – Algún Día

prism2 0x0003 0x0846 0x4110 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0

La mayoría de las asignaciones se parecen a ésta y tan sólo usan los cuatro primeros valores. El primer valor especifica que programa debe ejecutar el sistema de conexión en caliente si los valores 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 sistema 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 directorio 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 direcció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, nuestros intentos para configurar una cámara

En el futuro, las aplicaciones serán capaces de preguntar los detalles del hardware por D-Bus [6]. D-Bus es un sistema 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-properties, cuya ultima versión ha presentado Gnome, usa D-Bus y HAL para asociar 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.

Figura 3: En Gnome 2.8, gnome-volumeproperties especifica que aplicación se ejecuta por cada evento de conexión en caliente.

mknod para crear el fichero de dispositivo.

Del Hardware a la Aplicación Otra 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 problemas de su iPod que no se desregistraba correctamente [5]. Los ficheros FDI son ficheros con formato XML que proporcionan descripciones 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”).

WWW.LINUX- MAGAZINE.ES

A 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á obsoleta 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.

RECURSOS [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

Número 06

35


PRÁCTICO • MLDonkey

Compartir archivos con MLDonkey y KMLDonkey

TRES EN UN BURRO www.sxc.hu

El cliente multired MLDonkey proporciona a los usuarios acceso a la mayoría de redes donde se comparten archivos. Os mostraremos cómo configurar MLDonkey y cómo controlar

L

os programas para compartir archivos en redes de intercambio son probablemente las aplicaciones más controvertidas de nuestros tiempos. Usuarios que ponen sus colecciones 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.

36

Número 06

este cliente con una interfaz KDE llamada KMLDonkey. POR MIRKO ALBRECHT Entre los ejemplos más famosos de redes donde se comparten archivos encontramos a Morpheus, Gnutella, BitTorrent o Donkey/eMule. Los clientes más modernos pueden soportar múltiples redes de intercambio de archivos entre iguales y ofrecer a sus usuarios

WWW.LINUX- MAGAZINE.ES

accesos más intuitivos. Uno de esos clientes es MLDonkey.

El Núcleo MLDonkey ejecuta lo que se ha dado en llamar núcleo, parecido a un demonio en segundo plano. Algunas distribuciones


MLDonkey • PRÁCTICO

Figura 1: El primer paso es restringir el acceso al núcleo de MLDonkey asignando una contraseña.

incluyen el núcleo y una interfaz gráfica de usuario (GUI). Otras, como Suse Linux 9.2, simplemente incluyen el interfaz 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 querrá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. Tambié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 Binarios Si 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 constructor 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 versió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 operaciones 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 precompiladas 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 Burro Compilar MLDonkey desde el código fuente nos proporciona una versión del

WWW.LINUX- MAGAZINE.ES

software que concuerda con nuestro entorno hardware y nuestras aplicaciones 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], pudiendo seguir los pasos habituales para descomprimirlos. Movemos los contenidos del paquete del parche a la carpeta 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 BitTorrent, 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 cambiaremos --disable (deshabilitar) por --enable (habilitar) según nuestros deseos. Por ejemplo, si sólo deseamos soporte para eDonkey2000, simplemente ejecutaremos ./configure -disable-multinet sin olvidar especificar el resto de preferencias. 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 intercambio 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ódulos de redes que implementa MLDonkey. Para compilar MLDonkey necesitamos la herramienta Objective Caml

Número 06

37


PRÁCTICO • MLDonkey

(este es el lenguaje en el que se ha escrito MLDonkey) versión 3.08 y LablGTK 1.2.7. Podemos usar la funció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 herramientas. 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 necesitaremos actualizar LablGTK. Para compilar ocaml y lablgtk, antes de empezar debemos descargar las fuentes desde [5] y desde [6]. Ahora ejecutaremos tar xzfv para desempaquetarlos. 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 herramientas, 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 problemas compilando MLDonkey podemos o olvidarnos del parche o usar la variante patch_pack16r en su lugar. Los comandos make depend y make nos generan el ejecutable, puesto que no hay make install. Para ejecutar MLDonkey como usuario sin privilegios simplemente ejecutamos el núcleo de MLDonkey mlnet,

38

Número 06

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.

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, necesitamos privilegios de administrador para hacerlo. Para hacer que el archivo sea ejecutable por todos los usuarios introducimos chmod a+x/usr/ local/bin/mlnet o asignamos a los usuarios privilegios adecuados en nuestro sistema.

Inicio del Núcleo Cualquier 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 programa, este crea una gran cantidad de archivos y directorios en nuestro directorio raíz. Para evitar este desorden y mantener los archivos concentrados en un lugar definido debemos ajustar la variable de entorno MLDONKEY_DIR. Para hacerlo abrimos el archivo .bashrc de nuestro directorio raíz y añadimos la línea export MLDONKEY_DIR="/ruta/a/directorio-mldonkey", asegurándonos que creamos el directorio antes. Ahora nos conectamos de nuevo en la consola y aplicamos los cambios.

WWW.LINUX- MAGAZINE.ES

Cuando tecleamos mlnet, las siguientes líneas deben aparecer en nuestra pantalla al margen de otra mucha información: Welcome to MLDonkey SAVING SHARED FILES AND SOURCESU on localtime: 12/ 9, 17:07:33 SAVED Options correctly saved Core started on localtime:U 12/ 9, 17:07:33 (12/ 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 lanzamos el núcleo. Para no tener la necesidad de mantener abierta una ventana 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 introducimos killall mlnet.

Administración del Núcleo Ahora 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-


MLDonkey • PRÁCTICO

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 number 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 escribiendo 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 estructurada 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.

KMLDonkey Hace tiempo que existe una interfaz MLDonkey para el escritorio KDE. KMLDonkey 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 kmldonkey a nuestro panel de control KDE e integrar enlaces ed2k (enlaces a descargas de eDonkey en Internet). KMLDonkey también tiene una interfaz estructurada de forma lógica, que es autoexplicativa en la mayoría de las ocasiones. Si preferimos instalar un binario KMLDonkey, los usuarios de Suse descubrirá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-

WWW.LINUX- MAGAZINE.ES

tribución de Suse 9.2 es un antiguo kmldonFigura 3: Podemos añadir key-0.9.1. el applet de MLDonkey al La versión panel de control KDE actual de para un mejor y más KMLDonkey rápido acceso al núcleo. cuando se mandó a imprimir esta edición, kmldonkey-0.10, está disponible para ser descargada desde [8]. La construcción de la aplicación desde las fuentes es algo rápido y poco problemático. Para hacerlo, 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

Número 06

39


PRÁCTICO • MLDonkey

admin k0ntra5eña (Figura 1). Tendremos que hacer algunos ajustes más en Settings | Configure Connection (Configuración | Configurar Conexión) y en Preferences | Configure MLDonkey (Preferencias | Configurar MLDonkey). En el primer subFigura 4: Vista de la solapa “Búsqueda” de amule, otro front-end menú introducirepara MLMule. En este caso buscamos copias de “El Quijote” - el libro, mos la contraseña ojo, nada ilegal (esperamos). y credenciales de usuario que acabamos de introducir. También llamada oportuna es ./configure --prepodemos configurar el modo de inicio fix=/opt/kde3. El enlace para el pro(KMLDonkey startup mode) para lanzar grama compilado se encuentra bajo el el núcleo con la interfaz. Esto nos subtítulo “Internet” en el menú KDE. ahorrará el problema de tener que lanPodemos pulsar [Alt]+[F2] e introducir zar el núcleo manualmente como kmldonkey para ejecutar la aplicación hemos descrito con anterioridad. directamente (suponiendo que el núcleo El segundo menú nos ofrece opciones de MLDonkey está ejecutándose). para las distintas redes de intercambio Configuración que soporta MLDonkey. El área de redes Tras lanzar KMLDonkey, lo primero que (Networks) nos permite habilitar y condebemos hacer es configurar la interfaz figurar los módulos individuales. del programa en la última pestaña Podemos asignar el valor false (Falso) a (Console). Justo en la parte inferior de una red para evitar usar esa red. Si la pestaña está el lugar donde intronecesitamos habilitar una red, como ducir la contraseña para acceder al eDonkey2000, seleccionaremos true núcleo (hasta ahora cualquier usuario (Verdadero). de nuestra red local podía acceder a eDonkey 2000 nuestro núcleo usando telnet o vía HTML. Por ejemplo, para que la conKMLDonkey dispone de numerosos vatraseña sea k0ntra5eña, escribiríamos lores predeterminados para la mayoría lo siguiente en la consola: add_user de protocolos de intercambio entre iguales. Pero algunos necesitan algo de atención, como los de eDonkey2000. Buscaremos 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 conexiones con los Figura 5: Vista de la solapa de transferencias con 3 archivos servidores que descargándose y uno (en rojo) en estado de espera. sólo soportan ID

40

Número 06

WWW.LINUX- MAGAZINE.ES

bajas y que busque servidores que permitan ID altas. Una ID baja no nos llevará muy lejos en una red donde compartimos archivos. Una ID baja significa más trabajo administrativo para el servidor Donkey, puesto que los puertos específicos 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, debemos saber que la mayoría de los dispositivos 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 documentació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 Ajustes Algunos 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 espacio 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 predeterminado (“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


MLDonkey • PRÁCTICO

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 concluimos 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 retocar 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 KMLDonkey La interfaz del programa es muy intuitiva, estando las funciones distribuidas en unas pocas pestañas. Servers (Servidores) 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 comprobar la pestaña Statistics (Estadísticas) de vez en cuando. Esta nos ofrece interesante información sobre la capacidad de descarga de nuestros clientes. Una de mejores funciones de KMLDonkey es que Figura 6: Solapa de conexión de amule. Vemos en este caso los podemos integrar servidores centrales y de pares disponibles. el programa en nuestro panel de control KDE. Para mente desconocidos. No obstante el hacerlo pulsamos con el botón derecho paquete MLDonkey aún necesita algo sobre el área Kicker del panel de conde atención. Nos gustaría ver la instatrol y seleccionar Add | Applet | lación automática basada en RPM que MLDonkey Applet (Añadir | Applet | elimina la necesidad de que los usuaMLDonkey Applet) para añadir el prorios realicen tareas como copiar la apligrama. Aquí también podemos configucación en la posición adecuada del rar un par de parámetros críticos del árbol de directorios. núcleo (ver figura 3), incluyendo las Confiemos en que la industria del tasas de subida y descarga máximas. entretenimiento no arrase la comunidad De hecho el applet muestra las tasas de intercambio de archivos con su actuales para que las conozcamos de actual postura de oposición a cualquier forma rápida. Si la tasa de descarga es tipo de red de intercambio y que muy baja para otras tareas que tenreconozca el valor de la comunidad y gamos podemos presionar el botón apoye a prometedoras herramientas ■ “pausa” para indicar al núcleo de como MLDonkey. MLDonkey que espere hasta que pulsemos Play para rehabilitar el núcleo. RECURSOS Como hemos mencionado previa[1] Página Web de MLDonkey: http:// mente, ahora el navegador Web Konwww.mldonkey.org queror reconoce la URL ed2k como pro[2] Binarios MLDonkey de Spiralvoice: tocolo válido. Si nos encontramos con http://download.berlios.de/pub/ un enlace de este tipo en Internet, el mldonkey/spiralvoice/ navegador añadirá la descarga al [3] Foro de MLDonkey: http://mldonkey. núcleo actual con un solo clic de nuesberlios.de/modules. tro ratón. php?name=Forums

Conclusiones

Figura 7: Diálogo de amule para la configuración del programa. En este caso, vemos la sección correspondiente a la configuración del núcleo.

Tras 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 KMLDonkey, 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 interoperatibilidad normalmente no da problemas, y los cuelgues son práctica-

WWW.LINUX- MAGAZINE.ES

[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

Número 06

41


PRÁCTICO • Knoda

Administración de Bases de Datos con KDE

BIEN ORDENADO Knoda 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

E

l mes pasado aprendimos a realizar búsquedas en tablas múltiples con Knoda. Este mes descubriremos como crear tablas, formularios 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 ejemplo, el cuadro 1 nos muestra como configurar 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 Datos Ejecutamos Knoda y seleccionamos el controlador Sqlite2 en el diálogo de selección de controladores. Ahora pulsamos File | New | Database e introducimos 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 pulsar 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 campos 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

42

Número 06

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ñadiremos 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á nuestro 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-

rarnos de que los campos son los adecuados 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, RotoGrip, 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.

Formularios Recordaremos 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

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

WWW.LINUX- MAGAZINE.ES


Knoda• PRÁCTICO

Figura 2: El ayudante de formularios de Knoda.

si se tratase de una hoja de cálculo normal. 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 simplemente la seleccionamos de un menú desplegable. Para crear un nuevo formulario, pulsamos 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, pulsamos 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ú desplegable. Cuando lanzamos el ayudante de formularios, Knoda añade de forma automática los elementos necesarios para crear formularios. Si no estamos seguros de la función de los iconos, simplemente debemos mover el cursor sobre cada icono para que Knoda nos muestre una breve ayuda contextual al respecto

Tabla 1: Tabla Ejemplo del Club de Bolos Nombre del campo ID Nombre Apellido Calle Código Postal Ciudad Categoría Cuota Anual Pagado BolaBolos

Tipo de campo Auto incremental Texto Texto Texto Entero corto Texto Entero corto Float corto Boleano Entero corto

WWW.LINUX- MAGAZINE.ES

del icono. Ahora pulsaremos sobre Lineeditfield (Campo de texto de una sola línea) y luego sobre el formulario (vacío). Esto indica a Knoda que deseamos añadir un campo al formulario. Tendremos que indicar a Knoda tipo de datos y formato de datos para este campo. Con este fin pulsamos sobre las pestañas Data (Datos), Format (Formato), Frame (Borde) y Actions (Acciones). Seleccionamos la tabla Bowlers como fuente de datos para el primer campo y le asignamos el campo Name (Nombre). Repetimos los mismos pasos para añadir el resto de campos excepto Category (Categoría), Bowlingball (Bolas para jugar a los bolos) y Paid (Pagado). Cambiamos al modo visualización para probar el formulario. El campo Paid es boleano. O el miembro 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 asegurarnos 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 Bowlingball. Tenemos que especificar dos fuentes de datos. Primero seleccionamos la tabla Bowlers como fuente para el campo Category. Entonces seleccionamos la tabla Category como Listdatasource (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

Número 06

43


PRÁCTICO • Knoda

informe. Como primer elemento seleccionamos 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 miembro ha pagado su cuota. FALSE (Falso) aparece junto a los datos de los miembros que no han pagado.

Cuadro 1: Knoda y MySQL

Figura 3: El producto acabado.

nuevos registros de forma más cómoda (ver figura 3). Si bien Knoda tiene barras de navegación para cada formulario, no hay manera de cambiar su apariencia.

Informes Es 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 información. Seleccionamos File | New | Report (Archivo | nuevo | Informe) en el

menú principal o abrimos un nuevo informe a través del menú desplegable seleccionando Report. Para nuestro primer informe necesitaremos seleccionar 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

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 cargue la base de datos. De forma adicional, Suse Linux nos indica que indiquemos una nueva contraseña para el usuario root de MySQL. Para hacerlo escribimos mysqladmin -u root password 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 selección de controladores de Knoda. En la siguiente ventana introducimos root como User (Usuario) y pulsamos OK. Para acceder de forma remota al servidor MySQL mediante Knoda también tenemos que especificar la dirección IO o el nombre del anfitrión del servidor mysql como Host. Normalmente tendremos que suministrar un nombre de usuario y contraseña.

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

44

Número 06

WWW.LINUX- MAGAZINE.ES


Knoda• PRÁCTICO

Una lista de mayor longitud con este formato sería confusa, por lo que debemos añadir una opción para el pago. Knoda mostrará todos los miembros que no han pagado primero, y a continuación los que han pagado. Para añadir esta opción pulsamos sobre el icono Sections (Secciones) en la caja de herramientas. 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 tampoco 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 consulta. Podemos usar los resultados de una consulta como fuente de datos para el informe. Hay otra ventaja a este

método: podemos ordenar alfabéticamente los resultados. Para crear la consulta seleccionamos File | New | Query (Archivo | Nuevo | Consulta), pulsamos con el botón derecho 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 Display. 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 problemas. Y los tutoriales [3] son útiles para obtener más información respecto a ■ Knoda.

RECURSOS [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/


PRÁCTICO • Zaurus

ROMs 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

E

stamos acostumbrados a adaptar nuestras máquinas Linux añadiendo una nueva versión del kernel, cambiando de gestor de ventanas o habilitando el Composite de las XOrg. Todas estas tendencias también existen en el pequeño mundo de las Zaurus. Los usuarios han aprendido las técnicas básicas para poder crear versiones de ROMs que puedan ser almacenadas de manera correcta dentro de la memoria Flash del equipo. Naturalmente las primeras versiones de estas ROMs eran simples modificaciones de la que trae por defecto la Zaurus. Se eliminaban los juegos y apli-

46

Número 06

caciones PIN consideradas superfluas para dejar espacio libre a nuevos y necesarios drivers para las tarjetas wireless y bluetooth, nuevas librerías ncurses, consolas shell, utilidades de compresión, etc. Mientras se jugaba con estas variantes se aprendía más y más sobre la estructura interna de la Zaurus y sobre el funcionamiento de muchos de los periféricos de la misma (dispositivos CF, pantalla, puerto de infrarrojos, pantalla táctil, batería) llegándose a plantear arquitecturas alternativas que optimizaban el rendimiento global de la PDA. En este artículo repasaremos algunas de

WWW.LINUX- MAGAZINE.ES

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

Un Saurio en Libertad Sin duda una de las ROMs más valiosas es OpenZaurus[1]. Como la mayoría de los proyectos de software libre, éste parte de un solo desarrollador que desea tener una ROM completamente libre y mejorada para su Zaurus SL-5500. Poco a poco se ha ido convirtiendo en una distribución LFS (Linux From Scratch)


Zaurus • PRÁCTICO

basada en entornos Opie[2] o GPE[3]. carece de aplicaciones esenciales de Para quien no lo sepa, las PDAs Linux administración y presenta numerosos tienen también su propio entorno gráfico, errores que necesitan ser corregidos que es la parte encargada antes de plantearse un de gestionar las ventanas y uso serio del entorno. eventos producidos por disDe todas maneras el positivos tales como la potencial de la opción pantalla táctil, el teclado o GTK+ y X Window la introducción de una System es impresionueva tarjeta de memoria nante. ¿Os imagináis CF. La empresa TrollTech importar una sesión X ha desarrollado su propio Figura 1: Menú de actuade Thunderbird aplientorno de ventanas para lización de la Zaurus. De las cando sombras y transsistemas empotrados, tres opciones solo nos parencias por medio del Qtopia[4], basado en una interesa la número 4, que es Composite? Es intereversión simplificada de las la que procederá a la carga de sante ver cómo hasta QT denominada QT/ la ROM desde la tarjeta SD o en los sistemas tan Embedded[5]. Opie no es CF. pequeños como la ZauROM para otros modelos de Zaurus, más que un fork de la verrus aparecen competidescargaremos los ficheros adecuados y sión 1.5 de Qtopia que ha ido ciones tecnológicas entre KDE (Qtopia y procederemos a ejercer una presión en el adquiriendo su propia identidad por Opie) / Gnome (GPE), lo que da una idea teclado al estilo vulcaniano dependiente medio de modificaciones más o menos de la riqueza del software que nos del modelo de la Zaurus. En la Figura 3 importantes tanto a nivel de API cómo podemos encontrar para estas PDAs. se puede ver qué aspecto tiene una por la selección de aplicaciones que le Instalar OpenZaurus requiere un proOpenZaurus 3.5.2 con Opie. acompañan. Así Opie presenta opciones ceso de escritura en la memoria Flash No nos confundamos: esta ROM es de configuración y personalización a ROM interna de la Zaurus. Lo primero para hackers, pero también puede ser través de estilos de las que carece Qtopia, que hay que hacer es descargar de la usada por usuarios normales deseosos además de aplicaciones para el visuaweb de OpenZaurus[6] de tener un abanico de lizado de PDFs, navegadores webs y mulla última versión aplicaciones libres y titud de juegos. No todo el mundo desea disponible de esta disactualizadas. Realmente programar en QT/E y C++, así que un tribución (actualmente es una distribución que grupo de programadores decidieron la 3.5.2, aunque posiblenecesita un poco más poder realizar sus programas en GTK+ y mente se pueda descarde trabajo, pero para C por medio de un nuevo entorno gar la 3.5.3 para cuando admirar su potencia denominado GPE. A diferencia de Qtopia se publique este debemos entender / Opie éste necesita de un entorno X para artículo). Para instalar cómo está construida poder ejecutarse (XFree86 / KDrive), lo OZ en una SL-5500 tenen la actualidad. que lo convierte en una aplicación más dremos primero que eleOpenZaurus no es pesada. Por desgracia GPE no está en la gir el entorno gráfico más que una de las actualidad tan evolucionado como Opie, que deseamos usar y el múltiples distribuciones perfil de la memoria del que pueden generarse a sistema. Para ser propartir de otro proyecto Listado 1: install.sh ductivos desde un menos conocido: bitprimer momento, es bake. Éste consta de un 01 #!/bin/sh aconsejable usar el conjunto de scripts en 02 mkdir zaurus entorno Opie y una disPython que, a partir de 03 cd zaurus tribución de memoria un recetario o ficheros que reserve unos 40M Figura 2: Peligroso menú de ser.bb, es capaz de generar 04 mkdir openembedded para RAM y el resto de vicio con múltiples opciones de programas compilados 05 mkdir bitbake los 64M de la Zaurus, calibración, testeo y backup/ para múltiples arquitec06 mkdir build 24M, para poder instalar restore de la Zaurus. turas. Con un sencillo 07 mkdir sources nuestras aplicaciones. comando podremos ir 08 svn co Nos aseguraremos de almacenar los dos generando desde paquetes para svn://svn.berlios.de/bitbake/t ficheros elegidos de la lista de descarga máquinas Zaurus hasta una imagen runk/bitbake en la tarjeta CF bajo los nombres “zImROM de la última versión de OpenZauage” para el kernel y “initrd.bin” y prorus en desarrollo. Es, por tanto, un 09 bk clone cederemos al flasheado siguiendo los framework para el nunca cómodo crossbk://openembedded.bkbits.net/o pasos descritos en la Cuadro 1 para el compiling. Bitbake constituye el núcleo penembedded modelo SL-5500. Si deseamos usar esta del proyecto OpenEmbedded[7], que se

WWW.LINUX- MAGAZINE.ES

Número 06

47


PRÁCTICO • Zaurus

ha separado de éste por cuestiones de comodidad. Ahora el objetivo de OpenEmbedded es el de aglutinar en un solo proyecto el conjunto de descripciones de paquetes y arquitecturas que deberá compilar bitbake. Para aclarar los conceptos vamos a instalar los proyectos bitbake y openembedded, y diseñaremos un fichero .bb para el programa aircrack (ver artículo anterior) que añadiremos a nuestro repositorio para una compilación cruzada automática. Suponiendo que se tiene instalado los programas de control de versiones Subversion[8] y BitKeeper[9], instalar y usar bitbake y openembedded va a resultar de lo más sencillo. Solo hay que ejecutar el pequeño script del Listado 1. Éste se encargará de crear los directorios adecuados y descargar los dos proyectos

antes mencionados. Realmente estos proyectos son muy dinámicos y cambian con mucha frecuencia por lo que es aconsejable ir actualizando cada cierto tiempo nuestras copias locales con estos comandos: cd bitbake svn up cd ../openembedded bk pull; bk -r co -q

Ahora necesitamos crear un fichero de configuración dentro del directorio build/conf (ver Listado 2) que contendrá las principales directivas del entorno. En este fichero indicaremos cual es el procesador para el que deseamos generar binarios, para qué distribución en particular vamos a crear imágenes ROMs y

Cuadro 1: Preparando los Flashers El proceso de escritura en la memoria Flash ROM generalmente requiere introducir 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 zImage 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 initrd.bin

48

Número 06

• 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 mientras 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 selecciona 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 peligroso. Es aconsejable usar solo la opción 10 de la tercera página (NAND Flash Restore).

WWW.LINUX- MAGAZINE.ES

paquetes y, finalmente, qué versión del kernel usará nuestra distribución. El proceso es muy flexible, por lo que es recomendable consultar la documentación[10] de la web de openembedded. Antes de compilar nada necesitaremos establecer la siguiente variable de entorno: export BBPATH=$HOME/zaurus/U build:$HOME/zaurus/U openembedded

Perfecto, ahora si queremos generar la imagen ROM de Opie y OpenZaurus solo tendremos que escribir, dentro del directorio build el comando bitbake opie-image. Observaremos tranquilamente cómo se van a ir descargando los paquetes en código fuente de los compiladores, el kernel y del resto del sistema de manera automática. En una primera

Listado 2: local.conf 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/"


Zaurus • PRÁCTICO

etapa bitbake compilará el paquete GCC de manera nativa para nuestra máquina, pero indicando que el código que debe generar ha de ser para el procesador que usa la Zaurus (procesadores ARM). Con este compilador se irán generando los binarios para nuestra plataforma de destino y todo esto lo tenemos automatizado gracias a bitbake. Incluir un paquete es tan sencillo como crear un directorio para la nueva aplicación y poner dentro de él un fichero .bb que indique cómo generarla. El programa aircrack para la búsqueda de claves WEP no está dentro de openembedded. Lo incluiremos nosotros creando el directorio con un mkdir opemenbedded/packages/aircrack y crearemos el fichero .bb adecuado (ver Listado 3). Generaremos de manera rápida un paquete instalable directamente en nuestra Zaurus con el comando:

Listado 3: aircrack_2.1.bb 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'"

bitbake -b $HOME/openembedded/U packages/aircrack/U aircrack_2.1.bb

grafe Modelo C860 – Modo Flash). Si seguimos los pasos ahí indicados la Zaurus arrancará desde la tarjeta de memoria CF y mostrará un menú ncurses con Creo que es ahora cuando ya podemos diversas opciones. Deberemos selecentender la importancia, la versatilidad y cionar 5 Flash Repartition e introducir 27 la potencia de este proyecto. ¡A crear cuando nos pregunte por el tamaño de la ficheros .bb para la Zaurus! partición raíz. Finalizada esta etapa el sistema se reiniciará solo y, antes de que La Cacko ROM empiece de nuevo la carga del sistema Cuando adquirimos una Zaurus de la operativo, deberemos repetir todos los familia de las Cxxx lo más probable es pasos hasta volver a visualizar el menú que venga en Japones. El primer paso es, en modo texto anterior. Es en esta nuespor tanto, adaptarlo a algún idioma que tra segunda visita cuando podremos podamos entender (vale, nos conforseleccionar la opción 1 Install new ROM. mamos con el inglés). De entre todas las Ya sólo nos queda esperar a que resetee opciones posibles de traducde nuevo y dejar, ahora sí, ción la mejor es directamente que cargue el nuevo sistema sobreescribir la ROM de operativo para poder disfruSharp por la Cacko ROM. Ésta tar de su nueva estética (ver es una variante de la ROM Figura 4). original en la que se han eliOtra opción, pero por minado algunas aplicaciones ahora menos utilizada, concomo el diccionario ingléssiste en instalar la versión japonés para dejar espacio a de OpenZaurus para este otras cómo el reproductor modelo. Esta alternativa irá multimedia Kino2. Esta ROM adquiriendo cada vez más ha pasado por varios procesos interés en cuanto tengamos de refinamiento y ahora es un kernel 2.6 completaposible descargar la versión mente estable, ya que esta Figura 3: Escritorio 1.22[11] junto con un primer versión promete rendimienpor defecto de una paquete de corrección de tos nunca vistos antes en OpenZaurus con Opie. errores[12]. El proceso de este tipo de dispositivos. Por instalación de esta ROM tiene desgracia debido a temas de dos partes, en una primera parte partipatentes y especificaciones cerradas no cionaremos la memoria y en la siguiente podremos disfrutar, a falta de algún milaescribiremos los datos de la ROM en la gro, de las tarjetas SD en las máquinas memoria Flash de la Zaurus. Lo primero SL-5500 bajo kernel 2.6. que hay que hacer es asegurarse de Unas X solo para mayores descargar y almacenar los tres ficheros que componen la ROM en una CF de 64M Hay un desarrollo que realmente merece tal y como se indica en la Tabla 1 (epíla pena mencionarlo aquí, y es la

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 }

WWW.LINUX- MAGAZINE.ES

Número 06

49


PRÁCTICO • Zaurus

pdaXrom[13]. Su objetivo es entregar una distribución Linux completamente basada en XFree86 (KDrive realmente) con un gestor de ventanas estándar. En la actualidad se pueden usar los gestores Matchbox, IceWM, Fluxbox, FVWM y XFCE entre otros. La ventaja esencial de usar XFree frente a las opciones Qtopia / Opie / GPE es la inmediatez a la hora de portar nuevas aplicaciones a esta plataforma, de hecho solo hay que ver la lista de aplicaciones existentes para esta ROM (AbiWord, Dillo, XEmacs, Firefox, The Gimp …). Realmente impresionante es también, por desgracia, la cantidad de recursos de memoria que necesita tanto en RAM como en espacio de almacenamiento. Es por eso que esta ROM tiene más sentido en otros modelos como la C3000 que incorpora un disco duro de 4.4G, aunque en la actualidad no hay ninguna versión que soporte completamente este modelo tan moderno. Todo llegará.

Qué Hacer Cuando Algo va Mal En cierta manera nos sentimos responsables de incitar al lector a jugársela con su amado cacharrito. El procedimiento de escritura de la ROM no está exento de riesgos, y la variedad y atractivo de las ROMs es tan grande que es difícil de evitar el deseo de ir cambiando cada poco tiempo la de nuestra Zaurus. Si por alguna razón algo falla y la PDA deja de arrancar tras un flasheado interruptus, el

tenido desde [15] y copiarlo a una tarjeta SD o CF de más de 128M. Con ella introducida en la ranura correspondiente, activaremos el menú de servicio e iremos a la tercera página / opción 10 (NAND Flash Restore) para completar la restau■ ración de la ROM original.

RECURSOS Figura 4: Cacko ROM en una SL-C860. Bonita selección de iconos ¿verdad?

mejor consejo que podemos dar es intentar restaurar la ROM original. Si estamos trabajando con una SL-5500 podemos encontrar la ROM de Sharp en http:// www.elsix.org/downloads/ 5500v313Ospack.zip. Descargaremos ese fichero, lo descomprimiremos y copiaremos el fichero así obtenido en una CF para volver a flashear desde ahí siguiendo los pasos ya indicados en la Tabla 1. La ROM de Sharp viene acompañada por una serie de aplicaciones más o menos útiles que tendremos que descargar desde otra dirección[14]. En caso de que el error se presente en el modelo C860 tendremos que acceder a otro de los menús secretos de la Zaurus. Usaremos el procedimiento descrito en la Tabla 1 bajo el epígrafe Modelo C860 – Modo Flash. La idea consiste en volver a volcar el contenido íntegro de la memoria NAND de la Zaurus que esta traía de fábrica. Podemos descargar este con-

[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: openembedded.org/ [8] Subversion: org/

http://www.

http://subversion.tigris.

[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

EL AUTOR

[15] Backup NAND: http://downloads. conics.net/pda/zaurus-sl-c700/ service-menus/original-backups/

50

Número 06

WWW.LINUX- MAGAZINE.ES

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, programación con las QT, perfeccionamiento de C++, desarrollo en Java y mil cosas más.


Macros OpenOffice• PRÁCTICO

Creación de Macros en Basic en OpenOffice

MACROMÁTICA www.photocase.de

El paquete de ofimática OpenOffice puede usar un amplio abanico de scripts y macros para automatizar tareas 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

S

i se encuentra repitiendo tareas complejas que se realizan paso a paso en OpenOffice [1], podría ser hora de crear una macro. OpenOffice soporta una gran variedad de opciones de programación. La versión 1.1 presentó el concepto de puentes, que permite a los usuarios añadir su propio código en C, C++, Java o Python. En la versión 2.0, que está a punto de salir de un momento a otro, el paquete básico de OpenOffice soportará también la Interfaz de Lenguaje Común (CLI), que permite a los usuarios añadir sus propios programas en Javascript y C#. De todos los lenguajes que se pueden usar en

OpenOffice, quizás el Basic sea la opción más sencilla. Este artículo describe como empezar con la creación de macros en Basic.

Empecemos La programación en Basic comienza en el menú Tools | Macros, que tiene dos entradas: Record macro, grabación de una macro a través de un uso interactivo y Macro…, que abre una ventana nueva (Figura 1). La ventana ayuda a organizar las macros que acompañan a la distribución OpenOffice y que permite manejar las macros propias.

WWW.LINUX- MAGAZINE.ES

Los programas Basic se asignan a un módulo y a una biblioteca, que por defecto son Module1 y Standard. Un módulo nuevo contendrá el método Main, que es básicamente un marco de trabajo vacío sin ningún código (tan solo contiene algunos comentarios con REM). Pulsando en Edit aparece el editor y muestra el marco de trabajo de la función (Figura 2). Ahora se pueden usar todas las características del Basic. Seleccionando Help | Contents se muestra la ayuda de Basic que tiene OpenOffice con una lista de funciones (Macros and Programing | Commands | Alphabetical list …).

Número 06

51


PRÁCTICO • Macros OpenOffice

A continuación vamos a escribir lo siguiente en el marco de trabajo: Sub Main Output = "Son las " & Time() MsgBox Output, 0 End Sub

Cuadro 1: UNO Complicado, Basic Simple OpenOffice trae soporte directo para Basic, eliminando la necesidad de interfaces externas. El lenguaje Basic por sí mismo no es exactamente difícil, pero necesitará algunas de las avanzadas características de Basic para trabajar con la compleja arquitectura de OpenOffice. OpenOffice tiene una interfaz de programació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 diseñ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 sencillo: 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 implementar 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 algunas peculiaridades: por ejemplo, algunos métodos se le aplican directamente a las propiedades. Dicho de otro modo, un programador no necesita llamar a una función como circle.radius() ya que puede usar directamente el atributo circle.radius. Esto ocasiona algunas confusiones en la práctica, ya que se pueden usar ambas notaciones.

52

Número 06

La palabra reservada Sub designa una función, que se llama Main en este caso. En realidad, OpenOffice no se i n t e re s a por l o s nombres y empieza a analizar el código a partir de la primera función Figura 1: La ventana de administración de macros de OpenOffice Basic. que se encuentra en el módulo de la macro. Output es una cia de otros lenguajes de programación: el cadena que contiene una parte constante, parámetro no hace referencia al número “Son las “ y la salida de la función de objetos sino al índice más alto. Así Time(), que proporciona la hora del día. pues, List(10) proporciona una lista de 11 El operador & concatena estas partes para elementos, desde List(0) hasta List(10). obtener una única cadena de caracteres. Las variables en Basic no se diferencian Se puede dejar fuera los paréntesis de la con mayúsculas y minúsculas, es decir, función Time, no afecta a la salida. que Mi_Variable es la misma variable que Por último, la función MsgBox muestra mi_variable. un cuadro de diálogo. El primer El script tiene que comprobar si se está parámetro es el texto que se quiere que se ejecutando dentro de un documento muestre y el segundo define el tipo de la OpenOffice. Para ello, se usa el método ventana del cuadro de diálogo. El 0 en supportsService() de la referencia del doeste ejemplo significa que el cuadro de cumento: diálogo sólo contendrá un botón de oDoc = ThisComponent U “Aceptar”. Un 1 adicionalmente mostraría If oDoc.supportsService U un botón de “Cancelar” y hay otras va("com.sun.star. U riantes con botones de Si/No y otras combinaciones. MsgBox también devuelve un text.TextDocument") Then valor que indica que botón ha pulsado el usuario. En nuestro ejemplo no se ha Además de este método, el objeto del dohecho nada en concreto con este valor. cumento también tiene una función interesante getText(). La función no proEste Documento porciona el texto del documento, sino una Hacen falta algo más que las funciones de referencia a un servicio de texto que conBasic si lo que se quiere es acceder a los tiene varios métodos, incluido métodos documentos de OpenOffice, lo que para mover el cursor a través del texto implica acceder a los objetos e interfaces (por ejemplo createTextCursor). UNO (véase el Cuadro 1). El punto de El servicio de texto tiene otra función acceso a esta jerarquía de objetos es Thisllamada createEnumeration(), que enuDocument, una palabra reservada que mera los párrafos en el documento, pero hace referencia al documento en el que se aun no nos proporciona el texto. Por el está ejecutando el script. Éste puede ser contrario, un párrafo tiene unas 150 un documento de texto, una hoja de cálpropiedades que describen de forma preculo o incluso un dibujo. ThisDocument cisa el estilo. es el objeto padre que proporciona los Se puede acceder al texto normal de un métodos para navegar por el árbol del párrafo llamando a createEnumeration(). Si documento. el documento contiene una tabla, OpenOfPero antes de hacer esto, vamos a fice generará un mensaje de error en este declarar algunas variables. De nuevo, esto punto porque createEnumeration no puede es opcional y no es muy difícil. La palabra reconocer elementos tabla. Hay que añadir reservada Dim nos ayudará a hacerlo. El en este caso control de excepciones. número de elementos en una lista (array) El método String() proporciona el texto hay que ponerlo entre paréntesis (10). El de un elemento. El lenguaje Basic usa lenguaje Basic usa este sistema a diferenpara los bucles una construcción que

WWW.LINUX- MAGAZINE.ES


Macros OpenOffice• PRÁCTICO

Figura 2: Cuando se crea una nueva macro, OpenOffice genera una función Main vacía, como se muestra en el editor integrado.

empieza con Do y termina con Loop para analizar las enumeraciones. La condición de salida puede seguir a cualquiera de estas palabras. Si la salida aparece al final del bucle, el script recorrerá el bucle al menos una vez. Nuestra macro de ejemplo escribe el texto que analizamos usando este método a un fichero. El nombre del fichero se especifica por la variable Filename. Lo raro es tener que usar un número para abrir el fichero; una llamada a Freefile() proporciona ese número. Ahora se puede pasar el número del fichero y el nombre a Open() para abrir el fichero y escribir: Open Filename For Output U As #FileNo

El comando Print con el número del fichero como primer parámetro permite añadir líneas al fichero: Print #FileNo String. Sin el número del fichero, OpenOffice abre un cuadro de diálogo cuando se llama a Print. Después de añadir las líneas, hay que cerrar el fichero. Una llamada a Close con el número del fichero como argumento se encarga de ello. El listado 1 muestra la macro completa. Para ejecutar el script, hay que hacer click con el botón derecho del ratón en el lado izquierdo en la segunda línea (véase la Figura 2). Este botón ejecuta el script para el documento actual. Si OpenOffice encuentra algún error de sintaxis, inmediatamente informa del error ejecutando el script y mostrando el error en un cuadro

Listado 1: Exportador Simple de Texto 01 Sub Main

15

02 Dim oDoc As Object

16 Do While oParagraphs.hasMoreElements()

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

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

de diálogo. Desafortunadamente, los mensajes de error son bastante genéricos y no son bastante útiles a la hora de resolver los problemas (por ejemplo, “Object variable not assigned”). Un “generic error” sucede si se intenta ejecutar el script mientras la ventana de la ayuda es el documento actual. El botón con las llaves permite ejecutar el código paso a paso. Se puede seleccionar el nombre de una variable y luego pulsar el botón con las gafas para ver el valor de la variable en el campo Watch en la esquina inferior izquierda de la ventana. De nuevo se aplican las restricciones mencionadas previamente.

Conclusión El interfaz UNO para OpenOffice proporciona a los autores de scripts una herramienta potente de programación para las aplicaciones ofimáticas. Pero la programación de OpenOffice no es una experiencia tan intuitiva como cabría esperar. El sistema es tan complejo como CORBA [6] o J2EE [7] y supone conocimientos de conceptos modernos como arquitectura de componentes y patrones de diseño. Las habilidades previas necesarias para programar macros en OpenOffice coloca la tarea más allá del alcance de un usuario final y más bien en el área de los programadores aficionados o profesionales, quienes, con las habilidades necesarias, encontrarán todo un mundo por ■ explorar.

RECURSOS [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

10 FileNo = Freefile()

24 Endif

11 Open Filename For Output As #FileNo

25 Loop

12

27 Endif ' If oDoc.supportsService(..)

[5] Tutorial de Starbasic de Sun: ftp:// docs-pdf.sun.com/817-3924/817-3924. pdf

28 Close #FileNo

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

29 End Sub

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

13 oText = oDoc.getText() 14 oParagraphs = oText.createEnumeration()

26 Loop

WWW.LINUX- MAGAZINE.ES

Número 06

53


DESARROLLO • Perl

Un visor extensible para sus finanzas personales

www.sxc.hu

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 enchufables. POR MICHAEL SCHILLI

E

n contra de la opinión popular, la gente rica no es más desafortunada que la gente que no tiene ni un duro (perdón, ni un euro). Se podrán escuchar los suspiros de alivio, inducidos 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 descubrir 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 programas 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 formato pulcro e incluso con gráficos.

54

Número 06

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 disciplina.

Los contables amateur normalmente no tienen tiempo para rellenar tantas entradas detalladas, sin mencionar la compleja instalación que necesita Gnucash. En otras palabras, ésta no es una

Listado 1: Contador de judías 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 # (m@perlmeister.com) 07 ############################# 08 use strict; 09 10 use lib 11'/en/algún/lugar/de/Modulandia';

WWW.LINUX- MAGAZINE.ES

12 13 14 15 16 17 18 19 20 21 22

use Log::Log4perl qw(:easy); Log::Log4perl->easy_init( $ERROR); use Plugger; my $string = join '', <>; my $plugger = Plugger->new(); $plugger->init(); $plugger->parse($string);


Perl • DESARROLLO

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.

herramienta fácil ni fácilmente ampliable. En contraste con esto, el guión en Perl que presentamos este mes está diseñado para el resto de personas, que prefieren no gastar más de diez minutos al mes actualizando los balances bancarios 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 escenarios 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 complicados programas. Es muy fácil sobre-dimensionar las cosas. Por ejemplo, no tiene sentido desarrollar un módulo para el fraccionamiento de acciones, que solo ocurre una vez cada pocos años; unos cuantos pasos manuales son suficientes para gestionar el fraccionamiento (en otras palabras, 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 Interpretado Los usuarios pueden definir los datos de sus cuentas en un archivo llamado money, como se muestra en la Figura 1.

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 Listado 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 ganancias 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 shebang: #!. En otras palabras money utiliza como intérprete beancounter en vez de perl. Si en vez de utilizar una hiper-moderna 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, beancount.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 beancount 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 configuración, realmente se ha obtenido un guión ejecutable. La Figura 2 muestra el resultado ¡Práctico!

Ampliando con Plugins El interprete del Listado 1 es bastante escaso: Crea una instancia de un objeto del tipo Plugger, llama a init() para inicializar la arquitectura subyacente para

WWW.LINUX- MAGAZINE.ES

el plugin y pasa el archivo de configuració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 plugins 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 directorio Plugger/ durante la compilación. La línea 7 tira del modulo de CPAN Module::Pluggable [2], que maneja todo esto. Las lineas 8 y 9 establecen al indicador require y establecen la ruta de búsqueda a los plugins relativa al directorio actual o a la ruta @INC. Estos Plugins no tienen un constructor new(), en contraste con la típica aproximación orientada a objetos, pero si una función init(), que es invocada por Plugger.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áticamente a su anfitrión, la clase Plugger. Así, plugins() devolverá una lista con los nombres de todos los plugins descubiertos. Las lineas 31 y 32 usan este mecanismo para iterar por la lista completa 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 plugin publicar instrucciones al gestor Plugger. Como Plugger interpreta las ordenes en una archivo de configuración, el plugin llama al método de gestión register_cmd() para registrar nuevas ordenes.

Asistente de Argumentos El 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

Número 06

55


DESARROLLO • Perl

\&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 elementos fraccionados de la linea de configuració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 almacena 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 siguiente:

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.

$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 Color Supongamos que quisiéramos que Account.pm mostrara la línea superior y el balance de una cuenta en azul y en

Listado 2: Plugger.rpm 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

56

############################# package Plugger; ############################# use strict; use warnings; use Module::Pluggable require => 1, search_path => [qw(Plugger)]; our %DISPATCH = (); our %MEM = (); ############################# sub new { ############################# my ($class) = @_; bless my $self = {}, $class; return $self; } ############################# sub init { ############################# my ($self) = @_; $_->init($self) for $self->plugins();

Número 06

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

} ############################# sub mem { return \%MEM; } ############################# ############################# sub parse { ############################# my ($self, $string) = @_; for (sort keys %DISPATCH) { $DISPATCH{$_}->{start} ->($self) if $DISPATCH{$_} ->{start}; } for (split /\n/, $string) { s/#.*//; next if /^\s*$/; last if /^__END__/; chomp; my ($cmd, @args) = split ' ', $_;

die "Instrucción desconocida: $cmd" 63 unless

WWW.LINUX- MAGAZINE.ES

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

exists $DISPATCH{$cmd}; $DISPATCH{$cmd} ->{process} ->($self, $cmd, @args); } for (sort keys %DISPATCH) { $DISPATCH{$_}->{finish} ->($self) if $DISPATCH{$_} ->{finish}; } } ############################# sub register_cmd { ############################# my ($self, $cmd, $start, $process, $finish) = @_; $DISPATCH{$cmd} = { start => $start, process => $process, finish => $finish, }; } 1;


Perl • DESARROLLO

negrita. El módulo de CPAN Term::ANSIColor maneja esto bastante bien. Agregando una etiqueta :constants a la directiva use se exportan las constantes 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 en Línea El 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ímbolo 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 modulo de CPAN Cache::Cache tiene una interfaz sumamente fácil, con set(), que establece una entrada de cache y get(),

Listado 3: Account.pm 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042

############################# package Plugger::Account; ############################# use strict; use warnings; use Term::ANSIColor qw(:constants); ############################# sub init { ############################# my ($class, $ctx) = @_; $ctx->register_cmd( "account", \&start, \&process, \&finish ); } ############################# sub start { ############################# my ($ctx) = @_; $ctx->mem() ->{account_total} = 0; } ############################# sub account_start { ############################# my ($ctx, $name) = @_; print BOLD, BLUE, "Account: $name\n", RESET; $ctx->mem() ->{account_subtotal} = 0; $ctx->mem() ->{account_current} = $name;

043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084

} ############################# sub account_end { ############################# my ($ctx, $name) = @_; print BOLD, BLUE; printf "%-47s %9.2f\n\n", "Subtotal:", $ctx->mem() ->{account_subtotal}; print RESET; } ############################# sub account_end_all { ############################# my ($ctx) = @_; print BOLD, BLUE; printf "%-47s %9.2f\n\n", "Total:", $ctx->mem() ->{account_total}; print RESET; } ############################# sub process { ############################# my ($ctx, @args) = @_; my $c = $ctx->mem() ->{account_current}; account_end($ctx, $c) if $c; account_start($ctx, $args[1]); } ############################# sub finish {

WWW.LINUX- MAGAZINE.ES

085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

############################# my ($ctx) = @_; my $c = $ctx->mem() ->{account_current}; account_end($ctx, $c) if $c; account_end_all($ctx); } ############################# sub position { ############################# my ( $type, $ticker, $n, $at, $price, $value, $gain ) = @_; unless (defined $ticker) { printf "%-47s %9.2f\n", $type, $value; return; } my $clr = $gain > 0 ? GREEN: RED; printf "%-8s %-10s %9.3f %9.3f" . " %7.2f %9.2f" . " %s(%+9.2f)%s\n", $type, $ticker, $n, $at, $price, $value, $clr, $gain, RESET; } 1;

Número 06

57


DESARROLLO • Perl

que obtiene la entrada de la cache posteriormente. 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 manejar todos los detalles, como un almacenamiento eficiente en archivos tempo-

rales sin colisionar con otras aplicaciones. Los usuario simplemente llaman a $cache->set() y $cache->get().

Hombre Pobre

Rico,

Hombre

Por supuesto que beancounter está totalmente sobre-diseñado para ser una simple 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 resultado de vender las acciones y pagar unos impuestos del 50 por ciento. TaxedPosition no restará nada si la inversión se perdió, sino que ofrecerá el valor nominal de las acciones después de liquidar las perdidas. Dependiendo del escenario, los usuarios 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 Position.pm, tiene sentido utilizar una herencia o un mecanismo de interfaz para enlazar TaxedPosition.pm y Position.pm.

Listado 4: Position.pm 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037

58

############################# package Plugger::Position; ############################# use strict; use warnings; use Log::Log4perl qw(:easy); use Finance::YahooQuote; use Term::ANSIColor; ############################# sub init { ############################# my ($class, $ctx) = @_; DEBUG "Registering @_"; $ctx->register_cmd( "stock", undef, \&process, undef ); $ctx->register_cmd("cash", undef, \&process_cash, undef); } ############################# sub process { ############################# my ($ctx, $cmd, @args) = @_; my $value = price($args[0]) * $args[1]; my $gain = $value - $args[2] * $args[1];

Número 06

038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074

Plugger::Account::position( ucfirst($cmd), @args[ 0 .. 2 ], price($args[0]), $value, $gain ); my $mem = $ctx->mem(); $mem->{account_subtotal} += $value; $mem->{account_total} += $value; } ############################# sub process_cash { ############################# my ($ctx, $cmd, @args) = @_; my $mem = $ctx->mem(); $mem->{account_subtotal} += $args[0]; $mem->{account_total} += $args[0]; Plugger::Account::position( ucfirst($cmd), (undef) x 4, $args[0], undef); } use Cache::FileCache; my $cache =

WWW.LINUX- MAGAZINE.ES

075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110

Cache::FileCache->new( { namespace => 'Beancount', default_expires_in => 600, } ); ############################# sub price { ############################# my ($stock) = @_; DEBUG "Fetching $stock quote"; my $cached = $cache->get($stock); if (defined $cached) { DEBUG "Cached: $cached"; return $cached; } my @quote = getonequote $stock; die "$stock failed" unless @quote; $cache->set($stock, $quote[2]); return $quote[2]; } 1;


Perl • DESARROLLO

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 register_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.

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-

Listado 5: TaxedPosition.pm 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

############################# package Plugger::TaxedPosition; ############################# use strict; use warnings; use Log::Log4perl qw(:easy); ############################# sub AUTOLOAD { ############################# no strict qw(vars refs); (my $func = $AUTOLOAD) =~ s/.*::/Plugger::Position::/; $func->(@_); } ############################# sub init { ############################# my ($class, $ctx) = @_; $ctx->register_cmd( "txstock", undef, \&process, undef ); } ############################# sub process { #############################

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

my ($ctx, $cmd, @args) = @_; my $value = price($args[0]) * $args[1]; my $gain = $value - $args[2] * $args[1]; my $tax = $gain / 2; $value -= $tax if $gain > 0; $gain -= $tax if $gain > 0; Plugger::Account::position( ucfirst($cmd), @args[ 0 .. 2 ], price($args[0]), $value, $gain ); my $mem = $ctx->mem(); $mem->{account_subtotal} += $value; $mem->{account_total} += $value; } 1;

WWW.LINUX- MAGAZINE.ES

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, proporcionando la salida cuidadosamente ajustada a formato de los resultados. Las entradas de efectivo solamente necesitan 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ón Es necesario que tanto el guión beancounter como el envoltorio de C compilado beancount se guarden en /usr/bin y deben ser ejecutables. Plugger.pm (Listado 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 publicar 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!

RECURSOS [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

Número 06

59


DESARROLLO • Python

Visualizació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

L

a representación gráfica en 3D ofrece la posibilidad de crear mundos virtuales en un ordenador, 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 posibilidad de crear software de mejor calidad 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á implementado 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 visualización médica, la visualización industrial, reconstrucción de superficies a partir 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

60

Número 06

una serie de ejemplos, desarrollados en Python, llegaremos a crear nuestras propias escenas de visualización.

Instalación Para poder realizar todas las pruebas que se van sugiriendo y las que se os ocurran, 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-python4.2.2-5mdk.i586.rpm vtk-tcl-4.2.25mdk.i586.rpm vtk-examples-4.2.25mdk.i586.rpm vtk-devel-4.2.25mdk.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.

WWW.LINUX- MAGAZINE.ES

Modelos de Objetos VTK Para 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 centramos en una única escena y la describimos, vemos personajes animados (actores), luces de diferentes tonalidades, 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 claramente diferenciables: el modelo gráfico y el modelo de visualización. • Modelo gráfico. El modelo gráfico captura las principales características de un sistema gráfico 3D, de un modo fácil de entender y usar (ver Figura 1).


Python • DESARROLLO

Figura 1: Estructura del modelo gráfico.

La abstracción se basa en la industria del cine. Los objetos básicos que constituyen este modelo son: vtkRenderer, vtkRenderWindow, vtkLight, vtkCamera, vtkProp, vtkProperty, 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 visualizació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 información en datos gráficos. Hay dos tipos básicos de objetos, descritos en la Tabla 2, involucrados en dicha aproximación: vtkDataObject y vtkProcessObject. Los diferentes tipos de datos que pueden constituir un objetos son, entre otros, puntos, rectas, polígonos, puntos estructurados, mallas estructuradas y no estructuradas, etc. (ver Figura 2).

Mi Primera Escena Ya estamos preparados para construir nuestra primera escena. Situaros en el papel de director de cine. En los siguientes ejemplos veremos el modo de emplear las clases que acabamos de describir. Para ello, tal como se menciona al comienzo, instanciaremos VTK desde Python.

Figura 2: Tipos de datos: a) datos poligonales, b) puntos estructurados c) malla no estructurada d) malla estructurada.

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:

mediante el método SetRenderWindow. En este momento no se aprecia la utilidad del mismo, paciencia… ya comprenderéis su importancia cuando tengamos un actor en nuestra escena. import vtk Guardamos el fichero y en la línea de comandos Ahora que ya podemos ejecutamos el programa, instanciar cualquier objeto tecleando python cone.py… de VTK, sin más que ¡No ocurre nada! Esto es escribir vtk.nombre_clase, porque debemos inicializar necesitamos crear nuestra la interacción del usuario e ventana de renderizado indicar que la ventana de vtk.vtkRenderWindow, a la Figura 3: Ventana de renrenderizado permanezca que llamaremos renWin y derizado por defecto. visible hasta que el usuario a la que asociamos un área finalice la ejecución de la de renderizado vtk.vtkRenderer (que misma cerrándola. Para ello basta denominamos ren), mediante el método escribir AddRenderer(). Escribamos las siguientes líneas de código: iren.Initialize() iren.Start() ren=vtk.vtkRenderer() renWin=vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren=vtk.U vtkRenderWindowInteractor() iren.SetRenderWindow(renWin)

Para poder manipular la cámara mediante el ratón se ha instanciado el objeto vtkRenderWindowInteractor (denominado en el código como iren). Nótese que la ventana de renderizado renWin, se asocia al objeto de interacción iren

WWW.LINUX- MAGAZINE.ES

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.

Número 06

61


DESARROLLO • Python

Para crear nuestro primer actor no nos es un conjunto que se asovamos a complicar demasiado, porque cia al “mapper” (coneMapya queremos ver algo. VTK per) contiene una serie de clases (vtk.vtkPolyque nos permiten crear DataMapper) objetos tridimensionales vía el método sencillos, como son: esfera SetInput(). (vtkSphereSource), cono Creamos el (vtkConeSource), cilindro actor (objeto (vtkCilinderSource), etc. que se va Para nuestro ejemplo renderizar) al hemos escogido un cono, Figura 5: Cono dentro de que se le asosin embargo, puedes optar la escena. cia la reprepor cualquiera de los otros sentación objetos. El siguiente código nos permite geométrica que aporta crear nuestro primer “actor”, coneMapper. Nótese que Figura 4: Pasos que en general hay que seguir para crear un los pasos aquí indicados actor. cone=vtk.vtkConeSource() son los que en general, coneMapper=vtk.U necesitamos seguir para poder consSi volvemos a ejecutar visualizamos un vktPolyDataMapper() truir un actor (Figura 4). cono de color gris (color que se muestra coneMapper.SetInput(cone.U Cuando creamos un actor, no se por defecto) dentro de nuestra ventana GetOutput()) incluye por defecto en la escena. Es (Figura 5). Además, es en este instante coneActor=vtk.vtkActor() necesario añadirlo al Renderer mediandonde se aprecia la interacción con el coneActor.SetMapper(coneMapper) te AddActor, y posteriormente renratón; con el botón izquierdo puedes derizar la escena. Esto se logra escrirotar la cámara, el botón central permite Mediante el objeto vtk.vtkConeSource biendo, trasladarla, y con el botón derecho nos creamos una representación poligonal acercamos o alejamos del objeto. de un cono, que hemos llamado cone. ren.AddActor(conoActor) Además, habrás observado que en la La salida del cono (cone.GetOutput()) renWin.Render() escena, por defecto se incluye una luz

Listado 1: cono_esfera.py 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 # C r e a r f u e n t e d e e s f e r a , 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()

62

Número 06

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)

WWW.LINUX- MAGAZINE.ES

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():


Python • DESARROLLO

Cuadro 1: Instalación de Fuentes VTK 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 anonymous@public.U kitware.com:/cvsrootU /VTK login @KL(responder con el password: vtk) Para bajar el código fuente tecleamos: cvs -d :pserver:U anonymous@public.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 preferimos también podremos obtener el CMake desde el CVS: cvs -d :pserverU :anonymous@www.cmake.U org:/cvsroot/CMakeU login password: cmake y para descargarlo:

para poder visualizar los objetos iluminados. 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 renderizar la escena, porque sino no se realiza un refresco de la misma y es como si no hubiésemos añadido un nuevo actor.

Propiedades de Objetos Si has seguido el tutorial hasta este punto, habrás creado tu cono de color gris. Pero probablemente no estés demasiado satisfecho, porque todos tenemos 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 predeterminado. 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-

Tabla2: Modelo de Visualización Objeto Descripción vtkDataObject clase genérica que permite representar diferentes tipos de datos. Los objetos de datos consisten en estructuras geométricas y topológicas (puntos y celdas), y también en atributos asociados, tales como escalares o vectores. vtkProcessObject objeto que hace referencia a filtros, que actúan sobre los actores modificándolos.

Background(RGB), donde le pasamos el color deseado en formato RGB. Si queremos 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 GetActiveCamera() 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 ResetCamera(). En las siguientes líneas se recogen algunos de los métodos relativos a la cámara ren.ResetCamera()

cvs -d :pserver:U anonymous@www.cmake.U org:/cvsroot/CMakeU co CMake Una vez hayamos descargado e instalado 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 compilar de forma interactiva: hemos de prestar atención y cuando nos pregunte si queremos instalar los wrappers para Python hemos de contestar afirmativamente ya que por defecto no lo hace. Después basta teclear: make make install

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.

WWW.LINUX- MAGAZINE.ES

Número 06

63


DESARROLLO • Python

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 ejemplo, 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étodos de rotación y uno así no sabe realmente lo que ocurre. Si en algún momento el actor desaparece de la escena no te preocupes, lo que está

Figure 7: Vista de la superficie del cono.

64

Número 06

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 mallado. Por defecto, VTK tiene asociadas teclas rápidas a la escena: si tecleas la letra “s” se ven todos los objetos renderizados (ver Figura 7), mientras que si tecleas la letra “w”, se visualiza sólo la malla (ver Figura 9: Escena con dos Figura 8). Ahora actores que se intersecan. apreciarás mejor

WWW.LINUX- MAGAZINE.ES

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 renderiza el cono. Este método no es general para todos los actores, sino para ciertos objetos que VTK ya incluye, como son: esfera (vtkSphereSource), cono (vtkConeSource), cilindro (vtkCilinderSource), etc. Cualquier objeto puede rotarse, escalarse, obtener su dimensiones, etc., utilizando las propiedades de un vtkActor en particular(si queréis más informació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).

RECURSOS [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

LOS AUTORES

Figura 8: Vista de la malla del cono.

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 camera.Zoom(1.5). Así vamos viendo cada cosa por separado, 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:

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.


La Columna de Charly • ADMINISTRACIÓN

El día a día del Administrador de Sistemas: Rsnapshot

EN LA DIANA

El principio que hay detrás de Rsnapshot no es nada nuevo: utiliza 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

R

snapshot [1] le proporciona al administrador un espacio para guardar backups del sistema. La herramienta Rsnapshot deja intervalos largos, configurables entre backups completas y crea nuevas backups diarias incrementales en el sistema, lo que ahorra mucho espacio comparado con un backup completo. La lógica rotacional 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

y eliminar el comentario #cmd_cp /bin/cp

Esta opción se descomenta para hacerlo compatible con los sistemas BSD. Eliminando el comentario se habilita GNU cp lo que nos da mayor funcionalidad. El siguiente 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:

backup /home localhost/backups/ interval

cp /etc/rsnapshot.conf.defaultU /etc/rsnapshot.conf

SYSADMIN

daily

7

Cuatro Semanas no es un Día Decidí 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 mantuviera los backups por cuatro semanas: interval

El siguiente paso es copiar el fichero de configuración de muestra

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:

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.

realizar el backup. Por ejemplo, para realizar un backup de mi directorio home en el mismo sistema:

0 23 * * * U /usr/local/bin/rsnapshot 0 3 * * 0 U /usr/local/bin/rsnapshot

Pero, ¿qué utilidad tiene una copia de seguridad en un mismo disco? La experiencia 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 charly@10.0.0.140:/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 montón más de virguerías. La excelente página de ayuda y el HOWTO en la página web contienen bastante información interesante, 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!

RECURSOS Por supuesto que Rsnapshot aún no sabe cuales son los ficheros a los que debe

WWW.LINUX-MAGAZINE.ES

[1] Rsnapshot: http://www.rsnapshot.org

Número 06

65


ADMINISTRACIÓN • Darwin

MP3 y MPEG4 con el servidor Darwing

STREAMING MEDIA

El servidor Darwin de Apple es una versión gratuita del servidor comercial Quicktime. Puede manejar los formatos MP3 y MPEG4 y posee una interfaz web. POR OLIVER FROMMEL

E

l 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 productos comerciales suelen ser excesivamente caros. El servidor Real, por ejemplo, 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 funcionar después de un año de servicio [1].

Servidor Gratuito MP3 y MPEG 4

en Debian, Suse 9.1 y Fedora Core 3. Si se prefiere compilar el código fuente, el Cuadro “Hágalo Usted Mismo” proporciona algunas pistas útiles. Aunque el programa funciona bien en diversas distribuciones, el script de instalació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 distribución de código fuente sirve también de poco. Se debe usar el fichero de configuración que viene en el paquete binario,

Una excepción positiva: Apple ha lanzado 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 Streaming Server (DSS) puede manejar el popular formato de audio MP3, Quicktime y vídeo MPEG4. Antes de poder bajarse el software del servidor, hay que registrarse 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

Figura 1: La pantalla principal de la interfaz web con estadísticas del servidor activo.

66

Número 06

WWW.LINUX-MAGAZINE.ES

ya que proporciona unas cuantas configuraciones útiles. Después de instalar el fichero de configuración y las cuentas del usuario y del grupo, el administrador puede lanzar el servidor tecleando /usr/local/sbin/DarwingStreamingServer. La opción -d le indica al servidor que se ejecute en segundo plano. [Ctrl-C] cierra el servidor. El script /usr/local/sbin/streamingadminserver.pl habilita el interfaz de administración web.

Configuración Web Si 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 navegador 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 DarwinStreamingServer sin interfaz web, se edita el fichero de configuración manualmente y se teclea killall -HUP DarwinStreamingServer para indicarle al servidor que lea el fichero de configuración para que sean efectivos los cambios.


Darwin • ADMINISTRACIÓN

Tras conectarse, usando la interfaz web, con las credenciales establecidas durante el proceso de instalación; el servidor Darwin solicitará otra contraseña en la próxima página; esta contraseña se usará para los MP3 entrantes, que el servidor será capaz de distribuir. Luego el servidor solicitará que se confirme si se desea usar encriptación SSL para la conexión. El servidor Darwin necesita algunos paquetes software adicionales para poder usar SSL: las bibliotecas 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 Todo Se 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 posteriormente 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 reproductores, como el cliente VideoLAN vlc [7],

necesitan la biblioteca Ffmpeg [8] para los ficheros MPEG4.

MPEG4: Mismo

Hágalo

Usted

La 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 llegar al objetivo, pero queda todavía un largo camino por recorrer antes de conseguir 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écnico 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 pistas son seguidas por datos de la escena y descriptores de objetos, que no nos hacen falta en este momento.

Reproducción MP3 El servidor Darwin puede también manejar ficheros MP3, pero necesita una

Listado 1: Salida de la Utilidad mp4info 01 02 03 04 05 06 07 08 09 10

$ mp4info sample_100kbit.mp4 mp4info version 1.1 sample_100kbit.mp4: Track Type Info 1 audio MPEG-4 AAC LC, 70.031 secs, 28 kbps, 22050 Hz 2 video MPEG-4 Simple @ L3, 70.000 secs, 63 kbps, 192x240 @ 15.00 fps 3 hint Payload MP4V-ES for track 2 4 hint Payload mpeg4- generic for track 1 5 scene BIFS 6 od Object Descriptors

WWW.LINUX-MAGAZINE.ES

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.

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 observar dos enlaces: New MP3 Playlist para los ficheros MP3 y New Movie Playlist para las películas (Figura 2). Si se pulsa

Hágalo Usted Mismo 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 introduzca un nombre de cuenta y una contraseña para la administración del servidor 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 localizació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.

Número 06

67


ADMINISTRACIÓN • Darwin

Tabla 1: Ficheros y Rutas Importantes Nombre /usr/local/sbin/DarwinStreamingServer /usr/local/sbin/streamingadminserver.pl /etc/streaming/ /etc/streaming/streamingserver.xml /var/streaming/logs

Función Programa principal Script Perl para la interfaz de usuario Web Directorio de configuración Fichero de configuración del servidor Directorio de ficheros de registro

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 campos. Se puede establecer el modo de reproducció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 programadores 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 o Aleatoria Hay 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 continuación contiene un resumen de la lista de reproducción que se ha configurado pero que en realidad no se está ejecu-

68

Número 06

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 registro de errores, .config apunta a la configuración, .log es el fichero de registro y .playlist es la propia lista de reproducción. Por defecto Darwin sólo usa un directorio 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.

Problemas La 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 simplemente que falta algún codec. El servidor tampoco ayuda a arrojar algo de luz sobre el asunto. Aunque el servidor Darwin genera ficheros de registro, 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-

WWW.LINUX-MAGAZINE.ES

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.

tienen algún detalle que puede ayudar encontrar la dirección para solucionar el problema.

Conclusión Desde un punto de vista técnico, el servidor Darwin tiene bastante potencial. Permite poder instalar una solución de streaming de forma gratuita en combinació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.

RECURSOS [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: net

http://ffmpeg.sourceforge.

[9] MPEG4IP: sourceforge.net

http://mpeg4ip.


Identd • ADMINISTRACIÓN

Pistas desde dentro: Identd en servidores basados en Linux

LOS SIN NOMBRE En la edición del último mes del taller de administración introducimos herramientas que ayudan a los administradores 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

C

ontinuando con la exposición del mes pasado respecto a los procesos de servidores basados en inetd [1], en artículo de este mes analizamos 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 configuración del servidor, algunos servidores FTP solicitan al cliente la identificació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 comprueba 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 Ident Ident es una aplicación heredada construida 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 sencillos de detectar al usuario atacante. La instalación del demonio Ident permitía a los administradores rastrear la

Figura 1: Cuando un cliente abre una conexión, el servidor FTP solicita que se identifique el usuario que solicita la conexión.

WWW.LINUX-MAGAZINE.ES

actividad de los servidores. El operador del servidor que había sucumbido a un ataque simplemente llamaba al administrador del centro de ordenadores donde se originó el ataque e informaba de la ID de usuario que estaba conectado. 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 encontrar fácilmente caminos para evitar estas defensas. Por tanto, Ident no es una protección para los servidores en ningún caso, en especial considerando el hecho de que el protocolo no soporta la autentificación o la autorización.

Problemas Comunes Ident puede ser un riesgo para la seguridad del cliente. El usuario que se conecte a un servidor no fiable le proporciona mucha información adicional sobre la máquina cliente. Esta informació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, almacenando el nombre de usuario en un archivo de registro. En este caso, el servidor remoto nunca ve las credenciales. Puesto que Ident se remonta a la era en la que los equipos host eran administrados de manera centralizada, su utili-

Número 06

69


ADMINISTRACIÓN • Identd

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 usuarios 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é ejecutando 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 ocurren cuando se configura un servidor.

Configuración de Ident La 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 tenemos que crear un archivo llamado /etc/xinetd.d/identd y añadir las líneas que aparecen en el Listado 1. Algunas distribuciones disponen de una configuración de ejemplo, la cual sólo tenemos que habilitar. Para hacerlo en inetd. simplemente 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 administrador necesita enviar una señal HUP para indicar al super servidor de Internet que analice gramaticalmente la nueva

70

Número 06

tendremos que modificar las reglas del cortafuegos de nuestro router para gestionar Ident (ver figura 2). Como hacer esto depende del router que tengamos.

Evitando NAT

Figura 2: Podemos configurar nuestro router para que deje pasar los datos relacionados con Ident.

configuración (killall -HUP inetd o killall -HUP xinetd).

Filtros de Paquetes Puede que configurar y lanzar un demonio 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 servidores no esperarán a los paquetes de respuesta mucho tiempo, pero esto aún puede causar un retraso de algunos segundos al iniciar una conexión. Para evitarlo debemos abrir un agujero en nuestro cortafuegos. La herramienta IPTables en Linux 2.4 o superior nos permiten 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 agujeros 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

Puede que nos preguntemos qué ocurre si nuestra red utiliza “Network Address Translation” (NAT – Traducción de direcciones de red) para compartir una única dirección IP entre una serie de clientes. Un simple filtro de paquetes no funcionará. Los requerimientos Ident entrantes siempre usan el puerto reservado 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.

Listado 1: Entrada Xinetd para identdUtilidad mp4info 01 02 03 04 05 06 07 08 09 10

# file /etc/xinetd.d/identd service ident { socket_type = stream protocol = tcp wait = no user = nobody server = /usr/sbin/in.identd disable = no }

Routers de Acceso La configuración en la que estamos trabajando funciona correctamente suponiendo que nos conectemos a Internet directamente usando un módem, RDSI o ADSL. Si es un router el que nos proporciona la conexión y enruta los paquetes a Internet

WWW.LINUX-MAGAZINE.ES

RECURSOS [1] Marc André Selig, “Ángeles y Demonios”: Linux Magazine Número 5. [2] RFC 1413, Protocolo Ident: http://www. faqs.org/rfcs/rfc1413.html


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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 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.

Desktopia: Skippy

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76 ¿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

Aplicaciones: ScummVM

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 El 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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 La herramienta tr es realmente útil. Este comando tan simple permite reemplazar cadenas en archivos de texto. Ya sea reemplazando letras o eliminando espacio en blanco, le sorprenderá la versatilidad de tr.

Educación: Accesibilidad

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .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 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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90 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 dosis de imaginación e intuición. Esta sección reúne los mejores soluciones para el beneficio de todos.


LINUX USER • Ktools

Aprenda vocabulario con KVocTrain.

CLASE DE IDIOMAS 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.

K

VocTrain es una herramienta que le ayuda a aprender palabras de vocabulario de un idioma extranjero. El programa KVocTrain forma parte de la KDE Edutainment 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

72

Número 06

usaremos el griego como idioma de ejemplo, pero se pueden seguir los mismos pasos para configurar KVocTrain en otro idioma. Utilizamos el mismo procedimiento para añadir el castellano, seleccionando Europa Occidental -> España para acabar. Pulsamos en la pestaña Ver, y cambiamos el tipo de letra. El idioma griego tiene unas reglas de pronunciación bastante claras, por lo que en realidad no necesitamos las ayudas de pronunciació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 apropiado. El tipo de letra Doulos, disponible en la misma página que Gentium, 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 queden 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

WWW.LINUX- MAGAZINE.ES

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 examinarnos 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 rellenamos 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 Vocabulario -> Propiedades del idioma, rellenamos las características básicas de cada idioma (por ejemplo, el artículo


Ktools • LINUX USER

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.

definido, nombres personales, etc.). Aunque nada nos impide introducir todo

el vocabulario en una gran lista, tiene ciones más tarde para cambiar la descripmás sentido segmentarla de alguna mación. La lección a la cual se ha asociado nera, de manera que una palabra se lista en la podamos revisar partes primera columna de la específicas. KVocTrain utiventana principal, y liza el concepto de lecpodemos reasignar la paciones para esto, por lo labra a otra lección desde que añadiremos una lecallí o desde el cuadro de ción. Nos vamos a Vocabudiálogo de la propia palario -> Propiedades del labra. documento, y pulsamos Introducción de Nuevo en la pestaña Lecpalabras ciones (ver Figura 4), e introducimos un nombre Figura 3: Añadimos inforAhora podemos empezar para la lección. mación de resumen en la a introducir palabras. En Cuando se trata de nompestaña General del primer lugar pulsamos en brar lecciones, se suelen cuadro Propiedades del Opciones para asegudocumento. elegir temas en vez de rarnos de que Edición tipos de palabras, por lo entre líneas no está selecque elegiremos Gente para el nombre de cionada. Si lo está, la de-seleccionamos. la lección. La lección gente contendrá Si sabemos que tenemos pocas palabras palabras relacionadas con profesiones. para introducir podemos fijar esta elecTambién podemos crear una lección llación por defecto seleccionándolo en la mada Viajes. Por supuesto, si camlista desplegable en la parte superior de biamos de parecer con respeto al tipo de la ventana principal. Esto significa que palabras que vamos a asociar a la lecno tendremos que seleccionarla por seción, podemos regresar a la pestaña Lecparado para cada nueva palabra. Presio-

Tipo de letra griego y disposición del teclado Este artículo usa el griego como un ejemplo de idioma que puede aprender con KVocTrain. El primer paso es configurar los tipos de letra necesarios y la disposición del teclado para el idioma que vamos a utilizar. Por lo tanto instalaremos 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 Bitstream Charter, pero la más bonita sin discusión es la Gentium de Victor Gaultney [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ñados especialmente para el griego. Una vez nos hayamos decidido, la descargamos en un directorio y la descomprimimos si es necesario. Nos vamos al KDE Control Center, seleccionamos System Administration -> Font Installer y pulsamos en el botón Administrator Mode de manera que el tipo de letra esté disponible para todos los usuarios. Introducimos 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 encontrar 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 disposiciones 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

WWW.LINUX- MAGAZINE.ES

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 seleccionamos 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 Application 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 tecleando 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.

Número 06

73


LINUX USER • Ktools

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 presionamos Alt +; y la letra para que aparezca con tilde. Seleccionamos Sustantivo de la lista desplegable Tipo (que se refiere a los tipos de palabra), y seleccionamos Sustantivo masculino de la lista desplegable que aparece disponible Figura 5: Añadimos un término al vocabua la derecha (nótese que podemos añadir lario. otras lecciones, tipos de palabra, etc., sobre la marcha con sólo hacer clic sobre deseada, sólo tenemos que posiel icono a la derecha de los campos de cionarnos sobre la línea en cuestión y entrada). Pulsamos sobre Aplicar, pulsar el botón Suprimir (véase figura apartamos la ventana y vemos que el tér6). No olvide ir guardando el trabajo mino ha sido insertado en la celda. A realizado cada cierto tiempo. continuación hacemos doble clic en la Aunque el cuadro de diálogo de los celda Español, presionamos Ctrl + Alt términos tiene un buen número de pes+ K, introducimos profesor en el campo tañas, no es necesario preocuparse Expresión, seleccionamos Sustantivo en mucho por ellas de momento. Las pestipo de palabra y pulsamos sobre Aplicar tañas permiten introducir gran cantidad de nuevo. de información acerca del término. Esta Si estamos introduciendo un buen información puede ser útil más adelante, número de palabras de golpe, cosa baspero hasta dónde llegar en este punto es tante probable, se vuelve molesto tener cosa suya. La pestaña Adicional permite que regresar a la ventana incorporar ejemplos, de diálogo cada pocos sinónimos, etc. La pessegundos. Para solutaña Elección múltiple cionar esto, podemos permite añadir palabras fijar la ventana de pade pronunciación o siglabras pulsando el nificado similar, de segundo botón situado manera que KVocTrain abajo a la izquierda de la pueda examinarle con ventana. Esto la sitúa un test multirespuesta perfectamente justo al (Aprendizaje -> lado de la ventana prin(idioma) -> Crear eleccipal. ción múltiple). Quizás la Figura 4: KVocTrain nos perEl hecho de usar las pestaña más importante mite dividir el vocabulario en listas desplegables para es la denominada Conjulecciones. introducir el género de gación (véase Figura 7), los nombres permite que KVocTrain le que se activa sólo si el tipo de palabra es examine al respecto Aprendizaje -> Verbo. Podemos seleccionar el tiempo (idioma) -> Entrenamiento de artículos. verbal de la lista desplegable y añadir la Puede ser aconsejable escribir el artículo forma adecuada para cada persona en definido junto a cada palabra, de manera singular y plural. Están configurados que sea más fácil recordar su género. siete tiempos verbales por defecto, pero Para ello, introducimos el artículo podemos añadir mas yendo a Vocabudefinido al mismo tiempo que el término lario -> Propiedades del documento y en el campo respectivo. seleccionando la pestaña Tiempos. Continuamos añadiendo palabras en Si únicamente queremos una lista de las categorías (lecciones) elegidas. Si por palabras a secas, podemos acelerar el error introducimos una palabra no proceso de introducción de datos selec-

74

Número 06

WWW.LINUX- MAGAZINE.ES

Figura 6: La ventana principal de KVocTrain.

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 adecuada en el cuadro de diálogo de los términos.

La hora de la verdad Llegó 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 examinarnos del vocabulario de viajes, tecleamos Viajes como nombre de la consulta. Este sistema de consultas permite 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 vocabulario se incluirán en el test. En la lista desplegable Lección, seleccionamos Contenido 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 ejemplo nombres, etc.), elegir con qué frecuencia debe aparecer la palabra, etc. Las últimas cuatro listas desplegables pueden estar sombreadas debido a que


Ktools • LINUX USER

Figura 8: Especificamos las opciones de la consulta en la pestaña Consulta. Figura 7: La pestaña Conjugación nos permite introducir información relativa a los tiempos verbales.

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 Bloqueo como Caducidad de esa pestaña. Para guardar la configuración de la consulta 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 Aprendizaje -> 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á nuestro objetivo). Se irán mostrando las palabras 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 mensaje 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 preguntará 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 palabras 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 palabras 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 correctamente no se volverá a preguntar de nuevo hasta pasado un día. Podemos cambiar el periodo por defecto para ajustarlo a nuestras necesidades. Si volvemos a ejecutar el test de nuevo y contestamos todas correctamente observaremos que ya no están marcadas de verde (ya no están el grupo de palabras a preguntar). En vez de esto, aparecerán marcadas de rojo, indicando que están bloqueadas por el momento. Si este método para repasar nuestro vocabulario no nos termina de convencer, KVocTrain también nos ofrece un tipo de test basado en el método desarrollado por Sebastian Leitner. Este método se basa en preguntar cada palabra al menos cuatro veces, y más de cuatro las que nos ofrezcan dudas. El método se explica en el manual de KVocTrain. Para habilitar este modo, marcamos Método alternativo de aprendizaje en la pestaña Consulta del cuadro Opciones -> Opciones de consulta.

Consideraciones Finales KVocTrain es un programa útil para aquellos que buscan ampliar su vocabulario. 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

WWW.LINUX- MAGAZINE.ES

Figura 9: Introduzca la traducción correcta del término mostrado en la ventana Consulta aleatoria.

lo que es peor: el tipo de letra seleccionado para la ventana principal no es la que se usa en el cuadro de introducció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 tendrá problemas con KWordQuiz. Este programa es más sencillo y no permite segmentar la lista de vocabulario ni el grado de configuración de los tests de KVocTrain. Además con KWordQuiz sólo podremos usar dos idiomas, mientras que con KVocTrain podemos usar cuantos queramos. Tanto KWordQuiz como KVocTrain utilizan 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 escritura japonesa, escala musical, psicología ■ y muchas cosas más.

RECURSOS [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/

Número 06

75


LINUX USER • Desktopia

Trabajando con el paginador de pantallas Skippy.

PREVISUALIZADOR DE VENTANAS

¿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 asi cualquier gestor de ventanas nos ofrecerá una lista de ventanas mostrando un menú con las ventanas activas cuando pulsamos o presionamos la tecla apropiada. Si el programador que desarrolló el gestor de ventanas 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 terminal distintas. Skippy [1], realizado por Hyriand, al rescate: en lugar de darnos una simple lista, Skippy muestra la ventana de la aplicación activa en modo pantalla completa.

C

y Skippy es muy selectivo con los gestores que soporta. Para asegurarnos de que seremos capaces de cambiar entre programas 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 suministrado 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-

Sofisticado

[Figura 1: Si Skippy nos devuelve este mensaje de error y no arranca, es posible que nuestro gestor de ventanas está usando [F11] como tecla de acceso rápido.

Los gestores de ventanas afrontan de distinta forma la gestión de ventanas activas

76

Número 06

WWW.LINUX- MAGAZINE.ES

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, nuestra versión de WindowMaker debe funcionar correctamente, puesto que la mayorí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.

Arranque Skippy no se incluye con la mayoría de la distribuciones, lo que normalmente significa tener que construir la herramienta


Desktopia • LINUX USER

Figura 2: Skippy nos proporciona una vista preliminar de las ventanas activas.

usando el código fuente. Podemos descargar 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, simplemente deberemos escribir make para compilar 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 configuració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 Ventanas Si escribimos… skippy &

… arrancamos Skippy como tarea en segundo plano. Si vemos un mensaje que

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 ejemplo, 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 [general] 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 usuarios 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).

Listado 1: Definición de colores e~/skippyrc 01 [normal]

08 opacity = 200

02 #brillo

09 #Color del borde

03 brightness = 0.0

10 border = SteelBlue

04 #Color de la ventana

11

05 tint = light sky blue

12 [highlight]

06 #Grado de trsnaparencia (de 0 s 255) - cuanto más pequeño el valor,

13 brightness = 0.05

07 #más transparente la ventana

14 tint = #FFFFB8 15 opacity = 255 16 border = #A4A7A2

WWW.LINUX- MAGAZINE.ES

Las ventanas inactivas se muestran como semitransparentes, siendo las ventanas 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 consejo 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 seleccionar una ventana presionaremos [Escape]. Skippy se pierda algunas veces y nos muestra ventanas que ya han sido cerradas, pero si presionamos [Ctrl-F11] en lugar de [F11] le indicamos a Skippy que actualice la vista previa.

Configuración a Medida Si bien el esquema de color que por defecto usa Skippy quita el hipo, puede que no se ajuste al diseño preconfigurado de nuestro escritorio. El archivo de configuración .skippyrc nos permite ajustar 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 permite 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.

RECURSOS 1] Skippy: http://thegraveyard.org/ skippy.php [2] Estándares de freedesktop.org: http:// www.freedesktop.org

Número 06

77


LINUX USER • ScummVM

Reanimando clásicos con ScummVM

¡A JUGAR!

El 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. POR CHISTIAN BAUN

E

l motor de aventuras gráficas SCUMM (“Script Creation Utility for Maniac Mansion”) fue desarrollado 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

78

Número 06

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

WWW.LINUX- MAGAZINE.ES

jugadores ya no tenían que teclear instrucciones para controlar a los actores del juego, solamente bastaba con señalar objetos para habilitar acciones escondidas. Este género es conocido como “Point & Click Adventure”. Debido a que LucasArts [1] y otras compañías hicieron un gran esfuerzo en


ScummVM • LINUX USER

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 jugabilidad en cada avenFigura 1: Sam y Max en su lucha en pro de la ley y el orden. tura. ScummVM no sólo funciona bajo Linux: lo hace también en los princiPara añadir una aventura, copiamos sus pales sistemas operativos. (Véase el archivos a un directorio. Existe una lista Cuadro 1: “ScummVM bajo otros sisde los archivos necesarios para los juetemas operativos”). El cuadro 2: “Juegos gos compatibles en [5]. Después de copiCompatibles” contiene una lista de los arlos, seleccionamos Add game en la ventana principal de ScummVM y explojuegos que funcionan con ScummVM en ramos hasta llegar al directorio creado. el momento de escribir estas líneas. Cuando lo encontremos, seleccionamos Instalación Choose y ScummVM incluirá la aventura Se puede descargar el paquete RPM en el menú principal (véase Figura 2). desde la página de ScummVM [2]. El Al hacer doble clic en el título paquete funcionará con cualquier discomienza dicha aventura. La tabla 1 tribución basada en RPM, como Manmuestra una lista de atajos de teclado. drake, Suse y Fedora. Con permisos de Existe una lista más completa de atajos administrador, tecleamos la siguiente de teclado en el archivo README [6], instrucción para instalar el paquete: incluido en cualquier versión de ScummVM. 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.

Tabla 1: Atajos de Teclado [Ctrl+z] o [Alt+x] [Alt+Enter] [F5] [Space]

[+] y [-]

Salir de ScummVM Conmuta el modo pan talla completa Hace aparecer la pantalla Save/Load/Quit Pausa la aventura (sólo en los juegos de Lucas film/LucasArts) Aumenta/disminuye la velocidad del texto

Cuadro 1: ScummVM bajo otros sistemas operativo

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-

ScummVM se puede ejecutarse en otros sistemas operativos, además de Linux. La maquina virtual de ScummVM funciona 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.

WWW.LINUX- MAGAZINE.ES

Los usuarios de Windows están empezando a migrar a ScummVM, a pesar de que podrían ejecutar las aventuras 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 MSDOS estarán los juegos estarán mudos sin el motor ScummVM.

Número 06

79


LINUX USER • ScummVM

Aunque las aventuras gráficas tipo “Point & Click” han desaparecido 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 Figura 2: Usamos el menú principal para configurar ScummVM y para Amazon Queen, empezar a jugar. Revolution Software e Interactive Binary Illusions respectivamente, han eliminado las restricciones en las licencias de ambos juegos. De esta manera, los jugadores pueden descargar los juegos 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 Figura 4: Beneath a Steel Sky, un apasionla salida de audio. La pestaña Graphics ante juego de ciencia ficción, funcionando nos permite conmutar el modo a panbajo ScumVM. 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 ScummVM guardará nuestras puntuaciones.

Filtro Gráfico

Figura 5: Pantalla de configuración de ScummVM.

Cuando el juego “Maniac Mansion” salió al mercado, las tarjetas gráficas soportaban resoluciones de 640x480 píxeles como mucho, algunas de sólo 320x240.

Cuadro 2: Juegos Compatibles Podemos usar ScummVM para ejecutar los siguientes juegos de aventuras gráficas 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

80

Número 06

• 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 (Interactive Binary Illusions; Figura 2) • Beneath a Steel Sky (Revolution Software [4]) • Broken Sword 1 y 2 (también de Revolution)

WWW.LINUX- MAGAZINE.ES

Para evitar un aspecto pixelizado en el modo a pantalla completa, los programadores de Figura 3: La figura ScummVM han de la izquierda desarrollado un filmuestra el efecto tro gráfico. Usa del filtro gráfico de suavizado de borScummVM. La des para represenmisma figura sin tar los gráficos filtrar a la derecha. originales a mayores resoluciones. Si no fuera por esto, los píxeles podrían apreciarse individualmente con claridad. La Figura 3 muestra los gráficos originales 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 característica tiene mayor importancia para los dispositivos PDA con poca memoria de almacenamiento, que para los ordenadores 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.

RECURSOS [1] LucasArts: http://www.lucasarts.com [2] ScummVM: org

http://www.scummvm.

[3] Adventure Soft: adventuresoft.com

http://www.

[4] Revolution Software: revolution.co.uk

http://www.

[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



LINUX USER • Línea de comandos

El uso de tr y dos2unix

LOST IN TRANSLATION 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

L

a 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 operadores 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 Simples El comando tr recibe dos cadenas como argumento y reemplaza todas las coincidencias del primer argumento con el segundo argumento. Puede sonar complicado, veamos el siguiente ejemplo. Con la siguiente sentencia cambiamos cada carácter “e” que haya en “Petronila”, por el carácter “a”: $ echo Petronila | tr 'e' 'a'U Patronila

Por supuesto que podemos especificar la cadena sobre la que queremos reemplazar 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ándar. 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' reemplazará “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 incapaz 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úsculas tr 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

82

Número 06

WWW.LINUX- MAGAZINE.ES

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


Línea de comandos • LINUX USER

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 Mundos Si hemos tenido ocasión de intercambiar ficheros entre sistemas Windows y Linux, habremos comprobado que suelen aparecer caracteres extraños al final de las líneas. Y si, por ejemplo, tratamos de abrir un archivo ASCII creado en Windows con el editor Vim, encontraremos extraños caracteres ^M. La razón de todo esto es que los dos sistemas usan símbolos 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

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 Alternativos Las herramientas dos2linux y unix2dos son también útiles si necesitamos convertir 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 consejos. La opción -k mantiene la informació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 sentido contrario:

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 tendrán en este caso el siguiente aspecto: cat textowin | fromdos -a U > textolinux cat textolinux | todos -a U > textowin

Combinados El comando tr realmente brilla en todo su esplendor cuando se usa en combinació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 queremos 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'

unix2dos -n textolinux textowin

GLOSARIO 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).

En algunos sistemas, estos comandos son enlaces simbólicos a los programas fromdos y todos, respectivamente. Estos programas tienen una sintaxis ligeramente distinta y parámetros también diferentes. Es recomendable usar la opción -b para crear una copia de seguridad, 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 CRLF (retorno de carro-avance de línea). El

WWW.LINUX- MAGAZINE.ES

Si traducimos esto a cristiano, la sentencia quedaría algo como: para todos los archivos en el directorio actual, renombramos los archivos tal y como nos ■ indica el resultado de aplicarle tr.

LA AUTORA

Eliminamos el carácter \r extra del final de cada línea, con lo que tenemos la con-

Heike Jurzik estudió Alemán, Informática e Inglés en la Universidad de Colonia, Alemania. Descubrió Linux en 1996 y quedó fascinada con la potencia de la línea de comandos desde ese momento. En su tiempo libre puede que la encuentre en clases de folclore irlandés, o visitando Irlanda.

Número 06

83


LINUX USER • Educación

Accesibilidad en 2005

TODOS NECESITAMOS AYUDA 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 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. POR JUAN RAFAEL FERNÁNDEZ GARCÍA

U

n artículo sobre accesibilidad no está tan lejos de un artículo sobre localización como podría pensarse: ambas tecnologías están destinadas a solventar los problemas que presenta 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-

84

Número 06

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: AccesibilidadCómo [1]) es de 2002, y que yo sepa no

WWW.LINUX- MAGAZINE.ES

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 administraciones públicas están llegando a acuerdos con instituciones como la ONCE para trabajar en la adaptación del software educativo [2] a las necesidades de los alumnos discapacitados. ¿Qué hay


Educación • LINUX USER

Figura 1: Tecnología de asistencia en Gnome.

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 tiempos, 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 comunicarnos con personas que no están físicamente presentes y obtener información instantáneamente. Todos los humanos necesitamos ayudas.

Idades Varias Los 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 producto o servicio, típicamente una apli-

cación software o un aparato. Generalel énfasis en la usabilidad y la accesibilimente se define en términos de las dad. necesidades de los usuarios de dicho Este artículo ha sido escrito dos veces, producto o servicios (…) Así pues, la y espero tener que volver a redactarlo usabilidad se encarga de todo lo que con las aportaciones y críticas que influya en el éxito y la satisfacción del genere. Comencé con el enfoque que me usuario.” En cambio la accesibilidad parecía evidente, los discapacidades, indica “la facilidad con la que algo puede hasta que me di cuenta de que herraser usado, visitado o accedido en general mientas de generación del sonido por todas las personas, especialmente hablado las podemos necesitar todos, o por aquellas que poseen algún tipo de que la informática debe responder a la discapacidad. Para promover la accesibicuestión del tamaño de los tipos de letra lidad se hace uso de ciertas facilidades en terminales de cualquier tamaño, o que ayudan a salvar los obstáculos o baprever salidas alternativas a la visual. En rreras de accesibilidad del entorno, conel momento actual está ordenado por siguiendo que estas personas realicen la tecnologías, por supuesto pensando misma acción que pudiera llevar a cabo siempre en su función auxiliar. una persona sin ningún tipo de disTamaños y colores capacidad. Estas facilidades son llamadas ayudas técnicas.” Basta leer las Empecemos por lo evidente, con perdón. dos definiciones para darse cuenta de Aquí y en el extranjero las adaptaciones que los dos conceptos comparten el 99% más desarrolladas están dirigidas a las de su genoma: se basan en la facilidad personas con deficiencias visuales. de uso y se distinguen por los destinataSiguen distintas estrategias, dependienrios. La usabilidad tiene destinatarios do del tipo de deficiencia. Pero es imporespecíficos, un target, luego es un contante que estén integradas en la interfaz cepto con un origen posiblemente code usuario y no depender de aplicamercial; por el contrario la accesibilidad ciones individuales: la solución no está generaliza. Y tiene su apoyo en obligaen poder utilizar unas pocas aplicaciones ciones impuestas por las legislaciones adaptadas, sino en que todo el entorno nacionales. Quizás debamos insistir en esté modificado en función de las necesiesta distinción: la primera tiene que ver dades del usuario. con la eficacia; la segunda con los dereLos nuevos entornos integrados son chos de todos al acceso a las nuevas tecconfigurables desde el arranque: en la nologías. Y del mismo modo que no figura 1 vemos la ventana de configupodíamos aceptar una informática para ración de las tecnologías de asistencia en occidentales que se defiendan en inglés, Gnome. Para empezar los escritorios perno podemos aceptar páginas o herramiten configurar el tamaño de letra y mientas que excluyan a los que son ventanas y el número y contraste de codiferentes. lores simultáneos mediante lo que llaLos entornos integrados de escritorio man temas; se han creado temas espe(Gnome, KDE) han especificado normas ciales de alto contraste, y las personas que deben cumplir las aplicaciones con problemas de daltonismo o disfuncreadas con sus herramientas de desaciones neurológicas de cualquier tipo rrollo[3]. Estas guías pretenden 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 Figura 2: Tema de alto contraste.

WWW.LINUX- MAGAZINE.ES

Número 06

85


LINUX USER • Educación

Figura 3: Magnificador de pantalla de 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 integrados 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 alternativa de información, en este caso visual (parpadeos, ventanas emergentes), para comunicar avisos o solicitar decisiones.

Síntesis del habla Es 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.

86

Número 06

Es decir, con un programa de síntesis de voz. Aunque existen sintetizadores hardware que funcionan con GNU Linux (puede consultarse la lista en el AccesibilidadCómo o en la ayuda de emacspeak: DoubleTalk PC, DoubleTalk LT, LiteTalk, Braille ‘n Speak, Type ‘n Speak, Braille Lite, Apollo 2 from Dolphin, or Accent SA) e IBM creó una versión de ViaVoice para GNU Linux, la síntesis de voz por software se llama festival, obra del Centre for Speech Technology Research de la Universidad de Edimburgo (por completar la exploración diremos que flite --festival light-- es su versió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 proporcionadas por FestVox (algunas de estas voces son no-libres en sentido Debian) o Mbrola. Festival puede utilizarse como un programa de línea de órdenes; podemos utilizar 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 bastante 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 servicio y activando el lector de pantalla de gnopernicus (Gnome), kmouth o KTTS, KDE Text-to-Speech System (KDE). Insisto: ¿para qué quiere un ciego ventanas? Los sistemas anteriores son útiles para paliar deficiencias visuales no se-

WWW.LINUX- MAGAZINE.ES

veras, pero ahora necesitamos soluciones alternativas. Necesitamos lectores de pantalla. La primera opción la proporciona como siempre emacs (¿saben el chiste? Emacs es un gran sistema operativo, lástima que no tenga un buen procesador de textos) con speechdispatcher y Emacspeak. El Accesibilidad-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 referencias 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 teclado Ya sabemos mucho sobre la configuración a bajo nivel del teclado porque hemos trabajado en la instalación de distintos mapas de teclado. Ahora vamos a intentar dar respuesta a aquellos alumnos 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 configuración de teclado qwerty está diseñada expresamente para dificultar el tecleado. Tiene su origen en la necesidad de ralentizar 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 combinaciones 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

Figura 4: Filtros de la accesibilidad del teclado.


Educación • LINUX USER

Figura 5: Activación de las extensiones de accesibilidad del teclado.

incomprensible --y muy humana-- nos hace resistirnos a aprender ¡y a enseñar! una solución tecnológica que es manifiestamente mejor. ¿Pero no es eso lo que le pasa a GNU Linux? Es posible manejar un entorno de ventanas 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 predefinidas 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 programas y adaptarlas a nuestro gusto o nuestras 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 inconveniente evidente es que deberemos recordarlas. Pero las personas que no pueden manejar un ratón probablemente necesiten ayuda en su manejo del teclado. La extensión AccessX del protocolo X cubre este campo[5]. En primer lugar es posible definir “teclas lentas” (figura 4), procedimiento por el que sólo se recoge una pulsación de tecla si se mantiene pulsada durante un tiempo definido; las teclas lentas responde al problema de filtrar las pulsaciones involuntarias de personas con problemas de coordinación en sus movimientos. De forma relacionada, existen las “teclas de rebote”, filtro por el

que se puede definir el tiempo a partir del cual se rechaza una pulsación mantenida o repetida y se devuelve una señal anunciándolo. Las “teclas de conmutación” devuelven una señal (normalmente un beep auditivo) cuando se pulsa una tecla de conmutación (mayúsculas…). Por último explicaremos el concepto 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 utilizar 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 protocolo XKB.

El ratón Hemos 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 operativo los ratones son dispositivos que envían señales que se traducen a posiciones en la pantalla y a pulsaciones; cualquier dispositivo del que se conozca la señal, sea ratón, joystick, mando a distancia 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 encadenada (uno es dominante) o independiente 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 frecuentes tendinitis, síndrome del túnel carpal…). Actúa cuando el puntero se detiene brevemente (el tiempo es configurable) disparando un click. En el modo de arrastre deja pulsado el apuntador y espera antes de liberarlo; si durante esta

WWW.LINUX- MAGAZINE.ES

Figura 6: Teclado virtual xvkbd.

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 muestra 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 proporciona 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 imposible (movimiento del puntero con la cabeza o los ojos). Es un programa internacionalizado, se puede trabajar en español, y en las pruebas lo he encontrado algo inestable.

Reconocimiento del Habla Segú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-

Figura 7: Gnome On-screen Keyboard.accesibilidad del teclado.

Número 06

87


LINUX USER • Educación

EL AUTOR

trar la voz del usuario y, Sphinx-4 está escrita en a partir del análisis de la java. Sphinx-2 es la forma y del mensaje de única de las tres verla voz, realizar tareas siones que funciona en predeterminadas. Su uso tiempo real. más habitual es la conPerlbox Voice (figura 9) versión del mensaje es una aplicación perlhablado a texto escrito Tk que utiliza festival (dictado automático de para generar habla y documentos) y el manejo Sphinx-2 para convertir de un ordenador”. Sobre órdenes habladas de un esta última función, el diccionario a órdenes manejo del ordenador, se que la máquina entiende ha trabajado en Linux. Figura 8: Dasher.accesibilidad (abrir una ventana, lanEl “Accesibilidaddel teclado. zar navegador…). En el Cómo” habla de foro del sitio web de la FreeSpeech (http:// aplicación se ha discufreespeech.sourceforge. tido la adaptación a net), del proyecto Openidiomas diferentes del Mind. He explorado las inglés; no me consta páginas del proyecto y que se haya terminado. no encuentro ficheros No conozco ninguna posteriores a 2002, y aplicación libre que aunque la lista de permita el dictado de Figura 9: El control de perlboxcorreo sigue viva (con texto sin restricciones. voice. dos mensajes en lo que Y sin embargo tengo la va de año) deduzco que impresión de que la es un proyecto no muy activo. Espero tecnología, Sphinx, está ahí, que sólo que alguien desmienta esta afirmación. falta un proyecto que ate los cabos suelCVoiceControl (http://www.kiecza.net/ tos y se los ponga al alcance del usuario daniel/linux/) es un proyecto de Daniel final. Kiecza abandonado en 2002. Ambas apliY en el próximo número caciones tenían un aspecto alentador. Otras soluciones (por ejemplo Xvoice) Hasta ahora sólo hemos tocado la superdependen de la presencia en el sistema ficie de la accesibilidad en GNU del motor no-libre de IBM ViaVoice DictaLinux[6]. Debemos examinar los sistion for Linux. temas alternativos de comunicación Cambiando de aires, Robert Tucker, entre la máquina y el ordenador (morse, en correo a la lista <linuxfortranlabraille), la disponibilidad o no de aplicators@yahoogroups.coms> de 6 de ciones destinadas a los alumnos con marzo de 2005, nos pone al día del deficiencias cognitivas, la accesibilidad estado de la tecnología del en la web, un cambio de enfoque para reconocimiento del habla en GNU Linux. examinar todas estas herramientas y Informa de que “en la actualidad los dos especificaciones desde el punto de vista proyectos más avanzados de pedagógico, el necesario balance final… ■ reconocimiento del habla en Linux son ¿Nos vemos en el próximo número? Sphinx y Perlbox”. Sphinx (http://cmusphinx.sourceforge. net/html/cmusphinx.php) no es una apliJuan Rafael Fernández García es cación destinada a usuarios finales, sino profesor de educación secundaria y tiene una larga experienun conjunto de bibliotecas. Han sido cia en la traducción y docudesarrolladas y utilizadas por compañías mentación del software libre. Ha telefónicas (incluida Telefónica I+D) sido coordinador de uno de los para sus servicios de contestador Centros que participan en la automático y atención automatizada al experiencia andaluza de integrar cliente. Mantiene tres versiones las TIC en la educación y actualsimultáneas: Sphinx-2 es la versión más mente trabaja como asesor de rápida y ligera; Sphinx-3 es más avanformación del profesorado. zada y precisa, mientras que finalmente

88

Número 06

WWW.LINUX- MAGAZINE.ES

RECURSOS [1] Los Cómo del LDP, Libre Documentation Project están disponibles en el paquete doc-linux-html; existe traducció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 comprobar es el seguimiento del proyecto; existe el antecedente de 11Linux (ftp://ftp.once.es/pub/accessibility/ Linux/OnceLinux/), abandonado (¿terminado?) 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 prefijadas en las especificaciones del protocolo XKB. El grupo de trabajo se plantea como objetivo “identificar y adoptar un subconjunto de la especificación XKB que permita proporcionar las propiedades y comportamientos estándar del teclado que necesitan las personas con problemas 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)



LINUX USER • Trucos

Los 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

É

ste mes, nuestro director, Paul C. Brown nos cuenta como crear una lista sin repeticiones a partir de una columna de Calc, la hoja de cálculo de OpenOffice, y como correr esos imprescindibles programas DOS (como “Monkey Island”) sin tener que recurrir a un emulador de grandes proporciones tipo qemu o bochs. He de explicar que mi distro es de esas eclé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 monstruo de Frankenstein que comprende paquetes de MDK 9.2, 10.0, 10.1, 10.2,

90

Número 06

PLF y cosas compiladas por mi mismo con sus respectivas dependencias y ajustes. Más que evolucionar, se ha desparramado y cada nueva “mejora” ha supuesto romper una docena de cosas que ya funcionaban satisfactoriamente. Lo último ha sido el sonido.

Pasando Lista ¿Qué es lo que suele ocurrir? Pues que lo que empieza su vida como un “sucio y rápido hack”, después no hay manera de librarse de él. Algo así como lo que le paso a MS-DOS, que empezó su vida como QDOS, que no irán las siglas de Quick Disk Operating System ni nada por

WWW.LINUX- MAGAZINE.ES

el estilo, sino de Quick and Dirty Operating System, y fíjate tú: más de 15 años con un parche. En este sentido, tomamos decisiones todos los días que son provisionales pero se quedan para siempre. Tomemos el caso de las hojas de cálculo: con demasiada frecuencia hacen de sustitutos de bases de datos. Imaginemos que administras un pequeña empresa con tres programadores y quieres seguirle la pista a las diferentes tareas y las horas que les dedican a cada una cada uno de los desarrolladores. ¿Vas a crear una base de datos para tan poca cosa? Las respuesta a eso


Trucos • LINUX USER

es: Pues sí, por que, para nombre de nuestro macro cuando te quieres dar (ver Figura 2). Yo lo he llacuenta, los tres desarromado newname, por que lladores se han convertido devuelve un nuevo nomen diez o veinte y el bre y sólo un nuevo nomnúmero de proyectos se Figura 1: La lista de prograbre cuando lo encuentra ha multiplicado por cinco. madores, tareas y horas. en una lista sobre el que Enhorabuena por la itera. expansión. Pero si el documento que utiPulsamos en el New para habilitar el lizaste para controlar al personal empezó macro en la lista. Después escogemos el siendo un hoja de cálculo, probablenuevo macro de la lista y pulsamos en mente siga siendo una hoja de cálculo. Edit. Abriremos una IDE bastante chula A lo hecho, pecho, como suele decirse. (ver Figura 3) que nos permite escribir Es final de mes y ahora tienes que sacar scripts en BASIC. Nuestro macro es en un lista de todas las horas trabajadas realidad muy corto (véase Listado 1). para saber lo que se les debe a cada uno. BÁSICamente, lo que hace es iterar a Tienes una hoja como el que se ve en la través de un matriz de entrada Figura 1. ¿Qué vas a hacer? ¿Contar a (search_list), comparándola con un mano a cada programador a mano e ir matriz destino (in_target_list) y devuelve apuntando en un post-it los datos? Aparte el primer nombre del matriz de entrada de lame, esa solución es ineficiente, ya que no se encuentra en el matriz de desque, si algo nos enseñan las máquinas es tino. Pero ¿de dónde salen esos matrices? que, si bien programadas y configuradas, Esos matrices son un grupo de celdas de los ordenadores cometen bastantes la hoja de cálculo. Si la lista de la que menos errores que los humanos ¿y si te queremos sacar los nombres se halla olvidas de incluir ese nuevo programador ocupando las celdas A1 a la A10, el finlandés? Todo tu presupuesto al garete. BASIC de OOo interpreta eso como una Así que, lo suyo, es dejar este tipo de tramatriz bidimensional donde, en nuestro bajo a la hoja de cálculo. caso, search_list(A,1) es el primer eleLo primero que necesitamos es poder mento, search_list(A,2) es el segundo, y reproducir la lista de programadores sin así sucesivamente. repeticiones. Esto, que se hace muy fácil La matriz de destino es la columna con un GROUP BY con una consulta para donde ya se han insertado nombres. Por bases de datos SQL (¿ves? Te lo dije), no tanto, si vamos a poner los nombres de es tan sencillo de hacer con una hoja de nuestros empleados en la columna E, cálculo. De hecho, no hay ninguna funtendremos que comprobar que el nomción que nos facilite esta tarea en Calc… bre buscado no esté en las celdas de la pero tenemos Basic. Sí, señoras y columna E por encima de la celda donde señores, es relativamente sencillo con se encuentra la función, ya que esas celeste lenguaje, similar al VisualBasic de das ya contendrán otros nombres de la MSOffice, escribir una función para Calc lista que hemos encontrado. utilizando lo que OpenOffice.org conoce ¿Confuso? Yo también. Veámoslo con como “macro”. un ejemplo. Guardemos nuestra función Lo primero es, con nuestra hoja de cály salgamos del editor pulsando en el culo abierto, escoger Tools > Macros > icono del disco y cerrando la ventana del Macro de la barra de menús. En la veneditor. Ahora, en la celda E2 escribamos: tana de diálogo, en el cuadro de texto del ángulo superior izquierdo, escribimos el =NEWNAME($A$2:$A$50;$E$1:$E1) (Me imagino que ya sabréis que hace el dólar ¿no? Evita que la dirección que le sucede cambie cuando copiamos la fórmula a otra celda, zoquete). Veremos como aparece el primer nombre de la lista contenida en A2..A50 en la celda. Esto, por supuesto, se podría haber conseguido simplemente con Figura 2: Ventana de diálogo de creación de macros.

=A1

WWW.LINUX- MAGAZINE.ES

Pero ahora copiemos el contenido de E2 al portapapeles, escojamos a continuación las celdas E3..E50. ¡Oooooh! Nos aparece la lista sin repeticiones… y sin omisiones (ver Figura 4). Ahora es pan comido sumar las hora de cada programador individual para calcular el misérrimo salario que les vamos a pagar con una formula del tipo {=SUM(($A$2:$A$50=$E2U )*$C$2:$C$50)}

(suponiendo que las horas se hallan en la columna Cx). Esto es una fórmula de matriz (ver las llaves que la encierran). Es decir, contiene como argumentos elementos que han de tomarse como

Listado 1: Macro “newname” 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 14

next if found=False and search_list(i,1)<>"" then

15

newname=search_list(i,1)

16

exit for

17

endif

18 next

Número 06

91


LINUX USER • Trucos

Figura 5: Dosbox ejecutando Indiana Jones and The Fate of Atlantis.

Figura 3: La IDE de desarrollo de OpenOffice.org.

matriz. Para editar uno de estos monstruos y hacer que se comporte como una fórmula de matriz, hemos de pulsar [May]+[Ctrl]+[Enter] al terminar la edición. En este caso, la fórmula busca en el rango comprendido entre las celdas A2…A50 valores que sean iguales a E2. Si encuentra una igualdad, se devuelve 1, si no 0. El resultado se multiplica por los valores correspondientes sacados de las celdas C2…C50, teniendo como efecto final, que sólo se sumen los valores correspondientes al programador cuyo nombre aparece en E2. Una vez escrita la primera fórmula para el primer programador, podemos copiar y pegar la fórmula de la manera habitual para el resto. El resultado es que se suman las horas por cada uno de los programadores (ver Figura 4). ¡Ja! Además es dinámico: Si añadimos

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.

92

Número 06

nuevos programadores a la lista o asignamos nuevas tareas a programadores existentes, la lista se automodifica como tiene que ser. ¿No es genial?

Guybrush Rulez

Threepwood

Ya veíamos en el artículo dedicado a Qemu en el número 5 de Linux Magazine, lo importante que se está haciendo el poder correr múltiples sistemas operativos bajo uno “padre”. En ese artículo se citaba el ejemplo de un programa de la empresa, importantísimo, que nadie puede (ni tiene tiempo para) reescribir y que, vaya por dios, sólo funciona bajo DOS. Todos sabemos que programa es ese: ¡The Curse of Monkey Island, por supuesto! Pero, seamos realistas, señores, correr todo un señor emulador como Qemu, Bochs o VMWare para seguir las peripecias de Guybrush es, como diríamos en inglés, un poco “overkill”, es decir, exagerado. Incluso dosemu, que ni siquiera se comporta muy bien con estos juegos, y que una vez conseguí configurar y hacer correr, aunque me sale urticaria cada vez que pienso que lo voy a tener que volver a utilizar, vale la pena. Para estos casos de tan imperiosa necesidad, de hecho, tenemos dos herramientas a medida: Dosbox [3] y Scummvm [4]. El primero no es, ni pretende ser, a diferencia de dosemu y Wine, un verdadero emulador de otro sistema operativo, sino que incluye mejoras y “transportes” a medios (emulando, por ejemplo, antiguas tar-

WWW.LINUX- MAGAZINE.ES

jetas de sonido a través del driver de sonido) al sistema Linux que permiten correr con un mínimo de problemas… ¡JUEGOS! No hay que crear discos virtuales ni zarandajas en Dosbox. Basta “montar” un directorio C: con cualquiera de nuestro directorios existentes. Por ejemplo: si tenemos un montó de juegos (comprados legalmente, claro) en el directorio /home/mi_dir/dosgames/, bastaría con hacer mount c /home/mi_dir/dosgames/

en el shell de Dosbox para disponer de una flamante unidad C: donde hacer nuestros pinitos. Para cambiarnos a la unidad C: (Dosbox arranca en un directorio virtual, Z:) haríamos: c:

Si tienes problemas para conseguir los dos puntos (:), prueba a mantener pulsado la tecla Alt y pulsando 5 y 8 en el teclado numérico. Cuando sueltes Alt, los dos puntos deberían aparecer. Ya podemos correr cualquier juego que se halle en los directorios y subdirectorios de C: (ver Figura 5). Otra alternativa para estos programas es ScummVM. Pero ya hablamos de ScummVM en otro artículo en éste número (ver las sección de Linux User) y, por tanto, no me explayaré. Pero, vamos, que no todo va a ser programar interfaces para bases de datos, digo yo. Otro día os explico como hago mi Cous-cous de gambas y pescado. ■


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 se requiere 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 domicilio cada mes.

Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el precio de 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

Las patentes amenazan los cimientos de la sociedad de la información.

… Y AHORA EN SERIO 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

P

atentes. Es un tema demasiado grave como para no comentarlo. Como sabéis, y dejando monsergas a aparte, estamos a un tris de convertir Europa en el equivalente “patentemente” hablando de Estados Unidos, lugar de ensueño éste, donde existen firmas cuya única actividad consiste en acaparar patentes para llevar a juicio y obtener compensaciones para quienes los infringen a sabiendas o por ignorancia.

El Colmo del Ridículo Microsoft está presionando para que el gobierno europeo apruebe una legislación que no obligue a presentar ninguna evidencia de invento para conceder 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-sqwatting, 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 acaparasen 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

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 universidades, laboratorios y demás instituciones 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.

WWW.LINUX- MAGAZINE.ES

No Todo está Perdido A 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 vulnerar, 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 proceso por el cual un documento generado por un procesador de textos y almacenado en un único fichero XML pueda ser manipulado por aplicaciones que entiendan 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 Amazon 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

Número 06

95


PATENTES

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 bastante 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 interpretació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 los Vericuetos Legales Rizando el rizo, la jurisprudencia española contempla la figura de “tercero de buena fe”. Imaginemos que desarrollamos 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 tercera 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 inicial. 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 tercero 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 comercializació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 efectos prácticos, impedir que sigamos desarrollando un proyecto que salió de

96

Número 06

nuestro propio cerebro, so pena de fuertes multas y costes legales.

Sector en Crisis Permanente Con la demanda de que no se apruebe la directiva europea sobre patentes, no es como si estuviérase pidiendo que se proteja artificialmente a un sector deficitario o anticuado, como si del gremio del calibrado de ruedas de carro de tracción animal 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 mercado. 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ñadido de pleitos por infracciones a patentes irrazonables. Con la legislación propuesta en el parlamento europeo, se fulminará legalmente y de un plumazo un mercado abierto. Utilicemos 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 horarios 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 proteger a los pequeños tenderos en un mercado 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 directiva de patentes europea, aplicado a los horarios de apertura de las tiendas sería el equivalente de decir: “Hola, soy Carrefour. 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 consiste en registrar tu software. No animamos a nadie a que haga un software que en un principio se pretendía libre, pri-

WWW.LINUX- MAGAZINE.ES

vativo, sino que se registre el código, algoritmos , etc., junto con la licencia en uno de los registros de la propiedad intelectual. 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 violaciones 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 trabajo, 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 directiva de patentes propuesta al parlamento europeo se apruebe. Desafortunadamente, en un parlamento donde el absentismo 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 balanza a favor de la socialmente justo. A menudo es tan sencillo como rellenar un formulario o mandar un correo electrónico. ■ Suerte.

RECURSOS 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/

OTROS RECURSOS Artículo supuestamente humorístico del autor sobre las patentes: http://www. linux-magazine.es/issue/01/Humor.pdf


EVENTOS

II GUADEC-ES

Linux World South Africa

aKademy 2005

Fecha: 19-21 Mayo

Fecha: 17-20 Mayo

Fecha: 27 Agosto - 4 Septiembre

Ciudad: A Coruña

Ciudad: Johanesburgo, Sudáfrica

Ciudad: Málaga, España

Sitio Web: http://2005guadeces.org

Sitio Web: www.linuxworldexpo.co.za

Sitio Web: http://dot.kde.org

Calendario de Eventos Evento Fecha php tropics 11-15 Mayo LinuxWorld South Africa 17-20 Mayo Xtech 2005 24-27 Mayo II GUADEC-ES 19-21 Mayo Wind River 2005 User 22-25 Mayo XTech 2005 24-27 Mayo LinuxWorld Italia 24-26 Mayo LinuxWorld Conference & Expo New York 25-26 Mayo 5 European Tcl/Tk User Meeting 27-28 Mayo GUADEC 2005 29-31 Mayo Red Hat Summit 1-3 Junio LinuxWorld Conference & Expo Tokyo 1-3 Junio Linux Forum Asia 2005 15-16 Junio LinuxTag 2005 22-25 Junio I Congreso de Tecnologías del Software Libre 7-8 Julio 2005 Linux Symposium 20-23 Julio Campus Party 2005 25-31 Julio Usenix Security Symposium 1-5 Agosto aKademy 2005 27 Agosto - 4 Septiembre

Ciudad Cancún, México Johanesburgo, Sudáfrica Amsterdam, Holanda A Coruña Orlando, Floria, EE.UU. Amsterdam, Holanda Milán, Italia Nueva York, EE.UU. Bergish Gladbach Stuttgart, Alemania Nueva Orleans, EE.UU. Tokyo, Japón Hong Kong, China Karlsruhe, Alemania A Coruña Ottawa, Canadá Valencia, España Baltimore, MD, EEUU Málaga

Sitio WebSolutions Linux www.phparch.com/tropics www.linuxworldexpo.co.za www.xtech-conference.org http://2005.guadec-es.org www.windriverevents.com www.xtech-conference.com www.linuxworldexpo.it www.linuxworldexpo.com www.t-ide.com/tcl2005e/tcl2005.html http://2005.guadec.org www.redhat.com/promo/summit www.idg.co.jp/expo/lw www.linuxforumasia.com www.linuxtag.org http://congreso.gpul.org www.linuxsymposium.org http://web5.campus-party.org www.usenix.org http://dot.kde.org

Información de Contacto Director Paul C. Brown Coolaboradores Paul C. Brown, Jose Manuel González Vida, Juan Rafael Fernández, Pedro Orantes, José María Ruíz, Alberto Planas. Traductores Paqui Martín Vergara, Paul C. Brown, Jesús Reyes Delgado, Antonio Rueda, Víctor Tienda. Maquetación Sergio Hardasmal Diseño de Portada Pinball (info@pinball-werbeagentur.de) Diseño de Publicidad Feedback (www.f-back.com) Publicidad www.linuxmagazine.com.es/pub/ Para España Paul C. Brown pbrown@linuxmagazine.com.es pbrown@linuxnewmedia.es Tel.: (+ 34) 951 010 556 Móvil.: (+ 34) 655 036 836 Fax.: (+ 34) 951 010 516 Sergio Hardasmal anuncios@linuxmagazine.com.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516

Para el Resto del Mundo Brian Osborn ads@linux-magazine.com Tel.: (+49) 6509 910 495 Fax.: (+49) 6509 910 497 Director Editorial Paul C. Brown Director de Producción Sergio Hardasmal anuncios@linux-magazine.com 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 556 Fax.: (+34) 951 010 516 subs@linuxmagazine.com.es Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linuxnewmedia.es Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516

WWW.LINUX- MAGAZINE.ES

www.linux-magazine.es - España www.linux-magazine.com - Mundo www.linux-magazine.de - Alemania Si bien se toman todas las medidas posibles para garantizar la precisión del contenido de los artículos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores 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 escrupulosamente para confirmar que está libre de virus y errores. Copyright y Marcas Registradas © 2004 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohíbe la reproducción total o parcial de los contenidos de Linux 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

Número 05

97


PRÓXIMO NÚMERO

Julio 2005: Número 7

PRÓXIMO NÚMERO EMULADORES En portada el mes que viene, examinamos emuladores, máquinas virtuales y el célebre API WINE. Veremos técnicas que nos permitirán ejecutar software diseñado para otros sistemas bajo Linux y aprenderemos a instalar XP en Linux con VMWare 4.5.2. También estudiaremos como correr MacOs X en una ventana Linux sobre un PowerPC. Le daremos un repaso a como funciona UserMode Linux que nos permite correr un Linux como un proceso dentro de otro Linux.

BOLETÍN LINUX MAGAZINE El Boletín de Linux Magazine te da la oportunidad 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 versión impresa llegue a los quioscos. Suscríbete en www.linuxmagazine.es /boletin.

HTML CON BLUEFISH El poderoso editor de HTML Bluefish nos trae gratuitamente 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.

EN EL DVD: SUSE 9.2 COMERCIAL Además, Linux Magazine, con el número 7, viene con un DVD de lujo: la versión comercial y completa 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 tendrí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.

A LA VENTA: JUNIO DE 2005 98

Número 06

WWW.LINUX- MAGAZINE.ES




Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.