linux magazine - edición en castellano, nº 19

100
Radio Last.fm Audacity Icecast Shredder 9 Extensiones Firefox Clusters Tomcat Blender 3D PCs Antiguos AppArmor Blender Animación en 3D p33 Contraseñas Personaliza tu ventana de validación p38 NÚMERO 19 P.V.P 6,95 Firefox Extensiones para incrementar la funcionalidad p70 WWW.LINUX - MAGAZINE.ES LINUX MAGAZINE NÚMERO 19 Edición en Castellano RADIO Transmite tu voz alrededor del mundo Crea tus propios podcasts con Audacity p12 Last.fm: Una radio virtual a medida p24 Estrena una emisora con Icecast p18 Shredder 9 Conviértete en un grand master con este programa de ajedrez p73 XChat Expande la funcionalidad de tu cliente IRC con Python p50 Antiguallas Arovecha tu viejo ordenador con DamnSmall Linux p41 Con más de 3.000 paquetes Se ejecuta desde el DVD Incluye libro sobre Knoppix en PDF Clusters Tomcat Alta disponibilidad para servidores web p60

Upload: linux-new-media-spain-sl

Post on 19-Feb-2016

342 views

Category:

Documents


26 download

DESCRIPTION

Puesto a la venta septiembre 2006. Tema de Portada: Radio. DVD: Knoppix 5.0.

TRANSCRIPT

Page 1: Linux Magazine - Edición en Castellano, Nº 19

Ra

dio

La

st.fm A

ud

ac

ity Ice

ca

st Sh

red

de

r 9 Ex

ten

sion

es Fire

fox

Clu

sters To

mc

at B

len

de

r 3D P

Cs A

ntig

uo

s Ap

pA

rmo

r BlenderAnimación en 3D p33

ContraseñasPersonaliza tu ventana de validación p38

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

FirefoxExtensiones para incrementar lafuncionalidad p70

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

LIN

UX M

AGAZIN

E

NÚMERO 19

Edición enCastellano

R A D I OTransmite tu voz alrededor del mundo

Crea tus propios podcasts con Audacity p12

Last.fm: Una radio virtual a medida p24

Estrena una emisora con Icecast p18

Shredder 9Conviértete en un grand master

con este programa de ajedrez p73

XChatExpande la funcionalidad de tu

cliente IRC con Python p50

AntiguallasArovecha tu viejo ordenador

con DamnSmall Linux p41

Con más de 3.000

paquetes

Se ejecuta desde

el DVD

Incluye libro

sobre Knoppix en

PDF

Clusters TomcatAlta disponibilidad para servidores web p60

Page 2: Linux Magazine - Edición en Castellano, Nº 19

8PSMEXJEF�4FSJFT

8PSME�T�MFBEJOH�5SBEF�&WFOU�GPS�-JOVY�BOE�0QFO�4PVSDF�JO�CVTJOFTT

-JOVY8PSME�$POGFSFODF���&YQP��o

4JOHBQPSF� +VMZ��� ������� XXX�MJOVYXPSMEFYQP�DPN

4BO�'SBODJTDP� "VHVTU����o��� ������� XXX�MJOVYXPSMEFYQP�DPN

#FJKJOH� "VHVTU����o��� ������� XXX�MJOVYXPSMEDIJOB�DPN

.PTDPX� 4FQUFNCFS���o�� ������� XXX�MJOVYXPSMEFYQP�SV

4UPDLIPMN� 4FQUFNCFS�� ������� XXX�MJOVYXPSMETVNNJU�TF

6USFDIU� 0DUPCFS����o��� ������� XXX�MJOVYXPSMEFYQP�OM

-POEPO� 0DUPCFS����o��� ������� XXX�MJOVYXPSMEFYQP�DP�VL

$PMPHOF� /PWFNCFS����o��� ������� XXX�MJOVYXPSMEFYQP�EF

(VBOH[IPV� /PWFNCFS����o��� ������� XXX�MJOVYXPSMEDIJOB�DPN

/FX�:PSL� 'FCSVBSZ����o��� ������ XXX�MJOVYXPSMEFYQP�DPN

.FYJDP�$JUZ� 'FCSVBSZ����o�.BSDI�� ������� XXX�MJOVYXPSMEFYQP�DPN�NY

4ZEOFZ� .BSDI����o��� ������� XXX�MJOVYXPSMEFYQP�DPN�BV

5PSPOUP� "QSJM����o�.BZ�� ������� XXX�MXOXFYQP�QMVNDPN�DB

4BO�'SBODJTDP� "VHVTU���o�� ������� XXX�MJOVYXPSMEFYQP�DPN

*/5&3/"5*0/"-�.&%*"�410/403

Page 3: Linux Magazine - Edición en Castellano, Nº 19

Una queja que he oído con fre-

cuencia últimamente es que no

hay desarrolladores para las

tareas serias relacionadas con servidores

Linux. Según un profesional del sector,

en este área se ha pasado de una tecno-

logía a la ofensiva, que estaba bien

colocada para dominar el mercado, a

estar a la defensiva, viendo cómo sus

competidores han establecido una

cabeza de playa en su territorio. La iner-

cia de la implantación de Linux se ha

perdido, negras nubes se acumulan en el

horizonte y las violas, quejumbrosas,

anuncian el inevitable desenlace de la

batalla.

No sé yo. Si la manera de evaluar la

evolución del mercado es mirar las

estadísticas de Netcraft, donde se com-

paran las carreras de Apache y IIS,

permitid que dude de la fiabilidad de

los datos. Estamos hablando de un soft-

ware muy específico ante otro software

muy específico al fin y al cabo. Ni

siquiera se menciona la plataforma

sobre la que corren. Porque Apache

puede correr sobre Windows (y

MacOS) y supongo que, con WINE, se

podrá correr IIS sobre Linux, aunque,

que me aspen si entiendo el porqué

nadie haría algo así.

Pero, en fin, con tal de que no decaiga

la discusión y, al no poseer un baremo

mejor, supongamos la batalla entre Apa-

che e IIS por la supremacía en Internet,

tal y como aparece registrada en Net-

craft, como fiel reflejo de todas las

batallas entre Linux en el servidor y

todos sus competidores.

Personalmente no creo que se haya

perdido cuota de mercado, a lo sumo se

ha estabilizado el crecimiento. Si Net-

craft es representativo de algo, en el

último mes podemos ver que, después

de varios meses de pérdidas, la adopción

de Apache como servidor web vuelve a

crecer. Mientras que lo contrario es

cierto para IIS: su vector de crecimiento,

positivo desde abril, vuelve a su tenden-

cia negativa en julio [1].

Por otro lado la adopción de

Linux ha crecido de manera

exponencial, de acuerdo, pero

no ha ido acompañado de un

crecimiento de sus

desarrolladores hardcore. Sin

embargo, es un problema de

proporción más que de

abandono: El número de desarrolladores

para Linux ha aumentado en proporción

al número de usuarios y, según un

estudio de Evans Data [2], se espera que

para finales del 2006 el número de

desarrolladores que programan para

Linux se equipare a los que lo hacen

para Windows. Que no se haya visto

incrementado en el área de los

servidores es algo que analizaremos más

adelante.

Mientras tanto, la competencia de

Linux se ha puesto las pilas. Por un lado

están las migraciones masivas de domi-

nios de GoDaddy y otros ISPs a IIS.

Hablamos de no menos de 4,5 millones

de dominios migrados. Esos son un mon-

tón de dominios migrados cuyo efecto se

refleja en las gráficas de Netcraft, aunque

cabe preguntarse ¿cuán significativo es

en realidad? Según algunos analistas, la

mayoría de esos dominios son antiguos y

están inactivos. Incluso Warren Adelman,

COO de GoDaddy, admite que sólo se

migró una pequeña parte de la infraes-

tructura del ISP, remarcando que era la

que servía dominios “aparcados” [3]. Asi-

mismo, no se conocen exactamente los

términos comerciales tras la migración

¿tendría sentido para Microsoft pagar a

GoDaddy para que realizase la migración

de dominios muertos y así inflar sus esta-

dísticas de uso? O, más bien, y en vista de

otras acciones de marketing de la

empresa, ¿alguien duda de que lo haría?

A la larga, este tipo de acciones suelen

difuminarse con el tiempo. Dentro de un

año, miraremos las gráficas de Netcraft y

nos preguntaremos a qué demonios se

debió ese pico. Valiente cabeza de playa.

Por otro, cada vez hay más servidores

de toda especie. Vale que una compañía

con experiencia TI pueda tomar una deci-

sión estratégica y optar por una

alternativa a Windows, pero ¿y los que

no conocen nada mejor? Puede tener per-

fecto sentido para una empresa poco

ducha en materia TI una solución de

arriba abajo que utilice una sola arquitec-

tura, puede tener perfecto sentido contar

con un solo proveedor, poder llamar a un

único servicio técnico, pagar una sola

factura al año… por enorme que nos

parezca. Así que nuevas empresas que

buscan llevar su infraestructura informá-

tica más allá del mero escritorio se

encuentran con que ahora tienen varias

opciones de varios proveedores. ¿No está-

bamos a favor de la libre competencia? Y

¿dónde está nuestro departamento de

marketing? Porque el de Microsoft está

claro que se está ganando el salario.

Pero, claro, sí es un problema. Si en vez

de 2 desarrolladores tuviésemos 10 para

depurar y desarrollar software de servidor,

¡todo lo que se podría avanzar! Sin

embargo, hemos de ser claros: el

desarrollo de servidores es tan glamoroso

como la minería del carbón. Puede que el

programador le encuentre su punto, sobre

todo cuando escribe un parche que arregla

una condición de carrera abierta desde

1999 en Samba o descubre una manera de

aumentar el número de threads disponi-

bles en Apache de 1000 a 10000 sin

impactar en el rendimiento. Pero intenta

explicar a tus padres y a tu pareja lo que te

ha mantenido sin dormir el último mes y

medio y entenderás a qué me refiero. Si ya

es difícil explicar lo que es una condición

de carrera, es del todo imposible explicar

porqué había que arreglarlo.

3

EDITORIAL

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

Estimado Lector de Linux Magazine

Nos sentimos orgullosos de nuestrosorígenes como publicación, que seremonta a los primero días de la revo-lución Linux.Nuestra revista hermana,la publicación alemana Linux Maga-zine, fundada en 1994, fue la primerarevista dedicada a Linux en Europa.Desde aquellas tempranas fechashasta hoy, nuestra red y experienciahan crecido y se han expandido a lapar que la comunidad Linux a lo anchoy largo del mundo. Como lector deLinux Magazine, te unes a una red deinformación dedicada a la distribucióndel conocimiento y experiencia téc-nica. No nos limitamos a informarsobre el movimiento Linux y de Soft-ware Libre, sino que somos parteintegral de él.

HARDCORE

Continúa en la página 89 �

Page 4: Linux Magazine - Edición en Castellano, Nº 19

4 Número 19

CONTENIDOS • Linux Magazine nº 19

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

26 Inkscape 0.44

La nueva versión de este programa de

diseño gráfico incluye nuevas noveda-

des muy interesantes.

29 Enlightenment

Enlightenment tiene una gran comuni-

dad de seguidores que han estado espe-

rando pacientemente una nueva ver-

sión. Evaluamos este gestor de venta-

nas extremadamente flexible y estética-

mente agradable.

33 Blender

Blender no genera sólo fotogramas rea-

listas aislados. También es capaz de

capturar los movimientos naturales de

la gente y los animales. Presentamos

algunas de las funcionalidades de ani-

mación de Blender.

38 Contraseñas con truco

Vamos a mostrar algunos trucos para

configurar la ventana emergente de con-

traseñas de root en los sistemas basados

en RedHat.

41 Antigüedades

Si nuestro ordenador es una pieza de

museo que lleva años acumulando

polvo, con un procesador viejo y a falta

de memoria RAM, es más que posible

que muchas de las distribuciones

modernas no funcionen en él. Pero esto

no es un problema: otras muchas distros

diferentes encuentran en máquinas pale-

olíticas su mejor entorno para funcionar.

44 Perl: Artista de la compilación

Los analizadores léxicos y sintácticos no

son sólo para barbudos gurús. Este mes

mostramos cómo podemos crear un par-

ser para nuestras propias aplicaciones.

50 Python: Extendiendo XChat

¿Por qué escribir comandos de IRC

cuando Python puede hacerlo por nos-

otros? Vemos como crear plugins que

extienden las funcionalidades de nues-

tro cliente de chat.

55 Charly: Nmap4

Muchas herramientas van creciendo con

cada nueva versión, pero Nmap 4.00 ha

perdido peso gracias al proyecto Diet-

Nmap. La última encarnación de Nmap

no es sólo más rápida, sino que también

consume menos memoria e incorpora

nuevas funcionalidades.

11 Especial Radio

¿Pensabas que Internet no daba para

más revoluciones? Con la radio por

Internet cualquiera puede montar una

emisora. Si quieres empezar a emitir

radio o podcasts, o si sólo te interesa

sintonizar la emisora perfecta, échale un

vistazo a nuestro tema de portada de

este mes: Radio por Internet.

12 Podcasting

Mostramos cómo crear nuestros propios

podcasts con el sencillo editor libre,

Audacity.

18 Streaming

Para la emisión en directo de radio por

Internet es necesario un servidor de

streaming. Vamos a mostrar en este

artículo los primeros pasos para

comenzar con Icecast, una alternativa

de código abierto para Linux.

24 Last.fm

Last.fm registra nuestros gustos musica-

les y nos ayuda a encontrar usuarios con

intereses similares.

DESARROLLO

LINUX MAGAZINE

3 Editorial

6 DVD Linux Magazine

8 Inseguridades

10 Correo

94 Eventos

94 Información de Contacto

95 Subscripciones

97 Linux Local

98 Próximo Número

EVALUACIÓN

PRÁCTICO

PRÁCTICOPORTADA

ADMINISTRACIÓN

Page 5: Linux Magazine - Edición en Castellano, Nº 19

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

76 Educación: Oportunidad de

colaborar

Aunque no seamos programadores, hay

una gran oportunidad de contribuir en

los campos de la documentación y de la

traducción.

81 Línea de comandos: Procesos

Innumerables procesos pueden estar

corriendo simultáneamente en un sis-

tema Linux en cualquier momento

dado. Enseñamos cómo detener, conti-

nuar o matar tareas y examinamos cómo

enviar los restos de programas colgados

al cielo de los procesos muertos.

84 Juegos: J-Shooters

Ha surgido en tierras del sol naciente una

nueva vuelta de tuerca al género de los

“matamarcianos”. Gráficos vectoriales

muy simples, velocidad, buena jugabili-

dad y dosis monumentales de adicción.

86 Konsultorio

Si tienes algún problema de

configuración, o simplemente quieres

conocer mejor cómo funciona Linux,

Klaus Knopper, el creador de Knoppix,

te ayuda.

90 Debconf6

Bajo el lema “Hot and Spicy” (Calentito

y Picante) se reunieron más de 300

voluntarios llegados de todo el mundo

en México, para celebrar la DebConf6.

COMUNIDAD

MÁS DETALLES EN LA Pág 6

56 AppArmor

Tras penetrar en un sistema remoto, los

intrusos podrían pensar que ya han

pasado la parte más dura y están a

salvo, pero AppArmor les va a estropear

la diversión, encerrándolos en una jaula

virtual.

60 Cluster

En los entornos empresariales suele ser

un requisito tener en funcionamiento

aplicaciones críticas ejecutándose en

alta disponibilidad y balanceo de carga

entre varios servidores. Veamos cómo se

configura Apache Tomcat para estos

menesteres.

68 Ktools: Klear

Si estás cansado de batallar con la

configuración del software para tu tele

digital, prueba Klear, un sistema de tele-

visión para Linux fácil de instalar y de

usar.

70 Desktopía: Firefox

Si buscas en Internet encontrarás útiles

añadidos para Mozilla Firefox. Examina-

mos los más populares y vemos como

instalarlos y configurarlos.

73 Shredder

Shredder 9 trae el campeonato mundial

de ajedrez al ordenador de casa. Echa-

mos un vistazo a la versión Linux de

este famoso programa de ajedrez.

LINUX USER

LINUX USERADMINISTRACIÓN

� Incluye más de 3.000 paquetes

� Se ejecuta desde el DVD

� No requiere instalación

� Opción de instalación en eldisco duro

ADEMÁS:

� Incluye libro sobre Knoppix enPDF

� Incluye más de 3.000 paquetes

� Se ejecuta desde el DVD

� No requiere instalación

� Opción de instalación en eldisco duro

ADEMÁS:

� Incluye libro sobre Knoppix enPDF

Page 6: Linux Magazine - Edición en Castellano, Nº 19

KNOPPIX 5.0

DVD LINUX MAGAZINE

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

Gnome 2.12. Además trae las herramien-tas de escritorio de Código Abierto máspopulares, tales como OpenOffice.org,AbiWord, Gimp, Evolution y Firefox.También encontrarás herramientas VoIPcomo Linphone y utilidades de mensaje-ría instantánea como GAIM y Kopete,además de una gran variedad de aplica-ciones multimedia y educativas.

La Versión 5.0.1 incluye también algu-nas mejoras del instalador Knoppix,como es el caso de una nueva caracterís-tica que permite actualizar instalacionesya existentes de Knoppix. Los desarrolla-dores encontrarán una importante yaccesible colección de herramientas.

Administración del Sistema

Knoppix comenzó su vida como un sis-tema portable para los administradoresde sistemas, siendo sus herramientas deadministración una de las mejores cosascon las que cuenta. El DVD de Knoppixcontiene muchas de las aplicacionespara servidores que encontrarás en lossistemas Linux que se instalan en discosduros.

Además, de los servidores, Knoppixcontiene numerosas y prácticasutilidades de administración para laconfiguración, administración de discosy administración de redes. El live DVDde Knoppix destaca como herramientapara la recuperación de sistemas

Knoppix es una de las herramien-tas preferidas pordesarrolladores, administradores

y miles de usuarios de a pie. Paramuchos profesionales en redes, Knoppixconstituye es la herramienta definitivapara la búsqueda y eliminación de erro-res. Puede arrancarse de manera rápida yfácil desde el DVD en la gran mayoría delos sistemas basados en Intel, y una vezarrancado pueden utilizarse las herra-mientas de diagnóstico para restablecerel sistema. Una distro live es el no vamás en portabilidad, y según usuariosrepartidos por todo el mundo, Knoppixes el no va más de las distros live. Eneste número de Linux Magazine, el no vamás de Knoppix: la versión 5.0.

Contenido

Knoppix 5.0.1 viene con el Kernel deLinux 2.6.15.4 y X.org 6.9. Se puede ele-gir el sistema de escritorio KDE 3.5.1 o

corruptos. Knoppix se usa para ladiagnosis, el análisis y la recuperaciónde datos. Si el sistema no arranca,engánchate a Knoppix y explora elestado de tu disco duro. Knoppix 5introduce también una nueva y excitantecaracterística que suministra acceso deescritura transparente para particionesNTFS.

Pruébalo Ahora

Sabrás si deseas usar Knoppix sólo concolocarlo en tu lector DVD y arrancandoel sistema. No te cuesta nada probar, nisiquiera tendrás que reconfigurar tu sis-tema para quitarlo.

Incluso en el caso de que te encuentresa gusto con tu sistema actual, te será unagran ayuda tener Knoppix a mano. Úsalocomo un sistema de backup o llévalocontigo cuando viajes. Puedes engan-charte a Knoppix desde cualquier lugar yconseguir el mismo sistema familiar,aunque el sistema esté configurado paraWindows. Knoppix proporciona unagran colección de herramientas quedeberías tener siempre a mano por si lasnecesitas, aunque no vayas a viajar, peroque deberías guardar en tu esritorio.

Tanto si usas Knoppix una vez al día o unavez al año, en cualquier ocasión, estarásencantado de poder contar con él. Espera-mos que disfrutes del DVD Knoppix 5.0.1que te trae este mes Linux Magazine.

Figura 2: El Knoppix contenido en el DVD es un Linux repleto de

características.

Procesador CPU Intel (486 o superior).

Memoria 32 MB para modo de prueba;

al menos 96 MB para modo gráfico con

KDE; 128 MB recomendado para modo

gráfico con aplicaciones de oficina.

Tarjeta gráfica VGA compatible

estándar. Puntero Serie, PS/2 o PS/2 IBM

compatible con ratón USB. También se

requiere una unidad de DVD arrancable.

Requisitos del Sistema

Figura 1: Knoppix arranca fácilmente en un gran número de

sistemas Intel.

Page 7: Linux Magazine - Edición en Castellano, Nº 19

DVD LINUX MAGAZINE

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

[1] Página de contacto de Knoppix: http://

www.knopper.net/kontact

[2] Foro Knoppix: http://www.knoppix.

net/forum

[3] Wiki de Knoppix: http://knoppix.

wikiverse.org

[4] Gnoppix (variante de Knoppix con

escritorio Gnome): http://www.

gnoppix.org/

RECURSOS

DESTACAMOS

• Kernel Linux 2.6.15.4

• X.org 6.9

• KDE 3.5.1

• Gnome 2.12

• GCC 4.0.3

• OpenOffice 2.0.2

• KOffice 1.5.0

• Abiword 2.4.1

• GIMP 2.2.11

• Inkscape 0.43

• Evolution 2.6.1

• Firefox 1.5.0

• Mozilla 1.7.12

• Thunderbird 1.5.0

• Kopete 3.5.2

• Linphone 1.3.3

• Apache 1.3.34

• Bind 9.3.2

• Samba 3.0.22

• Perl 5.8.8

• PHP 4.4.2

La mejor fuente de ayuda sobre Knoppix es su página web: http://www.knopper.net/

knoppix/index-en.html o la página de inicio del creador de Knoppix (y columnista de

Linux Magazine) Klaus Knopper: http://www.knopper.net

Puedes enviar tus preguntas sobre Knoppix a la dirección de correo [email protected]

AYUDA Y SOPORTE

Figura 4: Knoppix también viene con algunas herramientas

multimedia populares.

Figura 3: Además de las herramientas de administración

encontrarás una gran variedad de juegos.

Page 8: Linux Magazine - Edición en Castellano, Nº 19

INSEGURIDADES

Schlagwort sollte hier stehenLINUX USERINSEGURIDADES

� GnuPGGnuPG es una utilidad para la encripta-

ción de datos y la creación de firmas

digitales.

Tavis Ormandy descubrió un fallo en

la manera en la que GnuPG verifica los

datos firmados criptográficamente con

firmas separadas. Un atacante que

conozca este fallo puede crear un men-

saje firmado criptográficamente que

podría parecer venir de un tercero.

Cuando una víctima procesa un men-

saje GnuPG con una firma separada

malformada, GnuPG la ignora, procesa y

produce los datos firmados, y sale con

estado 0, tal y como si la firma hubiera

sido válida.

En este caso, el estado de salida de

GnuPG no debería indicar que ha tenido

lugar una verificación de firmas. Este

problema sería peligroso en el caso de

que los resultados del proceso de GnuPG

se obtuviesen a través de un script auto-

matizado.

El Proyecto de Vulnerabilidades y

Exposiciones Comunes (Common

Vulnerabilities and Exposures o CVE, http://

cve.mitre.org) ha asignado a este problema

el nombre CVE-2006-0455.

Tavis Ormandy también descubrió un

fallo en la manera en la que GnuPG verifica

los datos firmados criptográficamente con

firmas inline. Es posible para un atacante

introducir datos sin firmar en un mensaje

firmado, de modo que cuando la víctima

procese el mensaje para recuperar los datos,

los que están sin firmar aparecen junto a los

datos firmados. De esta manera los datos no

firmados tienen la apariencia de haber sido

firmados.

El Proyecto de Vulnerabilidades y Exposi-

ciones Comunes (Common Vulnerabilities

and Exposures o CVE, http://cve.mitre.org)

ha asignado a este problema el nombre

CVE-2006-0049. �

Referencia Debian: DSA-993-1,2

Referencia Gentoo: GLSA-200603-08

Referencia Mandriva: MDKSA-2006:055

Referencia Red Hat: RHSA-2006:0266-8 Refe-

rencia Slackware: SSA:2006-072-02

Referencia Suse: SUSE-SA:2006:014

� SendmailSendmail es un Agente de Transporte de

Correo (MTA) usado para el envío de correo

entre máquinas.

Se descubrió un fallo en la manipulación

de señales asíncronas en Sendmail. Un ata-

cante remoto podría explotar una condición

de carrera para ejecutar código arbitrario

como superusuario. El Proyecto de Vulnera-

bilidades y Exposiciones Comunes

(Common Vulnerabilities and Exposures o

CVE, http://cve.mitre.org) ha asignado a

este problema el nombre CVE-2006-0058.

Mediante esta vulnerabilidad solamente

podría ser explotar los servidores configura-

dos para que Sendmail escuchara hosts

remotos. �

Referencia Debian: DSA-1015-1

Referencia Gentoo: GLSA-200603-21

Referencia Mandriva: MDKSA-2006:058

Referencia Red Hat: RHSA-2006:0264-8 Refe-

rencia Slackware: SSA:2006-081-01

Referencia Suse: SUSE-SA:2006:017

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

Distribuidor Fuente Seguridad ComentarioDebian Info:http://www.debian.org/security/ Los avisos de seguridad actuales se in-

Lista:http://www.debian.org/debian-security-announce/ cluyen en la página de inicio. Los avisos

Referencia:DSA-…1) se proveen como páginas HTML con

enlaces a los parches. Los avisos también

incluyen una referencia a la lista de

correo.

Gentoo Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para

Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de

Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la

Referencia:GLSA:… 1) página principal. Los avisos se presentan

en HTML con códigos para fusionar las

versiones corregidas.

Mandrake Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web

Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionados con

Referencia:MDKSA:… 1) la seguridad.Entre otras cosas,incluye

avisos seguridad y referencias a las

listas de correo.Los avisos son páginas

HTML,pero no contienen enlaces a los

parches.

Red Hat Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad

Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas.A

Referencia:RHSA-… 1) continuación los problemas para cada

versión de Red Hat se agrupan.Los avisos

de seguridad se proveen como una

página HTML con enlaces a los parches.

Slackware Info:http://www.slackware.com/security La página de inicio contiene enlaces al

Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo.

Referencia: [slackware-security]… 1) No existe información adicional sobre

seguridad en Slackware.

Suse Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de

security/index.html seguridad tras un remodelado en el sitio

Parches:http://www.suse.de/en/private/ web de SuSE.Existe información en la

download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de

Referencia:SUSE-SA… 1) seguridad para versiones individuales de

SuSE Linux se muestran de color rojo en el

sitio de actualizaciones generales.

Contiene una corta descripción de la

vulnerabilidad que soluciona el parche.1) Todos los distribuidores muestran correos de seguridad en el campo Subject.

POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS

Page 9: Linux Magazine - Edición en Castellano, Nº 19

INSEGURIDADES

defecto de SUSE Linux 10.0. Este fallo

fue descubierto por el proyecto Coverity.

Solamente se encuentra afectado SUSE

10.0; los productos anteriores a él no

incluyen el fragmento de código proble-

mático.

El problema está siendo seguido por

Mitre CVE ID CVE-2006-0745. �

Referencia Mandriva: MDKSA-2006:056

Referencia Suse: SUSE-SA:2006:016

� OpenOfficeOpenOffice.org en una suite de producti-

vidad ofimática. Contiene herramientas

de productividad tales como un procesa-

dor de texto, hoja de cálculo, etc. Otras

herramientas incluyen presentaciones,

edición de fórmulas, exploración de

datos y conversión de ficheros. lib-curl,

que se encuentra incluido en OpenOf-

fice.org, es una librería libre y de fácil

uso por el lado del cliente para la transfe-

rencia de ficheros con sintaxis URL.

Dicha librería incluye numerosos proto-

colos.

OpenOffice.org posee código libcurl.

Dicho código es vulnerable a un

desbordamiento de pila cuando intenta

analizar una URL que excede el límite de

256 Byte (GLSA 200512-09).

Un atacante conocedor de este

problema con libcurl podría tentar a un

usuario para que invocara a una URL

especialmente manipulada con

OpenOffice.org, produciendo de manera

potencial la ejecución de código

arbitrario con los derechos de un

usuario que está corriendo la

aplicación. �

Referencia Gentoo: GLSA-200603-25

� Flash PlayerHa sido identificada una vulnerabilidad

de seguridad crítica en Adobe

Macromedia Flash Player que permite a

un atacante que explote dicha

vulnerabilidad con éxito tomar el control

de la aplicación corriendo flash player.

Para que un atacante explote dichas

vulnerabilidades un usuario debe cargar

un SWF malicioso en el Flash Player

creado por el atacante.

Este problema está siendo seguido por

Mitre CVE ID CVE-2006-0024. �

� Zoo

Zoo es una utilidad de archivado de

ficheros escrita por Rahul Dhesi para el

mantenimiento de colecciones de fiche-

ros. Zoo es vulnerable a un nuevo

desbordamiento de búfer debido al uso

inseguro de la función strcpy() cuando

intenta crear un archivo desde determi-

nados directorios o nombres de ficheros.

Un atacante podría explotar este pro-

blema persuadiendo a un usuario para

que cree un archivo zoo de directorios y

ficheros especialmente manipulados,

permitiendo así la ejecución de código

arbitrario con los derechos del usuario

que ejecuta zoo. �

Referencia Debian: DSA-991-1

Referencia Gentoo: GLSA-200603-12

Referencia Suse: SUSE-SR:2006:006

� X.org-x11Un fallo de programación en el Servidor

X.Org X permite a atacantes locales con-

seguir privilegios de superusuario

cuando el servidor es root setuid, tal y

como ocurre en la configuración por

Page 10: Linux Magazine - Edición en Castellano, Nº 19

10

Creo que sería una buena idea que publi-

casen una versión de descarga, que, a un

precio justo, nos permitiera a los usuarios de

fuera de España, acceder a los contenidos

sin por ello destrozar el medio ambiente y

mejorando la velocidad con la que llegan a

sus lectores de acá, en Latinoamérica.

Espero que tengan en cuenta mi sugeren-

cia y podamos disfrutar pronto de un Linux

Magazine más ecológico, más barato y más

universal.

Reciban un cordial saludo,

Roberto

Estimado Roberto,

Desde el principio hemos publicado los

contenidos de Linux Magazine en nuestra

web para su libre descarga en formato PDF.

La mayoría de los números publicados se

pueden bajar gratuitamente de http://www.

linux-magazine.es/Magazine/Archive y, en

el momento de escribir esto, están disponi-

bles todos los artículos de los números del

1 al 13, ambos inclusive.

Sin embargo, hemos querido llevar la

publicación online un paso más allá y, a

partir de este número es posible suscribirse

a la revista en formato puramente digital, lo

que supone un ahorro en los costes de pro-

ducción para nosotros y un sustancial

ahorro en el precio de la subscripción para

los lectores, tanto para España, como para

el extranjero. Aparte de las mencionadas, la

subscripción digital viene con otras impor-

tantes ventajas, tales como el acceso a

todos los artículos de los números anterio-

res (y no sólo a algunos, tal y como sucede

ahora) y la posibilidad de descargar el

número actual incluso antes de que llegue

a los quioscos.

Creemos que este es el camino correcto a

seguir y esperamos que encontréis este ser-

vicio interesante. Hay más información

sobre este nuevo sistema de subscripción

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

y en la página interior de la contraportada

de este número. �

a las características que usted describe, amén

de venir con una distro de las consideradas

más amistosas del mercado: Suse 10.1. El

DVD también contiene la opción de ejecutarse

como live CD para probar tanto KDE como

Gnome y así permitir hacerse con una idea de

cómo funciona Linux sin tener que tocar nada

del disco duro.

Creemos que este tipo de publicación

puede complementar muy bien a Linux

Magazine, la cual parte de la premisa de que

el lector ya tiene Linux instalado y con al

menos una configuración funcional básica.

De hecho, habiendo dado los primeros

pasos gracias a EasyLinux, creemos que el lec-

tor ya puede empezar a explotar la

información contenida en Linux Magazine,

como por ejemplo los tutoriales sobre la línea

de comandos, las secciones dedicadas a la ins-

talación y uso de aplicaciones, o los artículos

de portada de, por ejemplo, este número,

donde se explica cómo recibir (y emitir) radio

por Internet desde Linux y que sólo requieren

una distro Linux instalada para poder

seguirse.

Esperamos que, con la combinación

EasyLinux y Linux Magazine, podamos llegar

a ese gran público que usted menciona que se

merece un sistema operativo como Linux:

libre, de bajo coste, fiable y profesional.

Mejorando lo presenteEstimados Señores,

Soy asiduo a su revista, pero últimamente

me reconcome la conciencia al pensar que, al

comprar su publicación en papel, estoy contri-

buyendo a la deforestación en el mundo.

Por otro lado, vivo en Méjico D.F. y, la ver-

dad, su revista no llega aquí con la velocidad

que querría. En realidad, el último que me ha

llegado es el número 13, que, según veo en su

web, apareció en su país hace cinco meses.

Personalmente, los DVDs de su publicación

no me interesan mucho, ya que soy de los

pocos afortunados que cuentan con una cone-

xión rápida en mi país, pero aun con un

modem de 56Ks, con el retraso con la que lle-

gan las revistas, tendría tiempo de sobra para

bajarme el software en el momento en que se

libera antes que esperar conseguirlo de su

publicación.

Correo del Lector

ACCESO DE ESCRITURA

Schlagwort sollte hier stehenLINUX USERCORREO

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

Se pasan, se pasan

Estimado Sr. Brown,

Acabo de comprar el numero 18 de su

revista y encuentro que está bien presentada y

no dudo de que el contenido es tan bueno

como la presentación. Intento aprender de

ella, pero supera mi escasa formación. El con-

tenido es para un nivel de conocimientos

superior. Así y todo también suelo comprarla

cada mes, por cierto.

El mensaje que intento presentar es que su

revista tiene un publico, pero que existe otro

publico, probablemente varias veces superior

que necesita una revista para principiantes

donde encuentren instrucciones muy, pero

que muy, detalladas que le permitan comen-

zar a usar Linux.

Para Windows encontramos cursillos que

sirven para los que se inician y además hay

muchas revistas como, por ejemplo, Compu-

ter Hoy, que facilitan el uso y aclaran dudas.

Espero que mi comentario les sea de utili-

dad, vuestra revista es buena, pero para que

Linux coja fuerza hay que sacarlo al gran

publico, al público que aún no lo ha usado, el

que le tiene miedo, de lo contrario seguirá

siendo un sistema operativo para minorías, y

las minorías constituyen un mercado pequeño

y poco rentable.

Les sugiero que comiencen una seccion

pequeña en ese estilo y comprueben la acep-

tación, si gusta, ir incrementándola poco a

poco, y al mismo tiempo darle la forma con

más demanda. Creo que resultará.

Rubén

Estimado Rubén,

Creemos que todos sus comentarios son

justos y veraces y somos conscientes del nivel

de la revista. Asimismo creemos que sus suge-

rencias dan en el clavo y por eso lanzamos

como experimento piloto “EasyLinux” (el pri-

mer número apareció en los quioscos en junio

– ver http://www.easylinux.es) que se amolda

Puedes enviar tus comentariosy sugerencias a:

[email protected]

www.alm

ogon.de

LM

LM

Page 11: Linux Magazine - Edición en Castellano, Nº 19

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

Y como artículo final, os

mostramos Last.fm, un servicio

basado en Internet que nos permite

crear una “emisora de radio virtual”

orientada a nuestros propios

intereses musicales. �

Sintoniza el mundo de la radio por Internet

RADIO LINUX

Radio Linux • PORTADA

Hubo un tiempo en el que

jóvenes y mayores se

reunían alrededor de la

radio para escuchar noticias, humor,

opinión y música de lugares

distantes. Todos sabían que

cualquier cosa que fuese digna de

conocerse se encontraría en la radio,

además, podíamos viajar por todo el

mundo simplemente con mover el

dial.

Pero la radio cayó en desgracia con

la llegada de la televisión, quedando

arrinconada a un pequeño nicho

formado por seguidores de fútbol,

usuarios de transportes públicos y

adolescentes fanáticos de la música

pop. Este medio aún conservaba

cierto significado para sus oyentes,

pero la promesa de una radio como

herramienta mágica para hacer del

mundo un lugar sin distancias es

hoy papel mojado.

La vieja radio ha languidecido

hasta un estado raquítico durante un

par de generaciones, hasta que al fin

ha vuelto a nacer.

Puede que no nos hayamos dado

cuenta, pero estos últimos años

hemos presenciado el renacimiento

de un nuevo tipo de radio. ¿O acaso

se trata de algo distinto que

simplemente se parece a la radio?

La aparición de los servidores de

radio por Internet refleja el

surgimiento de tecnologías de

streaming y avances recientes en

hardware de radio. Podemos

escuchar en nuestro ordenador de la

misma manera que una generación

anterior escuchaba con un receptor

de radio o un equipo HiFi. Y si

estamos conectados a Internet,

podremos recibir el sonido de

cualquier lugar del mundo.

La revolución de la radio por

Internet ha provocado una nueva

clase de oyentes y una nueva clase

de emisoras. Desde cualquier rincón

de Internet surgen ideas y exóticos

sonidos si sabemos dónde buscarlos.

En este número revisamos el

fenómeno de la radio por Internet,

tanto desde el punto de vista del

oyente como del de la emisora.

Dentro de su contenido

encontraremos temas de interés si

queremos inaugurar nuestra propia

emisora, o incluso si sólo queremos

sintonizar alguna.

El artículo titulado “Quédate con

la copla” describe cómo grabar,

editar y etiquetar un archivo de

audio para hacer podcasting usando

el editor de sonido de software

libre Audacity. También

revisaremos el streaming

de audio con un repaso

al servidor de

streaming Icecast.

¿Pensabas que Internet no daba para más revoluciones? Con la radio por Internet cualquiera puede montar

una emisora. Si quieres empezar a emitir radio o podcasts, o si sólo te interesa sintonizar la emisora perfecta,

échale un vistazo a nuestro tema de portada de este mes: Radio por Internet. POR JOE CASAD

Podcasting con Audacity. . . . . . . . . . . 12

Streaming con Icecast . . . . . . . . . . . . . 18

Last.fm. . . . . . . . . . . . . . . . . . . . . . . . . . 24

TEMA DE PORTADA

Page 12: Linux Magazine - Edición en Castellano, Nº 19

feed RSS, lo que significa que nos

podemos concentrar en la parte crea-

tiva de la producción. Por supuesto,

también tenemos la opción de configu-

rar y mantener nuestro propio feed RSS

si preferimos administrarlo nosotros

mismos. En cualquier caso, los detalles

de la configuración del RSS pueden

variar de un caso a otro. En este artí-

culo nos vamos a concentrar en el

contenido de audio. Mostramos cómo

crear, editar y etiquetar un archivo de

audio para podcast.

Primeros PasosAudacity es un editor de audio

maduro, libre y gratuito, que tiene ver-

siones para GNU/Linux, Windows,

Mac y cualquier otro sistema operativo

en el que seamos capaces de compi-

larlo. Aunque Audacity no es una

herramienta específica para podcas-

ting, su editor incluye un magnifico

conjunto de herramientas para los pod-

casters, ya sean principiantes o

avanzados.

Es bastante probable que exista una

versión de Audacity directamente de

los repositorios de nuestra distribución,

pero si no lo encontramos, o si quere-

mos la ultimísima versión, debemos

dirigirnos a la página Web de Audacity

[1]. En el momento de escribir este artí-

culo, la versión estable era la 1.2.3b, y

existe una beta disponible, la 1.3.0b.

Hay algunos severos avisos acerca de

pérdida de datos y cuelgues en relación

a la beta 1.3.0b, pero nosotros la hemos

usado sin incidentes. Las capturas de

pantalla de este artículo son de la beta

1.3.0b bajo KDE en un portátil con

Linspire. No solemos recomendar ver-

siones beta, por lo que, a pesar de que

no hemos tenido problemas con esta

beta 1.3.0b, oficialmente vamos a reco-

mendar el uso de la versión 1.2.4b.

El podcasting es una popular téc-

nica para distribuir contenidos

similares a la radio entre los

usuarios de Internet. Los programas en

podcast son sencillos de producir, y el

proceso de distribución basado en RSS

es muy cómodo y apenas supone carga

para el sistema. Aspirantes a artistas,

entrevistadores y analistas faltos de

tiempo o recursos para producir un

programa mediante tecnologías más

convencionales encuentran una

audiencia receptiva y mundial

mediante los podcasts. En este artículo

mostramos cómo crear nuestros pro-

pios archivos de podcast con el editor

de sonido Audacity.

El verdadero podcast se distribuye

directamente al usuario a través de un

feed RSS. Muchas compañías de hos-

ting ofrecen planes para podcasts. El

servicio de hosting de podcasts atiende

la parte técnica del mantenimiento del

PORTADA • Podcasting

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

Grabación de Podcasts con Audacity

QUÉDATE CON LA COPLAMostramos cómo crear nuestros propios podcasts con el sencillo editor libre, Audacity. POR JON WATSON

Grabación de Podcasts con Audacity

QUÉDATE CON LA COPLAMostramos cómo crear nuestros propios podcasts con el sencillo editor libre, Audacity. POR JON WATSON

Page 13: Linux Magazine - Edición en Castellano, Nº 19

El editor de sonido Audacity en una

enorme aplicación con suficientes cosas

interesantes dentro como para adecuarse

a proyectos de cualquier tamaño. El pod-

casting conlleva tareas no demasiado

complicadas, por lo que vamos a centrar-

nos sólo en un subconjunto de todas las

herramientas disponibles en Audacity. A

grandes rasgos, un podcaster va a usar

Audacity para grabar desde un micró-

fono, importar clips de audio de otras

fuentes, editar el flujo de datos de audio,

crear el archivo de audio final y por

último etiquetar el archivo.

Vamos a suponer que el lector ha ins-

talado ya Audacity, pero si encuentra

problemas con la compilación o la insta-

lación, la página de ayuda de Audacity

[2] contiene enlaces a los foros de

soporte, FAQs, documentación y tutoria-

les.

Un aspecto importante de Audacity es

el uso de archivos de proyecto. Cuando

guardamos una grabación por primera

vez, este editor intenta guardarla en su

formato XML *.aup. Es altamente reco-

mendable dejar que Audacity use este

formato mientras trabajamos con el pro-

yecto, en lugar de exportarlo a MP3 u

OGG en cada paso. El formato *.aup es

mucho más fácil de editar que un MP3 o

un OGG porque toda la información de

las pistas y el formato se guardan de

manera individual y sin comprimir. Edi-

tar un *.aup es mucho más fácil que

abrirnos camino dentro de un archivo

MP3 u OGG, donde tenemos todo com-

pactado.

Grabación de AudioEn la mayoría de los casos Audacity

detecta correctamente nuestro sistema

de sonido, y sólo

tenemos que apretar

el botón rojo de gra-

bación y comenzar a

hablar. Sin embargo,

deberíamos verificar

algunas configuracio-

nes antes de

lanzarnos para ase-

gurarnos que el

podcaster y la

audiencia puedan

usar el archivo.

En primer lugar, es

preferible grabar en

estéreo en lugar de

mono. Por defecto,

Audacity graba en mono. Si estamos

habituados con los editores de audio,

nos daremos cuenta rápidamente, pues

la representación en la interfaz muestra

sólo un canal mono en lugar de uno

doble en estéreo (véase Figura 1).

Para realizar el cambio de mono a

estéreo seleccionamos Edit | Preferen-

ces. A continuación escogemos la

pestaña Audio I/O y seleccionamos 2

(estéreo) en la lista desplegable Chan-

nels. Podemos grabar hasta 16 canales,

pero dada la relativa simplicidad del

podcasting, esto normalmente es inne-

cesario.

Si tenemos más de un dispositivo de

audio en nuestro equipo, Audacity

podría elegir el dispositivo equivocado.

Para indicarle el que debe seleccionar,

lo escogemos de una lista desplegable

tanto en la sección Playback como en

Record de la pestaña Audio I/O en Prefe-

rences (véase Figura 2).

Esto debería ser todo lo que necesita-

mos para dejar a Audacity listo para

grabar. Pulsamos el botón OK para

cerrar la ventana Preferences y volve-

mos a la pantalla principal de Audacity.

A lo largo del borde superior de la ven-

tana principal se sitúa una línea de

botones para comenzar a grabar, parar,

rebobinar y avance rápido. Para grabar

simplemente tenemos que pulsar el

botón rojo grande y comenzar a hablar

(véase Figura 3). Mientras hablamos,

deberíamos ver una pista parecida a la

mostrada en la Figura 1, junto con una

onda sonora color azul.

A pesar de que esta es la parte fácil,

dos detalles a tener en cuenta. Audacity

ofrece varias maneras de controlar el

nivel de volumen de voz. Algunas de

las herramientas son internas y otras

son parte del entorno Linux estándar,

como Kmix de KDE. Una de las herra-

mientas que ofrece Audacity es un

medidor arriba a la derecha de la ven-

tana principal (véase Figura 4).

Mientras grabamos, el medidor varía

indicando el volumen de nuestra voz.

Parece intuitivo probar a mantener el

medidor en la parte media, pero hemos

encontrado que tiene que estar puesto

al máximo a la derecha o no vamos a

ser capaces de escucharnos adecuada-

mente. Podemos controlar también el

nivel de entrada global con el control

deslizante situado en el centro, ligera-

mente a la izquierda, de los botones de

la barra de herramientas (véase Figura

3). Por último, cada pista tiene un

pequeño control de volumen de entrada

(uno con una barra con un “+” y un “-

” a la izquierda de cada pista, véase

Figura 1) que controla el volumen de

esa pista en concreto.

Tras mucho experimentar, y algunas

pruebas defectuosas, hemos llegado a

las siguientes conclusiones y filosofías

respecto a los ajustes. Lo recomendable

sería grabar todo el sonido para que

suene de manera adecuada en la mitad

del volumen de nuestro equipo. Recor-

demos que los oyentes van a escuchar

el programa en todo tipo de reproducto-

res y en todo tipo de entornos. El único

denominador común es que la mayoría

lo oirán con unos auriculares. Por

tanto, si nos suena de manera ade-

cuada con nuestros cascos, es

razonable pensar que los reproductores

de los oyentes tendrán controles de

volumen adecuados para hacer los

ajustes concretos necesarios.

Hemos encontrado que es mejor

hacer caso omiso a los medidores de

Audacity. Como hemos mencionado, en

la grabación tenía que estar completa-

mente a la derecha para tener un

volumen decente. Si lo dejamos en el

medio, puede que no nos oigan. Claro

que esto va a depender de cada caso,

ya que el sistema de sonido puede afec-

tar al medidor de manera diferente. A

continuación ponemos el medidor mos-

trado en la Figura 3 en 0.5 (en la mitad)

y lo dejamos ahí. Hacemos lo mismo

con los niveles de entrada individuales

de cada pista (Figura 1).

Vamos a dejar que KMix se preocupe

de nuestros niveles de sonido. La

Podcasting • PORTADA

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

Figura 1: Podemos reconocer una grabación en estéreo (panel

inferior) por la pista doble de audio.

Page 14: Linux Magazine - Edición en Castellano, Nº 19

Cuando importamos audio, y siempre

que sea posible, es mejor hacerlo en un

formato que esté sin compresión. Debe-

mos tener en cuenta que, al final del

proceso, vamos a crear un archivo MP3

u OGG, que son formatos de compre-

sión con pérdida. ¿Recuerda el lector la

paradoja con los archivos JPEG de fina-

les de los noventa? Muchos grafistas sin

experiencia editaban una imagen JPEG

y guardaban, volvían a editar y volvían

a guardar una y otra vez. Cada vez que

se grababa la imagen se perdía informa-

ción, con lo cual al final del proceso el

resultado era espantoso.

La misma idea es aplicable al impor-

tar audio. Si importamos audio ya

comprimido en MP3 en el proyecto, y

volvemos a guardarlo entero a un MP3

de nuevo, la parte importada, de

hecho, ha perdido información dos

veces. Generalmente vamos a intentar

importar sólo archivos WAV o AU sin

comprimir en los proyectos, pero no

siempre será posible. La regla general

es usar el archivo con la mayor calidad

posible que podamos.

Extrañamente, no podemos importar

un archivo nativo de Audacity *.aup en

nuestro proyecto. Si queremos importar

algo que hemos guardado en este edi-

tor, primero vamos a guardar la

grabación en cuestión como un WAV

sin comprimir y luego importamos ese

archivo WAV.

Editar el Archivo de AudioPocos podcasters hacen un programa

entero de un tirón. Lo normal es edi-

tarlo antes de sacarlo a la luz. No

importa lo bien o mal que salga, siem-

pre hay detalles difíciles de controlar,

como el ladrido del perro o el timbre de

casa. Algunos podcasters dejan estos

fallos, pero queda más profesional si

los eliminamos.

Existen tres herramientas que se usan

muy frecuentemente en Audacity. Son

los botones de parar y pausa, la

herramienta de desplazamiento en el

tiempo y el efecto de normalización. Y

menos frecuentemente también

tenemos el filtro de eliminación de

ruido, para eliminar algún ruido de

fondo no deseado.

Los botones de comienzo y pausa

operan de diversas maneras. Si pulsa-

mos el botón de parar al grabar, la pista

termina y la siguiente pulsación sobre

el botón play hace que Audacity

comience con una nueva pista. En cam-

bio, cuando pulsamos el botón de

pausa, la pista no termina y la siguiente

pulsación sobre play hace que Audacity

continúe la grabación en la misma

pista.

En general, es más fácil mover pistas

enteras arrastrando la parte izquierda

de éstas, y después soltarlas en su

nueva ubicación. Sin embargo, si

vemos que apretamos demasiado el

botón de stop, la cantidad total de pis-

tas pueden hacer que la situación

resulte complicada de manejar. Como

regla general, podemos presionar pausa

cuando tenemos que hacer algo que no

requiera edición posterior (como ir a

beber algo). Si hay un error más grave

(como el timbre de una puerta) que

necesite edición posterior, podemos

darle al botón de stop. Así será más

fácil encontrar los errores al final de

cada pista en lugar de buscarlos en

medio de la grabación.

A menos que todos en el programa

sean unos genios del timing, tendremos

interfaz no sólo es más fácil de usar,

sino que parece más tranquilizador

controlar esto a nivel de sistema

operativo que a nivel de aplicación.

Dentro de KMix, ponemos el micrófono

ligeramente por encima de cero (Figura

5) y habilitamos el Mic Boost.

Eso es todo. La única configuración

que hay que tocar de vez en cuando es

el control de nivel de entrada para pis-

tas concretas (véase Figura 1). En

ocasiones, cuando importamos un

fragmento de audio, su volumen

resulta ser demasiado alto o bajo, por

lo que tenemos que ajustarlo con el

control deslizante de la pista impor-

tada.

Importar Otro AudioUno se da cuenta después de pocos

programas que un show compuesto

sólo de voz llega a ser bastante abu-

rrido. Además, probablemente

querremos crear una intro que impor-

temos al comienzo de cada programa.

Nosotros hemos importado entrevistas

por Skype, clips de efectos sonoros,

mails de voz de oyentes y música pod-

safe de Magnatune. Que los contenidos

sean variados ayuda a que el programa

sea interesante y enganche.

Audacity puede importar formatos

WAV, MP3, OGG, AIFF, AU, Flac, Midi

y algunos otros más desconocidos.

Importar es tan sencillo como seleccio-

nar Project | Import Audio. Para

importar Midi, seleccionamos Project |

Import Midi. Si tenemos un archivo de

audio en un formato que no está direc-

tamente soportado por Audacity,

podemos probar suerte con Project |

Import Raw Data.

PORTADA • Podcasting

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

Figura 3: Los botones parecidos a los de un

vídeo están en la parte superior de la ven-

tana, como los de grabación, reproducción,

rebobinado y avance rápido.

Figura 2: Configuramos la reproducción, grabación y el playthrough en el cuadro Audacity

Preferences.

Page 15: Linux Magazine - Edición en Castellano, Nº 19

que mover pistas de un lado para otro.

Podemos usar esta herramienta con fre-

cuencia simplemente para dar un nexo

y unir pistas. La herramienta de despla-

zamiento en el tiempo se encuentra

entre los botones a la izquierda de los

botones parecidos a los de un vídeo.

Concretamente, es el botón con dos fle-

chas en él. Para movernos por la pista,

pulsamos el botón de desplazamiento

temporal. El botón permanece presio-

nado, y al mover el cursor por una pista

de la ventana principal de Audacity,

toma la apariencia de una doble flecha.

Situamos el cursor sobre la pista que

queremos mover y la arrastramos. Des-

afortunadamente Ksnapshot no captura

el cursor del ratón, por lo que no

hemos podido proporcionar una ima-

gen de este paso.

Puede que nada salve más el pellejo

que el efecto de normalización. Auda-

city incluye una impresionante lista de

efectos (véase el menú Effects), aunque

generalmente las funciones más usadas

son solamente las de normalización y

eliminación de ruido. Es importante

destacar que los efectos se supone que

deben aplicarse sobre la pista o selec-

ción de pista después de haber sido

grabadas. No se pueden usar mientras

se está grabando.

El efecto de normalización consigue

que la sección o pista seleccionada se

suavice de manera que los puntos altos

no sean tan altos y los puntos bajos no

sean tan bajos. Sólo hay dos opciones

en la herramienta de normalización,

Remove y DC offset and Normalize

maximum amplitude to -3 dB (véase

Figura 6). Funciona bien con ambas

activadas. Si normalizamos una pista,

deberíamos normalizarlas todas. Como

la herramienta sólo actúa sobre la

selección, tenemos que seleccionar

cada pista individualmente y ejecutar

la función. A veces si la diferencia de

pitch entre las voces de los presentado-

res es muy acusada, es recomendable

usar la normalización para preservar la

cordura de los oyentes. El único tipo de

audio que no vamos a normalizar es la

música. Suponemos que el músico sabe

más de audio digital que nosotros y que

ha compuesto su fichero de la manera

que él o ella ha querido. La normaliza-

ción aquí puede parecer un poco

presuntuosa.

La otra herramienta realmente útil es

la de eliminación de ruido (véase Figura

7). Esta herramienta puede sacarnos de

algún apuro. Una anécdota: en uno de

nuestros programas estábamos de viaje y

decidimos grabar parte de él dentro de

un coche mientras esperábamos un ferry

que nos llevaba a una isla. La batería del

portátil estaba en las últimas y tuvimos

que conectarla a un inversor de

corriente. No nos dimos cuenta hasta

más tarde, pero el inversor estaba intro-

duciendo un espantoso ruido de fondo

en la grabación. Los últimos 15 minutos

del programa parecían completamente

perdidos. Afortunadamente, el efecto de

eliminación de ruido funcionó, y aunque

no lo eliminó completamente, si que lo

restauró lo suficiente como para poderlo

usar en el programa.

La herramienta de eliminación de

ruido tiene que ejecutarse dos veces. La

primera es para tomar la muestra del

ruido de fondo que queremos eliminar y

la segunda es para realizar la verdadera

eliminación. El proceso es el siguiente:

1. Seleccionamos unos segundos de

audio de una pista que contiene sólo el

ruido de fondo que queremos eliminar.

2. Escogemos Effect | Noise Removal.

3. Pulsamos sobre el botón Get Noise

Profile. La ventana toma la muestra y

luego se cierra con unas florituras nada

intuitivas.

4. De nuevo, seleccionamos Effect |

Noise Removal del menú.

5. Y a continuación el botón Preview

para ver cómo suena la pista con el ruido

eliminado.

6. Si el sonido no es adecuado, juga-

mos con el control situado encima del

botón Preview para eliminar más o

menos ruido. Pulsamos sobre el botón

Preview de nuevo. Repetimos hasta que

estemos contentos con el resultado.

7. Pulsamos sobre el botón OK y el

ruido de fondo quedará eliminado.

Es importante señalar que el éxito de

esta herramienta depende profunda-

mente del tipo de ruido de fondo. Cuanto

más previsible sea el ruido, más posibili-

dades hay de que se elimine

adecuadamente. En el caso de la anéc-

dota comentada anteriormente, funcionó

muy bien porque era bastante predeci-

ble. Si intentamos eliminar el ruido de

una aceleración rápida de un coche, o el

de un claxon, las posibilidades de que la

herramienta pueda eliminarlas completa-

mente sob bastante bajas.

Creamos el Archivo deAudio FinalEl podcasting ya es suficientemente

viejo como para que haya evolucionado

Podcasting • PORTADA

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

Figura 5: Configuración del micrófono en

KMix.

Figura 4: El medidor situado en la esquina superior derecha de la ventana principal de Audac-

ity varía para mostrar el volumen de nuestra voz.

Page 16: Linux Magazine - Edición en Castellano, Nº 19

Antes de codificar nada, sin

embargo, debemos asegurarnos que la

codificación debe hacerse con los ajus-

tes óptimos. El primer ajuste

importante es la tasa de muestreo. Para

verla pulsamos sobre la pestaña File |

Preferences | Quality y miramos la lista

desplegable Default Sample Rate. De

una manera increíblemente simple, la

tasa de muestreo controla la frecuencia

con la que se toman las muestras de la

fuente original para hacer la digitaliza-

ción. Esta frecuencia se mide en Herzios

(Hz). Cuanto mayor sea la tasa de mues-

treo, mayor será la calidad.

Desafortunadamente, una tasa de mues-

treo mayor también significa un archivo

mayor. Como nuestros oyentes van a

descargar estos archivos desde Internet,

cuanto menor sea el archivo, mejor. La

configuración de tasa de muestreo afecta

tanto al MP3 como al OGG.

La tasa de bits es otra configuración

que juega un papel importante en la

calidad del archivo. Por contra a la tasa

de muestreo, Audacity tiene configura-

ciones separadas para las tasas de bits

de MP3 y OGG.

Para llegar a la configuración de tasa

de bit, seleccionamos File | Preferences

y elegimos la pestaña Format. Los apar-

tados en los que estamos interesados

son OGG Export Setup y la sección MP3

Export Setup.

El OGG Export de Audacity consiste en

una única barra que varía de 0 a 10. La

configuración de tasa de bits en MP3

consiste en una lista desplegable que

lista un rango desde 16 Kbps hasta 320

Kbps.

El Santo Grial del podcasting es el

compromiso entre un pequeño tamaño

de archivo para distribuir y un nivel de

calidad decente. No existe una única

combinación de tasa de bits y tasa de

muestreo que funcione con todos los

podcasts. La configuración correcta

depende mucho del contenido.

Un podcast sólo de voz, por ejemplo,

puede funcionar bien codificado a

22050Hz de tasa de muestreo y tasa de

bits de 48Kbs. Un podcast musical

debería codificarse con mucha mayor

calidad, a unos 96000Hz de tasa de

muestreo y 128Kbs como mínimo de

tasa de bits. Estas configuraciones

representan los niveles por arriba y por

abajo, debiéndose encontrar el ade-

cuado en cada caso particular.

Nuestro programa JaK Attack! es fun-

damentalmente conversación con una

única canción en medio del show.

Como esta parte musical es de sólo 2 ó

3 minutos, no hay demasiada ventaja

en codificar el archivo entero como si

fuese música. Por tanto, normalmente

se codifica a 22050 Hz y a 48Kbps (para

el MP3) o nivel cero (para el OGG). Un

programa típico de JaK Attack! ocupa

unos 5 ó 6 MB para 15 minutos. Proba-

blemente el lector haga ajustes en

función del tipo de contenido. Si tene-

mos más música, deberíamos codificar

a una tasa mayor, y menor en caso con-

trario. La clave es la experimentación.

Si probamos con pequeñas grabaciones

esto nos servirá de muestra para ver el

tamaño de los archivos y las diferencias

en calidad generadas con distintas con-

figuraciones.

En cualquier caso, una vez que haya-

mos configurado nuestras tasas de

muestro y de bits, codificamos el

archivo seleccionando File | Export as

MP3 o File | Export as OGG Vorbis.

Etiquetar el ArchivoLas etiquetas ID son pequeños frag-

mentos de información incrustados

en el archivo de audio. La mayoría de

los reproductores digitales son capa-

ces de leer estas etiquetas y mostrar

la información contenida en la panta-

lla mientras se reproduce el archivo.

Audacity tiene una aplicación interna

para aplicar etiquetas ID, pero no está

del todo pensada para podcasts, por

lo que no es una herramienta per-

fecta.

Para etiquetar nuestro archivo,

seleccionamos Project | Edit ID3 Tags

(véase Figura 8). Nótese que estas eti-

quetas sólo se aplican a archivos MP3

y no a archivos OGG. Tendremos que

recurrir a un programa etiquetador

externo como EasyTag [3] para eti-

quetar nuestros archivos OGG Vorbis.

la expectación levantada. Cuanto más

cerca estemos de lo que esperan nues-

tros oyentes, más fácil será que se

suscriban al programa. Existen dos

extensas áreas a las que prestar aten-

ción: el tipo de archivo y su calidad.

Si no fuésemos entusiastas del soft-

ware libre no nos plantearíamos un

estudio acerca del tipo de archivo en

relación al podcasting. El formato MP3

es, de lejos, el más usado. Está sopor-

tado por todos los editores digitales y

por todos los reproductores de música.

¿Por qué querría nadie producir un pro-

grama en otro formato?

El MP3 es un formato propietario que

pertenece a Thomson y al Instituto

Fraunhofer. Mucha gente no es cons-

ciente de que no es un formato libre

debido a su uso masivo. De hecho, yo

mismo no me di cuenta hasta que

Richard Stallman vino a mi programa

“GNU/ Linux User Show” número 13 y

me preguntó porqué no empezaba a

producir programas en el formato OGG

Vorbis. A partir de ese momento

comencé a realizarlos en OGG además

de MP3.

Me gustaría realizarlo sólo en for-

mato OGG, pero seguro que eso sería

un suicidio desde el punto de vista del

podcaster. Simplemente no hay sufi-

ciente soporte en los reproductores ni

en los oyentes para este formato aún.

Ciertamente existen algunos reproduc-

tores que pueden reproducir OGG

Vorbis, pero no son muchos, e incluso

algunos de ellos no son capaces de

reproducir OGG Vorbis con tasa de bit

variable.

Nuestras estadísticas muestran que

sólo un 25% de nuestros oyentes des-

cargan el OGG. El resto prefiere MP3.

Recomendamos producir al menos el

MP3, y si es posible, también OGG.

Debido a problemas de licencias

con MP3, Audacity no puede codificar

archivos MP3 por defecto. Para poder

codificarlos necesitamos el archivo

libmp3lame.so y además debemos

indicarle a Audacity dónde puede

encontrarlo. Descargamos

libmp3lame.so a una ubicación cono-

cida de nuestro equipo. Luego

usamos el botón de File | Preferences |

File Format tab | Find Library para lle-

var a Audacity hasta allí. Audacity

puede codificar OGG Vorbis directa-

mente.

PORTADA • Podcasting

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

Figura 6: La herramienta de normalización

nos ofrece sólo dos opciones.

Page 17: Linux Magazine - Edición en Castellano, Nº 19

Nosotros, particularmente, usamos Eas-

yTag para etiquetar tanto los MP3 como

los OGG, pero no vamos a hablar en este

artículo de EasyTag. La razón por la cual

no usamos la herramienta interna de

Audacity es doble. Por un lado, la

poblada lista de géneros no tiene, por

desgracia, el apartado “podcast”. Por

otro lado, no etiqueta, como hemos

dicho, los archivos OGG. EasyTag tiene

un formulario más flexible para las eti-

quetas y funciona tanto sobre los MP3

como sobre los OGG.

Con independencia de la herramienta

que usemos, las etiquetas que debería-

mos rellenar como mínimo son:

• Artista: nuestro nombre. Al igual que con

el blogging, la gente relaciona mejor un

nombre real que un seudónimo.

• Título: el nombre del programa. Esta eti-

queta genera scrolls por la pantalla del

reproductor mientras se escucha el pro-

grama. Se considera una buena práctica

hacer referencia a la fecha del programa

en este campo antes del título. Particular-

mente, nosotros no lo hacemos, pero

está altamente recomendado.

• Género: seleccionamos “podcast” si

podemos. Si no, puede recurrirse a

“other”.

Existen muchos otros campos ID, pero

los de arriba constituyen los tres que

más deberíamos tener en cuenta.

Paso Final: RSSNuestro feed RSS para el podcast es el

elemento mágico que hace que el

programa se pueda “podcastear”. Sin un

feed RSS adecuadamente formateado

para distribuir el programa, nuestros

oyentes no serán capaces de suscribirse

con un podcatcher. Esto no significa

necesariamente que estemos fuera de

juego, ya que nuestros oyentes pueden

aún hacer la descarga directa, aunque un

cierto segmento de éstos prefiere el

formato de podcatching.

Simplemente le ponemos podcatcher

en el nombre del género del lector RSS

que sea capaz de reconocer el elemento

<enclosure> de RSS 2.0. El elemento

<enclosure> anuncia la presencia

desde un URI hasta un archivo binario.

Un podcatcher [4] tiene la habilidad de

verificar en los feeds suscritos en busca

de nuevos programas, y si encuentra

alguno, de descargar el programa hasta

nuestro equipo.

Los diferentes podcatchers tienen dife-

rentes funcionalidades, por encima o por

debajo de las básicas, pero cualquier

podcatcher debe ser capaz de llevar a

cabo la tarea “check and download”.

Algunos de los podcatchers más popula-

res son Bashpodder y las variantes GNU/

GPL para GNU/Linux, e iTunes para

Windows o Mac. amaroK tienen también

algunas funcionalidades avanzadas de

podcatching.

Para los geeks más detallistas, como

nosotros, el elemento enclosure es un

subelemento de <item> que tiene tres

atributos requeridos: el protocolo (debe

ser http) y URI al archivo binario,

tamaño en bytes y el formato del

archivo. Un enclosure típico sería algo

como:

<enclosure

url=”http://U

www.podcastingrocks.com/U

media/mypodcast_20060224_12.ogg

length=”16257377” U

type=”audio/x-ogg”>

o

<enclosure

url=”http://U

www.podcastingrocks.com/U

media/mypodcast_20060224_12.mp3

length=”16257377” U

type=”audio/mpeg”>

La mayoría, si no todos, de los hosting de

podcasts generan un feed RSS

adecuadamente formateado como parte

del servicio. Si optamos por albergar

nosotros mismos nuestros programas,

algunas herramientas de blogware

pueden crear elementos enclosure, por

ejemplo Feedburner. Probablemente el

mejor lugar para obtener información de

primera de cómo funcionan el RSS y el

podcasting juntos es el artículo de la

Wikipedia acerca del Podcasting [5] o la

de RSS Enclosures [6].

ConclusiónUna vez que creamos, editamos, codifica-

mos y etiquetamos nuestro programa,

todo lo que tenemos que hacer es buscar

un lugar donde subirlo y proporcionar un

feed RSS adecuado. ¡Feliz Podcasting! �

Podcasting • PORTADA

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

[1] Audacity: http://audacity.sourceforge.

net

[2] Página de ayuda de Audacity: http://

audacity.sourceforge.net/help/

[3] EasyTag: http://easytag.sourceforge.

net/

[4] “Audio Delivery: Podcatching with-

out an iPod,” Linux Magazine Inter-

nacional nº56, Julio 2005 www.

linux-magazine.com/issue/56/

Podcatching.pdf

[5] Podcasting en la Wikipedia: http://en.

wikipedia.org/wiki/Podcasting

[6] RSS enclosures en la Wikipedia:

Http://en.wikipedia.org/wiki/

RSS_Enclosures

RECURSOS

Figura 7: La herramienta de reducción de

ruido ha sido la salvación de muchos pod-

casts.

Figura 8: Audacity viene con unaherramienta de etiquetado interna.

Page 18: Linux Magazine - Edición en Castellano, Nº 19

Para los sistemas Linux existen diversos ser-vidores de streaming, tanto comerciales comode código abierto. El servidor Quicktime Strea-ming de Apple, producto comercial diseñadopara ejecutarse en los servidores OS X, se basaen el servidor de Apple Darwing StreamingServer. Este servidor [1] es un proyecto decódigo abierto que se ejecuta igualmente enLinux/BSD, OS X y Windows. La versióncomercial de Apple ofrece una buena integra-ción con las utilidades del servidor OS X ysoporte de Apple. El servidor Darwin carecede soporte oficial, pero posee una comunidadcreciente accesible vía IRC, listas de correo yforos.

Similarmente, RealNetworks ofrece unasolución de streaming comercial llamada

Helix Server [2], basada en el servidor HelixDNA Server, cuyo código fuente es liberadotanto por RealNetworks Community y Real-Networks Public Source. Aunque la versióncomercial incluye soporte para la mayoría delos formatos, la oferta de la versión de códigoabierto está limitada a MP3, RealAudio y Real-Video.

Una buena versión estable de un servidorde streaming para los usuarios de Linux esIcecast2 [3]. Icecast es un proyecto de códigoabierto soportado por Xiph.org, unaorganización dedicada a “…proteger lasfundaciones de multimedia de Internet delcontrol de los intereses privados” [4]. Sepuede descargar el código fuente de Icecastdesde [3], pero puede ser que la distribución

En Internet se puede encontrar el audiode diversas formas, desde enlaces ordi-narios a clips sonoros, a podcasts

desarrollados mágicamente con la tecnologíapush basada en RSS. Muchos oyentes, sinembargo, prefieren contenidos en directo entiempo real.

Las retransmisiones de radio por Internetllegan a su PC de casa por cortesía de los servi-dores de streaming. En Internet se puedenencontrar servidores de streaming que trans-miten audio o vídeo en directo, listaspregrabadas o bien contenidos bajo demanda.La mayoría de los servidores de streaming pro-porcionan búfers de fuentes y ofrecencompresión para reducir los costes del anchode banda.

PORTADA • Streaming

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

Streaming de Audio con Icecast y Muse

RADIO MICASAPara la emisión en directo de radio por Internet es necesario un servidor de streaming. Vamos a mostrar en

este artículo los primeros pasos para comenzar con Icecast, una alternativa de código abierto para Linux.

POR DANN S. WASHKO

Page 19: Linux Magazine - Edición en Castellano, Nº 19

de Linux que se esté utilizando ya traiga elpaquete de Icecast listo para su instalación.En el momento de escribir este artículo laversión actual de Icecast2 es la 2.3.1.

¿Qué es Icecast?Un servidor de streaming como Icecast estáa la escucha de las peticiones de las cone-xiones entrantes por parte de los clientes deInternet, conectando al cliente a un flujo dedatos multimedia. El servidor Icecast puedetransmitir datos en formato ogg vorbis, oggtheora y mp3 sobre HTTP.

En un escenario típico de streaming losoyentes realizan una conexión con el servi-dor utilizando un navegador normal ycorriente y el stream comienza a sonar en elordenador por medio de un reproductormultimedia como AmaroK o XMMS.

Por supuesto que el stream de audio queIcecast manda al cliente debe originarsedesde alguna parte. Icecast es capaz dereproducir ficheros de audio desde una lista

de reproducción. Pero quizás es más comúnver a Icecast recibiendo los datos de audiodesde una aplicación externa denominadafuente de stream o cliente fuente. Esta fuentetransmite los datos a Icecast e Icecast haceque el stream esté disponible al mundo através de las conexiones cliente de Internet.En el caso de una retransmisión en directo,el cliente fuente podría ser una aplicaciónque interactúe directamente con el interfazde audio donde los micrófonos esténconectados. En el caso de audiopregrabado, el cliente fuente simplementepodría actuar como un reproductor demúsica que transmite un stream de audio aIcecast.

En este artículo se va a describir cómo seinstala y configura Icecast, además se verácómo hay que configurar un cliente fuentepara que le envíe su stream de salida alservidor Icecast. Se encuentran disponiblesdiversos clientes fuente, incluido IceS,desarrollado por el equipo de Icecast. IceS

se verá más adelante, y además se mostrarála forma de configurar un stream utilizandola fuente cliente MuSE.

Instalación de IcecastSi se va a compilar desde los ficherosfuente, Icecast requiere que se tengan laslibrerías de desarrollo libxml, libxslt, liboggy libvorbis. Por defecto Icecast requiere curl,pero se puede optar por compilarlo sin curlusando el parámetro -without-curl. Sin curl,Icecast no puede realizar ninguna interac-ción con el Servidor de Directorios; es decir,no se podrá anunciar el stream en las listaspúblicas YP de Icecast.

Para los streams de video theora serequieren las librerias Theora (véase ezs-tream [5] para la fuente cliente theora). Paralos streams mp3, se debe tener instaladoLame [6]. Lo más probable es que las carac-terísticas opcionales se detecten por el scriptde configuración, así que no hará falta aña-dirle los parámetros adicionales.

Streaming • PORTADA

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

01 <icecast>

02 <limits>

03 <clients>5</clients>

04 <sources>2</sources>

05 <threadpool>5</threadpool>

06 <queue-size>524288</queue-size>

07 <client-timeout>30</client-timeout>

08 <header-timeout>15</header-timeout>

09 <source-timeout>10</source-timeout>

10 <burst-on-connect>1</burst-on-connect>

11 <burst-size>65535</burst-size>

12 </limits>

13

14 <authentication>

15 <source-password>sourcepassword</source-password>

16 <relay-password>relaypassword</relay-password>

17 <admin-user>admin</admin-user>

18 <admin-password>changeme</admin-password>

19 </authentication>

20

21 <hostname>myhost.org</hostname>

22

23 <listen-socket>

24 <port>8000</port>

25 </listen-socket>

26

27 <mount>

28 <mount-name>/myshow</mount-name>

29 </mount>

30

31 <fileserve>1</fileserve>

32

33 <paths>

34 <basedir>/usr/local/share/icecast</basedir>

35 <logdir>/usr/local/var/log/icecast</logdir>

36 <webroot>/usr/local/share/icecast/web</webroot>

37

<adminroot>/usr/local/share/icecast/admin</adminr

oot>

38 <alias source=”/” dest=”/status.xsl”/>

39 </paths>

40

41 <logging>

42 <accesslog>access.log</accesslog>

43 <errorlog>error.log</errorlog>

44 <loglevel>1</loglevel>

45 <logsize>10000</logsize>

46 </logging>

47

48 <security>

49 <chroot>0</chroot>

50 </security>

51 </icecast>

Listado 1: Fichero de configuración icecast.xml de ejemplo

Page 20: Linux Magazine - Edición en Castellano, Nº 19

imprescindible que se edite el fichero deconfiguración de Icecast y que se cambie lacontraseña para los clientes fuente y para lasestaciones repetidoras además de la cuentadel administrador.

Los usuarios de Arch Linux deben tener encuenta que los subdirectorios de los ficherosde registro no están creados. Habrá que crearmanualmente el directorio, que por defecto es/var/log/icecast.

Configuración de IcecastEl fichero de configuración por defecto, ice-cast.xml está ubicado en /usr/local/etc, si seinstala desde los ficheros fuente. La mayoría

de los gestores de paquetes probablementelo instalen o en /etc o en un subdirectoriode /etc. La ubicación real del fichero no esde mucha importancia, ya que se puedeespecificar la ruta del fichero deconfiguración cuando se ejecute Icecast.

El Listado 1 muestra un ficheroicecast.xml simple. Cuando se edite elfichero icecast.xml, hay que asegurarse deque todos los elementos xml estén cerra-dos, que las etiquetas xml estén bienescritas y que solamente se pongan aqué-llas que sean válidas, y que todos loselementos que estén anidados se encuen-tren cerrados de forma correcta.

Los valores más importantes que hayque establecer en el fichero icecast.xml seencuentran en la sección Authentication.Es preciso asegurarse de establecer unascontraseñas nuevas para las fuentes, losrepetidores y la administración, así comopara el usuario admin, que se emplea paralas funciones administrativas a través deHTTP. Icecast permite administrarse pormedio de páginas webs, lo que es muchomás sencillo que la sintaxis de administra-ción. Para mayor información acerca de lasintaxis de administración, consúltese ladocumentación de Icecast. La contraseñapara los repetidores es necesaria para losservidores repetidores. (Véase el cuadrotitulado “Repetidores Icecast”).

Los parámetros de la sección Authenti-

cation son los únicos valores que hay queestablecer para empezar a trabajar. El restode los parámetros se pueden dejar con susvalores por defecto, pero se recomiendaque se personalice con los valores adecua-dos para cada situación. Para másinformación sobre los parámetros deconfiguración de Icecast véase el cuadrotitulado “Configuración de Icecast”.

Si se desea servir ficheros estáticos conel servidor Icecast, el valor de fileserver

debería establecerse a 1. Si se establece a 0se impide que se puedan transmitir fiche-ros estáticos. Estos ficheros se debenubicar en el directorio webroot y especifi-car en la URL del cliente como una rutarelativa desde el directorio webroot. Losficheros ogg-vorbis, ogg-theora y mp3 pue-den servirse de esta forma. Además, sepuede crear una lista de reproducción quecontenga una mezcla de formatos de fiche-ros diferentes. Una lista de reproduccióndebería contener una lista de puntos demontajes y terminar con la extensión.m3u. Un ejemplo de lista podría ser elsiguiente:

Tras la descarga y la descompresión de losficheros fuente, se instala Icecast mediante elsiguiente proceso de tres pasos:

./configure

make

make install

Por defecto, Icecast se instala en el directorio/usr/local. Si ésta se realiza utilizando el gestorde paquetes será bastante más sencillo. Losusuarios de Debian deben tener en cuenta losiguiente: por defecto, Icecast está deshabili-tado en /etc/default/icecast2. Antes dehabilitarlo y de que se ejecute el servicio, es

PORTADA • Streaming

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

La primera sección del fichero

icecast.xml establece algunas restriccio-

nes para el servidor. El ancho de banda

determinará el número de clientes a los

que se les permitirá conectarse simultá-

neamente. Hay que tener en cuenta que

los streams fuente también consumirán

ancho de banda. Si estos valores se esta-

blecen con un valor muy alto se corre el

riesgo de interrumpir el flujo de datos o

causar problemas a las conexiones de

los clientes.

Threadpool indica el número de hilos

separados que el servidor debe iniciar

para manejar las conexiones de los clien-

tes. El valor por defecto es cinco, pero

puede que sea necesario aumentarlo

para poder soportar flujos altos de trá-

fico. No hay que incrementar

excesivamente este valor, ya que se

corre el riesgo de quedarse sin recursos

en el servidor.

Queue-size es el valor máximo, expre-

sado en bytes, de memoria a reservar

para la cola de cada cliente. Se pueden

ocasionar problemas con las colas

debido al ancho de banda o a las inte-

rrupciones de la red. El servidor Icecast

mantiene una cola separada para cada

usuario. Si la cantidad de datos de la cola

excede el valor máximo queue-size, se

desconectará al cliente.

Los tres valores umbrales: client-timeout,

header-timeout y source-timeout se deben

dejar a sus valores por defecto. De acuerdo

con la documentación de Icecast, client-

timeout no se utiliza. Header-timeout se

refiere al intervalo entre la conexión inicial

del cliente y la solicitud de contenido.

Source-timeout indica cuanto tiempo hay

que esperar cuando la conexión fuente

finaliza antes de cerrar la conexión y el

punto de montaje. Todos estos valores vie-

nen expresados en segundos.

Burst-on-connect enviará una ráfaga de

datos de audio al cliente en la conexión.

Esto ayuda a reducir el tiempo de

retraso que el cliente podría experimen-

tar debido al búfer que mantienen los

reproductores multimedia. Como el

tiempo total desde la conexión hasta

que el cliente recibe el contenido se

reduce, la implementación de Burst-on-

connect introducirá una pequeña laguna

en el stream del cliente.

Burst-on-connect se activa con un 1 y se

desactiva con un 0. Burst-size es el

tamaño en bytes de la ráfaga de datos.

El valor por defecto es de 65535 bytes

(64Kb), que debe ser suficiente.

Hostname es bastante evidente, aquí se

introduce el nombre del servidor o su

dirección IP. Icecast usa este valor para

crear la URL de las listas de reproduc-

ción y para las listas en los directorios

YP. YP son las siglas de Yellow Pages

(Páginas amarillas). Hay que recordar

que Icecast tiene que compilarse con el

soporte curl con idea de poder utilizar

YP. Xiph.org posee un directorio YP para

streams Icecast. Para incluir un stream

en el directorio YP de Icecast, hay que

consultar la documentación o los

comentarios del fichero de

configuración proporcionado con los

ficheros fuente de Icecast.

listen-socket establece el puerto desde el

que el servidor Icecast aceptará las

conexiones de los clientes. Aunque se

puede utilizar cualquier puerto por

encima del 1024, la mayoría de los servi-

dores Icecast normalmente utilizan los

puertos entre el 8000 y el 8010. A menos

que sea imprescindible su modificación,

se debe dejar el valor 8000. Los clientes

requerirán el número del puerto cuando

intenten conectarse al servidor.

Configuración de Icecast

Page 21: Linux Magazine - Edición en Castellano, Nº 19

http://mystream.org:8000/U

intro.ogg

http://mystream.org:8000/U

song1.ogg

http://mystream.org:8000/U

song2.mp3

Es posible mezclar diferentes tipos de ficherosen la lista de reproducción. Ésta requiere quelos tres ficheros se localicen en el directoriowebroot.

El resto de las secciones de configuracióntienen que ver con las rutas y los registros. Lomás probable es que no haya que modificarestos valores, pero hay que tenerlos en cuenta,particularmente si se ha instalado desde losficheros fuente utilizando Arch Linux. La rutade los ficheros de registro podría no existir, porlo tanto se requeriría la creación de la estruc-tura de ficheros manualmente. El valor deloglevel podría ayudar con los problemas dedepuración del servidor, de los streams fuen-tes o de los repetidores. El valor establecido enel ejemplo tan sólo informa de los errores. Sise están teniendo problemas, puede incre-mentarse el valor a 4 para las labores dedepuración.

Ejecución de IcecastUna vez que el fichero de configuración ice-cast.xml haya sido configuradoapropiadamente, es hora de ejecutar el ser-vidor Icecast. No hay que ejecutarlo comoroot. Si se ha instalado con el gestor depaquetes, se habrá creado un usuario ygrupo denominados icecast. Si es este elcaso, simplemente con la ejecución delscript (para los usuarios de Debian:/etc/init.d/icecast start) debería ejecutarse elservidor. Si se ha instalado desde los fiche-ros fuente, se puede optar por variasopciones.

Primero, hay que asegurarse de que sehaya creado el subdirectorio de registro

donde el elemento logdir indi-que en el fichero deconfiguración. Segundo, hayque decidir qué cuenta deusuario se utilizará para ejecu-tar el servidor (se puedencrear un usuario y un gruponuevo para este propósito).Hay que establecer el usuarioy el grupo propietarios deldirectorio de registro de ice-cast al usuario y grupo queejecutará el servidor Icecast yasegurarse de que estos usua-rio y grupo poseen permisosde escritura del directorio deregistro y los ficheros bajo eldirectorio de registro. Comoroot:

su [user] -c ‘U

[path_to_icecast_binary] U

/icecast U

-c [path_to_configuration] U

/icecast.xml &’

su iceuser -c U

‘/usr/local/bin/icecast -c U

/usr/local/etc/icecast.xml’

Por otro lado, si se ha conectado al sistemacon la cuenta del usuario con el que se deseaejecutar Icecast, simplemente hay que ejecu-tarlo bajo la cuenta actual:

[path_to_icecast_binary] U

/icecast -c U

[path_to_configuration] U

/icecast.xml &

/usr/local/bin/icecast -c U

/usr/local/etc/icecast.xml

Si se ha establecido el elemento fileserver a 1,puede comprobarse rápidamente el servidorcopiando un fichero .ogg al directorio webroot

y conectarse al servidor con un reproductormultimedia desde otro sistema. Por ejemplo,usando xmms, simplemente hay que escogerque reproduzca un sitio introduciendo lasiguiente URL:

http://[url or ip of server]: U

8000/yourfile.ogg

http://myhost.org: U

8000/hellow.ogg

La documentación de Icecast recomiendaque se ponga la extensión .ogg para cadapunto de montaje o ficheros .ogg. Algunosreproductores multimedia podrían no proce-sar de forma adecuada el stream como un

fichero .ogg a menos que se haya especifi-cado la extensión.

Añadiendo un Cliente FuenteAhora que el servidor Icecast se está ejecu-tando, es hora de conectarse a algunas fuentesexternas. Existen diversos programas clientesque son capaces de proporcionar una fuente

Streaming • PORTADA

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

Figura 1: La ventana del canal MuSE con dosficheros en cola.

Figura 2: Tras rellenar la información del servidor Icecastse puede comenzar a realizar streaming!

Si se monta un servidor Icecast y con el

tiempo sus streams se hacen muy

populares comenzarán a notarse las

limitaciones del ancho de banda, es el

momento de añadir un servidor

repetidor. Icecast ofrece dos clases de

repetidores: Master-Slave y Single-

Broadcast. Un repetidor Master-Slave

hace una imagen de todos los puntos

de montaje configurados en el servidor

maestro en el servidor esclavo. Los

puntos de montaje son críticos si se

planea tener repetidores,

particularmente si se tiene un servidor

esclavo Icecast con imágenes de todos

los puntos de montaje. El parámetro

mount del Listado 1 muestra un punto

de montaje simple sin ningún

parámetro. El montador hace uso de

los valores por defecto y de los valores

especificados en las otras secciones del

fichero de configuración. Puede aceptar

diversos parámetros, incluyendo

contraseñas específicas, copias de las

fuentes (por si la fuente original no

estuviese disponible), límites, ficheros

de audio con las entradillas y mucho

más.

Repetidores Icecast

Page 22: Linux Magazine - Edición en Castellano, Nº 19

decide probar Dynebolic para el servidor y elcliente fuente, habrá que usar dos sistemasseparados. No se puede conectar MuSE y elservidor Icecast ejecutándose ambos en elmismo sistema.

El código fuente de MuSE está disponibleen el sitio web Dyne.org, junto con los

paquetes para Slackware, Debian, Redhat yOS X. Para compilar MuSE desde los ficherosfuente con un cliente gráfico, hará faltaGTK+, junto con las librerías de desarrollolibxml y glib. MuSE tiene una interfaz basadaen ncurses (que requiere que se tenganinstaladas las librerías ncurses [9]) y puedeejecutarse también como una aplicación delínea de comandos. Se recomienda lainstalación de Lame para el soporte destreams mp3. MuSE también puede utilizar elformato ogg-vorbis si están instaladas laslibrerías ogg y vorbis. Además, el soporte paralos ficheros de sonido sin compresión requiereque está presente la librería libsnd.

Hay que tener cuidado de no confundir laaplicación MuSE de Dyne.org con el proyectodel secuenciador MusE MIDI/Audio. (http://

www.muse-sequencer.org). Es preciso estarseguros de no tener instalado MusE, ya que delo contrario la instalación de MuSE no sobres-cribirá ningún fichero de MusE. Por ello, si setiene instalado el secuenciador MusE MIDI/Audio, lo más seguro es que se desee configu-rar MuSE para que se instale en su propiaestructura de directorios:

./configure -prefix=/opt/MuSE

Una vez instalado, simplemente se ejecutacon el comando: muse. La ventana principalde MuSE (Figura 1) aparecerá con seis

de datos para el servidor Icecast. El equipo deIcecast ofrece IceS. IceS es una utilidad de lalínea de comandos que se configura utili-zando un fichero XML. La documentación deIceS contiene ficheros de configuración deejemplo. (Si se está instalando IceS desde unpaquete, se deberían encontrar estos ficherosen el paquete de la documentación doc o en eldirectorio share). Se puede copiar el fichero deconfiguración deseado al directorio home delusuario y editarlo según las necesidades. Esespecialmente importante introducir los deta-lles del módulo y del servidor. Cuando sehayan hecho los cambios pertinentes alfichero de configuración, se puede ejecutarIceS:

ices configfile.xml

La configuración de IceS está bastante deta-llada; hay que asegurarse de leer ladocumentación cuidadosamente.

MuSE como FuenteSi se quiere comenzar rápidamente con uncliente con una interfaz gráfica, entonces hayque probar MuSE de Dyne.org [7]. MuSE esun motor múltiple de streams que forma partede la distribución Linux multimedia de Dynedenominada Dynebolic [8]. La forma másfácil de comenzar con MuSE es descargando yejecutando Dynebolic. Dynebolic incluye unservidor Icecast y la capacidad de editar fácil-mente los ficheros de configuración. Si se

PORTADA • Streaming

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

Figura 3: La página de información general de la interfaz web de Icecast muestra información

sobre los puntos de montaje para permitir que los clientes se conecten fácilmente.

Figura 4: La administración es sencilla con la interfaz web de Icecast. Se puede utilizar la

página de estadísticas globales del servidor (Global Server Stats) para comprobar el estado

actual del servidor.

Page 23: Linux Magazine - Edición en Castellano, Nº 19

botones en la parte superior, con barra decontrol y una ventana de canal. Se puedenañadir ficheros multimedia en el canalpulsando el botón derecho del ratón en laventana. Pueden añadirse más canalespresionando el segundo botón de la partesuperior. Para eliminar los canales, hay quepulsar el icono X en la esquina inferiorizquierda. La Figura 1 muestra un canal enMuSE con dos ficheros multimedia encolados.A la izquierda de la ventana del canal hay unapalanca de control de volumen que facilita elcontrol del volumen del fichero, permitiendo,al reducirlo, hablar por encima. Debajo de laventana del canal está la opción para lareproducción individual de los ficheros delcanal, para hacer una reproducción en buclede un fichero específico para que sereproduzca repetidamente o para reproducir lalista continuamente. Si se está actuando endirecto y se desea tener música de fondo,habrá que encolar los ficheros de audio yseleccionar la opción de bucle, a continuaciónsólo hay que ajustar el volumen de formaadecuada.

Además de los ficheros, se pueden encolarotros streams. El orden en la lista de mediospuede ser ajustado con sólo pulsar y arrastraren la lista, y los ficheros encolados puedenborrarse seleccionándolos y marcando laopción de borrado del menú que aparece traspulsar el botón derecho del ratón.

Los botones del micrófono (tercero) y elaltavoz (cuarto) conmutan la fuente deentrada de audio. Ambos botones puedenactivarse al mismo tiempo. Por defecto, tansólo el botón del altavoz está activo, lo quehace que sólo se envíe al servidor el contenidode la lista. Pulsando el micrófono se enviará elaudio de la línea de entrada de la tarjeta deaudio del sistema. El quinto botón, vumeter

proporciona un vúmetro gráfico de modo quepueda echársele un vistazo a los niveles.

Una vez que se haya establecido lo que sedesea transmitir, el primer botón, “Let’sStream”, mostrará la ventana deconfiguración del servidor de streaming(Figura 2). MuSE puede enviar streams mp3y/o ogg-vorbis. Pueden añadirse servidoresadicionales a cada sesión pulsando la opción“Add Server” en la parte superior de la ven-tana y escogiendo entre Lame (mp3) u ogg.

Antes de poder enviar el stream al servidor,hay que rellenar la información del servidoren la tercera de las ventanas de la parte deabajo. Para Host, se introduce la URL (sin elhttp://) o la dirección IP del servidor destreaming y se verifica que el puerto sea elcorrecto. Si no hay un punto de montaje

específico definido en el servidor, se puedeponer cualquier punto de montaje y se crearáautomáticamente. Los parámetros Name,URL y Description son opcionales.Dependiendo de cómo esté configurado elservidor, esta información puede que no se lemuestre a los clientes. Por último, seselecciona Icecast2 para el tipo deautenticación y se introduce la contraseña delservidor. Ahora, pulsando el botón deconexión se debería empezar la transmisión.

MuSE ofrece opciones adicionales de audioen la ventana “Let’s Stream”. Es posible ajus-tar la calidad del audio, la tasa de bits y lafrecuencia entre otros. Los que vienen pordefecto pueden ser los adecuados. Hay quetener en cuenta que el incremento de cual-quiera de estos valores aumentará el ancho debanda por cliente.

Puede grabarse lo que se está transmi-tiendo para llevar un registro. Simplementehay que colocarse en el directorio donde sedesea salvar el stream, se introduce el nom-bre del archivo y se pulsa OK. Cuando seesté listo para comenzar la sesión, sólo hayque pulsar el botón record. Si se tiene unfichero con el mismo nombre en el mismodirectorio, el fichero nuevo se renombrarácon un # al final, donde # es el siguientevalor incremental.

Administración Web de IcecastUna vez que el servidor Icecast esté listo yen funcionamiento, se pueden visitar suspáginas de información y administracióndesde un navegador web. Se introduce laURL o la dirección IP del servidor de strea-ming, seguido del puerto por el que elservidor Icecast está funcionando, para lle-gar a la página de estado de Icecast (Figura3). Todos los puntos de montaje que actual-mente están siendo servidos por Icecast sonaccesibles desde esta página, junto con algu-nas estadísticas básicas. Los clientes puedenhacer clic en el enlace para escuchar con susreproductores multimedia preferidos.

También es posible el acceso a las páginaswebs de Administración. Pulsando en esteenlace se solicitará la autenticación delusuario utilizando el nombre de usuario deladministrador del servidor y la contraseña.También puede accederse a las páginaswebs de administración directamentetecleando la URL (por ejemplo: http://

miservidor.org:8000/admin).La interfaz de administración permitirá

realizar diversas tareas, como listar los clien-tes conectados a una fuente, mover losclientes a un punto de montaje diferente o

incluso eliminar una fuente. Incluso puedenverse diversas estadísticas del servidor Ice-cast (véase la Figura 4).

ConclusionesTras unos pocos minutos de instalación yconfiguración del servidor de streaming decódigo abierto Icecast, se estará listo paracrear una estación de radio web propia.Antes de despegar en serio, deberían consul-tarse los términos del contrato del servicioprestado por el ISP o los acuerdos de la reddel campus. La puesta en marcha de un ser-vidor de streaming podría violar el contratoy poner en peligro el servicio.

Montar un servidor de radio web propioes tremendamente entretenido y muy edu-cativo. Hay que asegurarse, sin embargo, deque se está al tanto de las leyes locales apli-cables referentes al copyright.

Las reglas exactas por las que se puede ono realizar stream podrían depender de lasleyes del país. Si se desea transmitir música,debería obtenerse alguna licencia para ello.

Compruébense servicios musicales comoMagnatune [10] y asegúrese de que siemprese nombra al artista original. Si en cualquiermomento se tienen dudas sobre si se tienepermiso para emitir un contenido, err…, seaprudente.

Y ahora, ¡a pasárselo bien! �

Streaming • PORTADA

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

[1] Servidor Darwin:http://developer.

apple.com/darwin

[2] Servidor Helix: http://helix-server.

helixcommunity.org/

[3] Icecast: http://www.icecast.org

[4] Xiph.org: http://www.xiph.org/

[5] Cliente Ezstream, cliente que procesa

videos Theora: http://www.ezstream.

com/

[6] Lame: http://lame.sourceforge.net/

index.html

[7] MuSE, Multiple Streaming Engine:

http://muse.dyne.org

[8] Distribución Dynebolic Live Multime-

dia: http://www.dynebolic.org

[9] ncurses: http://www.gnu.org/

software/ncurses/ncurses.html

[10] Magnatune, almacén musical gratu-

ito: http://www.magnatune.com

[11] Ogg Vorbis: http://www.vorbis.com/

[12] Theora.org: http://www.theora.org/

[13] Wikipedia sobre streaming: http://

en.wikipedia.org/wiki/

Streaming_media

RECURSOS

Page 24: Linux Magazine - Edición en Castellano, Nº 19

información de la música que nos gusta. Esta

información puede usarse para crear una

“emisora de radio personalizada” en base a

nuestros hábitos de escucha. Last.fm genera

una lista de reproducción orientada a nuestros

intereses.

Last.fm, que está producido por el proyecto

anteriormente conocido como Audioscrobbler

[2], intenta proporcionar una completa expe-

riencia para el oyente. El sistema puede

incluso sugerir nuevas canciones que son

similares a la música que hemos seleccionado

previamente. Se pide a los oyentes que man-

tengan actualizada la información guardada

acerca de sus intereses musicales en una

página Web perso-

nal, mientras que la

base de datos nos

permite mantener

una lista de “amigos”

oyentes con gustos

similares a los nues-

tros.

Para EmpezarLa manera más sen-

cilla de comenzar

con Last.fm es regis-

trarse en la página

Web [1]. El formula-

rio Web de registro

es muy fácil de usar.

Empezamos por crear un nombre de usuario

y contraseña (véase Figura 1). Una vez creada

la cuenta, Last.fm instala el plugin Audios-

crobbler, que envía la información de las

canciones que escuchamos al servidor. El

último paso es descargar el reproductor de

Last.fm. Una vez registrados y con los progra-

mas descargados, ya podemos comenzar a

explorarlo .

Last.fmEl reproductor de Last.fm aparece con una

sencilla interfaz gráfica de usuario (véase

Si tu ordenador es algo así como una

mina, probablemente estará lleno de

canciones MP3 y OGG Vorbis de dis-

tintas procedencias. La radio por Internet es

una verdadera alternativa para llenar el disco

duro de canciones. Pero, al igual que con la

radio clásica, las canciones suelen repetirse

tras cierto tiempo, y tenemos que buscar otra

emisora. Last.fm [1] es una opción a los repro-

ductores de radio por Internet tradicionales.

El reproductor de Last.fm está enlazado con

una base de datos en línea que guarda infor-

mación de nuestros intereses musicales.

Cuando configuramos un perfil musical crea-

mos un espacio para que Last.fm guarde

PORTADA • Last.fm

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

Una emisora de radio virtual con Last.fm

RADIO PERSONALUna emisora de radio virtual con Last.fm

RADIO PERSONAL

Last.fm registra nuestros gustos musicales y nos ayuda a encontrar

usuarios con intereses similares. POR MARCEL HILZINGER

Figura 1: Creamos un perfil en la página de Last.fm.

Figura 2: La ventana principal de Last.fm

ofrece opciones de configuración y

proporciona enlaces a información de la

canción que suena.

[1] Last.fm: http://www.last.fm

[2] Audioscrobbler:

http://www.audioscrobbler.net/

RECURSOS

Page 25: Linux Magazine - Edición en Castellano, Nº 19

Figura 2). El sistema es realmente amistoso

con el usuario novel. Pulsamos en el icono de

la llave inglesa para configurarlo . Introduci-

mos nuestros datos de usuario en el cuadro

Settings (véase Figura 3). Para poder usar las

características avanzadas, deberíamos señalar

también nuestro navegador por defecto. Si

realmente nos gusta una canción, pulsamos

en el icono con un corazón (véase Figura 2).

El sistema guarda el nombre de la canción y el

artista. Por contra, si realmente no nos gusta

una canción, pulsamos sobre el icono de pro-

hibido aparcar para quitar la canción de

nuestra lista de reproducción. Para las cancio-

nes que nos gustan, pero que no queramos

oírlas en ese momento, podemos pulsar el

icono con los dos símbolos “mayor que”.

Last.fm busca entonces en Internet otra can-

ción.

Para saber más acerca de una canción,

álbum o artista, pulsamos en la cabecera

correspondiente. El programa arranca enton-

ces nuestro navegador por defecto, que nos

lleva hasta la página Web de Last.fm, y nos

muestra la información (véase Figura 4). Los

dos iconos grises rectangulares arriba a la

derecha nos permiten editar las etiquetas de

las canciones o postear un comentario en la

página Web de Last.fm.

Asuntos De La ComunidadLast.fm está muy interesado en promover la

interacción con el oyente. El diseño del sis-

tema se aprovecha del hecho de que los

navegantes de la Web buscan otros usuarios

con intereses comunes.

El área Users en la página Web de Last.fm

proporciona una interfaz para interactuar

con la comunidad de Last.fm (véase Figura

5). Pulsamos en el icono de un usuario para

visitar su página personal. Fijémonos en el

cuadro a la izquierda titulado “Find by

Musical Taste”. Podemos introducir el nom-

bre de un artista o grupo en el cuadro y

pulsar el botón Go para mostrar los iconos

de otros usuarios

que han expresado

interés en este

artista o grupo.

La página Web

personal de cada

usuario lista los

favoritos de cada

uno de ellos. La

página contiene

también algunos

breves datos biográ-

ficos del usuario, así

como opciones para

enviarle un mensaje

o añadirlo a una

lista de amigos.

BúsquedaPara empezar a

escuchar la radio

por Internet pulsa-

mos sobre el icono

de la llave inglesa y

seleccionamos

Change Station. En

el cuadro que apa-

rece seleccionamos

la pestaña Search.

Podemos buscar por

artista o género. La

función Similar

Artist Radio está

activa por defecto.

Tecleamos el nom-

bre de un grupo o

artista y pulsamos Listen Now para indicarle

al reproductor que comience a sonar. Si bus-

camos por género, pulsamos en Similar

Artist Radio y seleccionamos la entrada

Tags, y a continuación tecleamos una clave

de búsqueda (por ejemplo “Blues”) y presio-

namos Go. Last.fm mostrará una lista de

géneros. Seleccionamos un género de la lista

y pulsamos Listen Now. Antes de que se ilu-

sione demasiado, debemos decir que, a

modo de ejemplo, la búsqueda por

Jazz-Fusion devolvió una canción de Frank

Sinatra.

La página Web de Last.fm proporciona

una función de búsqueda avanzada. Pueden

introducirse múltiples nombres de artistas

en una máscara de búsqueda. La página

muestra entonces un botón etiquetado como

Play Music Like These Artists, que apunta a

una URL que comienza por lastfm://. Se

copia esta URL al portapapeles, se pulsa

sobre el icono de llave inglesa y se selec-

ciona Enter Station Address. A continuación

se pega la nueva URL y se pulsa OK para

escuchar 30 segundos de la canción. Esta

característica no funcionó del todo bien en

nuestro laboratorio. Tras unos instantes,

comenzamos a dudar de la fiabilidad de Play

Music Like… Por ejemplo, la página Web

devolvió unas cuantas canciones de Guns n’

Roses, pero al pulsar Listen Now, se trataba

de una canción de Herbie Hancock.

ConclusionesLa idea tras Last.fm es excelente, pero la

implementación deja bastante que desear.

Otra cosa que nos molestó es que, al selec-

cionar temas que se decía que eran de

nuestros grupos favoritos, resultaba no ser

del grupo que se esperaba. �

Last.fm • PORTADA

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

Figura 5: La sección User de Last.fm nos ayuda a encontrar otros

usuarios con intereses musicales similares.

Figura 4: La página Web Last.fm proporciona información de la

canción, álbum o artista.

Figura 3: El cuadro Settings nos permite

introducir la configuración, como nuestros

datos de usuario y navegador.

Page 26: Linux Magazine - Edición en Castellano, Nº 19

Mejoras en la interfazTras descargarnos la versión más apro-

piada de la web de inkscape [2], instalarloy abrirlo por primera vez lo primero queapreciamos es que la interfaz ha sufridoun buen lavado de cara y ha sido mejo-rada considerablemente dandole unaspecto mucho más profesional debido,en gran parte, a que la mayoría de sus ico-nos han sido rediseñados (Figura 1).Además han sido añadidas nuevas pale-tas, algunas incrustadas en la interfaz,como es el caso de la relacionada con lasmuestras de color, y otras de manera flo-tante como la de capas. Si a esto leañadimos el nuevo modo de vista por con-tornos, magnífico cuando trabajamos congráficos complejos, o la nueva barra decontrol de texto, nos damos cuenta que lasmejoras de la interfaz han sido realmenteconsiderables asi que pasemos a ver endetalle cada una de estas mejoras.

Nuevos iconosAndre Sousa ha sido el diseñador

encargado de la elaboración de los nue-vos iconos , dandole un aspecto muchomás profesional a la aplicación. Losanteriores, en algunos casos, tendían aconfundir las verdaderas funciones dealgunas herramientas, como es el casodel correspondiente a la creación de polí-gonos, y su gama cromática dejabamucho que desear; los nuevos poseen uncolorido más vistoso, usando degrada-dos de manera acertada, y están muchomejor definidos tanto en diseño como enconcepto.

PaletasOtro de los aspectos a destacar es la

inclusión de nuevas paletas inclusive lade muestras de color que ha sidoincrustada en la interfaz. Ésta no hasido la única novedad puesto que ahoraes mucho más cómodo aplicar colores alos trazos y rellenos pudiendo elegircolores inversos a los seleccionados,copiar los de un objeto y pegarlos enotro e incluso invertir los de trazo yrelleno.

Además ha sido incluida, a peticiónpopular, una nueva paleta flotante parapoder administrar las capas a nuestroantojo; ya podemos mover, añadir,

Todo comenzó en 2003 cuando 4desarrolladores de Sodipodi(Bryce Harrington, MenTaLguY,

Nathan Hurst y Ted Gould) decidierondarle un nuevo rumbo al proyecto con elfin de conseguir una herramienta dedibujo vectorial totalmente compatiblecon el formato SVG (Scalable Vector Gra-phics o lo que es lo mismo: gráficosvectoriales escalables), el adoptado porel W3C [1] como estándar para gráficosmediante vectores. Se pusieron mano ala obra en la creación de Inkscape ydesde entonces la herramienta ha idocreciendo de manera vertiginosa, tantoen colaboraciones, traducciones, nuevascaracterísticas, asi como en popularidady número de descargas; tan sólo en laprimera semana, tras la aparición de laversión 0.44, fueron cerca de 54.100usuarios los que optaron por bajarse estamagnífica aplicación.

EVALUACIÓN • Inkscape 0.44

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

Figura 1: los nuevos iconos realizados por Andre sousa le dan un aspecto visual más agradable

a Inkscape.

Inkscape se ha convertido en la aplicación vectorial por excelencia de los entusiastas del software libre.

Echemos un vistazo a su última versión y descubramos por qué levanta pasiones.

POR JUAN MIGUEL RAMIREZ

Andy

Fitzi

mon

Examinamos la última versión de Inkscape

DISEÑA LIBREMENTE

Page 27: Linux Magazine - Edición en Castellano, Nº 19

eliminar, mostrar u ocultarlas de unamanera mucho más cómoda y eficaz.

Modo de vista porcontornos

Anteriormente cuando trabajaba-mos con gráficos complejos, conmultitud de rellenos y objetos,podiamos perder el norte con laestructura de nuestro gráfico. Paraque esto no ocurra, la nueva versiónviene con un nuevo modo de vistaincluido, llamado vista por contor-nos, el cual, como su nombre indica,nos muestra nuestro gráfico sinrelleno alguno y mostrando sólo loscontornos de los objetos, todos elloscon el mismo color de trazo (figuras2 y 3).

Herramienta de nodos

La herramienta de edición denodos se ha visto mejorada tambiénen esta versión; por un lado se haincluido un botón en la propia barrade control de nodos para podermostrar u ocultar los tiradores de losnodos (las líneas con un punto denodo al final que aparecen enaquellos nodos que forman líneascurvas y que se usan para darle laforma necesaria a ésta) y se hamejorado el comportamiento a lahora de borrar los haciendo que si,por ejemplo, éstos forman una curvaentre varios al borrar uno intermediola curva se vea dañada lo menosposible obteniendo, de esta manera,úna practicamente igual o muyparecida a la original. Por otro lado ala hora de modificar nodos existeuna nueva opción que nos permite,si hacemos click y arrastramos,manteniendo pulsada al mismotiempo la tecla “alt” uno de losdiferentes nodos que hayamosseleccionando previamente, que éstesea modificado igual que siemprepero sufriendo los seleccionadostambién una ligera modificación,intentando adaptarse a la nuevaforma, consiguiendo de esta maneraque el cambio haya sido másgradual, como si de esculpir unafigura se tratara. Es por ello que este

nuevo comportamiento sea llamado“esculpiendo nodos”.

ClipsHasta ahora era realmente

complicada la tarea de hacer que unaimagen o figura pudiera estarincrustada dentro de otra u obtenerla forma de ella (una de lasopciones, no siempre válida, era lade convertir esa imagen o figura enun relleno y usar éste como rellenode la figura en cuyo interiorqueriamos incrustar la figura oimagen) pero ahora podemosrealizarlo de una manera muysencilla con la nueva herramientaClip.

Su funcionamiento es muy fácil eintuitivo:

Inkscape 0.44 • EVALUACIÓN

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

Figura 2: Gráfico realizado con Inkscape

previsualizandose en modo de vista normal

Figura 3: Gráfico de la figura 2 en modo de

vista por contornos

Mucha gente confunde el verdadero fin de las aplicaciones de diseño vectorial y tiende a compararlas con las de diseño bitmap, como

por ejemplo Gimp. Esto es un grave error, ya que cada una de ellas se usa para diferentes procesos pudiendose complementar la una con

la otra pero nunca suplantandose.

El diseño o retoque mediante bitmaps consiste en la manipulación (o creación) de los diferentes pixeles existentes en la imagen y su

tamaño final vendrá dado por la cantidad de pixeles que esta imagen posea, por lo tanto Gimp es ideal para realizar ajustes (montajes,

variaciones de color, etc) a tus fotografías o para diseñar algo cuyo tamaño final sepamos de manera aproximada. Sin embargo, si quisie-

ramos aumentar drásticamente el tamaño de nuestro trabajo nos encontraremos con que el resultado final es muy decepcionante (ver

Figura 4) ya que pierde toda definición existente al tener que “inventarse” el programa los nuevos pixeles necesarios para tal redimen-

sión.

Por otro lado, el diseño vectorial consiste en la manipulación (o creación) de diferentes nodos, totalmente independientes de la resolu-

ción, que forman un gráfico y su tamaño final es indiferente puesto que al no estar compuestos éstos de pixeles sino de vectores

(fórmulas matemáticas) podemos aumentar o disminuirlos sin perder ni un ápice de definición (ver Figura 4), incluso llevandolos a tama-

ños extremos como la fachada de un edificio. Por el contrario si quisieramos retocar una imagen nos sería imposible hacerlo con él, ya

que aparte de poder incrustar gráficos bitmaps en nuestros documentos poco más se puede hacer relacionado con la manipulación de

pixeles.

En resumen, si quieres retocar una imagen o realizar un diseño con diferentes fotografías, sin duda alguna, Gimp es el elegido mientras

que si quieres realizar diseños o ilustraciones mediante trazos, como suele ser el caso de logotipos, identidades corporativas dibujos, y

que pueden ser redimensionadas sin problemas, tu elección es Inkscape.

Inkscape VS Gimp

Page 28: Linux Magazine - Edición en Castellano, Nº 19

usamos una escala de grises, Inkscapelo hará en base al valor de su lumino-sidad (sería el paso equivalente apasar este color a escala de grises);también hay que tener en cuenta quepodemos usar degradados permitien-donos de esta forma obtener imagenesque vayan fundiendose.

Para aplicar una máscara basta conrealizar los mismos pasos que hicimospara los clips cambiando, lógica-mente, la opción Clip por Máscara.

Otras mejorasExisten otras muchas mejoras

añadidas, como viene siendo habitualpor parte de los desarrolladores deInkscape en cada versión que actualizanpero, por falta de espacio, no lasveremos de una manera tan detalladacomo las anteriores. Entre otras tenemosla opción, aunque de momento editandodirectamente el fichero XML que loscontrola, de editar los atajos de tecladodel programa adaptándolos a nuestrogusto. El menú efectos ha sidoligeramente remodelado para ayudar a lacomprensión de la función de cada unode ellos y ha sido activado por defecto(anteriormente teníamos que irnos almenú de configuración para activarlo).Incluye además soporte para exportacióna PDF, inclusive con transparencias y porúltimo, y no por ello menos importante,tenemos la opción de poder añadirimágenes con perfiles de color ICC através de LittleCMS [3].

Inkscape en la vida realInkscape lo usaremos, claro está,

para la creación de gráficos vectoria-les pero os preguntareis ¿y para qué

tipo de trabajo usaremos algo asi en lavida real? Pues podeis usarlo parainfinidad de aplicaciones, desde lacreación de iconos, cartelería, identi-dades corporativas (logotipos, foliosde empresa, sobres, tarjetas de visita,etc), páginas webs y un sinfín más[4]. Valga como ejemplo las figuras 5y 6 donde podemos observar 2 logoti-pos o en la propia web de Inkscape [5]donde encontraremos, entre otrascosas, algunos diseños de mapas parajuegos o, por ejemplo, el diseño de unCD.

ConclusiónA inkscape le queda un largo

camino por recorrer y aún no se consi-dera un programa lo suficientementemaduro y estable como para usarloprofesionalmente (aunque haya gentecomo yo que sí lo haga) pero está enel buen camino y es una herramientaideal para multitud de aplicaciones;tan sólo hace falta echarle ganas eimaginación al asunto. �

1.Colocamos la figura en cuyo inte-rior queramos incrustar otro elementou obtener la forma de éste por encima,solapando el elemento que vamos amodificar.

2.Seleccionamos ambos objetos.3.Hacemos click en el menú objeto

y ahí en Clip – Establecer.4.Listo.

Con esto conseguimos que la figurao imagen situada por debajo tome laforma de la que estaba situada porencima; es como si hubiesemosrecortado con unas tijeras el elementoque estaba por debajo con la formadel que teníamos justo en su partesuperior. Por último, si quisieramosmantener las líneas de nuestro objeto,tan sólo bastaría con haber creado unduplicado sin relleno previamente yobteniendo de esta manera el efectodeseado, pareciendo que la figura estáincrustada en el interior de la queduplicamos.

MáscarasEl concepto de las máscaras es muy

parecido al de los Clips, con la únicaexcepción de que el objeto de la partesuperior determinará, basándonos ensu color( si éste es negro la opacidadserá del 0%, si es blanco del 100% ysus valores intermedios, de 0 a 255,harán el resto de las opacidades), elgrado de transparencia del objeto infe-rior al que vamos a realizarle lamáscara. Es por esto que importarámuchísimo el color del objeto queusaremos como máscara y que si no

EVALUACIÓN • Inkscape 0.44

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

Figura 4: En esta imagen hemos aumentado

drásticamente el tamaño de 1 gráfico, en la

parte izquierda en su versión vectorial y en

la derecha en la de mapa de bits.

Figura 5: Logotipo creado integramente con

Inkscape de la asociación Linux Málaga.

Figura 5: Otro logotipo creado con Inkscape

[1] Especificaciones SVG del W3C:

http://www.w3.org/Graphics/SVG/

[2] Descarga de Inkscape:

http://www.inkscape.org/download.

php

[3] Gestor de color LitlleCMS:

http://www.littlecms.com/

[4] Blog con ejemplos de diseños

gráficos con software libre:

http://www.yomizmo.com/portfolio

[5] Ejemplos de trabajos realizados con

Inkscape:

http://www.inkscape.org/showcase/

index.php

RECURSOS

Page 29: Linux Magazine - Edición en Castellano, Nº 19

Enlightenment • EVALUACIÓN

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

su efectoen el progreso.

Aunque E17 está aún en un estado prealfa,muchos usuarios de Enlightenment se hanpasado a esta versión para proporcionarinformes de depuración y acelerar el

desarrollo. E17 es estable y vale la penaprobarlo. Pero si se decide a dar el pasodecisivo, se debería tener en cuenta queEnlightenment 17 está sujeta a cambios.La sintáxis del fichero de configuraciónestá cambiándose; una actualizaciónpodría simplemente borrar laconfiguración existente y reemplazarla poruna totalmente nueva; no hace falta nidecir que se perderían todos los cambiosque se hayan realizado para personali-

zarlo.

La InstalaciónLa forma más sencilla de pro-

barlo es cargando el live CDde Elive [2]. Los expertos

pueden obtener la últimaversión del códigodesde el CVS. Haydiversos scripts deayuda para ello en [3]y [4]. Otro scriptcompila los paquetesnecesarios paraDebian [5] desde elCVS. La forma mássencilla de instalación

es utilizando los paque-tes listos para instalarse.

Se encuentran disponibleslos paquetes de varias distri-

buciones; para más detallespuede consultarse el cuadro “La

Instalación”.Después de instalar E17, el gestor de ven-

tanas aparece con un aspecto limpio yordenado (Figura 1). Por defecto, el gestor deventanas modular carga unos cuantos módu-los. Ésta es su forma de ahorrar recursos. E17se ejecuta bien en el hardware antiguo.Incluso la configuración por defecto poseealgunos efectos ópticos, incluyendo las

Enlightenment vió la luz enel año 1997 como un ges-tor de ventanas

modificado a partir de Fvwm.Sus desarrolladores estánaún trabajando en la ver-sión 0.17, queproporcionará un entornode escritorio lleno decaracterísticas agradablesa la vista y que da a losusuarios la mayor liber-tad posible.

Aunque la versión ante-rior, Enlightenment 16, yatiene unos cuantos años yposee una gran cantidad defans, la historia de la versión endesarrollo actual, EnlightenmentDR17 (Development Release 17, tam-bién conocida como E17) ha sidocualquier cosa menos sencilla. En el procesolos desarrolladores han tenido que reescribirnumerosas herramientas y librerías y han eli-minado gran parte del código. El hecho deque muchos de estos desarrolladores seanademás responsables de otras libreríasimportantes, como la librería gráfica Imlib2,que se utiliza en Gnome, también ha tenido

Enlightenment tiene una gran

comunidad de seguidores que

han estado esperando paciente-

mente una nueva versión. Si se

es lo suficientemente valiente

como para probar la versión 17

de desarrollo, se encontrará con

un gestor de ventanas extre-

madamente flexible y

estéticamente agradable.

POR KARSTEN JÄGER

Explorando el Gestor de Ventanas Enlightenment 17

HÁGASE LA LUZ

Page 30: Linux Magazine - Edición en Castellano, Nº 19

La configuraciónAl contrario que otros gestores de ventanas,Enlightenment 17 utiliza ficheros deconfiguración binarios. Esto implica un cam-bio en los hábitos de configuración de

muchos usuarios. Además de la herra-mienta de línea de comandosenlightenment _remote, E17 posee ahoraun panel de configuración gráfica (Figura2) que le ha proporcionado un sistemamucho más amigable. Si embargo, laherramienta enlightenment _remote aúnofrece más parámetros que la interfaz grá-fica. Por ejemplo, únicamente laherramienta de la línea de comandospuede cargar módulos y modificar los ata-jos de teclado. enlightenment _remote -h

proporciona a los usuarios una pequeñadescripción de cada opción.

El panel de configuración está divididoen Focus Setting (Figura 3), Desktop Set-

tings y Window Display. Los usuariospueden realizar diversas tareas deconfiguración para modificar el comporta-miento del gestor de ventanas.

Los ficheros binarios .eap también sonlos responsables de ejecutar los progra-mas. Estos ficheros no incluyen solamenteel comando del programa, sino tambiénlos iconos. Para crear un fichero eap

nuevo, los usuarios deben ejecutar pri-mero el menú de la ventana y luego pulsaren Create Icon (Figura 4). Con esto se abreel editor Eap (Figura 5). El campo App

barras de los títulos de las ventanas anima-das con una sombra plateada. El lanzadorIBar de Enlightenment 17 dibuja una especiede sombra alrededor del icono seleccionado,que al mismo tiempo parpadea.

EVALUACIÓN • Enlightenment

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

Figura 1: Un estupendo escritorio Enlightenment con el tema por defecto.

Los miembros del equipo de Enlighten-

ment tienen paquetes de instalación y

otros paquetes experimentales para

algunas distribuciones.

La forma más sencilla de instalación

para los usuarios con Suse Linux es

yendo al repositorio de Packman. Para

ello se configura el servidor http://

packman.iu-bremen.de y el directorio

suse/Version como la fuente de instala-

ción de Yast, reemplazando Version por

la versión que se tenga de Suse.

Si se tiene Fedora Core 4, Didier Casse

tiene un programa en [6] que configura

el gestor de paquetes Yum para que use

el repositorio adecuado. Los usuarios

con Fedora Core 2 y 3 tendrán que aña-

dir la entrada al repositorio

manualmente. La entrada en

/etc/yum.conf sería la siguiente:

[Didier]

name=Didier’s yum repository U

for e17 apps/lib

baseurl=http://sps.nus.edu.sgU

/~didierbe/fedora/X/en/i386

http://dentrassi.de/e17/fedoraU

/X/en/i386/RPMS.e17/

http://fedora.oceighty.net/e17U

/fedora/X/en/i386/RPMS.e17/

http://dr17.saaf.co.uk/fedoraU

/X/en/i386/RPMS.e17/

La X en el listado representa la versiónde Fedora. Los comandos yum

check-update y yum install enlighten-

ment instalarán E17.Developer Shadoi tiene paquetes para

Debian (Sid) y Ubuntu (Breezy). Sólohay que añadir una entrada a/etc/apt/souces.list y luego ejecutarapt-get y apt-get install enlightenment

para instalarlo:

# E17 for Debian

deb http://www.soulmachine.net/

debian unstable/

# E17 for Breezy

deb http://www.soulmachine.net/

breezy unstable/

Como la anterior versión 16 de Enligh-tenment, también está disponible en losrepositorios; únicamente hay que forzarla instalación de DR17 (0.16.999.xxx).t

Para instalar Enlightenment 17 en un

sistema con la distribución GentooLinux, hacen falta unas cuantas entradasen el fichero /etc/portage/package.key-

words (véase el cuadro Palabras clave dePortage). Si embargo, un simple emerge

no será suficiente. Hay que instalar losprogramas y las librerías en el ordencorrecto para resolver cualquier depen-dencia posible y asegurarse que todofunciona como la seda. Para la instala-ción se usará el siguiente comando:

emerge -av dev-db/edb eet U

imlib2 imlib2_loaders evas U

ecore epeg epsilon embryo U

edje esmart emotion etox ewl

engrave e entice elicit U

examine engage e_utils U

entrance xine-lib emotion U

envision elation evidence U

eterm enotes equate

Para todas las distribuciones, se necesi-tará una entrada para E17 en el gestor devisualización, y si se ejecuta startx laentrada estará en el fichero ~/.xinitrc.

Instalación

Page 31: Linux Magazine - Edición en Castellano, Nº 19

name se corresponde con el nombre delprograma y el campo Executable se corres-ponde con la orden de la línea decomandos, incluyendo cualquier paráme-tro necesario. Pulsando en el icono grandebajo Icon abre el gestor de ficheros Efm,donde se puede seleccionar un icono.

A pesar de todos estos asistentes gráfi-cos, aun se pueden encontrar algunosficheros de configuración basados entexto, por ejemplo,~/.e/e/applications/bar/.order. Tantoéstos como los otros ficheros .order seusan para cambiar el orden de las entra-das en IBar, en favoritos y en otrosmódulos. Los ficheros tienen una estruc-tura simple con un único fichero eap porlínea:

eterm.eap

firefox.eap

gimp.eap

bmp.eap

Fondos, Módulos y OtrosLos fondos también se almacenan enficheros con formatos binarios, como losficheros .edj, y pueden ser o estáticos oanimados. Por defecto, E17 tiene cuatroescritorios virtuales, con fondos indivi-dualmente configurables. De nuevo, laconfiguración está restringida a la herra-mienta enlightenment_remote:

enlightenment_remote U

-desktop-bg-add 0 0 0 0 U

/path/to/background.edj

enlightenment_remote U

-desktop-bg-add 0 0 1 0 U

/path/to/background.edj

enlightenment_remote U

-desktop-bg-add 0 0 2 0 U

/path/to/background.edj

enlightenment_remote U

-desktop-bg-add 0 0 3 0 U

/path/to/background.edj

Los ficheros binarios de fondos de este tipose crean con el programa edje_cc, que com-pila un fichero EDJ de un directorio con unaimagen y con el fichero background.edc. Elmanual de usuario contiene un ejemplo en[9]. Hay fondos disponibles en el sitio webGet-e.org [8] y solamente hay que depositar-los en el directorio ~/.e/e/backgrounds/.

Para las transparencias E17 necesita unmódulo; los desarrolladores no pretendenintegrar esta funcionalidad en el futuro. Latransparencia Eterm puede utilizarse conE17, pero cuidado: pueden o no aparecer

errores extrañosirreproducibles,aunque probable-mente ocurran.

Una de lasmayores ventajasde E17 es su diseñomodular. Al contra-rio que la mayoríade los entornos deescritorio, tan sólocarga unos cuantosmódulos esencia-les, tal y como sepueden ver en elmenú de la Figura1.

Sin embargo,vale la pena cargary habilitar algunosmódulos adiciona-les una vez másutilizando la herra-mienta de la líneade comandos enlightenment_remote:

nonumber

enlightenmU

ent_remote U

-module-load

‘modulname’

enlightenment_remote U

-module-enable ‘modulname’

Uno de los módulos más populares (mos-trado en la esquina de la Figura 6) es Engage.

Enlightenment • EVALUACIÓN

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

Figura 2: La nueva herramienta de

configuración gráfica.

Figura 4: El botón

Create Icon permite la

creación de nuevos

iconos para los

programas.

Figura 3: El cuadro de diálogo de Focus

Setting de Enlightenment 17.

01 #e17 cvs stuff

02 app-misc/evidence -*

03 app-misc/examine -*

04 app-misc/enotes -*

05 dev-db/edb -*

06 dev-libs/eet -*

07 dev-libs/embryo -*

08 dev-libs/engrave -*

09 dev-util/e_utils -*

10 mail-client/embrace -*

11 media-gfx/eclips -*

12 media-gfx/elicit -*

13 media-gfx/entice -*

14 media-gfx/imlib_tools ~x86

15 media-libs/edje -*

16 media-libs/emotion -*

17 media-libs/epeg -*

18 media-libs/epsilon -*

19 media-libs/etox -*

20 media-libs/imlib2 -*

21 media-libs/imlib2_loaders -*

22 media-libs/xine-lib -*

23 media-video/eclair -*

24 media-video/envision -*

25 media-video/elation -*

26 net-news/erss -*

27 sci-calculators/equate -*

28 sys-fs/evfs -*

29 x11-libs/ecore -*

30 x11-libs/esmart -*

31 x11-libs/evas -*

32 x11-libs/ewl -*

33 x11-misc/e17genmenu -*

34 x11-misc/engage -*

35 x11-misc/entrance -*

36 x11-misc/iconbar -*

37 x11-plugins/e_modules -*

38 x11-terms/eterm -*

39 x11-terms/enterminus -*

40 x11-wm/e -*

Palabras Clave de Portage

Page 32: Linux Magazine - Edición en Castellano, Nº 19

tar lo mismo.Sólo hay que des-

cargar los ficheros.edj y depositarlosen el directorio~/.e/e/themes.Ahora se puedeseleccionar el temapreferido en elmenú principal bajoThemes. La Figura 6muestra el temaWinter.

AyudaEnlatadaLa comunidad deEnlightenmentofrece diversasopciones de ayuda. La lista de correo[e-users] no está restringida a los usuarios, ya menudo se pueden encontrar desarrollado-res echándoles una mano a otros usuarios[10]. La recompensa por apuntarse a la listade correo es obtener información de depura-ción rápida y sencilla. Para encontrarlatambién se encuentra disponible un foro[11]. Enlightenment tiene además multitudde seguidores a través del canal de IRC eninglés (#e) en freenode.org.

ConclusionesSi se está buscando un gestor de ventanasordenado y agradable a la vista, entonces

vale la pena investigar la versión dedesarrollo E17. Se trata de una versión esta-ble en su mayor parte, aunque pueda resultarmolesto la perdida de los ficheros deconfiguración en la actualización. Como notapositiva, las actualizaciones normalmentevienen acompañadas de nuevas característi-cas. Los desarrolladores pueden tener aúnuna larga lista de quehaceres por delante,pero están haciendo un progreso rápido.Resulta realmente excitante seguir eldesarrollo de este gestor de ventanas. �

El módulo Engage es una reminiscencia delDock de Mac OS X, que proporciona un lan-zador, con funcionalidad systray y unaspecto divertido. Cuando se sitúa el ratónsobre un icono, Engage amplía el icono. Losprogramas activos muestran un segundoicono más pequeño en lo alto del icono nor-mal. Se puede conmutar entre los iconospequeños utilizando la rueda del ratón y tansólo hay que hacer clic directamente paraejecutar un programa.

Como con los fondos, los temas tambiénutilizan ficheros con formato binario, .edj. Sepuede encontrar una gran colección detemas en el sitio web http://get-e.org quealberga el repositorio central para la comuni-dad E17 [8]. Estos ficheros proporcionantodo lo que un tema necesita: gráficos, fun-ciones de animación y fondos estándar, otrasgestores de ventanas y entornos de escritorionecesitan directorios completos para sopor-

EVALUACIÓN • Enlightenment

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

[1] Enlightenment: http://www.

enlightenment.org

[2] Elive CD: http://www.elivecd.org/

[3] CVS script (1): http://www.rasterman.

com/files/get_e.sh

[4] CVS script (2): http://omicron.homeip.

net/projects/easy_e17/easy_e17.sh

[5] CVS script (2): http://nooms.de/misc/

e17install.sh

[6] Modificando Yum: http://sps.nus.edu.

sg/~didierbe/share/dc-fc4-yum-repo-1.

3-1.fc4.noarch.rpm

[7] COMO de la instalación de Fedora:

http://sps.nus.edu.sg/~didierbe/

[8] Noticias, módulos, temas y guía del

usuario de E17: http://get-e.org

[9] Manual de usuario de edje_cc: http://

get-e.org/E17_User_Guide/English/

_pages/3.8.html

[10] Lista de correo de E17: https://lists.

sourceforge.net/lists/listinfo/

enlightenment-users

[11] Foro de E17: http://edevelop.org/

forum

RECURSOS

Figura 5: El editor Eap asocia un icono con

un programa o comando.

Figura 7: El tema Slate de Enlightenment 17.

Figura 6: El tema Winter de Enlightenment.

Page 33: Linux Magazine - Edición en Castellano, Nº 19

Blender • PRÁCTICO

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

Creación de personajes animados con Blender

DIBUJOS ANIMADOS

necesario generar todas y cada una de las

imágenes de una secuencia. Por ejemplo,

podríamos especificar la posición de un

objeto en el primer y décimo fotograma.

Blender calcula automáticamente los

pasos intermedios, lo cual reduce

considerablemente nuestra carga de

trabajo.

Unos objetos flotantes y que rotan al

tiempo que cambian de color y tamaño

puede ser un buen efecto para la intro de

un programa de noticias, por ejemplo,

pero no es lo que se podría llamar anima-

ción de caracteres. Después de todo, no

sólo queremos mover nuestra figura por la

pantalla: queremos que sus piernas se

muevan cuando atraviesan la escena. Y

queremos que las uniones de la rodilla

sean continuas. Es por esto que la anima-

ción de caracteres no significa sólo rotar y

mover un objeto, sino también cambiar

específicamente la forma del objeto tridi-

mensional. Si doblamos una manguera,

esto tiene un efecto sobre su diámetro.

Aunque no es un ejemplo demasiado hala-

gador para los humanos, el principio es el

mismo para la piel y la carne que cubre

nuestros huesos cuando movemos brazos

y piernas.

De nuevo, esta herramienta simplemente

imita a la Madre Naturaleza: el programa

usa un “esqueleto” (Armature) de huesos y

articulaciones como base para mover figu-

ras. Podemos mover los huesos de la misma

forma que se mueve una marioneta. Blen-

der trata los miembros como objetos

elásticos y cambia su forma para adaptarse.

La animación de personajes, es decir,

el arte de dar vida a personajes vir-

tuales, es la contraparte

computerizada de la animación dibujada a

mano. Se reemplaza el tablero de dibujo

por el ordenador, aunque no deja de ser

un trabajo casi artesano. Las animaciones

generadas por ordenador se aprovechan

del aspecto y apariencia realistas que se

les pueden dar. Blender es capaz de pro-

ducir imágenes fotorealistas ofreciendo

algunas ventajas que la animación tradi-

cional nunca disfrutará. Por ejemplo, los

objetos en una escena Blender “interac-

túan” de manera autónoma, calculando

además correctamente las luces y sombras

cuando las figuras 3D cambian de posi-

ción (véase Figura 1).

En el artículo anterior mostramos cómo

crear una imagen 3D con Blender. Este

mes veremos cómo ponerla en movi-

miento haciendo uso de sus herramientas

de animación.

Mover los HilosBlender incorpora poderosas herramientas

para generar imágenes en movimiento.

Estas herramientas trabajan con los

denominados key frames: es decir, no es

Blender no genera sólo fotogramas realistas aislados. También es

capaz de capturar los movimientos naturales de la gente y los

animales. Presentamos algunas de las funcionalidades de animación

de Blender. POR PETER KREUSSEL

Figura 1: Los objetos en Blender pueden

rotarse, y generan sombras exactamente

iguales a las del mundo real.

Page 34: Linux Magazine - Edición en Castellano, Nº 19

PRÁCTICO • Blender

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

Podemos descargar Blender desde su

página Web [1]. Vamos a usar la última

versión del programa en los pasos de este

tutorial. Después de todo, las funciones de

animación son mucho más rápidas en esta

última. Como Blender usa OpenGL para

mostrar el mallado, tendremos que asegu-

rarnos que nuestra tarjeta gráfica soporta

aceleración 3D.

En los siguientes pasos supondremos

que estamos familiarizados con los pasos

básicos en Blender como pueden ser hacer

zoom en la escena y seleccionar objetos.

En caso contrario, puede que sea buena

idea leer previamente el primer artículo de

la serie.

La animación 3D es un proceso compu-

tacionalmente caro. Incluso un pequeño

clip puede contener 20 fotogramas, lo que

significa que el programa tiene que recal-

cular la escena 20 veces. Antes de

lanzarnos a la animación deberíamos sim-

plificar el modelo de mallas. Para ello

pulsamos el botón Editing situado en el

tercio inferior de la ventana (véase Figura

2, item 1), para mostrar el panel Editing de

manipulación de objetos. Pulsamos [Z]

para conmutar entre la vista de malla y la

vista sólida. Es preferible el mallado, y

además es más rápido. También necesita-

mos asegurarnos de que estamos

trabajando en el modo Object Mode y no

en el Edit Mode.

El panel Editting se ha rediseñado en

Blender 2.40. Muchas funciones que esta-

ban confusamente agrupadas en Mesh en

versiones anteriores están ahora agrupa-

das con más lógica en Modifiers. El

suavizado de superficie (Subsurf), que

habilitamos para la mayoría de nuestros

objetos en la primera parte de este tuto-

rial, se agrupa ahora también bajo

Modifiers.

Empezaremos seleccionando la gorra,

luego deshabilitamos el botón destacado a

la derecha de Subsurf, mostrado en la

Figura 2, ítem 2. Esto deshabilita el

mallado del elemento concreto pero sin

que afecte a los resultados finales del ren-

dering. Sin embargo, con ello se acelera

definitivamente la vista previa. Ahora pul-

samos Add Modifier y seleccionamos

Decimate en el menú desplegable. En el

campo Percent: fijamos el valor 0.100, y

pulsamos sobre Apply. Esperamos que

Blender se actualice (es decir, esperamos

mientras los botones cambian de color

cuando posicionamos el ratón encima de

ellos), pulsamos el botón de nuevo, y le

damos a OK cuando nos pregunte Blender.

Repetimos este procedimiento para que

todos los objetos tengan un valor en Deci-

mate / Percent como el mostrado en la

Figura 2. Deshabilitamos la vista previa de

la superficie de los elementos (Figura 2,2)

para el resto de objetos que tengan el valor

Subsurf en Modifiers.

Los HuesosPosicionamos el

cursor como se

muestra en la

Figura 3. Verifica-

mos la posición

desde las vistas

frontal y lateral.

Pulsamos la barra

espaciadora y

seleccionamos Add

| Armature del

menú. Ahora pre-

sionamos [G] y

arrastramos el ratón para mover el punto

final del “hueso” que acabamos de añadir

a la posición de la rodilla (en el medio de

la pierna). A continuación pulsamos [E]

para extrudir hasta añadir un segundo

hueso. Movemos el hueso a una posición

que tenga sentido anatómicamente

hablando. Entonces pulsamos [A] dos

veces para seleccionar ambos huesos. Con

[Shift]+[D] creamos una copia que pode-

mos arrastrar hasta la otra pierna con

ayuda del ratón.

De nuevo pulsamos [A] dos veces para

seleccionar los cuatro huesos. Habilitamos

los botones Draw Name y X-Ray en medio

del área Armature en la parte inferior de la

ventana. En este momento Blender nos

mostrará los nombres de los huesos, desde

Bone hasta Bone.003. Para facilitar las

cosas, puede que queramos asignar nom-

bres más intuitivos. Si la lista de huesos no

encaja en la ventana, podemos arrastrar el

borde del panel inferior un poco hacia

arriba. Llamemos a los huesos ul de “upper

leg” y ll de “lower leg”. Añadimos .L o .R de

left o right (véase Figura 4). La convención

para etiquetar objetos simétricos como .L y

.R es un requerimiento para realizar un

efecto espejo de manera automática, cosa

que haremos más tarde.

Con esto completamos la estructura de

las piernas. Pero si intentamos mover todo

no tendremos mayor efecto en los

resultados del rendering. Los huesos son

simples objetos auxiliares en Blender:

todo lo que hacen es definir los

movimientos y deformaciones del mallado

que los rodea. Para que ocurra eso,

tenemos que indicarle a Blender qué áreas

del entorno de los objetos 3D se dirigen

moviendo los huesos. Este proceso se

denomina skinning, ya que lo que se

hace es poner una piel virtual y flexible

cubriendo los huesos. Queremos que las

piernas con forma de tubo se doblen en

Figura 2: Ahorrando esfuerzos: usamos la

herramienta “Decimator” para reducir el

tiempo de procesado y la memoria necesaria

para el rendering.

Figura 3: Cuando posicionamos el cursor en el espacio 3D, siempre

debemos verificar las dos perspectivas.

Key frames: Un key frame es un

fotograma en vídeo comprimido que

contiene un conjunto completo de

información de la imagen. En Blender,

un key frame es un fotograma donde

fijamos manualmente la posición de un

objeto, en contraposición a los

fotogramas que se generan

automáticamente por el programa.

Glosario

Page 35: Linux Magazine - Edición en Castellano, Nº 19

Blender • PRÁCTICO

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

seleccionamos los huesos. Todo lo que

necesitamos es un simple clic, y los cuatro

huesos pasan a ser sub-elementos del

mismo objeto. Pulsamos [Ctrl]+[P] y

seleccionamos Armature en la ventana

Make Parent que aparece. Ahora seleccio-

namos Create From Closest Bones en el

menú Create Vertex Groups. Los Vertex

Groups representan los huesos superior e

inferior de ambas piernas, que pueden

moverse de forma separada. Ahora pulsa-

mos [Ctrl]+[A] para deseleccionar la

selección actual, y seleccionar sólo las

piernas. Al habilitar el modo edición

encontramos los nombres de los cuatro

huesos en el área Link and Materials bajo

Vertex Groups. Pulsamos [Ctrl]+[A] para

deseleccionar todos los puntos destacados

amarillos, y pulsamos sobre Select bajo

Vertex Groups. Todos los puntos que se

mueven cuando se rota Us.L (la parte infe-

rior de la pierna izquierda), se vuelven

ahora amarillos. Como podemos ver, el

mapeado automático de los puntos del

mallado a los huesos ha funcionado per-

fectamente. Debido a que nuestra figura

no tiene tobillos, tenemos que mover los

pies junto con la parte inferior de las pier-

nas. Pulsamos [B] y seleccionamos los

puntos que faltan. Seguidamente pulsa-

mos sobre Assign para asignarlos al hueso

de la parte inferior de la pierna. Pulsamos

[Ctrl]+[A] para deseleccionar, y repeti-

mos los pasos para la pierna derecha y el

Vertex Group Us.R

¡En Movimiento!

Ya podemos mover las piernas de nuestro

personaje. Salimos del modo edición. Sim-

plemente seleccionamos la estructura de

esqueleto y pasamos a vista lateral. En

lugar de Object Mode, seleccionamos Pose

Mode en la lista del menú Object. Escoge-

mos uno de los huesos inferiores de la

pierna y pulsamos [G]. La rodilla debería

doblarse cuando arrastramos el ratón.

Salimos de la rotación pulsando [Esc] .

Nuestro próximo objetivo es que la

figura corra en la escena. Para ello necesi-

tamos cuatro fotogramas, cada uno de los

cuales representa una fase de la acción de

correr (véase Figura 6). Blender calcula

los pasos intermedios automáticamente.

En el primer fotograma de la secuencia de

vídeo queremos que la figura esté simple-

mente como en la primera parte del

tutorial. Para seleccionar la pose actual

para el sub-fotograma 1 nos aseguramos

primero que el campo en el que se basa el

fotograma actual (Figura 6) contiene un 1.

Pulsamos [A] dos veces para seleccionar

todos los huesos, que deberían volverse

azules. Ahora pulsamos [I] y selecciona-

mos LocRot. Esto le indica a Blender que

guarde la información de posición y rota-

ción de los huesos seleccionados en el

fotograma 1.

A continuación nos vamos al campo del

fotograma 5. En él queremos que nuestro

personaje mueva su pierna izquierda

hacia adelante, su derecha hacia atrás y

que doble las rodillas ligeramente, como

se muestra en la Figura 6. Para permitir

que ocurra esto, seleccionamos el hueso

superior de la pierna en la vista frontal.

Posicionamos el cursor exactamente en la

las rodillas cuando la figura camine, y

queremos que cambien las formas para

reflejarlo. Por tanto necesitamos indicarle

a Blender qué áreas del objeto 3D están

conectadas a qué huesos.

Hasta ahora las piernas se han formado

a partir de un único tubo. Para ser capaces

de asignar la mitad superior de la pierna al

hueso superior, y la parte inferior al hueso

inferior, tenemos en primer lugar que divi-

dirlas. Como éstas siempre se mueven al

mismo tiempo, tiene sentido agruparlas

hasta formar un único objeto antes de

hacer esto. Seleccionamos la pierna

izquierda pulsando el botón derecho del

ratón, mantenemos pulsada la tecla de

[Shift] y añadimos la pierna derecha. Pul-

samos [Ctrl]+[J] para agrupar los dos

objetos. Pulsamos la tecla de [Tabulador]

para habilitar el modo edición. Si vemos

unos puntos amarillo brillante, los desha-

bilitamos pulsando [Ctrl]+[A]. En la vista

lateral, pulsamos [B] y arrastramos un

marco de selección sobre las secciones de

cruce de las partes superior e inferior de la

pierna (véase Figura 5, izquierda). Selec-

cionamos ahora Mesh | Edges | Subdivide

en el menú del borde inferior del área de

dibujo. Un anillo de nuevos asideros

divide la pierna en la posición en la que

necesitamos tener la unión de la rodilla

(véase Figura 5, derecha).

Ahora salimos del modo edición. Nos

aseguramos que el mallado de las piernas

esté habilitado, pulsamos la tecla [Shift] y

Figura 4: Un objeto Blender tiene un sistema de músculo-esqueleto idéntico al de un auténtico

animal. Nuestro personaje animado usa huesos y articulaciones.

Figura 5: Para mover la rodilla, la pierna

tiene que dividirse en dos secciones.

Page 36: Linux Magazine - Edición en Castellano, Nº 19

para navegar por los distintos diseños de

ventana de Blender. Ahora presionamos

[Ctrl]+[izq] para mostrar una vista gene-

ral en la parte izquierda de la pantalla.

Mantenemos pulsada la tecla [Shift] y pul-

samos Camera y desde Lamp.001 hasta

Lamp.003 para eliminar estos objetos de

la selección. Si pulsamos [Ctrl]+[der] vol-

vemos a la disposición normal de

ventanas.

Tenemos que encontrar lo que ha de

moverse la figura en cada paso. Para ello

nos vamos al fotograma 5 y hacemos

zoom para mostrar únicamente los pies.

Contamos los cuadros grandes y pequeños

entre los límites inferiores de los huesos

inferiores de las piernas. La figura tiene

que moverse el doble de lejos en el avance

de cada paso. Ahora seleccionamos el

fotograma 1. El personaje está en el centro

de la pantalla en este momento. Pulsamos

[0 XXXX] en el bloque numérico para con-

mutar la perspectiva de la cámara,

pulsamos ahora [G], [Y] y arrastramos el

personaje hacia atrás hasta una posición

en la que la cabeza esté alineada con la

cámara (se indica con el marco exterior de

puntos). Pulsamos [I] y seleccionamos

LocRot para fijar la posición de partida del

primer fotograma. A continuación nos

vamos al fotograma 20. Pulsamos [G], [Y]

y arrastramos la figura a la izquierda la

distancia que averiguamos anteriormente.

Con [I] y LocRot mapeamos la posición al

fotograma. Ahora, cuando vamos al foto-

grama 1, pulsamos [Alt]+[A], y

deberíamos ver cómo nuestro personaje

comienza a caminar.

Es hora de renderizar. Pulsamos en la

parte inferior de la ventana y presionamos

[F10] para mostrar el panel de

renderizado. La configuración de la

primera parte del tutorial sigue siendo

válida. Renderizar una secuencia puede

llevar un buen rato. Para tener una

primera impresión, puede que queramos

reducir la resolución y hacer

oversampling, lo que crea superficies más

suaves en el proceso de renderizado.

Deshabilitamos el botón OSA en el área

Renderer, y reducimos la resolución

pulsando en 25%. La secuencia

comprende 20 fotogramas, por lo que

necesitamos un valor de 20 en End, que es

el campo situado bajo el botón Play. El

botón grande Anim en el centro de la

ventana inferior da inicio al proceso. El

cursor muestra el número del fotograma.

Blender termina la animación cuando el

cursor vuelve a su estado normal y la

ventana de rendering muestra el último

fotograma de forma permanente.

Cerramos la ventana de rendering y

pulsamos Play para comprobar los

resultados. Si pulsamos [F9] en el tercio

inferior de la ventana volvemos al panel

Editing.

Un Poco Más AlláBlender ha calculado los pasos interme-

dios entre los fotogramas mediante

interpolación. También es posible extrapo-

lar pasos. Esto nos permite que nuestro

personaje camine por toda la pantalla sin

tener que redefinir las posiciones de las

piernas.

Pulsamos [Ctrl]+[izq] para habilitar el

modo pantalla dividida, que usamos ante-

riormente para seleccionar elementos

individuales en una lista. Esta pantalla fue

diseñada especialmente para trabajar con

animaciones. Además de la lista de obje-

tos a la izquierda y la vista previa del

mallado, encontraremos la ventana de IPO

(IPO viene de interpolación) a la derecha.

Esta herramienta nos permite controlar la

manera en la que Blender interpola y

extrapola movimientos.

Habilitamos Armature en la lista de

objetos. Fijamos los dos campos de lista

de la ventana Object Mode / Object a Pose

Mode y Pose, respectivamente.

unión superior de la pierna. Pulsamos [R]

para mover ligeramente la pierna a la

izquierda para reflejar la posición del

paso. Habilitamos el hueso inferior de la

pierna, pulsamos [R], y doblamos ligera-

mente la pierna. Seguimos el mismo

procedimiento para mover la otra pierna

ligeramente a la izquierda, y de nuevo

doblamos la rodilla. Finalmente, habilita-

mos todos los huesos y pulsamos [I] para

guardar los valores de la posición y rota-

ción.

La tercera pose, con la pierna derecha

hacia adelante y la izquierda atrás, es una

imagen especular de la pose del fotograma

5, por lo que no es necesario crearla

manualmente. Para copiar la pose, selec-

cionamos Copy Current Pose en el menú

Pose, y seleccionamos el fotograma 15.

Seleccionamos Paste Flipped Pose. Nos

aseguramos que todos los huesos están

habilitados y guardamos los valores pul-

sando [I].

En el fotograma 20, queremos que la

posición de las piernas vuelvan al punto

de partida del fotograma 1. Para conse-

guirlo, nos vamos al fotograma 1 y

seleccionamos Copy Current Pose. Pega-

mos la pose en el fotograma 20

seleccionando Paste Pose y pulsamos [I]

para guardar. Podemos ahora irnos al foto-

grama 1 y pulsar [Alt]+[A] para mover la

figura en vista previa. El cursor señala qué

fotograma se muestra en cada momento.

Salimos de la animación con [Esc].

Si queremos que el personaje corra de

verdad, por supuesto que tenemos que

moverlo a través de la escena. Esto es fácil

de conseguir con Blender: sólo tenemos

que guardar distintas posiciones de la

figura 1 y 20. Para ello, pulsamos sobre el

área de dibujo y presionamos [A] para

seleccionar todos los objetos. Esto hace

que los objetos se separen del personaje y

también selecciona la cámara y las luces.

Pulsamos [Ctrl]+[izq] y [Ctrl]+[der]

PRÁCTICO • Blender

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

Figura 6: Un paso de la figura animada requiere 4 key frames. Blender genera automáticamente los fotogramas intermedios.

Page 37: Linux Magazine - Edición en Castellano, Nº 19

Seleccionamos uno de los huesos

inferiores en la vista previa. Las curvas

coloreadas en la ventana derecha

representan la posición del objeto y la

rotación del hueso. El eje X muestra el

tiempo transcurrido en fotogramas. El eje

Y muestra el movimiento/rotación en

unidades Blender.

Podemos usar la rueda del ratón para

cambiar la escala de tiempo del movi-

miento y el botón central del ratón para

cambiar la selección. Arrastramos el ratón

hasta la ventana IPO, y presionamos [A]

para seleccionar todos los puntos del grá-

fico. Ahora, cuando seleccionamos Curve |

Extend Mode | Cyclic en el menú bajo la

ventana, todas estas curvas se extienden

cíclicamente por toda la pantalla.

Fijamos los valores del campo End: a

100, y pulsamos [Alt]+[A] mientras

posicionamos el ratón sobre la vista previa

del personaje. Los 20 primeros fotogramas

nos son familiares. Entonces el

movimiento hacia adelante se detiene

pero las piernas siguen moviéndose. El

movimiento cíclico de las piernas se ha

extrapolado y el personaje corre en todos

los fotogramas, pero el movimiento lineal

de la figura completa no se ha extrapolado

más allá.

Seleccionamos Curve.001 en la lista de

objetos. Suponiendo que tenemos un fac-

tor de zoom y un segmento de vista

adecuados, veremos que la línea naranja

mostrada como LocY (= posición en la

dirección Y) en el gráfico, es al principio

constante, luego va de 0 a 20, y luego

vuelve a ser constante. Esto refleja el

movimiento de nuestro personaje ani-

mado, que comienza en el fotograma 0 y

termina en el fotograma 20. Pulsamos [A]

mientras posicionamos el ratón sobre la

ventana IPO. Seleccionamos entonces

Curve | Extend Mode | Extrapolation en el

menú bajo la ventana. La línea naranja

LocY se desarrolla entonces por todo el

sistema de coordenadas. Podemos usar

esta técnica para extrapolar el movimiento

de todos los objetos, excepto World,

Camera, y de Lamp.001 hasta Lamp.003.

Seleccionamos Object Mode/ Object en

ambas ventanas para el objeto Armature

en esta ocasión. Se creó anteriormente el

movimiento de las piernas en Pose Mode,

sin embargo, el movimiento lineal de la

figura se ha definido en Object Mode.

Blender soporta dos sistemas de anima-

ción en este caso.

Ahora ya podemos configurar los últi-

mos fotogramas para permitir que la

figura se mueva completamente fuera de

la escena. Con [F10] accedemos a los con-

troles de rendering. Seleccionamos el

directorio donde guarda Blender la anima-

ción terminada, dentro de Output. Por

defecto el programa guarda los fotogramas

como imágenes individuales jpeg. Esto

puede modificarse en Format abajo a la

izquierda. Seleccionamos AVI Jpeg en

lugar de Jpeg.

Nuestro personaje animado puede

mover sus piernas, aunque su apariencia

es bastante rígida. Las técnicas de anima-

ción que hemos examinado en este

artículo nos ayudarán a seguir aplicándo-

las a todo el sistema locomotor de la

figura (podemos mover los brazos para

acompasar a las piernas, e indicarle que

mueva la cabeza, por ejemplo). Los pro-

fesionales usan técnicas similares cuando

diseñan huesos y articulaciones de sus

personajes en Blender para imitar expre-

siones faciales.

Si necesitamos algo de inspiración tras

el duro trabajo, podemos pasarnos por la

Web, donde el equipo de Pixar describe el

desarrollo de la producción de “Toy Story

2” en [2]. �

Blender • PRÁCTICO

[1] Descarga de Blender: http://www.

blender.org/cms/Blender.31.0.html

[2] “Toy Story 2”, de Pixar: http://www.

pixar.com/howwedoit/index.html

RECURSOS

Figura 7: De un fotograma a un ciclo: Blender puede repetir secuencias de animación un cierto

número de veces.

Page 38: Linux Magazine - Edición en Castellano, Nº 19

Personalización de la Ventana Emergente de Contraseñas

CONTRASEÑAS CON TRUCO

PRÁCTICO • Contraseñas

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

es completamente personalizable. En esteartículo se va a mostrar cómo funciona estemecanismo y cómo modificar su comporta-miento por defecto.

consolehelper y userhelperLos dos paquetes que hacen esto posible sedenominan usermode y user-mode-gtk. Elpaquete usermode contiene dos herramien-tas que son importantes: consolehelper yuserhelper. El paquete user-mode-gtk, por su

parte, contiene la ventana gráfica emergentey unas cuantas herramientas.

consolehelper y userhelper funcionan con-juntamente para permitir a un usuariodistinto de root ejecutar un programa que setenga que ejecutar como root. Considérese,por ejemplo, el sniffer de red Ethereal. Ethe-real requiere los privilegios de root porquenecesita establecer la tarjeta de red a modopromiscuo.

En una instalación por defecto, el menúestá configurado de modo que si se selec-ciona Ethereal, se ejecuta el programa/usr/bin/ethereal. Este programa es unenlace simbólico a consolehelper:

$ ls -l /usr/bin/ethereal

lrwxrwxrwx 1 root root U

13 aug 11 20:01 U

/usr/bin/ethereal -> U

consolehelper

Cuando se ejecuta consolehelper,arranca userhelper. Los permisosde userhelper están establecidos a

SUID root, así que se ejecutacomo root cuando se le invoca.

Si un programa es SUID,cuando se ejecute lo hará

con todos los privilegiosdel usuario al que

pertenece. Comouserhelper tienecomo

propietario al usuario root y SUID, seejecutará con todos los privilegios de root.Cuando consolehelper ejecuta a userhelper, lepasa el nombre del programa que deseaejecutar (en nuestro ejemplo, Ethereal) auserhelper, el cual intentará autenticar alusuario. Si la autenticación tiene éxito,userhelper (ejecutándose como root)ejecutará el programa como root.

El programa userhelper comprueba pri-mero un fichero de configuración paradeterminar qué programa debe ejecutar real-mente, además de examinar otras opcionesde configuración. A continuación, userhelper

invoca al sistema PAM (Pluggable Authenti-cation Modules) para ver si el usuario tienepermiso para ejecutar el servicio. Si el servi-cio está permitido, entonces se ejecuta elprograma real. Si el usuario ha fallado a lahora de autenticarse correctamente, se mues-tra un mensaje de error (Figura 2).

Los ficheros de configuración para userhel-

per se encuentran en/etc/security/console.apps/.userhelper. Laconfiguración para Ethereal es la siguiente:

USER=root

PROGRAM=/usr/sbin/ethereal

SESSION=true

FALLBACK=true

En este ejemplo el programa solicitará la con-traseña del usuario root. Si la autenticaciónvía PAM tiene éxito, se ejecutará el programaubicado en /usr/sbin/ethereal. La variableSESSION indica si se tiene que utilizar o no elgestor de sesiones de PAM.

Para las aplicaciones gráficas, comoEthereal, es necesario el gestor de sesiones.La variable FALLBACK se utiliza paradeterminar si el programa debe ejecutarseaunque falle la autenticación. El programa se

Si se está usando la versión de LinuxRed Hat Enterprise o una versiónderivada de Red Hat, como Fedora

Core o CentOS, probablemente se estéfamiliarizado con la ventana emergenteque solicita la contraseña de root antes deejecutar un programa que deba ejecutarsecomo root (Figura 1).

La mayoría de los programas que utilizaneste mecanismo de autenticación sonherramientas que necesitan privilegiosextras en el sistema. Un ejemplo de estaclase de herramientas es un programa querequiera acceder de forma directa a la tar-jeta de red o un programa que necesiteacceso de escritura a directorios con infor-mación de configuración.

Puede que no se sepa que el mecanismocompleto detrás de esta ventana emergente

Vamos a mostrar algunos trucos para configurar la ventana emergente

de contraseñas de root en los sistemas basados en RedHat.

POR ARMIJN HEMEL

Figura 1: Los usuarios de Red Hat estánfamiliarizados con la ventana que solicita lacontraseña de root.

38

Page 39: Linux Magazine - Edición en Castellano, Nº 19

ejecutará, por supuesto, sin todos losprivilegios y no estarán operativas todas lasfunciones. En el caso de Ethereal, puede leerlos volcados de la red, pero no será capaz decrear ninguno.

Otra parte de la configuración se realizavía PAM. Estos parámetros, que se puedenencontrar en /etc/pam.d, siguen el estándarPAM.

Esta solución tiene un punto débil: si eldirectorio que contiene el programa “real”(en este caso /usr/sbin) se encuentra antesen la variable $PATH que el directorio dondese encuentra consolehelper (por defecto,/usr/bin), consolehelper no será invocado pri-mero y el programa no funcionará o no lohará con los privilegios adecuados. Hay quetener esto en cuenta si se decide rehacer elorden en el que son buscados los directoriosen el $PATH.

Adaptaciones SencillasPersonalmente siempre he creído que es unpoco peligroso cuando las credenciales pasanpor la caché. Probablemente haya visto elpequeño icono keyring en alguna de lasbarras de menú tras introducir la contraseñade root con el mecanismo usermode (Figura3). Si este keyring está visible, se pueden

ejecutar programas que de otro modorequerirían la introducción de la contraseñade root vía usermode.

Muchos programas poseen por defectoesta regla en su fichero de configuraciónPAM :

session optional U

pam_timestamp.so

Esta configuración implica que PAM manten-drá una marca de tiempo. Cuando unprograma tiene esta regla en su fichero deconfiguración PAM, comprobará primero siya se ha hecho una autenticación válida y siestá en la caché:

auth sufficient U

pam_timestamp.so

Comentando las reglas mencionadas ante-riormente se impedirá que las credencialesdel usuario se almacenen en la caché des-pués de una autenticación válida e impedirálas autorizaciones utilizando las credencialesde la caché.

Uso AvanzadoDigamos que se desea controlar qué usuarios

Contraseñas • PRÁCTICO

pueden ejecutar ciertos programas. Para elloexisten varios mecanismos. El primero es pormedio de la configuración de consolehelper;el otro, y más potente, es por medio de PAM.

Si se está configurando consolehelper, sepuede evitar que los usuarios tengan que uti-lizar la contraseña de root permitiendo quese autentiquen con sus propias contraseñas.En la configuración de userhelper en/etc/security/console.apps/ hay que cambiarla autenticación como root a lo siguiente:

USER=<user>

Si se hace esto, se le pedirá la contraseña delusuario. Si ésta se introduce correctamentese ejecutará el programa. Téngase en cuentaque aunque se utilice otra contraseña esto nocambia nada con respecto a los privilegiosdel programa. El programa que se ejecute lohará aún como root, así que hay que asegu-rarse de hacerlo con cuidado.

Si se establece USER a la variable especial<none>, no se permitirá ningún acceso:

USER=<none>

Si se intenta ejecutar Ethereal ahora, seobtendrá un error y el programa no se

Page 40: Linux Magazine - Edición en Castellano, Nº 19

En la configuración de PAM, añado lasiguiente regla:

account required U

pam_localuser.so U

file=/etc/localusers

Ahora cuando se intenta ejecutar Etherealpor medio de usermode, también se com-prueba si el usuario está o no en/etc/localusers. Antes de que esto funcionelimpiamente, hay que realizar un cambiomás: el usuario que consolehelper auten-tica debería ser cambiado de root alusuario actual. Si no, el sistema compro-bará si el root está en /etc/localusers envez de comprobar al usuario real. Laconfiguración para Ethereal debería cam-biarse a:

USER=<user>

PROGRAM=/usr/sbin/ethereal

SESSION=true

FALLBACK=true

Si elimino al usuario armijn de este fichero,ya no podré ejecutar más el programa Ethe-real con todos los privilegios, excepto comoroot. Con el módulo localuser de PAM, sepueden tener ficheros separados con per-misos para cada programa.

Otro uso para este módulo particular esel control de los comandos poweroff, halt yreboot. En Red Hat Linux (y sus derivados)estas herramientas son también controla-das por usermode. Añadiendo un ficherodonde se encuentren los usuarios autoriza-dos, se puede controlar qué usuariosposeen qué privilegios. Por ejemplo, pue-den controlarse los que tienen el permisode apagar la máquina. Estos tres comandostambién utilizan otro módulo PAM intere-sante denominado pam_console, quecomprueba si el usuario está actualmenteconectado en una consola local.

Dos de las reglas en la configuración dePAM para estos comandos son:

auth sufficient U

pam_rootok.so

auth required U

pam_console.so

El significadode estas reglases el siguiente:sólo el usuarioroot y el usua-rio queactualmenteesté conectadoen la consolapueden apagarel sistema, pararlo o reiniciarlo. Los usua-rios que se hayan conectadoremotamente, excepto el root, no tienenpermiso para apagar o reiniciar el sis-tema. Eliminando la segunda regla, elusuario que está conectado actualmenteen la consola no podrá realizar estasacciones, excepto si dicho usuario es elroot. Desde luego, aún se puede apagarel sistema utilizando GDM.

ConsejoLas técnicas descritas en este artículoson útiles en algunos entornos, pero enotros casos, puede que resulten total-mente innecesarias. Antes de empezara recompilar el sistema completo paraque soporte usermode, debería tenerseen cuenta que las herramientas quehacen uso de usermode poseen unacaracterística en común: tienen queacceder a ficheros que normalmente notienen que ser accedidos o modificadospor la mayoría de los usuarios morta-les.

A menudo no hay razón para modifi-car la seguridad del sistema pordefecto. Antes de decidirse a utilizarusermode para restringir el acceso a losprogramas, debería comprobarse siestas opciones valen realmente elesfuerzo y asegurarse de que no se estácomplicando innecesariamente laconfiguración de la seguridad.

Para Más InformaciónSi se necesita más información, sepuede comenzar con las páginas mande consolehelper y userhelper. Lapágina man de userhelper es especial-mente útil. Existen multitud derecursos de ayuda para PAM. Es posi-ble iniciarse con la página web deLinux-PAM, que se puede encontrar enhttp://www.kernel.org/pub/linux/libs/

pam/. Otra buena fuente sobre PAM esel libro Essential System Administra-

tion, 3rd edition de AEleen Frisch,publicado por O’Reilly. �

ejecutará (Figura 4). Probablemente se estépreguntando para qué es útil estacaracterística. Uno de los otros parámetros deconfiguración es UGROUPS. Éste puede serestablecido a una lista separada por comasde grupos. Los miembros de estos grupos seautenticarán como si sus nombres hubiesensido establecidos en el fichero deconfiguración (USER=<user>). Es decir,serán autenticados con sus propiascontraseñas. Si la configuración contieneUSER=root, todos los demás usuariostendrán que introducir la contraseña de root.Si se utiliza al mismo tiempoUSER=<none> y UGROUPS en el ficherode configuración, se podrá asignar a losmiembros de ciertos grupos la posibilidad deejecutar programas sin que tengan queconocer la contraseña de root. De este modose puede crear un comportamiento parecidoal de sudo.

Personalización con PAMPAM ofrece una gran variedad de módu-los, incluyendo opciones para autenticar alos usuarios con una base de datos o conalgún hardware simbólico e incluso conherramientas de reconocimiento de voz.En este artículo tan sólo se van a propor-cionar unos cuantos ejemplos de cómoutilizar PAM dentro de consolehelper.

Sólo quiero que algunos de mis usuariospuedan husmear el tráfico de red de deter-minadas máquinas conectadas en mi red.Para ello, PAM posee un módulo denomi-nado pam_localuser. Normalmentecomprueba en /etc/passwd si cierta cuentaestá listada, aunque también puede confi-gurarse para que utilice un ficheroseparado. Para ello, mantengo a los usua-rios a los cuales deseo darles el permisoen un fichero denominado /etc/localusers,al cual sólo el usuario root tiene permisopara leerlo y escribirlo. En este fichero tansólo tengo a dos usuarios y posee elmismo formato que /etc/passwd:

root:x:0:0::

armijn:x:500:500::

PRÁCTICO • Contraseñas

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

Figura 4: El usuario noposee los permisoscorrespondientes paraejecutar el programa.

Figura 2: El usuario falla a la hora de

autenticarse correctamente.

Figura 3: Si el sistema posee credenciales

para el usuario, el keyring será visible en el

panel.

Page 41: Linux Magazine - Edición en Castellano, Nº 19

Antigüedades • PRÁCTICO

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

Aprovechando ordenadores viejos con software libre

ANTIGÜEDADESAprovechando ordenadores viejos con software libre

ANTIGÜEDADES

instalación gráfica que consume

muchos recursos, no será adecuado en

muchos casos para ordenadores

antiguos. Pero la mayoría de los

sistemas ofrecen una instalación a base

sólo de texto. Debian, por ejemplo,

renuncia completamente a una

instalación gráfica.

Después de una instalación con éxito

hay que procurar un uso moderado de

los recursos. Por ejemplo, en vez de

escritorios lujosos como KDE o Gnome,

vale la pena echar un vistazo a un

administrador de ventanas ligero. La

página web XWinman [5] ofrece infor-

mación y enlaces sobre este tema.

Damn Small LinuxLa base ideal para probar el potencial

de un ordenador antiguo son distribu-

ciones live como Knoppix, Kanotix o

Damn Small Linux (DSL, en inglés:

Linux Condenadamente Diminuto).

Esta última se puede encontrar en la

página web del proyecto en [6] y es

especialmente adecuada para el uso en

máquinas viejas. Esta distribución,

basada en Debian, sólo tiene 50 MBytes

y funciona también en ordenadores con

un procesador 486 y 16 MBytes de

memoria RAM. DSL no solamente fun-

ciona muy bien como distribución live,

sino que también la podemos instalar

en nuestro disco duro en pocos pasos.

Si nuestro ordenador puede iniciarse

desde el CD-ROM, introducimos un

disco con DSL y arrancamos de nuevo.

Como alternativa, podemos consultar el

cuadro “DSL desde disquete”, donde se

Linux y hardware viejo ¿un cho-

que entre dos mundos

diferentes? Las distribuciones

modernas con un programa de instala-

ción gráfica proporcionan poca alegría

en ordenadores lentos. Los escritorios

como KDE o Gnome sobrecargan las

máquinas de generaciones más anti-

guas. Pero esto no significa que haya

que deshacerse de ellas, todo lo contra-

rio, se les puede sacar un buen

provecho usando distribuciones ade-

cuadas dependiendo de las

características de nuestra máquina,

para lo cual dispondremos de varias

distribuciones Linux a elegir con las

que se podrán obtener buenos resulta-

dos. El cuadro “Generaciones

Antiguas” presenta varios modelos y

recomienda una distribución para cada

tipo de hardware.

Amplia ofertaSi nuestra distribución favorita viene

solamente con un programa de

Si nuestro ordenador es una pieza de museo que lleva años acumulando polvo, con un procesador viejo y a

falta de memoria RAM, es más que posible que muchas de las distribuciones modernas no funcionen en él.

Pero esto no es un problema: otras muchas distros diferentes encuentran en máquinas paleolíticas su

mejor entorno para funcionar. POR HEIKE JURZIK

Page 42: Linux Magazine - Edición en Castellano, Nº 19

PRÁCTICO • Antigüedades

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

explica cómo se genera un disquete de

inicio y cómo se arranca el sistema con

él. Comprobamos que el orden de inicio

está bien puesto en la BIOS: el First

Boot Device (en inglés: primer disposi-

tivo de arranque) debería poner

CDROM y como Second Boot Device, o

sea como segundo, el disco duro (HDD-

0). Después de un momento debería

aparecer la pantalla de inicio y el

prompt de arranque.

Igual que en otras distribuciones live,

controlamos el inicio del sistema con

palabras o teclas clave, que son pará-

metros opcionales de arranque que

introducimos en el prompt boot: (tam-

bién es posible usar combinaciones).

Pulsamos la tecla [F2] o [F3] para obte-

ner una lista de los comandos. La tabla

“DSL: Palabras clave” reúne los más

importantes.

Listo paraempezarDespués de poco

tiempo nos

saluda el escrito-

rio DSL. El

administrador de

ventanas prede-

terminado es

Fluxbox (Figura

1). Si no nos

gusta el diseño de

Fluxbox, nos

podemos cambiar

a Joe’s Window

Manager (JWM)

pulsando el botón

derecho de nuestro ratón y eligiendo

Window Manager / Switch to jwm

desde el menú contextual.

En el escritorio hay varios iconos que

sirven como atajo a las aplicaciones

instaladas. Si pulsamos el botón

Figura 1: Damn Small Linux usa Fluxbox como administrador deventanas.

Según la característica del equipo, las dis-

tintas distribuciones son más o menos

aptas para el uso de Linux:

i486 (80486), año 1990 hasta 1995

• CPU: i386/i486 (80386/80486), ca. 50

hasta 100 MHz

• Memoria RAM: entre 8 y 16 MBytes

• Disco duro: entre 200 y 500 MBytes

• Sistema Bus: ISA, VESA, (PCI)

• Gráfico: 1 hasta 4 MByte ISA o PCI

Las distribuciones modernas requieren,

incluso para la instalación más pequeña,

un espacio en el disco duro de 1 GByte

como mínimo. Varios de los servicios que

arrancan automáticamente necesitan ade-

más una memoria RAM mínima de entre

30 y 50 MBytes incluso sin sistema gráfico.

Por ello los ordenadores de esta genera-

ción sirven exclusivamente para las

distribuciones mini, como por ejemplo

Damn Small Linux [1]. Como alternativa

existe además Puppy Linux [2]. Pero el

mejor uso para semejante hardware sería

sin duda la configuración como firewall o

router con CoyoteLinux [3] o TinyLinux [4].

Pentium, año 1994 hasta 1997

• CPU: Pentium, ca. desde 60 a 233 MHz

• Memoria RAM: desde 32 a 128 MBytes

• Disco duro: desde 500 MBytes a 2

GBytes

• Sistema Bus: PCI, ISA, VESA

• Gráfico: 8 hasta 32 MByte PCI o ISA

Los ordenadores de esta generación no

están todavía lo suficientemente dota-

dos para el uso de los sistemas

modernos de Linux, pero normalmente

pueden instalarse sin problemas distri-

buciones más viejas como Suse Linux

6.0 o Red Hat 6.2. Aunque tampoco

debían esperarse récords de velocidad

con estas distribuciones, ya que los

entornos gráficos de Gnome y KDE

consumían ya en este época muchos

recursos. Como alternativa pueden

recomendarse escritorios ligeros como

IceWM, que necesitan mucha menos

potencia de cálculo y espacio de

memoria. Lo más conveniente es el uso

de una distribución mini como Damn

Small Linux, ya que apenas existen

actualizaciones o software parcheado

para otras distros más antiguas.

Pentium II, año 1997 hasta 2001

• CPU: Pentium II, ca. desde 233 a

1.400 MHz

• Memoria RAM: desde 64 a 256

MByte

• Disco duro: 4 GByte hasta 20 GByte

• Sistema Bus: PCI, AGP

• Gráfico: 16 hasta 64 MByte PCI o AGP

Los ordenadores con estas característi-

cas están adecuados bajo ciertas

limitaciones para el uso de las distribu-

ciones actuales. Así, para poder

trabajar sin problemas, el ordenador

debería tener por los menos 128 MByte

de memoria RAM y un procesador de

500 MHz. Si las características del

equipo están por debajo de estos valo-

res, las distribuciones más adecuadas

serían por ejemplo Suse Linux hasta la

versión 8.0. Además es recomendable

renunciar a derrochadores de recursos

como KDE y usar Gnome como

entorno gráfico para el escritorio.

Generaciones Antiguas

dsl lang=us (cs, da, de, es, fr, nl, it, pl, ru, sk, …) Configura el idioma/disposición del teclado. Por ejemplo: dsl lang=es para cambiar al Español.

dsl toram Carga la distribución entera en la memoria RAM, para ello hacen falta por lo menos 128 MByte RAM.

dsl tohd=/dev/hda1 Copia el CD a una partición del disco duro (en este caso /dev/hda1) y reinicia luego el sistema desde allí.

dsl restore=sda1 (hda1, floppy) Integra la configuración guardada en el arranque.

dsl fromhd=/dev/hda1 Arranca DSL desde la partición indicada.

dsl dma Activa DMA (“Direct Memory Access”).

dsl 2 Arranca el sistema en el runlevel 2 (= modo de texto).

Tabla 1: DSL: Palabras clave

Page 43: Linux Magazine - Edición en Castellano, Nº 19

Antigüedades • PRÁCTICO

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

instalación. Aquí configuramos por

ejemplo la tarjeta de red, una conexión

a Internet, el diseño del teclado, fecha

y hora, tarjetas WIFI o PCMI, el

servidor SSH y mucho más (Figura 2).

Si nos falta algo, probablemente lo

encontraremos en el menú System al

que se puede acceder con un clic con el

botón derecho encima del fondo de

pantalla.

Si estamos conectados a Internet, la

instalación posterior de componentes

suele ser igual de fácil. Pulsamos el

icono MyDSL y elegimos la aplicación

que queremos entre las categorías ofre-

cidas. Después de la descarga, la

encontramos en el menú MyDSL que

sale con un clic con el botón derecho

encima del fondo de pantalla.

Para siemprePara guardar nuestras propias configura-

ciones, arrancamos el DSLpanel y

elegimos el punto “Backup/Restore”. En

la ventana que aparece introducimos el

nombre del dispositivo, por ejemplo fd0

para la disquetera, sda o sda1 para un

dispositivo de memoria flash USB, hda1

para una partición del disco duro, etc., y

pulsamos “Backup”. El sistema guarda

unas subcarpetas de /opt en la carpeta

home predeterminada. Este comporta-

miento está definido en el archivo

/home/dsl/.filetool.lst. Los datos que

quedan excluidos automáticamente de la

copia de seguridad se encuentran en

/home/dsl/.xfiletool.lst.

Para la integración de la copia de seguri-

dad desde el arranque introducimos como

palabra clave dsl restore= seguido por el

nombre del dispositivo donde se encuentra

la copia de seguridad, o arrancamos otra

vez “Backup/Restore” desde el DSLpanel.

Aquí introducimos también el dispositivo y

a continuación pulsamos “Restore”.

Para la instalación de Damn Small

Linux en el disco duro, se necesitan al

menos una partición Swap y una parti-

ción Linux. El Wiki en inglés en la

página de DSL explica los detalles de la

preparación e instalación [8]. Existen

varios maneras de instalar Damn Small

Linux: bien introducimos la palabra

clave install detrás del boot prompt al

inicio, bien abrimos el asistente de insta-

lación. Para esto último, escribimos en

una terminal del sistema

$ sudo dsl-hdinstall

En los dos casos es preciso responder

las preguntas sobre la partición dese-

ada, las cuentas de usuarios y el

sistema de archivos. Si estamos segu-

ros, decimos sí con la tecla [Y] a la

última confirmación (Figura 3). Le

siguen preguntas sobre el Bootloader

(gestor de arranque. Se puede elegir

entre Grub y Lilo) e información sobre

el estado de la instalación. A conti-

nuación el programa de instalación

nos pide el reinicio y listo.

ResumenLos ordenadores siguen siento apara-

tos valiosos, incluso si no están

hechos para el uso de distribuciones

modernas. Lo que cuenta es la elec-

ción de un sistema operativo

adecuado que se adapte a las caracte-

rísticas de la máquina. Si podemos

renunciar a escritorios complejos

como KDE o Gnome, vale la pena

aprovechar las pequeñas y potentes

distribuciones como Damn Small

Linux. �

derecho del ratón encima de un espacio

libre del fondo encontramos más

programas en el menú contextual.

Como última entrada en este menú

vemos el punto “Power down” que

sirve para apagar o reiniciar el

ordenador.

Por defecto no hay ninguna contra-

seña root: en el shell podemos

conseguir derechos de administrador, si

tecleamos

$ sudo su

o si ponemos sudo por delante de los

comandos que queremos ejecutar como

root. Aunque en Damn Small Linux la

mayoría de las tareas administrativas se

realizan de manera muy cómoda con

un click de ratón: en el símbolo

DSLpanel tenemos un interfaz para

llegar a las distintas opciones de la

Figura 2: En el “DSLpanel” se pueden

configurar las partes más importantes del

sistema.

Figura 3: Damn Small Linux viene con unscript que permite su instalación en el discoduro .

[1] Damn Small Linux: http://www.

damnsmalllinux.org/

[2] Puppy Linux: http://www.puppylinux.

org

[3] Página web de CoyoteLinux: http://

coyotelinux.com/

[4] Proyecto TinyLinux: http://tiny.seul.

org/en/

[5] Vista general de los distintos admin-

istradores de ventanas para Linux:

http://xwinman.org/

[6] Página de descarga para DSL: http://

www.damnsmalllinux.org/download.

html

[7] RawWrite para Windows: http://

uranus.it.swin.edu.au/~jn/linux/

rawwrite.htm

[8] DSL-Wiki: http://www.

damnsmalllinux.org/wiki/

Recursos

Si el ordenador no arranca desde el CD-

ROM, creamos un disquete de arranque

con los siguientes pasos:

1 Abrimos la página web de DSL y des-

cargamos el archivo bootfloppy.img [6].

2 Para generar este disquete bajo Win-

dows, necesitamos el programa

RawWrite. Las instrucciones y la herra-

mienta se encuentran en [7]. Para Linux

escribimos la imagen al disquete en la

línea de comandos con lo siguiente:

dd if=bootfloppy.img of=/dev/fd0

Luego reiniciamos el ordenador con el

disquete introducido en la unidad. Pro-

curamos que la BIOS tenga el orden de

arranque correcto para que la máquina

busque el sistema operativo primero en

el disquete y luego en el CD.

Arranque desde disquete

Page 44: Linux Magazine - Edición en Castellano, Nº 19

programación. Ambos analizanexpresiones arbitrariamente comple-jas para validarlas sintácticamente yayudan a traducir estas expresiones

complejas desde un formato com-prensible para las personas aformato de lenguaje máquina.

La verdad es que hoy día es raro

que tengamos que escribir nuestro

propio parser, ya que la información

está frecuentemente en formato

XML, existiendo muchos parsers

sencillos de utilizar capaces de

manejar esta información XML. Pero

si necesitamos analizar y evaluar

fórmulas tecleadas por los usuarios,

no existe más remedio que crear

nuestro propio parser.

Análisis finalSi tenemos que evaluar una expre-

sión como 5+4*3, en primer lugar

será necesario aislar los operadores

de los operandos. Como muestra la

Figura 1, el llamado lexer extrae pri-

mero los símbolos 5, +, 4, * y 3 de

la cadena. Estas cadenas, a las que

llamamos tokens, alimentan al par-

ser, que verifica si tienen sentido

desde el punto de vista matemático.

Para ello, el parser crea general-

mente una estructura de árbol que

luego usa para verificar si la expre-

sión pasada sigue las reglas de una

gramática previamente definida. La

gramática especifica también cosas

como la precedencia de los operado-

res (por ejemplo, PEMDAS:

paréntesis, exponentes, multiplica-

ción, división, adición,

substracción) o la asociatividad (de

izquierda a derecha, o viceversa).

Tras averiguar el significado

exacto de la expresión, el ordenador

ya puede evaluarla. La parte inferior

Los lexers y parsers son herra-mientas cotidianas para losdiseñadores de compiladores e

inventores de nuevos lenguajes de

DESARROLLO • Perl

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

Creamos un analizador sintáctico con Perl

ARTISTA DE LACOMPILACIÓNLos analizadores léxicos y sintácticos no son sólo para barbudos gurús. Este mes mostramos cómo podemos

crear un parser para nuestras propias aplicaciones. POR MICHAEL SCHILLI

Page 45: Linux Magazine - Edición en Castellano, Nº 19

de la Figura 1 muestra un ejemplo de

procesador RPN (RPN: Notación

Polaca Inversa). La máquina virtual

acumula tanto números como opera-

dores en la pila, y luego intenta

reducir las combinaciones operando-

operando-operador a valores. En la

Figura 1, en primer lugar 4 3 * se

reduce a 12, y la combinación de la

parte superior de la pila, 5 12 +,

resulta 17, que es el resultado

correcto de cálculo original 5+4*3.

Por supuesto, nada nos impide

pasarle una cadena como 5+4*3 a la

función eval de Perl, que aplicará las

reglas matemáticas de éste para cal-

cular las expresiones. Pero si la

expresión contiene variables, opera-

dores que no entiende Perl, o

incluso construcciones if-else, es

decir, si manejamos un lenguaje de

programación en miniatura, no ten-

dremos alternativa a un verdadero

parser.

Volviendo al lexer: tenemos que

ignorar los espacios en blanco de la

cadena que estamos evaluando. Es

decir, de la expresión 5 +4 *3 tiene

que resultar 5+ 4*3. Sin embargo, el

análisis léxico no es siempre tan

trivial como este ejemplo. El

operando puede ser un número real

como 1.23E40, o incluso una función

como sin(x), la cual tendríamos que

separar en sin, (, x y ). CPAN tiene

el módulo Parse::Lex para análisis

léxicos como éste. Cuando se instale

el módulo, debe tenerse en cuenta

que se requiere al menos la versión

0.37 del módulo Parse::Template.

El script mathlexer (Listado 1)

muestra un ejemplo. Aguarda una

expresión arbitrariamente compleja

como entrada y se la pasa al lexer. El

lexer devuelve el tipo de token y el

contenido del token, que se pasan

como salida para propósitos de

prueba.

El módulo que usa mathlexer,

MathLexer.pm, define la clase Math-

Lexer, que proporciona el

constructor new para aceptar una

cadena para el análisis léxico (Lis-

tado 2). Luego pasa a verificar si la

cadena coincide con una serie de

expresiones regulares guardadas en

el array @tokens. Para cada lexema

que encuentra el método next, el

lexer devuelve dos valores (un

lexema es una secuencia de caracte-

res encontrado por el lexer a partir

del cual se genera un token).

El primer elemento de la referencia al

array devuelto es el nombre del token

que ha encontrado el lexer (por ejem-

plo, “NUM”, “OPADD” o “RIGHTP”). El

segundo elemento contiene el valor

realmente encontrado en el texto anali-

zado (por ejemplo, “4.27e-14”, “+” o

“)”). La figura 2 muestra la salida de

prueba, que se usará para alimentar el

parser en una situación real.

Nótese que Parse::Lex aguarda

expresiones regulares como cadenas

en el array @token. Esto significa

que necesitamos evitar las barras \\

si no queremos que símbolos como *

se interpreten como metacaracteres

de expresiones regulares. Como las

expresiones tal que \\*\\* son difí-

ciles de descifrar, MathLexer usa una

expresión regular idéntica, pero con

un aspecto algo extraño: “[*][*]”,

para la definición del primer token.

No es nada sencillo formular una

expresión regular que cubra las dife-

rentes maneras de representar un

número real (por ejemplo, 1.23E40,

.37, 7, 1e10). Afortunadamente, el

módulo de CPAN Regexp::Common

tiene expresiones preconstruidas

para muchas tareas, incluyendo una

para números reales con todo tipo de

detalles. Tras realizar la llamada use

Regexp::Common en el programa,

podemos usar un hash global para

aprovechar estas perlas de la sabidu-

ría en expresiones regulares. La

expresión para números reales

puede recuperarse con un simple

$RE{num}{real}.

Por cierto, esta expresión también

permite un signo menos opcional

delante del número real. Pero debido

al orden elegido de los lexemas

detectados en @tokens, el lexer

supondrá que un signo menos prece-

dente es un OP. Sin embargo, si el

signo menos está en el exponente

del número real, el lexer lo toma

como parte del lexema NUM.

Adicionalmente, el método skip

llamado en la línea 32 del Listado 2

asegura que el lexer ignora los espa-

cios y caracteres de nueva línea. Sin

embargo, si el método skip se topa

con una secuencia de caracteres que

no reconoce (como con }), se usa el

pseudo-token ERROR de la línea 19.

Este token define una rutina de

manejo de errores, que usa el

comando die para indicarle al lexer

que finalice.

¡Tokens Por Favor!El parser verifica entonces la validez

sintáctica de una expresión. 4+*3

sería inválida. Queremos que el par-

ser reporte un error en este caso y

cancele el procesamiento. En

muchos casos, los parsers no sólo

Perl • DESARROLLO

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

Figura 1: El lexer convierte la cadena a tokens, y el parser crea el árbol de parseo. El traductor

convierte esto a Notación Polaca Inversa (RPN) y calcula el resultado aplicando un sencillo

algoritmo.

Page 46: Linux Magazine - Edición en Castellano, Nº 19

tuberías “|” a la derecha de los dos

puntos. add (suma), mult (multipli-

cación) o un NUM terminal, un

número real que llega del lexer.

Los no terminales add y mult se

definen en las siguientes produccio-

nes en AddMult.yp. add: expr

OPADD expr especifica que el no ter-

minal add comprende dos expr no

terminales enlazados por el opera-

dor “+”. Como ya sabíamos expr

puede contener adiciones, multipli-

caciones o números sencillos.

El archivo con la gramática, Add-

Mult.yp, proporciona una

descripción abstracta de un parser al

módulo Parse::Yapp disponible en

CPAN. AddMult.yp se divide en tres

secciones separadas por la cadena

%%. La cabecera está al comienzo,

puede contener instrucciones del

parser o código Perl. Las produccio-

nes que pertenecen a la gramática

están en el centro y le sigue el pie de

página, donde se puede definir más

código Perl, aunque está vacío en el

Listado 3. Para implementar el par-

ser, AddMult.yp se convierte a un

módulo Perl por la utilidad yapp

incluida en Parse::Yapp.

El módulo que se crea en este pro-

ceso, AddMult.pm, implementa un

parser bottom-up. Este tipo de par-

ser lee un flujo de tokens desde el

lexer e intenta crear el árbol mos-

trado en la Figura 1, desde abajo

hacia arriba. Para ello, combina las

unidades leídas para crear construc-

ciones de mayor nivel desde tokens

y construcciones de menor nivel. Se

continúa este proceso, basado en las

reglas de la gramática, hasta que los

resultados coinciden con la parte

izquierda de la primera producción.

En cada paso, el parser hace una

de estas dos cosas: desplazar o redu-

cir. Al desplazar se le indica al

parser que tome el siguiente token

del flujo de entrada y lo ponga

encima de la pila. Al reducir se le

está indicando que combine los ter-

minales y los no terminales de la

pila para crear no terminales de

nivel superior, basándose en las

reglas de la gramática, y por tanto

reduciendo la altura de la pila. Si la

verifican la sintaxis de una expre-

sión, sino que también controlan el

trabajo de traducción. Después de

todo, por qué no dejar al parser que

calcule el resultado mientras estudia

una expresión aritmética.

El Listado 3, AddMult.yp, define

una gramática para el parser. Especi-

fica cómo combina el parser los

tokens que salen del lexer en estruc-

turas predefinidas. La primera

producción, expr: add | mult | NUM,

especifica que la tarea global del

parser es reducir la secuencia de

todos los tokens a una construcción

de tipo expr. Si esto no es posible,

los tokens no obedecen la gramática:

ha ocurrido un error y el parser fina-

liza.

Las producciones como la del Lis-

tado 3 tienen un símbolo de no

terminal a la izquierda. El objetivo

del parser es hacer coincidir de

alguna manera la salida del lexer

con la parte derecha de una produc-

ción y entonces reducirla al no

terminal de su izquierda. En la parte

derecha, una producción puede lis-

tar tokens que ya pasaron el lexer

(también conocidos como termina-

les) pero también otros no

terminales, que son resueltos por

otras producciones. En nuestro

ejemplo, expr puede ser tres cosas,

con las alternativas separadas por

DESARROLLO • Perl

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

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

02 package MathLexer;

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

04 use strict;

05 use Regexp::Common;

06 use Parse::Lex;

07

08 my @token = (

09 OPPOW => “[*][*]”,

10 OPSUB => “[-]”,

11 OPADD => “[+]”,

12 OPMULT => “[*]”,

13 OPDIV => “[/]”,

14 FUNC => “[a-zA-Z]\\w*\\(“,

15 ID => “[a-zA-Z]\\w*”,

16 LEFTP => “\\(“,

17 RIGHTP => “\\)”,

18 NUM => “$RE{num}{real}”,

19 ERROR => “.*”, sub {

20 die qq(Can’t

lex “$_[1]”) },

21 );

22

23 ##############################

24 sub new {

25 ##############################

26 my($class, $string) = @_;

27

28 my $lexer =

Parse::Lex->new(@token);

29 $lexer->skip(“[\\s]”);

30 $lexer->from($string);

31

32 my $self = {

33 lexer => $lexer,

34 };

35

36 bless $self, $class;

37 }

38

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

40 sub next {

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

42 my($self) = @_;

43

44 my $tok =

$self->{lexer}->next();

45 return undef if

$self->{lexer}->eoi();

46

47 return $tok->name(),

$tok->text();

48 }

49

50 1;

Listado 2: MathLexer.pm

01 #!/usr/bin/perl -w

02 use strict;

03 use MathLexer;

04

05 my $str =

“5*sin(x*-4.27e-14)**4*(e-pi)”

;

06 print “ $str\n\n”;

07

08 my $lex =

MathLexer->new($str);

09

10 while(1) {

11 my($tok, $val) =

$lex->next();

12 last unless defined $tok;

13 printf “%8s %s\n”, $tok,

$val;

14 }

Listado 1: mathlexer

Page 47: Linux Magazine - Edición en Castellano, Nº 19

cola de entrada está vacía, y si la

última reducción acaba de salir del

parser con la parte izquierda de la

producción inicial, significa que el

parser se ha ejecutado satisfactoria-

mente.

La Tabla 1 muestra un parser bot-

tom-up, implementado en base a la

gramática de AddMult.yp, que pro-

cesa los tokens extraídos de la cadena

de entrada 5+4*3 paso a paso.

En el paso 0, los tokens [NUM,

“5”], [OPADD, “+”], [NUM, “4”],

[OPMULT, “*”] y [NUM, “3”] están

disponibles en la cola de entrada. En

el paso 1, el parser pone el 5 (que es

un token NUM) encima de la pila

(desplazando). En el paso 2, reduce

el terminal NUM a expr basándose

en la tercera alternativa de la pri-

mera producción de la gramática de

AddMult.yp. El parser procesa

entonces los tokens [OPADD, “+”] y

[NUM, “4”] desde la entrada, los

desplaza hasta la pila, y luego

reduce el 4 a expr. ¿Y ahora qué? El

parser podría reducir expr OPADD

expr de la pila a expr, siguiendo la

segunda producción de la gramática.

Por otro lado, podría traerse

[OPMULT, “*”] desde la entrada y

esperar a encontrar otra expr más

tarde para reducir expr OPMULT expr

(tercera producción).

ConflictoEste tipo de problema es común. Las

gramáticas son a menudo ambiguas.

Si no tuviéramos la tradicional regla

PEMDAS en matemáticas, el parser

estaría completamente desconcer-

tado por los conflictos de

desplazamiento-reducción causados

por la expresión “5+4*3”. El hecho

de que estos operadores algebraicos

tengan precedencia, no obstante,

evita el conflicto. El parser tiene que

esperar antes de reducir 5+4, y

necesita desplazar el token * hasta

la pila, ya que un * es un enlace más

fuerte entre operandos que el +,

más débil.

Si se presentan los mismos opera-

dores varias veces en sucesión,

como en 5-3-2, todas las operaciones

tienen la misma precedencia, y apa-

rece otro tipo de conflicto. Si el

parser decide reducir, tras parsear

5-3, evalúa los operadores de

izquierda a derecha, de acuerdo a

las reglas del álgebra. Un desplaza-

miento, por otro lado, evaluaría la

expresión como 5-(3-2), y esta

expresión conduciría a un sorpren-

dente resultado de 6, en lugar del 0

que esperábamos. Es por esto que el

operador menos se considera como

asociativo por la izquierda. Necesi-

tamos indicarle esto al parser para

que pueda resolver también este tipo

de conflicto.

Por cierto, en el caso del operador

de potencia ( en Perl), el álgebra

dicta un método contrario: “4 3 2”

(“4 elevado a 3 elevado a 2”) se cal-

cula como 4**(3**2). ¡El operador

potencia es asociativo por la dere-

cha! Esto puede verificarse

fácilmente en Perl: perl -le ‘print

4**3**2’ devuelve 262144 (4 9) y no

4096 (64 2).

Asociatividad y Precedencia

El generador del parser yapp tam-

bién detecta que la gramática es

ambigua. Aquí vemos cómo el gene-

rador yapp crea el módulo del parser

AddMult.pm a partir del archivo

AddMult.yp:

$ yapp -m AddMult AddMult.yp

4 shift/reduce conflicts

Las dos primeras líneas del Listado 3

resuelven el conflicto en la gramá-

tica:

%left OPADD

%left OPMULT

Estas sentencias estipulan que tanto

el operador + como el * son asocia-

tivos por la izquierda, y, lo que es

más importante: OPMULT tiene prio-

ridad sobre OPADD, dado que %left

OPMULT aparece más tarde que

%left OPADD en la definición del

parser.

Si el parser fuese a definir una

operación OPMINUS usando el ope-

rador -, sería importante insertar

Perl • DESARROLLO

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

Figura 2: Expresión matemática procesada

por el lexer MathParser.pm.

01 %left OPADD

02 %left OPMULT

03

04 %%

05 expr: add | mult | NUM;

06

07 add: expr OPADD expr {

08 return $_[1] + $_[3]

09 };

10 mult: expr OPMULT expr {

11 return $_[1] * $_[3]

12 };

13 %%

Listado 3: AddMult.yp

01 #!/usr/bin/perl

02

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

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

03 # addmult

04 # 2005, Mike Schilli

<[email protected]>

05

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

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

06 use strict;

07 use warnings;

08

09 use MathParser;

10 use AddMult;

11

12 my $mp =

MathParser->new(AddMult->new()

);

13

14 for (qw( 5+2*3 5+2+3 5*2*3

5*2+3)) {

15 print “$_: “,

$mp->parse($_), “\n”;

16 }

Listado 4: addmult

Page 48: Linux Magazine - Edición en Castellano, Nº 19

mult: expr OPMULT expr {

return $_[1] * $_[3]

};

estipula que el valor devuelto de la

producción (que acompaña al no

terminal en la parte izquierda) es el

producto de los valores devueltos de

las expresiones expr. Esto significa

que el parser va a continuar

acumulando arriba el resultado de la

expresión aritmética que está

evaluando hasta que alcance la

producción inicial, y el resultado

puede devolverse a quien lo llamó

desde el parser. Ello proporciona

automáticamente al verificador de

sintaxis la posibilidad de calcular

fórmulas. Las Tablas 1 y 2 muestran

los valores devueltos en la reducción

en curso, en la columna “Return”.

Nótese que $_[1] en los segmentos

de código refieren a la primera

expresión en el lado derecho de la

producción (esto es, expr). Partiendo

de la norma, el contador no

comienza en 0, ya que $_[0] de la

producción de Parse::Yapp es siem-

pre una referencia para el parser. Si

una producción contiene múltiples

alternativas separadas por |, cada

alternativa puede definir su propio

bloque de código. Nótese que un

bloque de código sólo se refiere a la

alternativa a la que está adjunta.

Antes de que pueda usarse el par-

ser, sólo un paso intermedio más: la

interfaz del parser yapp es algo exó-

tica, y como vamos a usar nuestro

lexer MathLexer previamente defi-

nido, se puede definir una interfaz

más sencilla en el Listado 5. El

método parse() de MathParser sim-

plemente acepta la cadena a parsear

y devuelve el resultado aritmético.

Si surge un error, el parser se dirige

a la subrutina anónima definida en

la línea 35 y finaliza.

El listado mathparser muestra una

sencilla aplicación que usa MathPar-

ser.pm para parsear y evaluar cuatro

expresiones diferentes:

5+4*3: 17

5+4+3: 12

5*4*3: 60

5*4+3: 23

Esto muestra que el parser hace honor a las

reglas de precedencia y evalúa expresiones

como 5+4*3 y 5*4+3 de manera correcta.

%left OPMINUS antes de la defini-

ción de OPMULT. Si la cabecera del

archivo yp tiene una entrada %right

OPMINUS en lugar de %left OPMI-

NUS, el parser evaluaría expresiones

como 5-3-2 de derecha a izquierda. Y

esto sería desastroso, ya que 5-(3-2)

es 6, en lugar de 5-3-2, que nos da

un valor de 0. Para indicarle al par-

ser cómo elevar números a

potencias, vamos a necesitar un ope-

rador de potencias asociativo por la

derecha, %right OPPOW, situado

después de la definición de OPMULT

debido a la alta prioridad de la ope-

ración potencia y a su asociatividad

por la derecha.

Estos trucos le permiten al parser

terminar como se muestra en la

Tabla 2.

Además de la gramática, Add-

Mult.yp define cierto código

ejecutable en Perl, adjunto a las pro-

ducciones. Por ejemplo:

DESARROLLO • Perl

Paso Regla Devuelve Pila Entrada

0 5+4*3

1 DESPLAZA NUM +4*3

2 REDUCE expr: NUM 5 expr +4*3

3 DESPLAZA expr OPADD 4*3

4 DESPLAZA expr OPADD NUM *3

5 REDUCE expr:NUM 4 expr OPADD expr *3

*Conflicto: ¿Desplazamiento/Reducción?

Tabla 1: Pasos del Parser

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

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

02 package MathParser;

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

04 use MathLexer;

05 use strict;

06 use warnings;

07

08 ##############################

09 sub new {

10 ##############################

11 my($class, $parser) = @_;

12

13 my $self = {

14 parser => $parser

15 };

16

17 bless $self, $class;

18 }

19

20 ##############################

21 sub parse {

22 ##############################

23 my($self, $str, $debug) =

@_;

24

25 my $lexer =

MathLexer->new($str);

26

27 my $result =

$self->{parser}->YYParse(

28 yylex => sub {

$lexer->next(); },

29 yyerror => sub { die

“Error” },

30 yydebug => $debug ? 0x1F :

undef,

31 );

32 }

33

34 1;

Listado 5: MathParser.pm

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

02 # UnAmb.yp - Unambiguous +/*

grammar

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

04 %%

05 expr: expr OPADD term {

06 return $_[1] + $_[3];

07 }

08 | term {

09 return $_[1];

10 };

11

12 term: term OPMULT NUM {

13 return $_[1] * $_[3];

14 }

15 | NUM {

16 return $_[1];

17 };

18 %%

Listado 6: UnAmb.yp

Page 49: Linux Magazine - Edición en Castellano, Nº 19

Existe otra manera de resolver con-

flictos de precedencia. Si formulamos

una gramática como la del Listado 6,

la mayor precedencia del operador “*”

deriva de las relaciones entre las pro-

ducciones. Una multiplicación se

reduce primero al no terminal term,

antes de que se haga alguna reduc-

ción.

Este método nos permite implemen-

tar el comportamiento de los

paréntesis, si se permiten en la cadena

de entrada. Para forzar “(5+4)*3”,

por ejemplo. Para hacer esto, simple-

mente redefinimos la producción term

y añadimos otra producción para force,

que salta ante cualquier paréntesis y

reduce inmediatamente las expresio-

nes de su interior:

term: term OPMULT force

{ ... }

| force

force: LEFTP expr RIGHTP

{ return $_[2]; }

| NUM

En lugar de evaluar la expresión arit-

mética directamente, tiene más

sentido convertirla a un formato que

sea más sencillo de computar, como

RPN. El Listado 7 muestra la gramá-

tica para hacer esto. Hemos

cambiado sólo los segmentos de pro-

ducción de código, que, en lugar de

pasar sobre los valores calculados,

ahora escribe los números y las ope-

raciones en un array, que se pasa

como referencia, para llegar final-

mente donde fue llamado el parser.

rpn es el script al que se llama.

Como es de suponer, produce con-

versiones completamente diferentes

de 5+4*3 y 5+4+3:

5+4+3: [5, 4, +, 3, +, ]

5+4*3: [5, 4, 3, *, +, ]

En la expresión superior, el traduc-

tor simplemente procesa la

expresión de izquierda a derecha y

añade los valores individuales, pri-

mero sumando 5 y 4, y luego

sumando 3 al resultado.

En la expresión de abajo, 5+4 no

puede reducirse de manera directa

debido a las reglas PEMDAS. En vez de

esto, el traductor acumula el siguiente

número, 3, encima de la pila RPN, y

luego realiza la multiplicación. Sólo

entonces suma el resultado, 12, al 5

ubicado en la parte inferior de la pila.

Existen numerosos libros acerca

de la materia. El Dragon Book [2] es

uno de los clásicos. Puede que no

sea demasiado sencillo de leer, pero

es indispensable. Además del gene-

rador de parser bottom-up,

Parse::Yapp, que está basado en téc-

nicas usadas por las herramientas de

Unix lex y yacc ([5]), CPAN tiene

también un generador de parser top-

down, Parse::RecDescent.

Parse::RecDescent tiene característi-

cas completamente diferentes debido

a las tecnologías de parseo utiliza-

das. [4] ofrece algunos ejemplos

sobre cómo usar Parse::Yapp y

Parse::RecDescent. Por último, pode-

mos escribir parsers a mano. Esta

opción es particularmente efectiva

en programación funcional, como se

describe en [3] y [6]. �

Perl • DESARROLLO

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

[1] Listados de este artículo: http://www.

linux-magazine.es/Magazine/

Downloads/19

[2] Compilers, Aho, Sethi, Ullman, Addi-

son Wesley, 1986

[3] Higher Order Perl, Mark Jason Domi-

nus, Morgan Kaufmann, 2005

[4] Pro Perl Parsing, Christopher M.

Frenz, Apress, 2005

[5] lex & yacc, Levine, Mason & Brown,

O.Reilly, 1990

[6] “Parser Combinators in Perl”, Frank

Antonsen, theperlreview.com, Sum-

mer 2005

RECURSOS

Paso Regla Devuelve Pila Entrada

6 DESPLAZA expr OPADD expr OPMULT 3

7 DESPLAZA expr OPADD expr OPMULT NUM

8 REDUCE expr: NUM expr OPADD expr OPMULT expr

9 REDUCE expr: expr OPMULT expr 12 expr OPADD expr

10 REDUCE expr: expr OPADD expr 17 expr

Tabla 2: Pasos Finales de la Ejecución del Parser

01 %left OPADD

02 %left OPMULT

03

04 %%

05 expr: add

06 | mult

07 | NUM { return [ $_[1]

]; };

08

09 add: expr OPADD expr {

10 return [

11 @{$_[1]},

@{$_[3]}, $_[2]

12 ];

13 };

14

15 mult: expr OPMULT expr {

16 return [

17 @{$_[1]},

@{$_[3]}, $_[2]

18 ];

19 };

20 %%

Listado 7: RPN.yp

01 #!/usr/bin/perl

02 use strict;

03 use warnings;

04

05 use MathParser;

06 use RPN;

07

08 my $mp =

MathParser->new(RPN->new());

09

10 for my $string (qw(5+4+3

5+4*3)) {

11 print “$string: [“;

12 for (@{ $mp->parse($string)

}) {

13 print “$_, “;

14 }

15 print “]\n”;

16 }

Listado 8: rpn

Page 50: Linux Magazine - Edición en Castellano, Nº 19

__module_name__ =U

“Hola Mundo”

__module_version__ = “1.0”

__module_description__ =U

“Ejemplo de módulo Python”

print “¡Hola Mundo!”

Este es nuestro primer módulo, y como

todo ejemplo simple, hace más bien

poco. Básicamente muestra en la ven-

tana de XChat la frase «¡Hola Mundo!»

(ver Figura 1). Lo peor de todo es que ni

siquiera manda esta frase como mensaje,

sino que sólo aparece en nuestra ventana

local como se puede apreciar en la

Figura 1. Para cargarlo tenemos que eje-

cutar en la linea de comandos de XChat:

/load /home/josemaria/p.py

Hay que especificar la ruta, por eso acon-

sejo poner los plugins en el directorio

personal, así podrán cargarse usando

/load ejemplo.py. Es importante que los

ficheros acaben en .py, en caso contrario

XChat no sabrá cómo manejarlos. Prosi-

gamos a algo más útil para que podamos

mandar un mensaje a un canal:

__module_name__ =U

“Hola Mundo”

__module_version__ = “1.1”

__module_description__ =U

“Ejemplo de módulo Python”

import xchat

xchat.command(“msg %s %s” %U

(“#python-es”,”Hola a todos”))

Para poder escribir un mensaje a un

canal tenemos que emplear un comando

de IRC, el comando msg que acepta dos

parámetros, el canal y el texto a escribir.

Para poder enviar comandos a XChat

necesitamos usar la librería xchat que

incorpora las funciones necesarias para

interactuar con XChat.

Pero este código no es muy poliva-

lente, puesto que hemos puesto en una

XChat (ver Recurso [1]) es uno de

los más famosos clientes de

mensajería IRC existentes. Es

simple, gráfico y extensible. Y es esta

última cualidad la que vamos a explotar

gracias a Python.

XChat soporta plugins en varios len-

guajes de programación con los que nos

podemos ahorrar muchos tecleos innece-

sarios. Vamos a automatizar la ejecución

de ciertos comandos.

Para comenzar es imprescindible que

nuestra versión de XChat soporte módu-

los Python (documentación de referencia

en Recurso [2]). En este artículo estoy

empleando la versión 2.6.4, pero cual-

quiera superior a la 2.6.0 será parecida.

Durante el arranque de XChat podemos

ver si soporta módulos Python si aparece:

Python interface loaded

Pasemos a la acción con un par de ejem-

plos rápidos antes de enumerar las

funciones de las que dispondremos:

«Hola mundo»Comenzaremos con el infame «Hola

mundo» que a todos gusta:

DESARROLLO • Python

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

EXTENDIENDO XCHAT¿Por qué escribir comandos de IRC cuando Python puede hacerlo por nosotros?

EXTENDIENDO XCHAT¿Por qué escribir comandos de IRC cuando Python puede hacerlo por nosotros?

Los fanáticos del IRC encuentran pesado tener que escribir ciertas

combinaciones de comandos cada vez que entran en un servidor.

Pero XChat nos echa una mano mediante los scripts Python.

POR JOSÉ MARÍA RUIZ

Figura 1: Probamos nuestro plugin “Hola

Mundo”.

Page 51: Linux Magazine - Edición en Castellano, Nº 19

cadena el canal en el que nos encontra-

mos. Necesitamos algo más dinámico,

de manera que podamos ejecutar la fun-

ción en un canal cualquiera y funcione:

__module_name__ =U

“Hola Mundo”

__module_version__ = “1.2”

__module_description__ =U

“Ejemplo de módulo Python”

import xchat

chan = xchat.get_info(“channel”)

xchat.command(“msg %s %s” %U

(chan,”Hola a todos”))

Ahora se coge el nombre del canal con la

función get_info() y lo empleamos para

mandar el mensaje. get_info devuelve la

información del canal donde hayamos

cargado la función. En la Figura 2 se

puede ver el resultado.

Vamos a ver unas descripciones de las

funciones que podremos usar en el

desarrollo de nuestros scripts.

Funciones genéricasComencemos con las funciones más sim-

ples. En la documentación se les

denomina funciones genéricas, debido a

que no tienen un uso predefinido o espe-

cial.

Las dos primeras son

xchat.prnt(cadena) y

xchat.emit_print(nombre_evento, *argu-

mentos). Ambas nos permiten escribir

en la ventana de XChat, pero no enviar

un mensaje al canal. Esta información

sólo la veríamos nosotros, es decir, sólo

sirve para dar información de forma

local. xchat.emit_print() imprimirá el

mensaje cuando se genere el evento que

le digamos. xchat.prnt() tiene ese nom-

bre tan peculiar debido a que la función

print() es especial en Python y no pode-

mos definir otra que se llame igual. Los

eventos posibles se pueden ver en XChat

pulsando en la barra de menú en la

opción «Configuración> Avanzado >

Textos de eventos…». El nombre de

evento debe ponerse entre “” puesto que

Python espera una cadena de texto.

Ejemplos de eventos serían:

• “Join”, alguien entra en el canal• “Channel Message”, alguien escribe

en el canal• “Kick”, se ha echado (de una patada)

a alguien de un canal

xchat.command(cadena) ejecuta el

comando que le pasemos. Con esta fun-

ción ya podemos escribir en un canal,

empleando el comando IRC para ello.

Hay dos maneras:

• xchat.command(“msg %s %s” %

(canal, mensaje))

• xchat.command(“say %s” % (men-

saje))

El primer comando escribe el mensaje en

el canal que le digamos, mientras que el

segundo comando lo hace en el que esté

activo en ese momento.

Por último, la función

xchat.nickcmp(s1,s2) nos permite com-

parar nicks y nombres de canales. Parece

extraño porque ¿para qué necesitamos

una función para algo que podemos

hacer con comparación de cadenas de

caracteres? Porque resulta que es necesa-

rio realizar la comparación según el

RFC1459, el estándar donde se define el

protocolo de IRC.

Funciones que devuelveninformaciónExisten 3 funciones que nos permiten

extraer información de XChat. Con esta

información podremos tomar decisiones,

por ejemplo, si podemos usar ciertas

características de XChat que sólo están

presentes en sus últimas versiones.

xchat.get_info(type) permite obtener

una serie de datos sobre la sesión actual

de XChat, como pueden ser:

• “away” mensaje de away• “channel” canal en el contexto actual• “host” hostname del servidor al que

estás conectado• “network” nombre de la red de servi-

dores, en caso contrario none• “nick” tu nick actual• “server” Nombre del servidor al que

estás conectado o None si no lo estás• “topic” topic del canal actual• “version” versión de Xchat• “xchatdir” directorio de

configuración de XChat (por ejemplo

“/home/josemaria/.xchat2”)

xchat.get_prefs(nombre-preferencia)

permite obtener los valores que normal-

mente puedes ajustar con /set. Estos

valores son exclusivos de XChat, y van

desde los colores que se están usando

hasta el tipo de fuente que se ha configu-

rado.

Mientras que xchat.get_list(tipo) nos

permite obtener listas de datos sobre los

siguientes objetos:

• “channels” canales• “dcc” conexiones dcc• “users” usuarios• “ignore” usuarios ignorados

Python • DESARROLLO

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

Figura 2: El módulo prueba.py escribe la

cadena en la ventana de X-Chat.

01 __module_name__ = “Datos del canal”

02 __module_version__ = “1.0”

03 __module_description__ = “Ejemplo de módulo Python”

04

05 import xchat

06

07 print “========================================”

08 print

09 print “Lista de usuarios:”

10 print

11 usuarios = xchat.get_list(“users”)

12 for usuario in usuarios:

13 print usuario.nick

14 print

15 print “Temática de el canal: “ +xchat.get_info(“topic”)

16 print

17 print “========================================”

Listado 1: Algunos Datos de XChat

Page 52: Linux Magazine - Edición en Castellano, Nº 19

prioridades, y una vez que una

función se ejecuta, puede decidir

impedir que se sigan ejecutando las

de menor prioridad, lo que nos da

mucho juego.

Pero antes de comenzar con las

funciones de XChat para gestionar

eventos debemos comprender los

parámetros que recibirán nuestras

funciones de callback.

Una función de callback recibe en

XChat tres parámetros:

• word

• word_eol

• userdata

El parámetro word es una lista con

cada parámetro que acompañe al

comando:

/comando NICK

josemaria

word[0] =

“comando”

word[1] = “NICK”

word[2] = “jose

maria”

Mientras que

word_eol guarda toda

la cadena, desde el

parámetro en cues-

tión hasta el final:

/comando NICK

josemaria

word_eol[0] =

“comando NICKU

josemaria”

word_eol[1] =

“NICK josemaria”

word_eol[2] =

“josemaria”

Sinceramente no

logro entender la uti-

lidad de word_eol,

pero es obligatorio

esperarlo en nuestra

función, por lo que

tendrá que ir en la

cabecera de la

misma. userdata es

un parámetro que

puede contener valo-

res que nosotros

mismos pasemos a

la función de call-

back.

Toda callback debe devolver un valor

de cuatro posibles. Es aquí donde se

decide si dejaremos que se sigan ejecu-

tando las callbacks que queden en la

lista si las hubiese:

• EAT_PLUGIN, no permitimos queningún otro plugin reciba este evento

• EAT_XCHAT, no permitimos queXChat dispare sus propias funcionescon este evento

• EAT_ALL, no permitimos que nadiemás use este evento (ni otras call-backs dentro de nuestro módulo)

• EAT_NONE, dejar que todo ocurra deforma normal

Puede haber varios módulos esperando

este evento, y cada módulo tener varias

callbacks esperándolo. Con el valor de

salida de la función de callback

Veamos un ejemplo de las funciones que

recogen información: un script que nos

lista los usuarios presentes así como el

«topic», temática, del canal. El código

aparece en el Listado 1 y el resultado es

el que aparece en la Figura 3.

Funciones de engancheUno de los puntos fuertes de emplear

scripts es que XChat posee un sistema de

eventos. Cada evento posee una lista de

funciones, también llamadas «callbacks»,

a las que se debe llamar si el evento

acontece. Podemos insertar nuestras pro-

pias funciones dentro de esa lista, y

además tendremos algo de control sobre

en qué punto de la lista serán insertadas.

La lista que se asigna a cada

evento está ordenada por

DESARROLLO • Python

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

01 version = “1.0”

02

03 __module_name__ = “Saludos”

04 __module_version__ = versión

05 __module_description__ = “Módulo de XChat para recordar cosas”

06 __module_author__ = “José María Ruiz Aguilera”

07

08 import xchat

09

10 # Variable global para almacenar el enganche y poder controlarlo

11 enganche = None

12

13 # si quedan menos de 10 minutos para las 00 se queja cada 5 segundos

14

15 def parar_cb(word, word_eol, userdata):

16 global enganche

17 if enganche is not None:

18 xchat.unhook(enganche)

19 enganche = None

20 print “¡Recordador desactivado!”

21

22 def timeout_cb(userdata):

23 print userdata

24 return 1 # El 1 hace que siga ejecutándose

25

26 def arranca(word, word_eol,userdata):

27 global enganche

28 # arrancamos el contador de tiempo, multiplicando los segundos por 1000

29 # deberíamos controlar los parámetros pero por falta de espacio no es

30 # posible

31 enganche = xchat.hook_timer(int(word[1])*1000, timeout_cb,userdata=word[2])

32

33 xchat.hook_command(“ARRANCA”,arranca,help=”/arranca <segundos> <mensaje>”)

34 xchat.hook_command(“PARA”, parar_cb)

35

36 xchat.prnt(“Módulo «Recordado»”)

37 xchat.prnt(“Puedes hacer que te recuerde algo cada cierta cantidad de segundos”)

Listado 2: Nuestro Recordador.

Page 53: Linux Magazine - Edición en Castellano, Nº 19
Page 54: Linux Magazine - Edición en Castellano, Nº 19

del servidor, como pueden ser

PRIMSG, NOTICE, o PART.

xchat.hook_timer(timeout, callback,

userdata=None) te puede granjear

muchos enemigos, puesto que sirve para

ejecutar una callback cada cierta canti-

dad de milisegundos. Puede hacer que

cada 10 segundos digas algo gracioso o

no demasiado acertado. La decisión es

personal. Yo personalmente uso este tipo

de enganche para generar mensajes y

por tanto probar el resto de callbacks

que se disparan cuando algo se imprime.

xchat.hook_unload(timeout, callback,

userdata=None) se dispara cuando se

descarga un plugin, se puede usar para

imprimir por pantalla su descarga o

hacer tareas de limpieza.

Y por último xchat.unhook(handler)

elimina la función reflejada por handler

que se registró con anterioridad. Todas las

funciones hook_ devuelven un handler,

así que es posible guardarlo en una varia-

ble para posteriormente desactivarlo.

Gestión de contextoEl último grupo de funciones son las

encargadas de gestionar lo contextos.

XChat posee pestañas, y las pestañas

contienen una conversación en un canal

o privada dentro de un servidor. A esta

información se le denomina contexto en

el argot de XChat. Por el momento

hemos estado usando el contexto xchat

que engloba a toda la aplicación.

xchat.get_context() nos devuelve el

contexto actual y xchat.find_context(ser-

ver=None, channel=None) localiza el

contexto que pertenece al servidor y

canal que le especificamos.

Una vez tengamos el contexto necesa-

rio podemos hacer uso de sus funciones,

como pueden ser micontexto.prnt() o

micontexto.command().

Creemos unpluginAhora que dispone-

mos de todas las

herramientas nece-

sarias para

comunicarnos con

XChat, podemos

crear algo útil.

Digamos que eres

una persona des-

pistada, como lo es

el autor del artí-

culo, y mientras

hablas con otras personas usando XChat

se te olvidan las cosas. He creado un

script que hace uso de algunos de los

conceptos explicados. Su misión es per-

mitir al usuario mostrar por pantalla un

mensaje usando intervalos en segundos.

El usuario podrá activar y desactivar los

mensajes.

Para ello he creado dos comandos

/arranca segundos mensaje y /para.

Arranca activa un enganche que se dis-

para según la cantidad de segundos

especificada. Con para podemos parar la

aparición del mensaje en cualquier

momento.

Todo el código está en el Listado 2 y en

la Figura 4 podemos ver el resultado.

¿Qué podemos hacer para que cargue

cada vez que lo haga XChat? Es tan sim-

ple como poner el fichero que contenga

nuestro script dentro del directorio

~/.xchat2. Cuando XChat arranca com-

prueba ese directorio en busca de script

para ejecutar.

ConclusiónEl interfaz de XChat puede resultar algo

complicado de entender, pero una vez se

hayan visto unos cuantos ejemplos no es

tan complicado de manejar. Quizá lo que

más puede dificultar nuestra tarea es la

escasa documentación, así como el redu-

cido número de ejemplos que podemos

encontrar en Internet.

Aún con todo esto, es una ayuda

imprescindible para aquellos que

pasamos muchas horas en canales de

IRC. Ya no hay excusa para automatizar

esas combinaciones de comandos tan

complicados a veces. �

controlamos qué ocurrirá después de

que procesemos este evento.

Ahora ya estamos listos para ver las

funciones que asignan las callbacks.

Funciones de enganchexchat.hook_command(nombre, callback,

userdata=None, priority=PRI_NORM,

help=None) nos permite asignar un

comando a una callback. Imaginemos

que queremos automatizar una acción,

digamos autoinvitarnos a un canal y

entrar en él, entonces tendríamos que

usar el siguiente código:

01 __module_name__ =

“Autoinvitado”

02 __module_version__ = “0.1”

03 __module_description__ =

“Ejecutamos dos comandos”

04 import xchat

05

06 def autoinvita (word,

word_eol,userdata):

07 xchat.command(“chanserv

invite #micanal”)

08 xchat.command(“join

#micanal”)

09 return None

10

11 xchat.hook_command(“entra”,

autoinvita, help=”/entra”)

Después de cargar el script sólo ten-

dríamos que usar el comando /entra y

se ejecutaría la función autoinvita.

xchat.hook_print(name, callback,

userdata=None,

priority=PRI_NORM) permite captu-

rar eventos de impresión, cualquier

cosa que se imprima en XChat. Mien-

tras que xchat.hook_server(name,

callback, userdata=None,

priority=PRI_NORM) captura eventos

DESARROLLO • Python

[1] http://www.xchat.org

[2] http://labix.org/xchat-python

RECURSOS

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

Figura 4: El módulo Recordador nos imprime

un recordatorio cada cierto tiempo en la

ventana del canal.

Figura 3: El módulo Datos del canal imprime los usuarios y la

temática del canal.

Page 55: Linux Magazine - Edición en Castellano, Nº 19

La herramienta Network Mapper, o

Nmap [1], es mi compañera preferida.

Recientemente, su inventor Fyodor

celebró el octavo cumpleaños de su invención

y como regalo ha recibido una dieta de código

con muchas funciones nuevas y útiles. Una de

las más interesantes es el escaneado de ARP.

El sistema operativo utiliza peticiones

ARP para preguntar la dirección MAC de la

tarjeta de red. Nmap realiza esta tarea para

el sistema operativo y como resultado, el

escáner Nmap genera una colección útil de

datos fiables del número y tipo de equipos

activos en la red.

Esta característica elimina la necesidad de

hacer ping o trucos parecidos. (Pinging es una

técnica imprecisa, de todas formas, no es

necesario que el host responda). No necesita

familiarizarse con una nueva sintaxis. Cuando

escanea la red local, Nmap escoge automáti-

camente el escaneado ARP más efectivo,

incluso si se especifica -sP (Ping Scan) en la

línea de comandos. De acuerdo a las páginas

de ayuda, esto sólo ocurre si ejecuta Nmap

con los privilegios de superusuario. Si quiere

indicarle a la herramienta que guarde su

comportamiento anterior, necesita espe-

cificarle el parámetro —send-ip.

Engañar es Placentero

El parámetro —badsum también es nuevo.

Le indica a Nmap que envíe paquetes TCP o

UDP con un checksum incorrecto a la tar-

jeta del host. La mayoría de los ordenadores

que reciben un paquete como éste lo supri-

men inmediatamente, pero si Nmalp recibe

una respuesta, puede suponer que la tarjeta

sea un cortafuegos o IDS que no tiene pro-

blemas con la inspección de checksums.

Ahora la herramienta puede alterar fácil-

mente su propia dirección MAC utilizando

la opción de la línea de comandos —spoof-

mac dirección MAC.

Nmap soporta diversas versiones de siste-

mas operativos utilizando el parámetro O.

Por ejemplo, he escaneado un router en mi

laboratorio utilizando el comando nmap -O

10.0.0.50. He obtenido la siguiente salida de

Nmap 3.70 (reducido a lo esencial):

MAC Address: 00:05:5E:96:3D:00U

(Cisco Systems)

No exact OS matches for host

Nmap 4.0 proporciona un mensaje más

detallado:

Device type: router

Running: Cisco IOS 12.X

OS details: Cisco 2600 U

router running IOS 12.2(3),

Cisco router running IOS 12.1

Lo mismo se aplica a las versiones. Si

quiero encontrar la versión del servicio

IMAP que se está ejecutando en un ser-

vidor, puedo teclear nmap -sV 10.0.0.88

-p143 para obtenerla:

143/tcp open imap U

UW imapd 2004.352

Nmap siempre ha sido un medio fantástico de

detección de gente no deseada en tu red, y de

evitar la pérdida de toneladas de papel

mediante el escaneado de impresoras. Las

impresoras de red a menudo escuchan en el

puerto 9100, y más de unos cuantos modelos

convierten cualquier dato para enviarlo a este

puerto como copia impresa. Los desarrollado-

res de Nmap 4.00 han incluido actualmente

una característica para ahorrar papel de

manera elegante. Cuando introduzco nmap

-sV printer -p 9100, primero estoy pregun-

tando:

9100/tcp open jetdirect? U

Excluded from version scan

que evita la avalancha de papel. Pero esta téc-

nica para ahorrar papel no significa que Fyodor

sea un aguafiestas. Si realmente decide que

quiere gastar papel, puede decirle al cerebro de

ocho años de Fyodor que escanee —allports,

extendiendo la avalancha de papel durante

siete años en la siguiente generación. �

55

La Columna de Charly • ADMINISTRACIÓN

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

[1] Nmap: http://www.insecure.org/nmap/

RECURSOS

AppArmor . . . . . . . . . . . . . . . . . . . .56

AppArmor construye una cárcel virtual

para proteger las aplicaciones que se

están ejecutando en su ordenador.

Clusters Tomcat . . . . . . . . . . . . . . .60

Vemos cómo ejecutar aplicaciones

críticas con alta disponibilidad y

balanceo de carga con Apache Tomcat.

SYSADMIN

Muchas herramientas van creciendo con cada versión nueva, pero

Nmap 4.00 ha perdido peso gracias al proyecto Diet-Nmap. La última

encarnación de Nmap no es sólo más rápida, sino que también

consume menos memoria. POR CHARLY KÜHNAST

El Día a Día del Administrador de Sistemas: Nmap 4

LA DIETA DEFYODOR

EL A

UT

OR

Charly Kühnast es

Administrador de

Sistemas Unix del

centro de datos de

Moers, cerca del

famoso río Rin. Sus

tareas incluyen

velar por la seguridad del corta-

fuegos y ocuparse de la DMZ.

Page 56: Linux Magazine - Edición en Castellano, Nº 19

root el acceso sin restricciones a todo el

sistema, asigna límites con la intención

de obtener un balance entre efectividad

y complejidad. AppArmor utiliza un

mecanismo simple y transparente para

proporcionar un estándar alto de protec-

ción, similar al de Systrace. No intenta

competir con sistemas más complejos

como SELinux o RSBAC, pero de nuevo,

la configuración de estas alternativas

requiere más conocimientos sobre la

administración de sistemas.

FortificadoAdemás de todos los obstáculos adicio-

nales, la primera regla de seguridad es

evitar las vulnerabilidades. En un orde-

nador protegido con AppArmor, o en

cualquier sistema de esta clase, deben

deshabilitarse todos los servicios que no

se necesiten, tener los últimos parches

instalados y utilizar una configuración a

medida cuidadosamente estudiada. Esto

deja a AppArmor con un sistema libre

de vulnerabilidades conocidas hasta la

fecha y libre de exploits.

AppArmor monitoriza los ficheros y

las aplicaciones accedidas y el tipo de

acceso de que se trate; al mismo tiempo,

gobierna el uso de los privilegios de

superusuario. Dependiendo de la ver-

sión del kernel, Linux puede distinguir

entre 29 capacidades diferentes (véase

man 7 capabilities). Por ejemplo,

CAP_KILL se refiere a la habilidad del

superusuario de terminar un proceso y

CAP_NET_RAW a la de crear paquetes

de red arbitrarios.

En el caso del comando ping,

AppArmor le asignaría el uso de

CAP_NET_RAW, pero le denegaría el uso

de CAP_KILL. Esto impediría a un

Nadie es perfecto, algo que es

particularmente cierto en el

mundo del software. Cualquier

aplicación que no sea trivial contendrá

errores de programación que serán apro-

vechados por los hackers para hacerse

con el control del software, haciendo

que los programas realicen tareas que

sus desarrolladores jamás llegaron a

pensar. La situación comienza a ser crí-

tica cuando la aplicación posee

privilegios diferentes de los privilegios

del atacante.

Por ejemplo, el comando ping necesita

de los privilegios de superusuario para

poder enviar el formato especial de

paquete que utiliza. Aunque teórica-

mente es posible hacer un mal uso de

estos privilegios para causar toda clase

de problemas. A pesar de que el

comando ping es un programa con un

buen comportamiento, un atacante

capaz de hacerse con la herramienta

tendría acceso sin restricciones al resto

del sistema.

AppArmor [1] modifica esta situación.

En vez de permitir a un programa de

ADMINISTRACIÓN • AppArmor

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

Tras penetrar en un sistema remoto, los intrusos podrían pensar que

ya han pasado la parte más dura y están a salvo, pero AppArmor les

va a estropear la diversión, encerrándolos en una jaula virtual.

POR RALF SPENNEBERG

Fortificando el Sistema con AppArmor

JAULA DORADAFortificando el Sistema con AppArmor

JAULA DORADA

01 tar xjf linux-2.6.15.tar.bz2

02 cd linux-2.6.15

03 patch -p1

<../aa_2.0-2.6.15.patch

04 patch -p1

<../aa_namespace_sem-2.6.15.

patch

05 make oldconfig

06 make bzImage

07 make modules

08 make modules_install

09 make install

10 rmdir /subdomain

11 ln -s /sys/kernel/security/

subdomain /subdomain

Listado 1: Compilando unkernel compatible con

AppArmor

Page 57: Linux Magazine - Edición en Castellano, Nº 19

atacante la posibilidad de matar otros

procesos.

AppArmor en LinuxLas distribuciones Novell SLES9 y Suse

Linux 10.0 vienen con el sistema AppArmor

por defecto. AppArmor no era libre por

entonces (véase el cuadro “Immunix”). Tras

la aparición de la versión de AppArmor bajo

la licencia GPL, Novell ha anunciado ahora

que integrará AppArmor en OpenSUSE

10.1. Si no se desea esperar, puede utilizarse

OpenSUSE 10.0, aunque la instalación es

bastante compleja. Entre otras cosas habrá

que modificar y recompilar el kernel, por lo

que la actualización no está recomendada

para usuarios sin experiencia.

Los RPMs de AppArmor para OpenSUSE

10.0 están disponibles en Novell Forge [3].

Aunque Suse/Novell compilaron los RPMs

para OpenSUSE 10.1 Alpha, también funcio-

nan en OpenSUSE 10.0. La instalación sigue

los pasos habituales, rpm -ivh

nombre-paquete.rpm. El kernel también

requiere el soporte para AppArmor. Novell

dispone de los parches necesarios en [4];

los parches están diseñados para la versión

original del kernel 2.6.15 [5]. Para compilar

un kernel compatible con AppArmor, hay

que cargar tanto el kernel original como los

parches aa_2.0-2.6.15.patch y aa_names-

pace_sem-2.6.15.patch. Luego tan sólo hay

que seguir los pasos del Listado 1.

También es posible instalar AppArmor en

sistemas que no sean Suse, como Debian o

Fedora. Sin embargo, esto implica la compi-

lación de los archivos con el código fuente y

realizarlo sin un GUI, como GUI se entiende

que corre Yast 2.

Arranque y ParadaSuse dispone de controles basados en el

GUI para ejecutar AppArmor. Se ejecuta

AppArmor • ADMINISTRACIÓN

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

Figura 1: AppArmor mantiene un perfil para cada aplicación protegida.

Novell adquirió Immunix a mediados de 1995. Immunix se ha especializado en el

desarrollo de soluciones de seguridad durante años. La compañía modificó el GCC,

conocido como StackGuard, para que compilase las aplicaciones de modo que impidiese

los diversos tipos de problemas relacionados con los desbordamientos de búfers. Para

ello, StackGuard utiliza el denominado canario. Este sistema genera números aleatorios

cuando el programa se ejecuta. Antes de cada llamada a una subrutina almacena los

valores canarios en la pila. Si el valor se ve modificado cuando el programa regresa, se

termina con la sospecha de un desbordamiento de búfer. (El término canario viene de la

minería, cuando los mineros utilizaban canarios para asegurarse de que la atmósfera

estaba libre de acumulaciones de monóxido de carbono).

Immunix también lideró el desarrollo de la interfaz LSM (Linux Security Modules [2]) en

el kernel 2.6. Esta interfaz le permite a los módulos del kernel monitorizar los eventos crí-

ticos con respecto a la seguridad en diversos puntos. Algunos sistemas seguros utilizan

LSM, como LIDS (Linux Intrusion Detection System) y SELinux (Security Enhanced

Linux). Este último desarrollado por la NSA (National Security Agency, USA) implementa

un sistema MAC (Mandatory Access Control) que permite a los administradores definir

políticas detalladas de permisos de accesos. Este conjunto restrictivo de políticas puede

incluso monitorizar y restringir al superusuario, root, y todas sus actividades.

Como las distribuciones actuales de Novell/Suse Linux poseen el soporte a nivel del ker-

nel para el programa SELinux, no necesita las políticas necesarias para que funcione.

El sistema AppArmor es también de Immunix. Novell ha posicionado a AppArmor como

una alternativa simple y efectiva a SELinux. SELinux es una solución que requiere una

compleja configuración, sin embargo, AppArmor simplemente tiene como objetivo las

aplicaciones individuales y los eventos críticos. A finales de enero de 2006, Novell sacó a

la luz el código fuente de AppArmor bajo la licencia GPL e inmediatamente publicó el

código en su propio sitio web [3].

ImmunixEl paquete de AppArmor contiene

perfiles para los siguientes servidores:

• Postfix

• Apache (en modo prefork)

• Squid

• OpenSSH server

• NTP server

• Name Service Caching Daemon

(ncsd)

• Identd

• Protocol services Klogd and Syslogd

También dispone de perfiles para

diversos programas clientes:

• Acrobat Reader

• Ethereal

• Opera

• Firefox

• Evolution

• Gaim

• Realplayer

• Man

• Netstat

• Ping

• Traceroute

Perfiles

Page 58: Linux Magazine - Edición en Castellano, Nº 19

perfil gracias al modo de aprendizaje de

AppArmor.

En los últimos años se han descubierto

diversos errores de programación en varios

visores PDF, como Xpdf y Kpdf. Un atacante

que supiera de estos errores podría manipu-

lar un fichero PDF para inyectar y ejecutar un

código dañino y hacerse con el control del

visor de PDF.

Para añadir Kpdf a la lista de programas

que AppArmor monitoriza, hay que ejecutar

Yast 2 y seleccionar el asistente de perfiles

bajo AppArmor. Se comienza introduciendo

el nombre de la aplicación y su ruta com-

pleta. Si no se conoce la ruta, se puede

teclear which kpdf para averiguarla. La ruta

en Suse Linux es /opt/kde3/bin/kpdf.

Se ejecuta la aplicación y se maneja

durante un rato. Hay que asegurarse de

utilizar todas las funciones de Kpdf. Pero

también hay que asegurarse de que en la

fase de aprendizaje es imposible que se

produzca un ataque. AppArmor

posteriormente permitirá todas las

funciones que Kpdf utilice ahora. Tras la

ejecución de la lista completa de

funciones, se puede cerrar la aplicación.

Ahora pueden analizarse los resultados

grabados en el perfil del asistente. Para

ello, se selecciona Scan system log for

AppArmor events (Figura 3).

Procesos HijosTras completar el análisis de eventos,

que puede llevar unos cuantos minutos,

el asistente pregunta si se desean permi-

tir todos los tipos de accesos, sugiriendo

una acción para cada uno. Si el pro-

grama monitorizado invoca a otro

programa, por ejemplo, el asistente de

perfiles proporciona las siguientes opcio-

nes:

• Inherit: Las mismas restricciones de

Kpdf se aplican a la nueva aplicación

Kdialog.

• Profile: Esta aplicación posee su

propio perfil.

• Unconfined: AppArmor no

monitorizará este programa.

• Deny: Se impedirá la ejecución de la

nueva aplicación.

Unconfined es una opción, ya que el

Kpdf utiliza el programa KDialog para

abrir y cerrar ficheros. Como esto da al

programa completa libertad, el asistente

advierte de posibles vulnerabilidades

(Figura 4). Podría ser mejor crear un per-

fil para KDialog para restringir el acceso

del programa sólo a los ficheros PDF.

Yast y se selecciona AppArmor en la

columna de la izquierda. Luego aparece en

la derecha la barra de control de AppArmor.

Aquí es donde se puede comprobar el

estado actual de AppArmor y donde se

puede habilitar. Si se prefiere puede utilizar

se la línea de comandos: introduciendo

rcsubdomain start y rcsubdomain stop

(como root).

Para que AppArmor funcione, la herra-

mienta debe ejecutarse antes de que

arranquen las aplicaciones protegidas. Esto

es por lo que AppArmor se ejecuta en el

arranque del sistema. El programa también

necesita un fichero de perfil en /etc/subdo-

main.d para cada aplicación que vaya a

proteger.

AutoprotecciónNovell posee perfiles para una gran can-

tidad de comandos críticos (véase el

cuadro “Perfiles”). Voy a utilizar el visor

de ficheros Kpdf (Figura 2) para mostrar

lo fácil que resulta la generación de un

ADMINISTRACIÓN • AppArmor

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

Figura 2: Kpdf mostrando un documento PDF. Si el documento fuera de un atacante, éste

podría explotar alguna vulnerabilidad en el PDF.

Cuando se utilice el asistente para crear

un perfil, no incluirá el comando print.

Esto significa que el asistente no incluirá

la función en el perfil. De este modo

cuando se use posteriormente Kpdf, se

observará que todas las funciones están

disponibles como siempre, excepto que

no se podrá imprimir.

Probando AppArmor

01 # vim:syntax=subdomain

02 # Last Modified: Sun Jan 22

10:16:55 2006

03 /opt/kde3/bin/kpdf

flags=(complain) {

04 #include

<abstractions/authentication>

05 #include <abstractions/base>

06 #include <abstractions/bash>

07 #include <abstractions/gnome>

08 #include <abstractions/kde>

09 #include

<abstractions/nameservice>

10 #include

<abstractions/user-write>

11

12 / r,

13 /etc r,

14 /etc/X11/.kstylerc.lock rw,

15

/etc/X11/.qt_plugins_3.3rc.loc

k rw,

16 /etc/X11/.qtrc.lock rw,

17 /etc/exports r,

18 /etc/rpc r,

19 ...

20 }

Listado 2: Incluyendo Abstractionsv

Page 59: Linux Magazine - Edición en Castellano, Nº 19

Acceso a FicheroTras tomar una decisión sobre cada aplica-

ción que Kpdf llama, el asistente pregunta

sobre los ficheros usados por Kpdf. Se

puede escoger Allow para permitir el acceso

a la mayoría de los ficheros. El asistente

tiene una directiva incluida para ciertos

ficheros.

Muchas aplicaciones necesitan acceder a

los ficheros de configuración de KDE. En

vez de permitir el acceso a cada fichero indi-

vidualmente y saturar innecesariamente el

perfil, simplemente se le puede añadir una

plantilla a éste. Para ello se utiliza la línea

#include <abstractions/kde>. Las planti-

llas para los perfiles son referidas como

abstracciones en la jerga de AppArmor.

AppArmor viene con una colección de

abstracciones adicionales para el intérprete

de comandos Bash y para el DNS, por ejem-

plo. Tras contestar todas las preguntas se

regresa a la pantalla de bienvenida del asis-

tente. El perfil se almacena en

/etc/subdomain.d/opt.kde3.bin.kpdf (véase

el Listado 2 para una muestra). Ahora ya se

puede quitar el asistente de perfiles y cerrar

la aplicación.

AfinandoSi la aplicación falla a la hora de funcionar

como se esperaba, sólo hay que ejecutar el

asistente de perfiles de nuevo y repetir el

proceso de aprendizaje. El asistente primero

analiza el perfil existente y luego actualiza

los cambios efectuados en él. Cualquier

entrada que se haya añadido manualmente

por medio de un editor se conservará.

Después de cada entrada manual, hay que

reejecutar AppArmor para indicarle a la

herramienta que cargue de nuevo el perfil.

Como alternativa, se podría utilizar Yast 2 y

elegir o bien actualizar el perfil o

seleccionar el icono con el bolígrafo para

editar un perfil (Figura 5).

Como los servicios de red están expuestos

al peligro constantemente, Novell propor-

ciona el programa unconfined, que descubre

los servicios de red que se están ejecutando

en el sistema y muestra su estado bajo

AppArmor. La salida proporcionada en el

Listado 3 muestra que el sistema del ejemplo

está ejecutando CUPS y que el portmapper

RPC no está siendo monitorizado. Novell no

tiene perfiles para estos servicios.

En las próximas semanas y meses, se

espera que Novell amplíe los perfiles disponi-

bles. Si se está interesado en seguirle la pista

a los desarrollos, hay que revisar la lista de

correo [6] y consultar de vez en cuando el

sitio web de AppArmor [1].

Bien ProtegidoAppArmor monitoriza las aplicaciones críti-

cas. Los programas sólo tienen permitido el

acceso a los ficheros especificados y única-

mente pueden invocar a una serie de

comandos específicos. Si la aplicación tiene

un agujero de seguridad que pudiera permi-

tirle a un atacante ejecutar un intérprete de

comandos u otros comandos con los privile-

gios de la víctima, surge AppArmor para

proteger el sistema. La aplicación se ejecuta

en una especie de caja de arena, o jaula, y es

incapaz de salir de ella.

AppArmor no puede evitar las vulnerabili-

dades, pero puede impedir que los atacantes

puedan explotarlas en su beneficio. Esto pro-

tege de forma efectiva a los usuarios de

aquéllos. AppArmor está altamente reco-

mendado para los programas que son

accesibles a través de la red o que manejen

datos de fuentes poco fiables como correos

electrónicos, imágenes, vídeos o documentos

ofimáticos. �

AppArmor • ADMINISTRACIÓN

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

Figura 3: AppArmor grabando eventos para el análisis. Figura 5: Yast 2 permite la edición del perfil de AppArmor.

Figura 4: Cuando se selecciona Unconfined,

el asistente advierte sobre el potencial

riesgo de seguridad.

01 # unconfined

02 7988 /usr/lib/postfix/master

confined by

‘/usr/lib/postfix/master

(enforce)’

03 7988 /usr/lib/postfix/master

confined by

‘/usr/lib/postfix/master

(enforce)’

04 8025 /usr/sbin/cupsd not

confined

05 8025 /usr/sbin/cupsd not

confined

06 8081 /sbin/portmap not

confined

07 8081 /sbin/portmap not

confined

08 8109 /usr/sbin/sshd confined

by ‘/usr/sbin/sshd (enforce)’

Listado 3: Mostrando elestado de AppArmor

[1] AppArmor: http://www.opensuse.

org/AppArmor

[2] LSM: http://lsm.immunix.org

[3] Paquetes AppArmor: http://forge.

novell.com/modules/xfcontent/

downloads.php/apparmor/Stable

[4] Parches del Kernel para AppArmor:

http://forge.novell.com/modules/

xfcontent/downloads.php/apparmor/

Development/

[5] Kernel repository: http://www.kernel.

org

[6] Lista de correo de AppArmor: http://

forge.novell.com/mailman/listinfo/

apparmor-general

INFO

Page 60: Linux Magazine - Edición en Castellano, Nº 19

implicado), pero también hay que tener

en cuenta que los servidores pueden ser

compartidos entre varias aplicaciones que

funcionen en entornos similares. Puede

verse un listado de direcciones IP de

ejemplo en la Tabla 1.

La definición de clustering en Tomcat

tiene mucho que ver con el replicado de

sesiones, que no es más que distribuir

una sesión HTTP entre los distintos nodos

de los que se compone el cluster, sesión

cuyo estado se mantiene en una cookie

dentro del navegador. Existen tres formas

de habilitar el replicado de sesiones:

• Usando persistencia de sesiones y

guardándolas en un sistema de fiche-

ros compartido

• Usando persistencia de sesiones y

guardándolas en una base de datos

compartida

• Usando replicación en memoria

mediante SimpleTcpCluster incluido

en las últimas versiones de Tomcat 5

Junto a la réplica de sesiones, un con-

cepto bastante popular en la

implementación de clusters es el desplie-

gue en granja, que permite desplegar

una aplicación en un nodo del cluster y

que dicho despliegue se replique en

todos los servidores del cluster. Para el

replicado de sesiones y despliegue en

granja se utilizan peticiones (pings) mul-

ticast, que no es más que enviar la

información en una red a múltiples desti-

nos simultáneamente, enviándose una

sola vez y copiándose a nivel de enlace a

todos los rincones de la red. Evidente-

mente, esto genera demasiado tráfico,

por lo que hay que tener cuidado con él

y filtrar los pings multicasts en switchs

gestionados.

Apache Tomcat es un contenedor

de servlets desarrollado en Java

por la Apache Software Founda-

tion que implementa las especificaciones

de JSP (Java Server Pages) y Servlets de

Sun Microsystems. A partir de la versión

5.0, Tomcat incluye la posibilidad de con-

figurar varias instancias en cluster. ¿Por

qué íbamos a querer configurar Tomcat

en cluster? Pues porque los beneficios que

se obtienen son múltiples: vamos a tener

alta disponibilidad y alto rendimiento, ya

que el tráfico y ejecución se distribuirán

entre varias máquinas, y por otro lado, se

obtiene tolerancia a fallos, ya que la caída

de una de las máquinas no va a afectar al

funcionamiento de las aplicaciones, que-

dando un resultado transparente para el

usuario.

Existen varios modelos distintos a la

hora de configurar un sistema que ofrezca

posibilidades de alta disponibilidad, tole-

rancia a fallos y escalabilidad. Por

ejemplo, la arquitectura mostrada en la

Figura 1, donde cada servicio (Apache,

Tomcat y BD) estará ubicado separada-

mente en máquinas distintas. Esta

solución está claro que es la que mayor

coste supone (por la cantidad de “hierro”

ADMINISTRACIÓN • Cluster

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

En los entornos empresariales suele ser un requisito tener en funcionamiento aplicaciones críticas

ejecutándose en alta disponibilidad y balanceo de carga entre varios servidores. Veamos cómo se

configura Apache Tomcat para estos menesteres. POR CAYETANO DELGADO ROLDÁN

Cómo configurar Tomcat en cluster

REPLICACIÓN DE SESIONES

Figura 1: Arquitectura modelo de los distin-

tos sistemas en cluster.

Page 61: Linux Magazine - Edición en Castellano, Nº 19

Instalación en nodosAl estar desarrollado en Java, Tomcat va a

funcionar en cualquier sistema operativo y

plataforma para la que exista una máquina

virtual, así que la instalación y

configuración definida a continuación

debería ser similar en cualquier entorno.

Nosotros vamos a usar Linux, como no iba

a ser de otro modo, concretamente la dis-

tribución CentOS, aunque también habrá

algunas referencias a Debian. La instala-

ción y configuración inicial de Tomcat se

detallará para uno de los nodos del cluster

(nodo1) y luego se especificarán los cam-

bios necesarios para replicar la instalación

en el segundo nodo (nodo2).

Antes de instalar Tomcat, hay que tener

instalada y configurada una máquina vir-

tual de Java (JVM), de Sun o IBM, versión

1.5.0, que se puede descargar desde la

página de Sun [1] y que instalaremos, por

ejemplo, en /opt/jdk1.5.0_07, directorio

que será el contenido de la variable de

entorno $JAVA_HOME, que puede defi-

nirse en el fichero /etc/profile.d/java.sh (en

CentOS) o /etc/profile (en Debian). La ins-

talación de Tomcat es bastante sencilla,

basta con descargar de la web de Tomcat

[2] el paquete “Core” correspondiente a la

versión 5.5.17, y descomprimir, por ejem-

plo, en /opt/tomcat55-nodo1. Este

directorio se puede almacenar en la varia-

ble de entorno $CATALINA_HOME. Por

defecto, Tomcat viene configurado con su

propio servidor web autónomo configu-

rado en el puerto 8080. El puerto 8005,

además, se utiliza para enviar los coman-

dos de gestión al servidor Catalina. Es

importante tener esto en cuenta ya que es

uno de los errores típicos que nos pode-

mos encontrar si esos puertos ya

estuviesen en uso por cualquier otro pro-

ceso.

Como el propósito de este artículo no es

una introducción a Tomcat, para aquellos

que quieran conocer en profundidad cómo

funciona y se configura, tendrán que

pasarse por la documentación oficial dis-

ponible en [3]. De todas formas, a modo

de resumen rápido, para iniciar Tomcat

bastaría con ejecutar el script $CATA-

LINA_HOME/bin/startup.sh, o bien el

script

$CATALINA_HOME/bin/shutdown.sh para

detener la ejecución. Respecto a la

configuración, se realiza en el fichero

$CATALINA_HOME/conf/server.xml, que

no es más que un fichero XML con una

serie de directivas:

• <Server> es el elemento raíz de toda

la configuración.

• <Service> representa un grupo de

conectores.

• <Connector> representa las interfa-

ces de clientes externos que envían

peticiones a (y reciben respuestas de)

un Service particular, pueden ser de

tipo HTTP y AJP.

• Contenedores, que son los componen-

tes que procesan las peticiones

recibidas y generan las correspondien-

tes respuestas. Un contenedor de tipo

Cluster • ADMINISTRACIÓN

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

01 LoadModule jk_module

modules/mod_jk.so

02 <IfModule mod_jk.c>

03 JKWorkersFile

“conf/workers.properties”

04 JkLogFile “logs/mod_jk.log”

05 JkLogLevel error

06 JkMount /* front

Listado 1: Ejemplo dejk.conf

Servidor IP

Servidor web 192.168.10.1

Tomcat nodo1 192.168.10.2

Tomcat nodo2 192.168.10.3

Servidor BD 192.168.10.4

Tabla 1: Direcciones IP deservidores

Page 62: Linux Magazine - Edición en Castellano, Nº 19

ADMINISTRACIÓN • Cluster

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

01 <Server port=”8005”

shutdown=”SHUTDOWN”>

02 <Listener

className=”org.apache.catalina.

core.AprLifecycleListener” />

03 <Listener

className=”org.apache.catalina.

mbeans.ServerLifecycleListener”

/>

04 <Listener

className=”org.apache.catalina.

mbeans.GlobalResourcesLifecycle

Listener” />

05 <Listener

className=”org.apache.catalina.

storeconfig.StoreConfigLifecycl

eListener”/>

06

07 <GlobalNamingResources>

08 <Resource

name=”UserDatabase”

auth=”Container”

09

type=”org.apache.catalina.UserD

atabase”

10 description=”User

database that can be updated

and saved”

11

factory=”org.apache.catalina.us

ers.MemoryUserDatabaseFactory”

12

pathname=”conf/tomcat-users.xml

” />

13 </GlobalNamingResources>

14

15 <Service name=”Catalina”>

16 <Connector

address=”192.168.10.2”

port=”8009”

emptySessionPath=”true”

17

enableLookups=”false”

protocol=”AJP/1.3” />

18

19 <Engine name=”Catalina”

defaultHost=”localhost”

jvmRoute=”nodo1”>

20 <Realm

className=”org.apache.catalina.

realm.UserDatabaseRealm”

21

resourceName=”UserDatabase”/>

22 <Host name=”localhost”

appBase=”webapps”

unpackWARs=”true”

autoDeploy=”true”

23 xmlValidation=”false”

xmlNamespaceAware=”false”>

24 <Context

path=”/servlets-examples”

reloadable=”true”

docBase=”servlets-examples”

distributable=”true”/>

25 <Cluster

className=”org.apache.catalina.

cluster.tcp.SimpleTcpCluster”

26

managerClassName=”org.apache.ca

talina.cluster.session.DeltaMan

ager”

27

expireSessionsOnShutdown=”false

28

useDirtyFlag=”true”

29

notifyListenersOnReplication=”t

rue”

30

clusterName=”TOMCAT cluster”>

31

32 <Membership

33

className=”org.apache.catalina.

cluster.mcast.McastService”

34

mcastAddr=”228.0.0.4”

35

mcastPort=”45564”

36

mcastFrequency=”500”

37

mcastDropTime=”3000”/>

38

39 <Receiver

40

className=”org.apache.catalina.

cluster.tcp.ReplicationListener

41

tcpListenAddress=”192.168.10.2”

42

tcpListenPort=”4001”

43

tcpSelectorTimeout=”100”

44

tcpThreadCount=”6”/>

45

46 <Sender

47

className=”org.apache.catalina.

cluster.tcp.ReplicationTransmit

ter”

48

replicationMode=”pooled”

49

ackTimeout=”15000”/>

50

51 <Valve

className=”org.apache.catalina.

cluster.tcp.ReplicationValve”

52

filter=”.*\.gif;.*\.js;.*\.jpg;

.*\.png;.*\.htm;.*\.html;.*\.cs

s;.*\.txt;”/>

53 <Valve

className=”org.apache.catalina.

cluster.session.JvmRouteBinderV

alve”

54

enabled=”true” />

55 <ClusterListener

className=”org.apache.catalina.

cluster.session.JvmRouteSession

IDBinderListener” />

56 <Deployer

className=”org.apache.catalina.

cluster.deploy.FarmWarDeployer”

57

tempDir=”${catalina.base}/war-t

emp/”

58

deployDir=”${catalina.base}/war

-deploy/”

59

watchDir=”${catalina.base}/war-

listen/”

60

watchEnabled=”true”/>

61

62 <ClusterListener

className=”org.apache.catalina.

cluster.session.ClusterSessionL

istener”/>

63 </Cluster>

64 </Host>

65 </Engine>

66 </Service>

67 </Server>

Listado 2: Ejemplo de configuración CATALINA_HOME/conf/server.xml

Page 63: Linux Magazine - Edición en Castellano, Nº 19

<Engine> recibe todas las respuestas

de un <Service>, un <Host> ges-

tiona todas las peticiones de un

determinado host virtual y un <Con-

text> gestiona las peticiones de una

determinada aplicación web.

• Otros componentes, que pueden resi-

dir dentro de un <Container> o de

un <Context>.

Ahora vamos a por la configuración. La

verdad es que pueden dejarse por defecto

la inmensa mayoría de los parámetros,

algunos de ellos se pueden quitar porque

están comentados, o simplemente porque

están activados a modo de ejemplo, pero

no suelen ser necesarios. Respecto a los

que se pueden quitar o. por el contrario

son imprescindibles, nos lo irá dando la

experiencia de instalación de tipo de entor-

nos. La parte que hace referencia a la

configuración del cluster viene comentada

por defecto, por lo que habría que quitar

los comentarios <!— —> que engloban a

<Cluster> </Cluster>. Las etiquetas de

Cluster se pueden poner tanto a nivel de

<Engine> como a nivel de <Host>, con

lo que conseguiremos, respectivamente,

clusterizar Tomcat a nivel de todo el servi-

dor, o bien por cada uno de los hosts

virtuales configurados. Para configurar un

cluster con los parámetros por defecto (por

ejemplo para entornos de pruebas o

desarrollo), bastaría con añadir la opción

<Cluster className=”org.U

apache.catalina.cluster.tcp.U

SimpleTcpCluster”/>

en Engine o Host.

En el Listado 2 puede verse un fichero

de ejemplo de configuración completa para

el nodo1. Veámoslo más en detalle:

• Se añade en Engine el parámetro

jvmRoute=”nodo1”, que en realidad

se usa en arquitecturas con más de dos

nodos, para que la máquina virtual

sepa el lugar al que redireccionar las

peticiones ante una caída y recupera-

ción.

• Respecto a los Connectors, se elimina

el conector HTTP/S del puerto 8080,

que no se va a usar, ya que sólo vamos

a utilizar el conector AJP en el puerto

8009, que servirá para sincronizar con

el servidor web Apache HTTPD. De

todas formas, es habitual dejar el

conector 8080 en los entornos de

desarrollo. También puede indicarse la

dirección IP donde escuchará el conec-

tor, que aunque no es obligatorio, es

útil en el caso de que tengamos varias

tarjetas de red con distintas IP.

• Como contexto se deja el de una de las

aplicaciones web que vienen como

ejemplo. En este caso se trata de los

ejemplos de servlets, que además nos

servirá más adelante para probar el

replicado de sesiones. En dicho con-

texto es muy importante el parámetro

distributable=”true”, que indicará al

servidor Tomcat que dicha aplicación

tiene que mantener la sesión en todos

los nodos del cluster.

• La configuración del cluster establece

ese nodo como máster en el desplie-

gue (Sender) de las aplicaciones en la

granja en modo “pooled”. Las otras

opciones de replicación posibles son

synchronous, asynchronous o fastas-

yncqueue.

Una vez finalizada la configuración del

nodo1, podemos replicar la misma

instalación en el nodo2 cambiando

simplemente la dirección IP en el

parámetro address del conector y del

cluster, así como cambiar nodo1 por nodo2

en el parámetro jvmRoute en la directiva

Engine. Y ahora manos a la obra. Iniciamos

el nodo1 y nos fijamos en el fichero de

trazas CATALINA_HOME/logs/catalina.out

con nuestro paginador favorito (a mí me

gusta less y pulsar F), esperamos a que

termine de iniciar y acto seguido iniciamos

el nodo2 y, si todo ha ido bien, veremos

cómo se descubren entre sí ambos nodos y

se replican las sesiones que haya

disponibles. Un ejemplo de este

funcionamiento se puede ver en la Figura 3.

Balanceando la cargaComo balanceo de carga se podrían utili-

zar distintas técnicas: vía DNS (con

políticas de resolución de IP en bucle

RoundRobin), o bien con algún servicio

Cluster • ADMINISTRACIÓN

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

Directorio Descripción

bin/ Contiene los scripts de inicio y parada

common/ Es donde se guardan los paquetes y clases comunes a todas las aplicaciones

conf/ Ficheros de configuración

logs/ Ficheros de trazas y depuración

server/ Clases y paquetes de Tomcat

shared/ Similar al directorio common/

temp/ Ficheros temporales

webapps/ Directorios y paquetes de aplicaciones

work/ Directorios de trabajo en tiempo de ejecución

Tabla 2: Directorios de Tomcat

01 # Define some properties

02

workers.apache_log=/var/log/ht

tpd/

03 ps=/

04 # Define 3 workers the last

one being a loadbalancing

worker

05 worker.list=front

06 # Set properties for nodo1

(ajp13)

07 worker.nodo1.type=ajp13

08 worker.nodo1.host=192.168.10.2

09 worker.nodo1.port=8009

10 worker.nodo1.lbfactor=1

11 worker.nodo1.cachesize=10

12 worker.nodo1.cache_timeout=600

13

worker.nodo1.socket_keepalive=

1

14 worker.nodo1.socket_timeout=60

15 # Set properties for nodo2

(ajp13)

16 worker.nodo2.type=ajp13

17 worker.nodo2.host=192.168.10.3

18 worker.nodo2.port=8009

19 worker.nodo2.lbfactor=1

20 worker.nodo2.cachesize=10

21 worker.nodo2.cache_timeout=600

22

worker.nodo2.socket_keepalive=

1

23 worker.nodo2.socket_timeout=60

24 # Set properties for front

(lb) which use nodo1 and nodo2

25 worker.front.type=lb

26

worker.front.balance_workers=n

odo1,nodo2

27

worker.front.sticky_session=tr

ue

Listado 3: Ejemplo deworkers.properties

Page 64: Linux Magazine - Edición en Castellano, Nº 19

significado de los llamados workers, cuyo

fichero de configuración se referencia

mediante el JKWorkersFile, ubicado en el

directorio conf/ de Apache. ¿Qué es un

worker? Pues es una instancia de Tomcat

que ejecuta peticiones de servlets recibidas

desde un servidor web, o lo que es lo

mismo, el servidor Apache se encargará,

mediante la directiva JkMount, de redirigir

la url de la petición recibida hacia un

worker concreto. En el fichero de ejemplo

se establece que todas las peticiones

recibidas (/*) se redirijan al worker

“front”.

Vamos ahora a por el fichero del Listado

3, workers.properties, donde se definen los

distintos tipos de workers desplegados,

como los indicados en la Tabla 3. En nues-

tro caso, se trata de un único worker, que

va a trabajar como balanceador de carga.

Ojo porque en la directiva workers.list sólo

se incluyen los workers, separados por

comas, que vayan a ser usados en el

fichero jk.conf, los nodos que se conecten

a los nodos de un cluster sólo se usan en la

definición del worker de tipo “lb”.

El fichero de configuración comienza

con la definición de varias propiedades

comunes, como es el directorio de logs de

Apache (utilizado para que el módulo

mod_jk, que también guarda trazas) y un

parámetro “ps” que se utiliza para indicar

el separador de rutas (/ en Linux/Unix y \

para Windows). Después de definir el

número de workers existentes, se pasa a

detallar el funcionamiento de cada uno.

Como vemos, existe un worker por cada

tipo Linux Virtual Server en cada uno de

los nodos para que hagan el balanceo de

carga a nivel de red, o incluso se podría

usar la aplicación balancer que viene de

ejemplo con Tomcat. Nosotros vamos a

usar mejor el servidor web Apache

HTTPD, configurado con el módulo

mod_jk disponible dentro de Tomcat Con-

nectors [4]. Para instalarlo se podría

utilizar el paquete que exista en la distribu-

ción en cuestión (mod_jk-ap20 en CentOS

o libapache2-mod-jk en Debian), pero por

compatibilidad con las últimas versiones

de Tomcat que estamos usando, es preferi-

ble compilarlo a partir de las fuentes. Para

ello bastaría con descargar la versión

1.2.15 y tener instalado el paquete de

desarrollo de Apache (como siempre,

httpd-devel en CentOS y apache2-dev en

Debian) que proporciona apxs (APache

eXtenSion tool).

tar -xzvf jakarta-tomcat-U

connectors-1.2.15-src.tar.gz

cd jakarta-tomcat-connectorsU

-1.2.15-src/jk/native

./configure —with-axps=/usrU

/sbin/axps

make

Para instalarlo, copiamos el módulo resul-

tante en el directorio de módulos del

servidor web (/usr/lib/httpd/modules/ en

CentOS y /usr/lib/apache2/modules/ en

Debian):

cp apache-2.0/mod_jk.so U

/usr/lib/httpd/modules/

Ya sólo queda cargar y configurar el

módulo en el servidor. Para ello creamos

un fichero jk.conf como el del Listado 1,

ubicado en el directorio de carga

automática de Apache (/etc/httpd/conf.d

en CentOS y /etc/apache2/conf.d en

Debian). Es ahora cuando entra en juego el

ADMINISTRACIÓN • Cluster

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

01 #!/bin/bash

02 #

03 # tomcat

04 #

05 # chkconfig: 345 63 37

06 # description: Start up the

Tomcat servlet engine.

07

08

CATALINA_HOME=”/opt/tomcat55-n

odo1/”

09

10 case “$1” in

11 start)

12 if [ -f

$CATALINA_HOME/bin/startup.sh

];

13 then

14 echo $”Starting

Tomcat”

15 /bin/su tomcat

$CATALINA_HOME/bin/startup.sh

16 fi

17 ;;

18 stop)

19 if [ -f

$CATALINA_HOME/bin/shutdown.sh ];

20 then

21 echo $”Stopping

Tomcat”

22 /bin/su tomcat

$CATALINA_HOME/bin/shutdown.sh

23 fi

24 ;;

25 restart)

26 /bin/su tomcat

$CATALINA_HOME/bin/shutdown.sh

27 sleep 5

28 /bin/su tomcat

$CATALINA_HOME/bin/startup.sh

29 ;;

30 *)

31 echo $”Usage: $0

{start|stop|restart}”

32 exit 1

33 ;;

34 esac

Listado 4: Script de inicio/etc/init.d/tomcat

Tipo Descripción

ajp12 Worker que implementa el protocolo ajpv12. (a extinguir)

ajp13 Worker que implementa el protocolo ajpv13.

jni Worker que implementa peticiones JNI.

lb Worker para balanceo de carga.

status Worker de estado para gestión de balanceo de carga.

Tabla 3: Tipos de workers

Figura 2: Página inicial de Tomcat

accediendo desde la IP del balanceador.

Figura 3: Muestra de los ficheros de logs de

las dos instancias de Tomcat en el arranque.

Page 65: Linux Magazine - Edición en Castellano, Nº 19
Page 66: Linux Magazine - Edición en Castellano, Nº 19

ción y activado en los niveles de ejecución

típicos mediante chkconfig tomcat on en

CentOS y en Debian update-rc.d tomcat

defaults.

Otra mejora posible sería optimizar Tom-

cat mediante la compilación nativa, ya que

las últimas versiones de Tomcat 5 están inte-

gradas con la Apache Portable Runtime[ 7],

que es un subproyecto de Apache para la

creación de un paquete de librerías que sir-

van de abstracción consistente a

implementaciones específicas por plata-

forma. Esto rompería a priori la portabilidad

de Tomcat pero por contra se obtienen múl-

tiples beneficios como…

• … funcionalidades avanzadas de

Entrada/Salida

• … funcionalidades a nivel de sistema

operativo y de gestión de procesos nati-

vos, que redundará en la obtención de

mejores parámetros de estado y con-

sumo de proceso y memoria

• … la obtención de una superior escala-

bilidad y rendimiento.

Para instalar APR se podrían utilizar los

paquetes precompilados de cada distribu-

ción, pero mejor vamos a compilar la última

versión disponible en su web [7], la 1.2.7, en

la que realizaremos los pasos típicos de

compilación (huelga decir que nos hará falta

tener instalado el compilador gcc y make

previamente):

tar xvjf apr-1.2.7.tar.bz2

cd apr-1.2.7

./configure && make

make install

Mediante estos pasos se nos instalarán en

/usr/local/apr los componentes necesarios

que implementan el acceso nativo. Ahora

tocaría instalar los wrappers JNI de Tomcat

para que usen APR, además nos hará falta

tener instalado el paquete de desarrollo de

OpenSSL (openssl-devel en CentOS, libssl-

dev en Debian):

cd $CATALINA_HOME/bin

tar xvzf tomcat-native.tar.gz

cd tomcat-native-1.1.3U

/jni/native

./configure —with-apr=/usrU

/local/apr/bin/apr-1-config U

—with-java-home=/optU

/jdk1.5.0_07

make && make install

Que generará una serie de librerías JNI en

/usr/local/apr/lib/ que tendremos que

incluir en nuestra instalación de la JVM.

Para ello, copiamos o enlazamos en:

cd /opt/jdk1.5.0_07/jre/lib/i386/

ln -s /usr/local/apr/lib/U

libtcnative-1.a libtcnative-1.a

ln -s /usr/local/apr/lib/U

libtcnative-1.so libtcnative-1.so

ln -s /usr/local/apr/lib/U

libtcnative-1.so.2 libtcn

tive-1.so.2

ln -s /usr/local/apr/lib/U

pkgconfig/ pkgconfig

Ahora sólo habría que reiniciar Tomcat et

voilà. Por cierto, hay un pequeño pro-

blema en lo que respecta al

direccionamiento IP en esta versión de

Tomcat, y es que el parámetro address del

Connector AJP tiene que estar en IPv6 en

lugar de IPv4. Este problema estará solu-

cionado en la próxima versión 5.5.18.

Mientras tanto, habría que traducir el for-

mato de las IP 192.168.10.2 y .3 a IPv6 en

los conectores que tengan especificado el

parámetro address, aunque ya vimos que

no era obligatorio especificarlo.

ConclusionesEn definitiva, usando Apache Tomcat es

posible desplegar una aplicación crítica

funcionando con tolerancia a fallos y

existen muchas arquitecturas distintas con

balanceo de carga y alta disponibilidad.

Ahora sólo queda que la aplicación esté

preparada para funcionar en un entorno en

cluster, aunque eso ya daría para otro

artículo. �

uno de los nodos, cuyo tipo es ajp13,

donde se especifica también la dirección IP

y el puerto donde están escuchando los

respectivos Connectors definidos en Tom-

cat. También se pueden indicar aquí otros

parámetros interesantes como el peso

lbfactor del worker dentro del balanceo de

carga, el tamaño de la caché y el tiempo de

refresco. Ya por último, se define el worker

“front”, que se encargará de balancear las

peticiones entre los workers, separados por

coma, en balance_workers. Un parámetro

bastante importante a tener en cuenta es el

de sticky_session o sesión persistente, que

hace que las peticiones se redirijan siem-

pre al mismo nodo en el que se haya

creado la sesión inicialmente, y sólo pasa-

ría a usarse el segundo nodo cuando el

primero dejase de existir.

En la documentación de los conectores de

Tomcat [6] se puede ver el significado de

todas las directivas disponibles tanto en lo

que respecta al módulo, como a la

configuración de los workers.

Una vez creados los ficheros descritos,

bastaría con reiniciar Apache y empezar a

jugar un poco con las sesiones. En la Figura

2 podemos ver el funcionamiento de cómo

acceder directamente a la IP del servidor

web: http://192.168.10.1/, donde se nos

mostraría la página por defecto de Tomcat, y

si usamos los servlets de ejemplo que se

incluyen en Tomcat (http://192.168.10.1/

servlets-examples/), podemos ir viendo

cómo crear sesiones y alojar parámetros en

cookies, iniciar varios navegadores y com-

probar cómo se balancea la carga asignando

cada petición a un nodo distinto. También

podríamos simular la caída de un nodo for-

zando la salida de uno de ellos y seguir

haciendo peticiones al servidor y comprobar

cómo se redirigen las peticiones sólo al nodo

que está en funcionamiento. Mola ¿no?

Mejorando la instalaciónComo mejoras principales a realizar a la

configuración anteriormente detallada,

podrían realizarse algunas consideraciones

de seguridad, como ejecutar Tomcat con su

propio usuario no privilegiado tomcat, y

luego asignar permisos reducidos a los direc-

torios propios de la instalación de Tomcat.

Por ejemplo, los directorios imprescindibles

serían conf, logs, work y webapps. Ya sólo

faltaría crear el típico fichero script de inicio

de Tomcat para que se ejecute en cada reini-

cio del servidor. Un ejemplo sencillo podría

ser el detallado en el Listado 4, ubicado en

/etc/init.d/tomcat, con permisos de ejecu-

ADMINISTRACIÓN • Cluster

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

[1] Página de descarga de JDK de Sun:

http://java.sun.com/javase/

downloads/index.jsp

[2] Página de descarga de Tomcat 5.5.x:

http://tomcat.apache.org/

download-55.cgi

[3] Documentación de Tomcat 5.5: http://

tomcat.apache.org/tomcat-5.5-doc/

[4] Página de descarga de Tomcat Con-

nectors: http://tomcat.apache.org/

download-connectors.cgi

[5] Documentación de Tomcat Connec-

tors: http://tomcat.apache.org/

connectors-doc/

[6] Documentación de Apache HTTPD:

http://httpd.apache.org/docs/2.0/

[7] Apache Portable Runtime: http://apr.

apache.org/

RECURSOS

Page 67: Linux Magazine - Edición en Castellano, Nº 19

6767ISSUE 52 MARCH 2005W W W . L I N U X - M A G A Z I N E . C O M

Bienvenidos a Linux UserEsta 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 nuevas y apasionantes aplicaciones.

Ktools: Klear 68

Si estás cansado de batallar con la configuración de tu

software para la tele digital, prueba Klear, un sistema de

televisión para Linux fácil de instalar y de usar.

Desktopía: Firefox 70

Si buscas en internet encontrarás útiles añadidos para

Mozilla Firefox. Examinamos los más populares y

vemos como instalarlos y configurarlos.

Shredder 73

Shredder 9 trae el campeonato mundial de ajedrez al

ordenador de casa. Echamos un vistazo a la versión

linux de este famoso programa de ajedrez.

Educación: La traducción del software libre 76

Aunque no seamos programadores, tenemos una gran

oportunidad de contribuir en los campos de la

documentación y de la traducción. Por una vez querer

es poder, ¿queremos ser miembros activos de la

comunidad?

Línea de comandos: Procesos 81

Innumerables procesos pueden estar corriendo

simultáneamente en un sistema linux en cualquier

momento dado. Enseñamos cómo detener, continuar o

matar tareas y examinamos cómo enviar los restos de

programas colgados al cielo de los procesos muertos.

Juegos: J-SHOOTERS 84

En tierras del sol naciente ha surgido una nueva vuelta de

tuerca al género de los “matamarcianos”. Gráficos vectoriales

muy simples, velocidad, buena jugabilidad y dosis

monumentales de adicción que, totalmente gratis, están

disponibles para nosotros.

Page 68: Linux Magazine - Edición en Castellano, Nº 19

sobre tarjetas PCI y sticks DVB USB que

Linux soporta.

InstalaciónPara compilar el paquete son necesarios

los paquetes de desarrollo de Qt y de

KDE (kdebase-devel, kdebase-dev o simi-

lar) junto con Xine. La mayoría de las

distribuciones tienen paquetes listos

para ejecutar la herramienta de compila-

ción Scons [3], la cual también es un

componente requerido. En contraste con

la mayoría de otros proyectos de soft-

ware libre, Klear no ofrece un script de

configuración, en su lugar proporciona

un script shell denominado build.sh.

Cuando se ejecuta este script, se com-

prueban primero las dependencias antes

de continuar con la compilación.

Puede incluso arrancarse directamente

scons. Si se ejecuta scons help, se obtie-

nen los parámetros disponibles, que

serán necesarios para establecer las rutas

no estándares a las librerías que se usan.

En nuestro laboratorio, experimentamos

un problema con algunos sistemas que

no encontraron la librería libxine.so. En

la mayoría de los casos, para resolverlo,

establecimos un enlace simbólico desde

libxine.so.1 a libxine.so en el directorio

/usr/lib. Tras completar la compilación,

puede instalarse el programa ejecutando

scons install como superusuario.

Cuando se arranca Klear por primera

vez, dirá que no dispone de un fichero

de configuración y presenta el fichero de

dispositivo DVB establecido en un diá-

logo. Habitualmente se aceptan como

valores por defecto adapter0, dvr0,

demux0 y frontend0. Si se presentan difi-

cultades, hay que asegurarse de que

dichos ficheros se encuentran en /dev/

dvb, además de comprobar que se dis-

pone de accesos de escritura y lectura al

directorio /dev/dvb.

Klear espera también un fichero deno-

minado channels.conf en el directorio

$HOME/.klear. Aquí es donde se almace-

nan los datos de frecuencia del canal

para su localización. Para un fichero de

68

LINUX USER • Ktools: Klear

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

La televisión Digital en Linux a

menudo se asocia con arduas ins-

talaciones y mucho tiempo

perdido. Configurar MythTV puede ser

todo un desafío mientras que el sistema

alternativo VDR es de todo menos trivial,

a menos que se use una distribución

especializada como LinVDR.

Klear [1] es un programa basado en

GUI que permite ver y grabar programas

DVB de manera mucho más sencilla.

Fue escrito por Patric Bico Sherif, Omar

El-Dakhloul, Manuel Habermann y

Marco Kraus en la Universidad Técnica

de Berlín como parte de un curso de

programación. Klear usa la herramienta

Qt para suministrar una GUI y supone

un subsistema de trabajo DVB, aunque

los kernels más actuales deberían

soportar hardware DVB sin ningún pro-

blema. Las secciones DVB-S/T/C devices

en la wiki de LinuxTV [2] informan

TV Digital con Klear

IMAGEN KLARASi estás cansado de batallar con la configuración del software para tu

tele digital, prueba Klear, un sistema de televisión para Linux fácil de

instalar y de usar. POR OLIVER FROMMEL

Page 69: Linux Magazine - Edición en Castellano, Nº 19

69

Ktools: Klear • LINUX USER

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

muestra se aconseja comprobar la

página de inicio de Klear.

Tele-visionandoPara arrancar un canal de televisión hay

que hacer un doble clic sobre el nombre

del canal que aparece en la lista. Des-

pués de unos cuantos segundos de

demora en la sintonización, debería

aparecer una imagen en la ventana

Klear (Figura 1). Para ocultar los contro-

les se pulsa la tecla [M] o se hace clic en

el botón correspondiente (Figura 1).

Pulsando [M] volverán a presentarse los

controles de nuevo. [F] o haciendo clic

sobre el botón correspondiente nos

ofrece el modo de pantalla completa.

Sin embargo, esta característica sólo

funciona actualmente en KDE. Los pro-

gramadores se afanan por traer hasta

los usuarios de Gnome Klear el modo de

pantalla completo en un futuro pró-

ximo.

Pueden notarse algunas interferencias

con imágenes en movimiento. Después

de todo, el stream DVB está diseñado

para verse en receptores que usan en

modo entrelazado, algo que los monito-

res de ordenador no pueden dar. La

respuesta es Desentre-

lazado: se hace clic o

se presiona la tecla

[D] para habilitar y

deshabilitar esta

característica. Des-

afortunadamente,

Klear espera hasta el

último minuto para

limpiar la imagen.

Esto significa que las

capturas de pantallas

(tecla [S]) y cualquier

stream que se grabe

tendrán todavía listas

de entrelazado. Para

eliminarlos, se puede

usar una herramienta como Transcode o

Mencoder que habilitan el desentrela-

zado cuando se convierte a un formato

diferente en la etapa final.

Se puede utilizar la lista de canal o las

teclas [Página Arriba] o [Página Abajo]

para cambiar el canal. Si al hacerlo

Klear se cuelga, habrá que deshabilitar

Automatic OSD display on switching en

la solapa General. El programa es más

estable sin OSD.

Para grabar el programa actual, se

presiona el botón de grabación o se

pulsa la tecla [R]. Se puede configurar

un directorio diferente bajo Recording

para la configuración por defecto que

guarda las grabaciones ene el escritorio.

Klear permite elegir entre dos formatos

de grabación distintos: el stream de

transporte MPEG (MPEG-TS) y el

stream de programa (PS). Entre ambos

no existen grandes diferencias, aunque

la grabación con el stream de transporte

es más ligero para la CPU.

Planificación

Las aplicaciones DVB son útiles porque

permiten programar múltiples sesiones de

grabación. Klear ofrece una guía de progra-

mas electrónica (EPG) para ayudar a la

hora de llevar a cabo una planificación. Un

EPG permite la programación anticipada

de canales para un determinado número

de días. Para ello se selecciona un pro-

grama y se pulsa el botón de grabación.

Klear ofrecerá un diálogo en el que poder

realizar cambios, tales como detener una

grabación unos minutos más tarde, en

caso de que el programa de televisión se

haya retrasado en su emisión.

Puede que no te guste la idea de Klear

en ejecución hasta las 3 de la madrugada

para grabar un programa. Sus desarrolla-

dores poseen una solución simple pero

funcional. Se habilita Mute on iconizing en

las configuraciones bajo General. Ahora,

una vez se iconiza la aplicación a través de

la barra de título de la ventana (y no a tra-

vés del menú Klear) se le podrá dejar

dormir hasta la hora de la grabación, aun-

que ésto, de momento, sólo funciona con

KDE. Los usuarios de Gnome, deberán

cambiar el stream manualmente pulsando

[V] e iconizar la ventana Klear. Tras alma-

cenar las grabaciones en disco pueden

usarse programas como DVB_CUT [4] para

cortar la grabación antes de la conversión

al formato requerido. DVBCUT está hecho

a medida para ello y puede manejar forma-

tos DVB MPEG.

ImperfectoKlear posee las funciones que necesita un

programa DVB práctico que evita el exceso

de características. Permite ver la televisión y

planificar las grabaciones. Claro que para

hacer un uso completo de las características

de esta aplicación necesitaremos KDE. Los

cuelgues ocasionales estropean la diversión

de ver televisión digital. Entre las priorida-

des de sus desarrolladores se encuentran la

mejora de la estabilidad y llevar la aplica-

ción con las características completas del

programa a otros escritorios. �

Figura 1: Ventana principal de Klear con la imagen de la televisión

y el canal.

Figura 2: Los botones de Klear permiten

controlar el programa con el ratón.

Figura 3: Se usa la etiqueta Recording para

especificar el formato de grabación así como

los directorios previstos para golpes de pan-

talla y grabaciones.

[1] Klear: http://wwww.klear.org/

[2] Wiki deLinuxTV:http://linuxtv.org/wiki

[3] Scons: http://www.scons.org

[4] DVBCUT:

http://dvbcut.sourceforge.net

RECURSOS

Page 70: Linux Magazine - Edición en Castellano, Nº 19

instalada, seleccionando Tools | Extensions

puede abrirse el Administrador de Exten-

siones Firefox (Firefox Exension Manager,

ver Figura 1). El administrador de extensio-

nes es una herramienta central para la

administración de plugins.

Si la versión Firefox 1.0 ya tiene instala-

das determinado número de extensiones

antes de actualizarla a Firefox 1.5, el nave-

gador debería mostrar si los módulos son

compatibles con la nueva versión. De lo

contrario, se hace clic sobre el botón

Update de la parte inferior de la ventana de

Administración de Extensión. En este

momento el programa comprueba el sitio

web del proyecto para verificar si se

encuentra disponible una nueva versión del

módulo. A continuación rearranca el nave-

gador web para habilitar las herramientas.

Si Firefox falla al localizar las extensiones

que funcionen, las antiguas permanecerán

deshabilitadas hasta que se encuentre dis-

ponible otra actualización o hasta que se

eliminen manualmente las extensiones. Si

siguen encontrándose problemas, tales

como que el programa se cuelga porque el

navegador ha tropezado con un módulo

incompatible o roto, puede intentarse

arrancar el programa en modo seguro

usando los siguientes parámetros desde la

línea de comandos: firefox -safe-mode.

En modo seguro todos los temas [4] y

extensiones están deshabilitados, pudién-

dose ejecutar Extension Manager para

eliminar el módulo problemático.

Material NuevoSi se ha estado utilizando Firefox sin nin-

gún añadido, se aconseja visitar el sitio

web de añadidos de Firefox en [2] para ver

todo lo que hemos estado perdiéndonos. Se

puede ir sin salir de Extension Manager

haciendo clic sobre el enlace Get more

extensions. La lista contiene los diez añadi-

dos más populares, así como enlaces a

otras extensiones y recursos.

Las categorías se muestran a la

izquierda, y van desde las extensiones para

blogging a través de herramientas de des-

carga, hasta herramientas para la

protección de la privacidad. Aparte de este

sitio web, existen varios proyectos alternati-

vos que ofrecen extensiones para el

navegador Firefox, tales como la extensión

Mirror [3].

Ad BlockerComenzaremos con un plugin que resulta

indispensable para hacer útiles algunos

sitios web: Adblock. El módulo bloquea o

70

LINUX USER • Desktopía: Firefox

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

El navegador Mozilla Firefox está

diseñado para alojar extensiones

fácilmente, de modo que su comu-

nidad ha respondido con un variado tipo de

módulos de añadidos. Tanto si tenemos

interés en mejorar el rendimiento del nave-

gador, como si simplemente queremos

consultar las noticias del tiempo encontra-

remos una extensión que se adapte a

nuestras necesidades. Echaremos un vis-

tazo a algunos de los módulos más útiles

para el nuevo Firefox 1.5.

Cómo empezarSi la distribución de Linux de la que se dis-

pone no cuenta con la última versión de

Firefox, es posible descargársela de la

página de inicio de Firefox en [1]. Una vez

Búsqueda e instalación de extensiones de Firefox

EXTENSIBILIDADBúsqueda e instalación de extensiones de Firefox

EXTENSIBILIDAD

Figura 1: El Administrador de Extensiones de

Firefox muestra las extensiones instaladas

en nuestro navegador.

Si buscas en Internet encontrarás útiles añadidos para Mozilla Firefox.

Examinamos los más populares y vemos como instalarlos y configu-

rarlos. POR ANDREAS KNEIB

Page 71: Linux Magazine - Edición en Castellano, Nº 19

71

Desktopía: Firefox • LINUX USER

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

cierra elementos tales como gráficos de

anuncios y banners intrusivos. Ad Blocker

es uno de los diez añadidos más populares.

La instalación es bastante simple. Una

vez en el sitio web de Adblock [5] se hace

clic en el enlace Install Now. Dicho enlace

abre el diálogo de instalación del software

(Figura 3).

El proceso se arranca presionando

Install. Después de restablecer el navega-

dor, Adblock está listo para despegar. Si por

alguna razón falla este proceso se selec-

ciona Edit | Preferences | Content para ver

qué sitios web han sido aprobados para la

instalación del software. Pero es necesario

recordar que hay que restringir este proceso

a sitios de confianza para evitar que se abra

un agujero de seguridad.

Otro método de integración de ad bloc-

ker es descargar el fichero de extensión y

luego arrastrar y soltar el icono del fichero a

instalar. Se hace clic en el enlace Install

Now y se selecciona Save link as... para

guardar la extensión con la extensión del

fichero xpi en el disco duro. El siguiente

paso es usar el administrador de ficheros

Konqueror para arrastrar el fichero a la ven-

tana principal de Firefox para arrancar la

instalación del software.

Trabajar con Adblock es sencillo: en la

barra de la parte inferior de la ventana del

navegador aparece un mensaje Adblock.

Cuando se hace clic sobre el mensaje, la

herramienta muestra una lista de elemen-

tos del sitio web que se está viendo en ese

momento y ofrece ocultar algunos de esos

elementos. Es posible hacer clic sobre un

elemento en la página para que emerja un

menú que permite deshabilitar una imagen

o un elemento Iframe, por ejemplo.

Para administrar y editar las reglas del fil-

tro para la herramienta es preciso ir a Tools

| Adblock | Preferences. Adblock entiende

comodines como el asterisco “*”, lo cual es

una buena cosa, especialmente si te cobran

la conexión por minutos, ya que ayuda a

presentar la página más rápidamente, lo

cual puede evitar gastar mucho dinero.

Un zorro velozPara mejorar un poco más la velocidad del

navegador podemos instalar la extensión

Fasterfox. Al igual que Adblock, esta exten-

sión puede encontrarse en la lista de

herramientas Most Popular Firefox Exten-

sions o en la página de inicio del proyecto

en [6]. El plugin ofrece determinadas técni-

cas para mejorar las velocidades de

descarga.

Una vez completada la instalación, se

puede usar el administrador de preferencias

para completar la configuración. Se

comienza con un clic sobre el plugin Faster-

fox. A continuación se hace clic en

Preferences para ir a las opciones.

Los usuarios con pocos conocimientos,

técnicos pueden marcar el cuadro Turbo

para hacer que el navegador coja más velo-

cidad. Pero si se disfruta experimentando,

haciendo clic sobre Modify se presentará

una selección de etiquetas para una perso-

nalización individualizada.

Uno de los mayores fuerzas de fasterfox

es la habilidad que posee para precargar

páginas web, la cual se conoce como

Enhanced Prefetching (Precarga Mejorada).

Esto significa que mientras se abre un sitio,

el navegador también carga los sitios con

los que enlaza aquél. Cuando se hace clic

sobre alguno de los enlaces, el navegador

presenta el documento sin ninguna demora.

Pulsando en la solapa General podemos

configurar la precarga. Por defecto esta

opción se encuentra deshabilitada debido a

que utiliza mucho ancho de banda de la

conexión a Internet. El cuadro de texto

debajo de la opción permite excluir ciertos

enlaces de la precarga.

La precarga mejorada es diferente de la

característica de precarga integrada en el

navegador. El servidor web tiene que sopor-

tar la precarga estándar para que se pueda

utilizar. Sin embargo, la precarga mejorada

descarga sitios webs enlazados de manera

autónoma , incluso si el servidor no soporta

la precarga.

En la parte inferior de la solapa hay un

cuadro de comprobación que pregunta si se

desea que se presente un reloj automático

al pie de la ventana de Firefox. Este reloj

dirá cuánto tiempo necesitará el navegador

para cargar la página. Haciendo clic sobre

este reloj, se muestra un cuadro de diálogo

conteniendo varias opciones.

Cuando Fasterfox pisa el acelerador con

un puñado de configuraciones optimiza-

das, Firefox sale disparado a través de la

World Wide Web a alta velocidad. Supo-

niendo que no se nos cobra por el volumen

de descarga, no hay duda que disfrutare-

mos con las prestaciones que ofrece la

precarga mejorada.

Tiempo FoxForescastfox suena ligeramente parecido a

Fasterfox, pero la función que da es

completamente diferente. Se trata del

Figura 2: La página Add-ons de Firefox proporciona enlaces a las extensiones Firefox más

populares.

Figura 3: Puede usarse este cuadro de

diálogo para añadir Adblock.

Page 72: Linux Magazine - Edición en Castellano, Nº 19

Para presentar la imagen satélite, arrastra

el ratón hasta el icono del radar verde en

la parte inferior de la pantalla. Haciendo

clic en él se abre en el navegador la

página http://wwwa.accuweather.com

ofreciendo una imagen satélite a pantalla

completa.

Es cierto que Forecastfox no hace nada

por mejorar el tiempo, pero al menos

sabrás si vale la pena abandonar tu escri-

torio y salir a dar una vuelta. Asimismo,

la herramienta elimina la necesidad de

arrancar alguna otra aplicación de pro-

nóstico del tiempo, como es Wmweather.

TrucosEl último añadido que examinaremos es

una herramienta de navegación llamada

Noscript [8], la cual permite habilitar y

deshabilitar Javascript y Java para adap-

tarlo a nuestras preferencias. Existen

varias maneras de acceder a las opciones

de esta popular extensión. Bien puede

tomarse la ruta vía Extension Manager, al

igual que con Fasterfox, o bien usar la

barra Noscript en la ventana del navega-

dor o el icono al pie de la ventana del

programa.

Existen tres solapas con

configuraciones: General, Appearance y

Advanced. La solapa General se usa para

introducir páginas web donde se

permitirá correr Javascript. Appearance

permitirá especificar dónde se desea que

resida el icono Noscript o el tono de alerta

que avisa cuando el plugin rechaza un

script. Los otros campos son para cambiar

la presentación.

Los parámetros extendidos permiten

especificar cómo manipular el copiado

y pegado, Macromedia Flash, Java u

otros plugins. Siempre que se encuen-

tre con una página en la World Wide

Web que intente arrancar Javascript,

aparecerá una barra con el botón

Options (Figura 4).

El botón nos lleva hasta un menú

donde pueden permitirse que se ejecu-

ten scripts del sitio web, o bien

permanentemente o bien en la sesión

de navegación actual.

Este menú permite a los usuarios la

posibilidad de que se ejecuten scripts

caso por caso en las preferencias del

navegador. Esta característica no es

sólo por comodidad, también conlleva

implicaciones en términos de

seguridad. Si se modifican las

configuraciones Javascript en

diferentes ocasiones durante una sesión

de Internet, es seguro que se perderá la

trayectoria de las configuraciones en

algún paso; es bueno saber si

Javascript está habilitado o no.

ConclusionesLos navegadores como Firefox se adap-

tan al usuario igual que un traje hecho

a medida. Con su amplio número de

extensiones a elegir, es posible persona-

lizarlo a las necesidades individuales

de cada uno. �

pronosticador del tiempo para el

navegador. También se encuentra entre una

de las diez extensiones más populares del

sitio web de Firefox e incluso dispone de su

propia página de inicio [7].

La herramienta presenta un pronóstico

del tiempo actualizado regularmente en la

parte inferior de la ventana Firefox. Como

Forescastfox no tiene manera de saber

dónde vives, querrás configurar el lugar

en el administrador de extensiones. Para

hacerlo se pulsa Find location en la sec-

ción General.

Se escribe el nombre de la ciudad en la

máscara que aparece ahora. El programa

busca en la base de datos la estación

meteorológica con el mismo nombre que

tu ciudad y ofrece una lista de opciones.

Tras seleccionar el lugar de la lista, la

extensión te mantendrá actualizado sobre

el tiempo local.

Otra de las opciones afecta a las unida-

des de medida de la estación

meteorológica local. Dependiendo del

gusto personal, pueden escogerse dos

medidas, imperial o métrica. Otras seccio-

nes de las tantas disponibles están

relacionadas con las configuraciones

opcionales, tales como la presentación,

advertencias o enlaces.

Además del pronóstico del tiempo para

los próximos días, esta herramienta de

previsión del tiempo virtual ofrece una

imagen satélite centrada en tu ciudad.

LINUX USER • Desktopía: Firefox

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

[1] Firefox: http://wwww.mozilla.com/

firefox/

[2] Extensiones Oficiales Firefox: https://

addons.mozilla.org/extensions/

?application=firefox

[3] Extensiones mirror: http://www.

extensionsmirror.nl

[4] Temas Oficiales Firefox: http://addons.

mozilla.org/themes/

?application=firefox

[5] Adblock: https://addons.mozilla.org/

extensions/moreinfo.

php?id=10&application=firefox

[6] Fasterfox: http://fasterfox.mozdev.org

[7] Forecastfox: http://forecastfox.

mozdev.org

[8] NoScript: http://noscript.net

RECURSOS

Figura 4: La extensión Noscript identifica código Javascript y muestra al usuario un menú de

opciones.

Page 73: Linux Magazine - Edición en Castellano, Nº 19

Los bits y los bytes han pasado a for-

mar parte del mundo del ajedrez: las

férreas infraestructuras pueden poner

en jaque a un campeón. Incluso alguno de

ellos, de la talla de Gary Kasparow hacen

uso de programas de ordenador de ajedrez

para “hacer sus deberes”.

En el pasado, los usuarios de Linux intere-

sados en este juego disponían de menos

opciones que los usuarios de Windows, y la

mayoría de los programas Linux de ajedrez

disponibles exigían al usuario no pocas

habilidades técnicas (ver el cuadro “Linux y

Ajedrez”). La llegada de Shredder 9 para

Linux es una nueva e importante oportuni-

dad para que los usuarios Linux puedan

explorar las posibilidades del ajedrez en el

ordenador.

Al CuboEn el mundo de Windows, el motor UCI

Shredder 9 es la aplicación por excelencia y

un líder dentro del ranking mundial.

Shredder ha ganado diez campeonatos

mundiales por ordenador de ajedrez,

mientras que la interfaz Shredder Classic

está considerada por los expertos del ajedrez

como una de las GUIs mejor diseñadas y

lógicas del mercado. Stefan Meyer-Kahlen,

programador del motor del programa ha

ampliado recientemente su imperio creando

versiones de Shredder 9 para Linux y Mac

OS X.

En Octubre, Meyer-Kahlen inició la venta

del equivalente de Shredder 9 para Linux y

Mac OS X desde su página de inicio [1]. En

total existen tres versiones de la aplicación:

la versión de inicio, Shredder Classic Linux,

cuyo precio es de 29.95 EUR y viene con el

motor más lento, Shredder Classic. El motor

Shredder 9 de gama media asciende a 49.95

EUR, mientras que Deep Shredder 9 para

Linux, que ofrece un rendimiento mayor en

SMP o en ordenadores multinúcleo, sube

hasta los 99.95 EUR.

Las tres versiones poseen la GUI Classic

Shredder y se encuentran disponibles

mediante descarga de la página web de

Shredder. El sitio no ofrece paquetes con

manuales ni otros medios.

Shredder • LINUX USER

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

El programa de ajedrez Shredder para Linux

MASTERVIRTUAL

Existen para Linux un buen número de

recursos de ajedrez en lo que se refiere a

motores (ver el cuadro “Motores de Aje-

drez y GUIs). De todos ellos, el primero y

principal, y probablemente el programa

de código abierto más poderoso de

todos, es Crafty [2] del Profesor Robert

Hyatt. Este programa pierde frente a sus

competidores comerciales en el ranking

mundial, aunque tiene asegurado su

lugar dentro de los primeros 40.

Los restantes motores son bastante

apropiados para un juego rápido,

aunque no son aconsejables para

competidores de torneos serios, ya

que carecen de características de aná-

lisis.

Las cosas empeoran si se analizan las

GUIs. La mayoría de ellas se limitan a

ofrecer una visión del tablero de ajedrez,

evitando tener que jugar un partido a

ciegas contra el ordenador.

La base de datos de ajedrez Scid [3] es

una bienvenida excepción a la regla: su

riqueza de características lo hacen una

genuina alternativa a programas Win-

dows comerciales. Sin embargo, Scid no

es apropiado para juegos de competi-

ción, ya que no dispone de cronómetro.

El programa Knights para KDE, así como

otras GUIs, poseen esta característica,

pero no disponen de nada en la línea de

análisis o funcionalidad de la base de

datos.

José Chess [4] es un programa Java

digno de mención. Dispone de una

opción para añadir oberturas. José

Chess probablemente sea el candidato

más prometedor de todas las GUIs de

código abierto hasta el momento

Linux y Ajedrez

Shredder 9 trae el campeonato mundial de ajedrez en el ordenador de

casa. Echamos un vistazo a la versión Linux de este famoso programa

de ajedrez. POR MIRKO ALBRECHT

Page 74: Linux Magazine - Edición en Castellano, Nº 19

mayor parte de la GUI de la versión original,

tales como la desaparición de piezas, aun-

que esta actualización falló a la hora de

aumentar la velocidad de la GUI.

Características AusentesMuchas características que se encuentran en

la versión de Shredder para Windows no se

encuentran aún disponibles para la versión

Linux. Aunque existen extensas bases de

datos online con finales de juego, la versión

Linux no puede conectarse a ellas. Además,

esta versión Linux también carece de

muchas de las opciones de análisis inteli-

gente disponibles para la versión Windows.

La base de datos del juego del programa no

permite buscar por juegos mediante posición

y no contiene más que 2000 registros, lo que

impide un uso serio, más si se considera que

cientos de miles de juegos son bastante nor-

males. Aunque Shredder para Linux permite

integrar varios motores UCI, el programa

carece del modo en el que dos motores pue-

den jugar uno contra el otro, a diferencia de la

versión Windows. Incluso carece de una fun-

ción de impresión que permita imprimir

partidas completas y sus diagramas.

A pesar de ello, Shredder 9 para Linux

tiene una colección de oberturas de 100

MBytes, la cual puede ser descargada como

un fichero comprimido de 27 MBytes des-

pués de comprar la clave de registro. La

ventana del motor ofrece una vista de las

posibles jugadas.

La versión Linux viene sin manual, aun-

que la buena organización de los menús

permite a los usuarios un acceso fácil a las

funciones del programa, suponiendo que se

está familiarizado con el juego del ajedrez.

Haciendo clic con el botón derecho en la

ventana de notación hace que se muestre

una paleta para rápidos comentarios sobre

jugadas. La ventana Mode lleva hasta los

modos posibles de juego.

La entrada Analysis seguirá analizando

un juego para la mejor jugada posible hasta

que le sea permitido. El Shredder de Linux

soporta análisis variantes múltiples. Si se

tiene ilusión por aprender más acerca del

juego, pueden introducirse rutas variantes

completas y jugar las distintas opciones con

varios motores. Pueden promocionarse

variantes útiles a variantes principales y eli-

minar las más pobres. Si se desea, Shredder

indicará posibles peligros mostrando una

flecha roja o bien indicando los movimien-

tos más prometedores mediante una flecha

verde ([Ctrl]+[T]).

Opciones del JuegoSi se juega a nivel de club, puede que se esté

interesado en una opción de Shredder que

permite jugar a partidas de ajedrez con

reglas estilo torneo basadas en un programa

preestablecido. Por ejemplo, puede usarse

Shredder para jugar a un ajedrez relámpago

con penalizaciones de tiempo, o bien jugar a

partidas más largas con más

Stefan Meyer-Kahlen escribió el motor en

C y lo compiló directamente para Linux.

Corre nativamente, pero es ligeramente más

lento que su equivalente Windows. Esto es

debido a las menos que perfectas optimiza-

ciones de GCC, argumenta el desarrollador.

Para la GUI se usó Java, probablemente para

apoyar versiones de Shredder 9 para Mac y

Shredder 9 para Linux sin tener que reinven-

tar la rueda.

Configuración de Shredder 9Después de adquirir el programa, se nos

envía un mensaje de correo con un número

de registro y un enlace al archivo de des-

carga de Shredder 9. La descarga es un

tarball de 4 MB. Tras desempaquetarlo, el

programa puede arrancarse corriendo el

script de inicio, Shredder9, suponiendo que

se dispone de una instalación Java, versión

1.4 o superior.

Cuando el programa arranca, invita a

seleccionar un idioma y luego se reinicia.

Comienza con una GUI ordenada y limpia,

que se encuentra dividida en cuatro paneles,

los cuales corresponden a las ventanas para

el tablero de ajedrez, el reloj, el estado del

juego y el área del motor (Figura 1).

Después de unas cuantas jugadas, debería

notarse que la GUI es un poco pesada. En

nuestros sistemas de laboratorio (Athlon XP

1600+ ; Intel Centrino 1.5 Mhz, ambos con

512 MByte de RAM) la GUI reaccionó muy

lentamente. La prometida actualización por

parte de Stefan Meyer-Khalen del pasado

Noviembre corrigió los peores fallos de la

LINUX USER • Shredder

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

Figura 1: La interfaz de Shredder combina tablero de ajedrez, reloj, protocolo de juego y

controles del motor en una única GUI.

El motor de ajedrez es el núcleo de cual-

quier programa de ajedrez, es el lugar en

el que reside la inteligencia del juego.

Para ayudar a controlar el motor, es

necesaria una GUI que ofrece una repre-

sentación gráfica del tablero para

visualizar la partida. Los motores más

populares para Linux incluyen Crafty,

Phalanz, Gnuchess y viejas versiones de

Sjeng y Fruit. Las GUIs Linux incluyen

Knights, Xboard, José Chess o Scid.

Para la integración de un motor con una

GUI se dispone de dos protocolos dife-

rentes: el protocolo WinBoard

compatible y la Interfaz UCI Universal

Chess, ésta última es del desarrollador

de Shredder, Stefan Meyer-Kahlen. La

mayoría de los motores y GUIs de

código abierto soportan solamente el

protocolo WinBoard compatible. GUIs

más recientes, como José Chess, sopor-

tan ambos, tanto WinBoard como UCI.

La interfaz Polyglot [5] te ayuda a inte-

grar motores UCI con GUIs WinBoard

compatibles.

Motores de Ajedrez y GUIs

Page 75: Linux Magazine - Edición en Castellano, Nº 19

75

Shredder • LINUX USER

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

comprobaciones de tiempos. Los usuarios

de Shredder incluso pueden asignarse un

Bono Humano. Esta característica es una

muy buena idea cuando se considera el

tiempo que lleva mover piezas de ajedrez

arrastrando el ratón.

Shredder también es útil para los princi-

piantes y jugadores ocasionales. El menú

Mode | Levels permite a los jugadores limitar

la fuerza de los oponentes computerizados.

La fuerza se mide en la unidad normal ELO

(Figura 2).

En el nivel de juego más bajo, el programa

incluso imita errores humanos típicos. Otros

programas de ajedrez devalúan típicamente

sus piezas a niveles de diversión. Algunas

aplicaciones de aje-

drez realizan

jugadas agresivas

con la reina. Shred-

der 9 toma pasos

adicionales para simular el juego de un

humano inexperimentado.

El nivel más bajo (1000 ELO) incluso

debería dar a los jugadores ocasionales una

oportunidad para batir a la máquina. En este

nivel, Shredder incluso hace la vista gorda

después del comienzo a los campos de jaque

mate g7 y h7. Pero estoy completamente

seguro de que Linux Magazine no posee

demasiados lectores que ganen a Shredder 9

sin restricciones algunas.

Funciones y CaracterísticasLa GUI posee todas las funciones que se

podrían esperar de una GUI de ajedrez,

incluyendo la habilidad de rotar y escalar

el tablero, revisión de jugadas y rejugada,

oberturas de partidas o guardado de par-

tidas en distintas bases de datos.

Si se requiere, es posible modificar el

tamaño de la tabla en File | Options |

Engine options. En palabras sencillas,

éste es el espacio de memoria para alma-

cenar las cálculos realizados por el

motor. El valor no debería ser mayor que

la mitad de la memoria física total del

ordenador. Permanent Brain especifica si

Shredder usará la CPU para cálculos todo

el tiempo o justo cuando se produce la

jugada del programa.

Si se intentan usar otros programas

mientras se espera que el motor realice

una jugada, puede habilitarse la opción

Engine with low priority.

Como ya se mencionó previamente,

Shredder funcionará con otros motores,

tantos como soporten el protocolo UCI. Si

se es un jugador perspicaz debería probar

adicionalmente el motor comercial Fruit

2.2.1 (29 EUR), uno de los motores de

ajedrez más poderosos del mundo recien-

temente lanzado para Linux.

ConclusionesA pesar de su lenta GUI, Shredder 9 para

Linux es una potente herramienta de ajedrez

que me ha dejado una buena impresión.

Definitivamente ofrece más en la línea de

características que una combinación de,

pongamos, Xboard/Crafty o Knights/Crafty,

aunque no puede competir con la riqueza de

características de la base de datos de ajedrez

de Scid. Por otra parte, la interfaz Shredder

Classic es muy fácil de utilizar.

Lo más molesto del programa es el hecho

de que los jugadores de ajedrez Linux tienen

que contentarse con un subconjunto de las

funciones que ofrece la versión Windows,

aunque el precio sea el mismo. Cuando se

puntualiza esto a Stefan Meyer-Kahlen, sim-

plemente contesta que la versión Linux

solamente lleva en el mercado unas cuantas

semanas, mientras que la primera versión

para Windows fue lanzada por primera vez

hace unos diez años. �

Figura 2: Shredder 9 soporta algunas opciones de tiempo y permiterestringir la fuerza del ordenador.

Figura 3: Shredder 9 soporta motores alternativos, tantos como

soporten protocolos UCI.

Fabricante: Stefan meyer-Kahlen

Características: +Motor poderoso

+Front-end Profesional

+Buenas opciones de análisis

-No Manual

-GUI lenta

- Menos funciones que laversión Windows

Precios: Shredder Classic Linux

29.95 US$/EUR

Shredder 9 Linux

49.95 US$/EUR

Deep Shredder 9 Linux

99.95 US$/EUR

Fuente: http://www.shredderchess.de

Tabla 1: Shredder 9 paraLinux

[1] Shredder 9: http://www.

shredderchess.com

[2] Crafty: http://www.cis.uab.edu/hyatt/

hyatt.html

[3] Scid: http://scid.sourceforge.net

[4] José Chess: http://jose-chess.

sourceforge.net

[5] Polyglot: http://theorie.physik.

uni-wuerzburg.de/~arwagner/chess/

shredder.html

[6] Fruit: http://www.fruitchess.com

RECURSOS

El tablero de la Figura 1 muestra un bien

conocido problema de jaque mate: las

negras están intentando convertir su

peón en reina, forzando a las blancas a

ceder. Es el turno de las blancas. ¿Ves

alguna manera de salir de esta situa-

ción?

Problema

Page 76: Linux Magazine - Edición en Castellano, Nº 19

traducida, pero también puede ser que laaplicación esté mal, incompleta… y es bas-tante posible que nadie se haya ofrecidopara traducirla. ¿Por qué no lo hacemosnosotros?

En esta nueva serie de artículos explora-remos las herramientas a nuestradisposición, conoceremos a los principalesequipos de traducción al castellano, yseñalaremos también los problemas noresueltos. ¿Qué necesitamos para poderseguir de forma práctica esta primeraentrega? En nuestro sistema deberán estarinstalados los siguientes paquetes: gettext,kbabel (recuerden: aptitude install gettext

kbabel). Deberemos tener también antenosotros algún fichero en formato PO parapoder estudiarlo; podemos descargar cual-quiera de http://l10n-status.gnome.org/

HEAD/es/fifth-toe/index.html por ejemplo.

De la importancia delesfuerzo realizadoQuizás no tengamos una conciencia claradel esfuerzo que realizan los traductoresdesinteresadamente. Unos pocos ejemplospueden ayudarnos a hacernos unaidea[1]. Primer ejemplo: en estos momen-tos se está trabajando en el desarrollo deuna nueva versión del instalador deDebian, que deberá poder ser utilizado enel mayor número posible de lenguas. Laimagen 1 nos muestra la evolución delnúmero de idiomas en los que puede tra-bajarse durante la instalación (las trescolumnas corresponden a la versión deDebian, países en los que al menos una de

las lenguas oficiales están cubiertas y paí-ses en los que está cubierta la lengua máshablada). Listos para la dominación delmundo, va a ser verdad.

Segundo ejemplo: las estadísticas delgrupo de traducción del proyecto GNOME(figura 2). ¡El equipo español había tradu-cido el 100% de los 33.909 mensajes de laversión 2.14, la que probablemente estépresente en nuestros ordenadores! ¡Y enjulio de 2006 el equipo va en primer lugar(figura 3) en el top ten de los equipos en latarea de traducir la nueva versión (la2.16)!

Tercer ejemplo: estadísticas de los equi-pos del proyecto KDE, otro trabajoímprobo (figura 4).

Cuando soñábamos con una implan-tación masiva del software libre,uno de las campos que creíamos

que podía tener un desarrollo más fluidoera el de la traducción: imaginábamos coningenuo sentido común que en las escue-las de traducción los estudiantespracticarían haciendo traducciones necesa-rias, además de continuar con los mismosartificiales ejercicios de siempre, y que losprofesores de idiomas se lanzarían encan-tados a colaborar en algo en lo que al fintienen (tenemos) algo que aportar.

Sin embargo, es curioso cómo noshemos instalado en la cultura de la queja yel fatalismo. ¿Algo no está traducido? «Queme lo traduzcan», dicen los más positivos;comparten con los fatalistas la tendencia ala pasividad. «Pues es que esto será así»,piensan los fatalistas resignados, comocuando tienen que reformatear cierto sis-tema operativo con tendencia a ser caldode cultivo de virus; o bien, para los fatalis-tas de lo fatal, «esto del software libre nofunciona» cada vez que a ellos algo no lesfunciona. Pues bien, si algo no funciona ono está traducido, puede ser porque, comousuarios, no hayamos sabido hacerlo fun-cionar o actualizarlo a una versión

LINUX USER • Educación

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

Figura 1: Evolución del instalador de Debian.

OPORTUNIDAD DECOLABORAR

La traducción del software libre

OPORTUNIDAD DECOLABORARAunque no seamos programa-

dores, hay una gran

oportunidad de contribuir en los

campos de la documentación y

de la traducción. Por una vez

querer es poder, ¿queremos ser

miembros activos de la comuni-

dad? POR JUAN RAFAEL

FERNÁNDEZ GARCÍA.

Page 77: Linux Magazine - Edición en Castellano, Nº 19

W W W . L I N U X - M A G A Z I N E . E SNúmero 1977

LINUX USER • Educación

Y la reflexión: ¿de verdad creen ustedesque al software comercial le interesa la tra-ducción a idiomas tan minoritarios comoel esperanto, el azerbayán o la lengua delas Islas Feroe? ¿o que les compensa teneral día sus traducciones al vasco o al bre-tón? ¿que cada Service Pack pasa por susequipos de traducción?

Quisiera que estas cifras, que al menos amí me resultan asombrosas en equipos devoluntarios, sirvan para que cambie nues-tra reacción cuando encontremos un errorde traducción o que alguna cadena del pro-grama que estamos usando está en inglés.Lo más probable es que se trate de un errorque se corrigió hace año y medio y lacorrección nos esté esperando en la nuevaversión de la distribución; pero si no es así,¿por qué no les enviamos un correo con elerror y su corrección?

Internacionalización y locali-zaciónEn nuestros artículos sobre la multilingua-lización (al final me gustará la palabra) delos números 4 y 5 de Linux Magazine yatuvimos que tratar estos conceptos básicospara comprender cómo se puede adaptarun sistema a distintas lenguas. Es elmomento de refrescar los conceptos.

La internacionalización (abreviadai18n, por el número de letras entre la i y lan) es la adaptación que los desarrolladorestienen que hacerle a los programas paraque sea posible traducirlos y adaptarlos adistintos idiomas (la adaptación va másallá de la mera traducción: de un idioma aotro cambian el orden alfabético, el signode la moneda o el separador de decima-les…). La localización (l10n) es lo quehace el traductor, gracias al trabajo previode i18n.

Entonces este artículo que ahora tene-mos entre manos trata del estado de lalocalización al castellano del softwarelibre, de cómo se realiza y de cómo se

Ficheros PO y ficheros MO

Cuando instalamos un paquete cualquierano sólo instalamos su ejecutable, instala-mos además las cadenas de texto de todoslos idiomas a los que ha sido traducido[2].Estas cadenas cuelgan todas del directorio/usr/share/locale. Por aclarar la cuestión,en el ordenador en el que escribo hayahora mismo 932 archivos en/usr/share/locale/es/LC_MESSAGES, todoscon la extensión .mo.

MO viene de Machine Object, y es elformato binario en el que se almacenan enel ordenador los mensajes. Estos ficheros.mo se generan a partir de unos archivosfuente PO (de Portable Object), que soncon los que trabajamos los traductores.

Amigo futuro traductor libre, tenemosque presentar aún un paso intermedio:antes que los ficheros PO existen las plan-

tillas PO (ficheros POT, con T detemplate). Un fichero POT inicial es elesqueleto, común a todos los idiomas, alque el traductor de cada lengua irá aña-diendo sus traducciones. ¿Cómo y quiéncrea un fichero POT? El autor del pro-grama. Mediante la herramienta xgettext

del paquete gettext aplicada a un archivofuente de código que previamente ha sidointernacionalizado. Esto es más fácil decomprender que de explicar, y los detallesno nos incumben a los traductores. Porponer un ejemplo, el código fuente dedrgeo tiene la siguiente línea:

printf (_ (“\nMiss aUfilename to evaluate inU—evaluate\n\n”));

Para los que no sabemos programar:printf es la función en lenguaje C quesirve para imprimir (en pantalla) mensa-jes; ahora nos encontramos con unamodificación: “(_ ... )” es la magia que leindica a gettext que ese es un mensajelisto para ser traducido. Xgettext se va a

puede echar una mano (y por añadidurade la localización a cualquier otro idioma,por supuesto). Pues bien, empecemosdiciendo que la localización del software

libre es una labor de equipo, que sólomuy raramente es realizada por una solapersona. En primer lugar el programadordebe preparar su código, y es él el quegenera (pronto lo veremos) los ficherosque deberán ser traducidos. Pero además,los traductores suelen agruparse en equi-pos: uno traduce, otro revisa, alguiencoordina el reparto de trabajo y anima…entonces se envía la traducción al progra-mador y quizás también a losmantenedores de los paquetes; y el pro-ceso no acaba aquí, porque es normal quelas aplicaciones tengan nuevas versiones,habrá que actualizar los ficheros que sevan a traducir, realizar nuevas traduccio-nes comprobando que la terminología escoherente, lo que añade una capa de con-trol de calidad…

Pero estábamos explicando la localiza-ción. ¿Cómo sabe el sistema en qué idiomaqueremos los mensajes? Mediante unasvariables de entorno, los LOCALES, cade-nas como LANG=es_ES@euro oLC_ALL=zh_TW.UTF-8 (man(1) locale).Estas variables pueden fijarse en ficherosde configuración únicos para todo el sis-tema (caso de que por ejemplo noqueramos la localización más que en caste-llano), o pueden ser librementemodificados por el usuario (supongamosun ordenador de un centro bilingüe en elque se desee que, en determinadas clases,la interfaz esté en inglés o alemán). La fle-xibilidad es tal que es posible modificar lalocalización programa por programa senci-llamente anteponiéndole el LOCALEdeseado. Como prueba, la figura 5, la infor-mación de la versión del programa gettext

bajo distintos LOCALES. Parece magia,¿verdad? ¿Cómo funciona esta magia?

Figura 2: Estadísticas del proyecto GNOME. Figura 3: El top ten de traducción de

GNOME.

Figura 4: Estadísticas de KDE.

Page 78: Linux Magazine - Edición en Castellano, Nº 19

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

Educación • LINUX USER

#: src/msgcmp.c:338Usrc/po-lex.c:699#, c-formatmsgid “found %d fatal error”msgid_plural “found %d fatalUerrors”msgstr[0] “s’ha trobat %dUerror fatal”msgstr[1] “s’han trobat %dUerrors fatals”

Es común que a la hora de programar otraducir no sepamos si la salida calculada(la determinación de una variable) va a sersingular o plural (¿se producirá «un error»o «varios errores»?); además, el número deformas del número varía según el idioma,desde nuestras dos formas hasta unnúmero sorprendente. Esta nueva instruc-ción intenta dar solución al problema.Ahora puede informarse del número deformas singulares y plurales de la lenguadestino (algunas lenguas no tienen formade plural, otras tienen hasta cinco) y de lasreglas para elegir las formas (por ejemploel inglés o el castellano usan el singularpara 1 elemento, el plural para el resto,pero hay lenguas que usan la forma singu-lar para los números que acaban en 1: 21,31…) [4].

En polaco la línea de la cabecera sería

“Plural-Forms: nplurals=3; \plural=n==1 ? 0 : \n%10>=2 && n%10<=4 && (n%100<10U|| n%100>=20) ? 1 : 2;\n”

Y la traducción

msgid “1 file”msgid_plural “%count files”msgstr[0] “1 plik”

Anatomía de un fichero PO

Un fichero PO es esencialmente unacabecera, una lista de mensajes origi-nales y su traducción, más algunainformación de contexto y comenta-rios.

Empecemos por la cabecera. Ésta esla del fichero que estamos estudiando,la traducción al castellano de drgeo

realizada por el equipo de traductoresde GNOME [3] (ver Listado 1).

Vemos el copyright, el listado de tra-ductores que han trabajado a lo largodel tiempo en el fichero, la fecha decreación de la plantilla y de traducción(¡anterior! porque no se ha revisado oporque no ha habido cambios), y ciertainformación sobre el archivo (codifica-ción, herramienta con la que se hacreado…). Antes de ver cómo se tra-baja en la práctica comentaremos laúltima línea. ¿Qué es eso de las formasde plural? Es la última novedad del for-mato PO (vea de nuevo el cuadro 1).Un ejemplo nos aclarará la cuestión:

encargar de reunir estos mensajes(msgid) y de ir anotando en qué líneaaparecen, y va a crear el fichero de textoPOT inicial.

El primer traductor de drgeo se encon-tró al recibir el fichero POT con elsiguiente fragmento correspondiente a lalínea de código de arriba:

#: drgenius_main.cc:172#, c-formatmsgid “”“\n”“Miss a filename to evaluateUin —evaluate\n”“\n”msgstr “”

¿Qué hay en este fragmento? La referen-cia a la línea del fichero fuente dondeaparece la cadena de texto, la indicaciónde que incluye código en C («\n» es lainstrucción en C de nueva línea), y msgid

recoge el texto que deberá traducirse.Ahora, y sólo ahora, comienza la tareadel traductor.

01 # translation of drgeo.HEAD.es.po to Spanish

02 # Copyright © 1998-2006 Free Software Foundation, Inc.

03 # This file is distributed under the same license as the drgeo

package.

04 # Miguel de Icaza,computo, 622-4680

<[email protected]>, 1998.

05 # Pablo Saratxaga <[email protected]>, 1999,2000.

06 # Francisco Javier F. Serrador <[email protected]>, 2003.

07 # Adrian Soto <[email protected]>, 2003,2004.

08 # Francisco Javier F. Serrador <[email protected]>, 2004.

09 # Rodrigo Marcos Fombellida <[email protected]>, 2005,2006.

10 msgid “”

11 msgstr “”

12 “Project-Id-Version: drgeo.HEAD.es\n”

13 “Report-Msgid-Bugs-To: \n”

14 “POT-Creation-Date: 2006-07-14 18:19+0200\n”

15 “PO-Revision-Date: 2006-03-11 23:47+0100\n”

16 “Last-Translator: Rodrigo Marcos Fombellida

<[email protected]>\n”

17 “Language-Team: Spanish <[email protected]>\n”

18 “MIME-Version: 1.0\n”

19 “Content-Type: text/plain; charset=UTF-8\n”

20 “Content-Transfer-Encoding: 8bit\n”

21 “X-Generator: KBabel 1.10.2\n”

22 “Plural-Forms: nplurals=2; plural=(n != 1);\n”

Listado 1: Traducción al castellano de drgeo

Figura 5: La versión de gettext en distintos

LOCALES.

Page 79: Linux Magazine - Edición en Castellano, Nº 19

W W W . L I N U X - M A G A Z I N E . E SNúmero 1979

LINUX USER • Educación

msgstr[1] “%count pliki”msgstr[2] “%count plików”

A la cabecera le siguen las entradas. Cadauna de las entradas de un fichero PO tienela siguiente estructura (información proce-dente del manual de gettext):

ESPACIO EN BLANCO# COMENTARIOS DEL / DE LOSUTRADUCTORES#. COMENTARIOS AUTOMÁTICOS#: REFERENCIA(S)DEL MENSAJE...#, MARCAS (traducción dudosa,Uc-format...)msgid CADENA EN IDIOMA ORIGINALmsgstr CADENA TRADUCIDA

La labor del traductor al francés consistióen rellenar en el fichero que había recibido

01 #: drgenius_main.cc:17202 #, c-format03 msgid “”04 “\n”05 “Miss a filename to evaluate

in —evaluate\n”06 “\n”07 msgstr “”08 “\n”09 “Il manque un nom de fichier

dans —evaluate\n”10 “\n”

Esto podía haberlo hecho con cualquiereditor de textos. Pero los traductores dispo-nemos de herramientas especializadas quesimplifican enormemente nuestro trabajo.Es el momento de conocerlas. Pero antesvamos a repasar el ciclo de trabajo del quehablábamos. ¿Qué ocurre si el desarrolla-dor crea una nueva versión, si el programapasa de la versión 1.0 a la 1.1? ¿Tenemosque retraducirlo todo desde cero? ¡Vayaherramientas tendríamos si fuera así! Es elmomento de conocer msgmerge.

La segunda entrada es un ejemplo decolaboración entre traductores que debeleerse de abajo-arriba: el primero había tra-ducido “data” por “datos”, y el segundosugiere que por el contexto, “información”sería una traducción más apropiada. Aun-que la decisión última corresponde altraductor y no al revisor, aquel acepta lasugerencia.

Hemos hablado de reutilizar traduccio-nes ya realizadas. Y hemos hablado deequipos de traductores, que traducen unnúmero alto de ficheros. Es muy probableque haya expresiones («Guardar fichero»,«¿Confirma que desea usted borrar estearchivo?»…) que se repitan una y otra vez.¿No sería útil reunir las expresiones tradu-cidas en un gran fichero de texto, que nosfacilite la traducción cuando la expresiónvuelva a aparecer y nos sugiera una tra-ducción aproximada si se da unaequivalencia? Ésta es la idea que haydetrás de los llamados compendia, com-pendios de traducciones: grandescatálogos de mensajes traducidos. Se gene-ran con una nueva utilidad, msgcat

msgcat -o compendium.poUFichero1.po Fichero2.po

Podríamos seguir examinando utilidadesde la línea de órdenes que examinan lacorrección ortográfica de un fichero PO osu corrección sintáctica… pero creo quehemos abusado ya de la paciencia de nues-tro futuro traductor habituado a interfacesgráficas. En un equipo bien organizado esposible que nunca se vea obligado a utili-zarlas porque existen editores POespecializados.

La herramienta de lostraductores: kbabelExisten, decíamos, varios editores de fiche-ros PO. Históricamente el primero es elmodo po de emacs (se encuentra en el

msgmergeUTraduccion_Vieja.poßsNueva_Version.pot >UNuevo_Fichero.po

El programa msgmerge, por supuesto queuna más del conjunto de herramientas get-

text, nos va a permitir reutilizar lastraducciones de las cadenas de texto ya tra-ducidas. Con una particularidad: si lacadena no es exactamente la misma entreuna versión y la otra (el autor ha podidohacer cualquier pequeña modificación), vaa marcar la traducción como dudosa(fuzzy).

01 #: web/template/editaccount_main.tpl:31

02 #, fuzzy03 msgid “New password (again)”04 msgstr “Contraseña nueva”0506 # jr: aceptado07 # jorge: en este caso yo

pondría “información”, envez de “datos”.

08 # It is more suitable to thecontext.

09 #:web/template/editaccount_top.tpl:2

10 msgid “You may modify youraccount data here.”

11 msgstr “Puede modificar lainformación de su cuenta aquí.”

En este ejemplo real podemos ver dos delos elementos que hemos comentado. Enla primera entrada vemos que el autor haañadido a una cadena “New password” lapalabra “(again)”; msgmerge encuentra lacadena similar, pero marca la traduccióncomo dudosa, para que el traductor sepaque debe revisarla. Traducirá “Contraseñanueva (repetir)” y borrará entonces lamarca fuzzy.

Figura 6: Kbabel. Figura 7: Revisión ortográfica en Kbabel. Figura 8: Validación sintáctica de un fichero PO.

Page 80: Linux Magazine - Edición en Castellano, Nº 19

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

Educación • LINUX USER

siempre validar la correción sintáctica denuestro fichero antes de decidirnos a darla traducción por terminada; eso serealiza (figura 8) desde el menúHerramientas -> validación ->

comprobación de sintaxis.¿Cómo se genera el fichero MO? Permi-

tan por un segundo que vuelva a la líneade órdenes.

msgfmt -v -o Fichero.moUFichero_es.po

¿Fácil, verdad? Y si ponemos el fichero MOen /usr/share/locale/es/LC_MESSAGES yatendremos en uso la nueva traducción.Pero queremos que la pueda utilizar todoel mundo, no sólo nosotros ¿verdad?

Y en el próximo número…Hemos hablado de los ficheros PO; será elmomento de resumir sus ventajas perotambién de señalar los defectos de esta tec-nología. Nos falta también hablar de lasnuevas herramientas disponibles, de lasalternativas al formato… Por lo demás,hemos insistido en que la traducción escosa de equipos y de que tenemos la opor-tunidad de colaborar con estos equipos,nos falta conocerlos un poquito más decerca. Quedamos citados para la próximaentrega. �

para vivir… Vale vale, sin ironías. Por lopronto el espacio de trabajo se divide envarios subespacios bien delimitados. Eltraductor ya no corre el peligro de modifi-car por error el texto original en lugar dela msgstr: sólo puede escribir en el espa-cio que corresponde a sus traducciones,presentadas una a una. Vemos que elespacio para referencias y comentarios seha separado. Y lo que es más importante,vemos el uso que hemos ido citando delos compendios y de los ficheros PO auxi-liares: en este caso la interfaz nospresenta también la traducción al francésde la misma cadena, lo que es muy prác-tico a la hora de tomar decisiones detraducción en caso de duda (y más aún sisabemos que la autora del programa esfrancesa y que su traducción es posible-mente más correcta que el original inglés).

También es importante la línea deestado de la parte inferior de la interfaz:nos informa del número de mensajes delprograma, pero también de los mensajesque todavía están marcados comodudosos y de los que nos faltan portraducir. Dos herramientas sonimportantes y no debemos dejar dedestacarlas: por un lado es posible (figura7) realizar una revisión ortográfica, tannecesaria a veces, de todos los mensajestraducidos. Por otro lado, debemos

paquete gettext-el), y aún el manual de get-

text hace continuas referencias a él. Sinembargo, este editor se ha quedado atrásen el tema de los catálogos de mensajes[5].

Gtranslator fue durante bastantetiempo la alternativa GNOME a la herra-mienta de KDE que veremos másadelante. Aunque es un proyecto que sequedó desfasado: aspectos tan importan-tes como las formas de pluralsimplemente no funcionan.

Otra opción es poedit, útil si se piensatrabajar en Windows. Sin embargo laslenguas no latinas no acaban de funcio-nar.

La opción elegida por la gran mayoríade los traductores actuales es kbabel, deKDE (de hecho sólo conozco a un traduc-tor que use poedit, y a algunos viejoshackers que siguen con el modo po). Dosaportaciones destacan en kbabel: elpotente y flexible gestor de catálogos demensajes y la posibilidad de utilizar dic-cionarios, sean archivos PO auxiliares(personalmente uso las traducciones fran-cesas para tener una referencia de cómose ha solucionado algún problema de tra-ducción en otro equipo), seanCompendios PO.[6]

En la figura 6 tenemos un ejemplo dekbabel en uso. Ahora podemos respirar:menúes, iconos, todo lo que se necesita

[1] Sobre el instalador de Debian, http://d-i.alioth.debian.org/manual/po_stats/ y http://d-i.alioth.debian.org/l10n-stats/. Sobre GNOME

http://developer.gnome.org/projects/gtp/. Para KDE, http://l10n.kde.org/stats.php.

[2] Esto es verdad si se han generado los LOCALES (dpkg-reconfigure locales; para ver los que tiene instalados locale -a), pero también es

verdad que si en nuestro sistema está instalada la aplicación localepurge se borrarán los mensajes de todos los idiomas que no

hayamos seleccionado y además, probablemente los ficheros man de ayuda (se puede reconfigurar con dpkg-reconfigure

localepurge). Esto sirve para ganar espacio de disco a costa de perder tiempo (borramos lo que ya estaba instalado) e idiomas

(¿francés?, ¿catalán?) que, quizás queramos poder utilizar en algún momento.

[3] Hemos buscado la versión más reciente en http://l10n-status.gnome.org/HEAD/PO/drgeo.HEAD.es.po.

[4] Información encontrada en la sección 10.2.5, «Additional functions for plural forms», del manual de gettext. La problemática que ha

dado pie a estas funciones adicionales se había planteado ya en 1999 en el artículo «Localization and Perl: gettext breaks, Maketext

fixes», de Sean M. Burke y Jordan Lachler, publicado en el número 13 del The Perl Journal, y disponible en nuestros ordenadores

(paquete perl-doc) como salida de la orden man 3perl Locale::Maketext::TPJ13.

Hay problemas similares al de las formas de plural que no se han tratado todavía, como el del caso o el del género; recuerdo los prob-

lemas con los que me he encontrado en expresiones como «¿desea abrir un … hoja de ejercicios?». Aunque cuando se han discutido

en la lista Translation-i18n se ha reconocido la dificultad de una posible solución y se han remitido a una necesaria «educación del pro-

gramador para que use oraciones completas» (palabras de Bruno Haible).

[5] Puede ampliarse la información sobre los editores PO en «Debian Installer Internationalization and Localization Guide», escrita por el

equipo de desarrollo del Instalador de Debian: Petter Reinholdtsen, Dennis Stampfer, Christian Perrier (http://d-i.alioth.debian.org/

i18n-doc/apes01.html) y http://es.tldp.org/Articulos/0000otras/doc-traduccion-libre/doc-traduccion-libre/.

[6] La página web de kbabel es http://kbabel.kde.org/ y tenemos un listado de características en http://kbabel.kde.org/features.php. El

autor original es Matthias Kiefer y actualmente lo mantiene Stanislav Visnovsky.

[7] Esta sección es un resumen de la sección 14.1 «History of GNU gettext» del fichero info de gettext. Probablemente tenga usted el

fichero completo instalado en su ordenador. Si no es así puede leer el manual de gettext en formato html en http://www.iro.umontreal.

ca/translation/HTML/gettext.html (en inglés).

NOTAS

Page 81: Linux Magazine - Edición en Castellano, Nº 19

¿Qué es exactamente lo que está

haciendo en estos momentos el

sistema Linux? ¿Qué programas y

procesos están corriendo en el fondo? ¿A

qué aplicación está accediendo el lector

de CD-ROMs? ¿Cómo se finaliza un pro-

ceso que no quiere morir elegantemente?

En este artículo se darán respuesta a

algunas de estas eternas cuestiones.

Listado de Procesos con psEl programa ps lista los procesos activos.

Cuando se ejecuta sin especificar nin-

guna opción muestra un listado de

aplicaciones corriendo en la shell actual.

Si se necesita más información pueden

especificarse algunas de las opciones de

la impresionante colección de herra-

mientas disponible. Tal y como figura en

el manual, ps entiende parámetros Unix

con un simple guión, opciones BSD sin

guión y opciones GNU con dos guiones.

La elección de cómo pasamos los pará-

metros a ps es un asunto de preferencia

personal, aunque en este artículo nos

centraremos en las variantes abreviadas

sin guiones. Para listar todos los proce-

sos que se están ejecutando como

usuario hay que especificar la opción x

(ver Listado 1), por ejemplo.

El comando ps proporciona una lista

clasificada muy clara de los procesos que

corren bajo ID del usuario. Clasifica la

salida mediante Process Identifier, es

decir, el número del proceso (PID), el

número del terminal o de la consola vir-

tual (TTY), el estado del proceso (STAT),

los ciclos de uso de la CPU (TIME) y el

nombre del comando incluyendo los

parámetros (COMMAND).

En el campo STAT, ps lista típicamente

uno de los siguientes estados:• S: sleeping (durmiendo), es decir, el

programa no tiene nada que hacer eneste momento

• R: running (o ejecutando)• D: El proceso está muerto y no puede

ser rearrancado• Z: Zombie: el proceso se ha comple

tado, pero no ha pasado correctamente su estado de devolución

Si se está interesado en ver tareas que

pertenecen a otros usuarios del mismo

sistema, puede especificarse la opción a.

Como esta larga lista de tareas no ofrece

los IDs del usuario para los programas,

se puede utilizar también el parámetro u

para obtener el propietario, el tiempo

CPU y el uso de memoria (ver Listado 2

para un ejemplo).

RelacionesEn determinados casos, algunos proce-

sos dan lugar a otros procesos. Tras

arrancar, el primero que se produce es el

denominado init. Seguido de este pro-

ceso padre se arrancan también otras

tareas o procesos hijos, que a su vez dan

lugar a otros procesos. Con la opción l

pueden verse las relaciones entre ellos,

pues exige a ps que presente otra

columna con los procesos ID padre (o

Parent Process ID) (PPID).

El parámetro f permite que la jerarquía

sea más fácil de leer, usando para ello

una imagen ASCII. Como alternativa al

Línea de comandos: procesos • LINUX USER

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

Control y finalización de procesos desde la línea de comandos

CONTROL TOTALInnumerables procesos pueden estar corriendo simultáneamente en un sistema Linux en cualquier momento

dado. Enseñamos cómo detener, continuar o matar tareas y examinamos cómo enviar los restos de

programas colgados al cielo de los procesos muertos. POR HEIKE JURZIK

Page 82: Linux Magazine - Edición en Castellano, Nº 19

CPU, memoria y la carga de la memoria

de intercambio. La línea de estado top

contiene información sobre los procesos

individuales.

La línea de estado posee columnas

para los procesos ID (PID), el uso de

memoria en formato de porcentaje

(%MEM), el proceso ID padre (PPID), el

tiempo consumido por la CPU como por-

centaje (%CPU) y el nombre del

comando (COMMAND). Pero puede

decírsele a top lo que se desea ver: se

pulsa [F] y las letras adecuadas para

especificar el contenido de la línea de

estado.

Un determinado número de comandos

permiten controlar top interactivamente.

Por ejemplo, pulsando [H] se obtendrá la

ayuda en línea. [U] seguido del nombre

de usuario presenta los procesos para ese

usuario. [Shift]+[R] invierte la salida

mostrando los procesos más frugales en

lugar de los acaparan a la CPU. Con [Q]

se sale del pro-

grama y se

regresa a la

shell.

Si se pulsa

[Shift[+[Z] se

podrá añadir más color al programa. La

tecla [W] permite elegir entre un número

de esquemas de color predefinidos, aun-

que también pueden pulsarse las letras y

números apropiados que permitan defi-

nir un esquema de color personalizado

(Figura 2).

Quiero MásEl programa lsof (lista de ficheros abier-

tos) suministra más información sobre

procesos individuales. Esta herramienta

ayuda a descubrir los procesos que están

accediendo a los ficheros. Si se ejecuta

lsof sin especificar ningún parámetro, el

comando ofrecerá una lista completa de

ficheros, lo cual puede ser bastante

extenso. Para mejorar la legibilidad de la

lista debería encauzar la salida al pagina-

dor less: lsof | less.

Para conocer qué usuario se encuentra

trabajando actualmente con el editor

Vim, puede pasarse el nombre del bina-

rio Vim al programa cuando éste es

invocado (Listado 3).

Lsof es particularmente útil cuando

interesa encontrar los procesos que están

bloqueando en ese momento un fichero

en un dispositivo. Si el sistema se niega a

parámetro f puede ejecutarse el pro-

grama pstree, que también presentará

una visión útil de las relaciones (Figura

1).

Si se están buscando procesos que aca-

paran los ciclos del CPU, ps no es la

mejor opción, ya que, como simple-

mente muestra una instantánea del

estado actual, no se conseguirá obtener

demasiada información acerca de la

carga del sistema actual. Para ayudar en

esta tarea Linux dispone de la herra-

mienta top. Top es un controlador de

procesos que actualiza la presentación

para proporcionar el estado actual.

Puede arrancarse escribiendo top en la

línea de comando.

El programa proporciona una extensa

información sobre el sistema y los proce-

sos que corren en él. La línea superior

muestra la hora, el tiempo que lleva la

máquina conectada, el número de proce-

sos y los detalles del estado junto con la

LINUX USER • Línea de comandos: procesos

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

Figura 1: Comparando los comandos f de ps y pstree. ¿Se distingue

el bosque de los árboles? Figura 2: La salida desde el monitor de procesos top… coloreado.

01 $ ps aux

02 USER PID %CPU %MEM VSZ RSS TTY STAT

START TIME COMMAND

03 root 1 0.0 0.0 1504 512 ? S 08:31

0:00 init [2]

04 ...

05 huhnix 3705 0.0 0.2 2748 1296 ? Ss 08:33

0:00 /bin/sh /usr/bin/startkde

06 ...

Listado 2: Procesos de otros usuarios

01 $ ps x

02 PID TTY STAT TIME COMMAND

03 3705 ? Ss 0:00 /bin/sh /usr/bin/startkde

04 3763 ? Ss 0:00 /usr/bin/ssh-agent /usr/

bin/startkde

05 3789 ? Ss 0:00 kdeinit Running

06 3792 ? S 0:00 kdeinit: dcopserver —nosid

07 3794 ? S 0:00 kdeinit: klauncher

08 ...

Listado 1: ps con la opción x

Page 83: Linux Magazine - Edición en Castellano, Nº 19

83

Línea de comandos: procesos • LINUX USER

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

desmontar la unidad del CD-ROM, por

ejemplo, puede usarse lsof para conocer

el proceso que está accediendo al fichero

del dispositivo (Listado 4).

Ahora puede añadirse el comando ps

para ver el proceso oculto tras el PID

4466. Para ello se usa el parámetro aux

con la opción w para obtener una

salida ampliada (este parámetro puede

especificarse múltiples veces) (Listado

5).

El culpable obviamente es una ven-

tana de Konqueror que muestra el

contenido de un CD. Para liberar la uni-

dad, probablemente sea necesario cerrar

la ventana del administrador de ficheros

o simplemente cambiar de directorio. Si

esto no ayuda, siempre se puede recurrir

a matar un programa para acabar de una

vez con un proceso testarudo.

Al AtaqueEl programa kill envía señales a un

proceso, incluyendo una señal que le

dice que reanalice su fichero de

configuración (SIGHUP), que termine

elegantemente y que limpie

(SIGTERM), o que termine indepen-

dientemente de las consecuencias

(SIGKILL).

También son

interesantes otras

señales que le

dicen a los proce-

sos que acaben

(SIGSTOP) y que

recomiencen (SIG-

CONT). kill -l

ofrece una lista

completa (Figura

3). A menos que se

sea el administra-

dor del sistema,

solamente se pue-

den enviar estas

señales a los pro-

cesos propios. El

superusuario, por

otro lado, tiene

permitido ejecutar

kill contra proce-

sos globales o

procesos pertene-

cientes a otros

usuarios.

Por defecto, el

comando kill (sin

parámetros) envía

la señal 15 al pro-

ceso. Otro argumento que puede

especificarse es el PID, como en kill

4200. Si esto no ayuda, y el proceso

persiste en la lista, se necesitarán

adoptar medidas más drásticas y

enviar la tarea al Nirvana de los proce-

sos recalcitrantes.

Un valor numérico permite masacrar

el proceso de manera expeditiva (kill

-9 4200). Puede usarse como alterna-

tiva el nombre (kill -KILL 4200).

Obsérvese que es preciso omitir el pre-

fijo SIG con la última opción. Si con

esto aún sigue sin detenerse el molesto

proceso, todo lo que puede hacerse es

esperar durante algún tiempo. En algu-

nos casos (afortunadamente raros)

será necesario rei-

niciar el ordenador

para limpiar.

También resulta

muy útil la funcio-

nalidad que

permite detener

tareas específicas

(kill -19 pid). Para

que el proceso con-

tinúe a partir del

punto donde se

quedó, se envía

kill -18 pid a la ID del proceso. Para

reanalizar un super-demonio modifi-

cado, una configuración Inetd o

Xinetd, se envía al servidor la señal

siguiente:

kill -l `cat

/var/run/inetd.pid`

kill -l U

`cat /var/run/xinetd.pid`

Comando AsesinoEl programa killall suministra las

mismas señales que su colega kill,

pero en lugar del ID espera el nombre

del proceso. Si se ejecuta killall sin

especificar la señal, el programa asu-

mirá que se trata de -15 (TERM). Es

decir, invocando a killall firefox-bin

se finalizarán elegantemente todas

las instancias del navegador Firefox.

Lo que realmente hace killall es

tomar un atajo para eliminar los pro-

cesos activos. Es aconsejable tener

precaución: el comando killall bash

finalizará todos las instancias de

Bash, incluyendo la shell donde se

escribió el comando. Puede especifi-

carse la opción -i para conectar con

el modo interactivo; esto permite ele-

gir los procesos a matar

individualmente:

$ killall -i xterm

kill xterm(3838)? (y/n) y

kill xterm(4242)? (y/n) n

kill xterm(4246)? (y/n) y

kill xterm(4250)? (y/n) y

Este comando asesino presenta el PID

y solicita el proceso que enlaza con el

nombre que se especificó. Posterior-

mente puede decidirse si se desea que

el proceso viva (pulsando [N]); si se

pulsa [Y] es “Hora de decir adios”. �

Figura 3: La opción -l ofrece una lista de las señales kill.

01 $ isof /usr/bin/vim

02 COMMAND PID USER FD TYPE DEVICE SIZE

NODE NAME

03 VIM 4065 huhnix txt REG 3.10 1411096 647400

/usr/bin/vim

04 vim 4609 ardbeg mem REG 3.10 1411096 64700

/ur7BIN7vim

Listado 3: ¿Quién está usando Vim?

01 $ isof /dev/hdc

02 COMMAND PID USER FD TYPE DEVICE SIZE NODE

NAME

03 kdeinit 4466 huhnx 12r BLK 22.0 2846

/dev/hdc

Listado 4: Comprobación de Ficheros deDispositivos

01 $ ps auxwww | grep 4466

02 huhnix 4466 o.o 2.4 27972 12572 ? S 11:33

0:00 kdeinit: kio_audiocd

03 audiocd

/tmp/ksocket-huhnix/klauncherz9ZRha.slave-socket

/tmp/ksocket-huhnix/konquerorVPZ1va.slave-socket

Listado 5: Consiguiendo una salida amplia

Page 84: Linux Magazine - Edición en Castellano, Nº 19

84

LINUX USER • Juegos

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

Desde hace años el programador

Kenta Cho (alias Saba) ha estado

realizando una serie de “mata-

marcianos” (también llamados shooters

o shoot’em ups) libres con un toque muy

especial. Estos juegos, aunque de licencia

libre (BSD en su mayoría), están escritos en

lenguaje D, una versión mejorada del cono-

cido lenguaje C, pero con el gran

inconveniente de no ser completamente

libre (al menos el compilador). Si a esto le

unimos que Kenta Cho no los realizaba

para linux, obteníamos unos geniales jue-

gos que no podíamos disfrutar.

Afortunadamente esto ha cambiado.

Ports para LinuxEn Junio de 2004, otro programador cono-

cido como EvilMrHenry se decidió a

portar los títulos de Kenta Cho. La tarea

fue dura pero finalmente estas fueron

viendo la luz para linux e incluso a día de

hoy EvilMrHenry continua portando nue-

vos juegos del incansable Saba y de algún

nuevo programador de este estilo, como

Jumpei Isshiki con su juego Z-lock.

Características comunesEste tipo de juegos, que podemos clasifi-

car como japan shooters o J-shooter,

tienen una serie de características comu-

nes que los diferencian del resto.

Los matamarcianos clásicos re-interpretados.

J-SHOOTERSJ-SHOOTERS

Lo más evidente de todos ellos es que

hacen uso de unos gráficos extremadamente

simples, incluso en algunos casos mostrando

sólo lineas vectoriales que definen la formas,

como si el mundo en el que se desarrollase la

historia fuese siempre una realidad virtual

donde la materia y la textura no tuvieran

cabida.

Junto a estos gráficos simples hay que aña-

dir una dificultad creciente y que llega a ser

desmedida a todas luces. Nos encontraremos

con modos de dificultad “Insane”, “Extreme”

y similares sólo recomendados para los más

adeptos a exprimir sus reflejos al máximo.

También es necesario que haya multitud de

elementos en pantalla, en algunas ocasiones

cientos de elementos entre enemigos y

proyectiles. Esquivar decenas o centenares de

disparos enemigos puede ser estresante, pero

provoca una extraña sensación adictiva en

nosotros. Más aún cuando logramos salir

intactos de una tormenta de disparos, ya que

experimentaremos un enorme orgullo por

nuestras habilidades, e incluso lamentaremos

que no estuvieran delante nuestros amigos

para jactarnos de lo que hemos sido capaces

de hacer.

La jugabilidad es fundamental en este tipo

de juegos, ofreciendo un control sensible y

muy ajustado para que el jugador pueda sentir

que lo que define realmente la situación no es

otra cosa que sus propios reflejos. Además hay

que regalar “vidas extra” a intervalos para

recompensar la habilidad del jugador, y por

Ha surgido en tierras del sol naciente una nueva vuelta de tuerca al género de los “matamarcianos”. Gráficos

vectoriales muy simples, velocidad, buena jugabilidad y dosis monumentales de adicción que, totalmente

gratis, están disponibles para nosotros. POR VICENTE CARRO

Figura 1: No sólo tendremos que esquivar

todos estos proyectiles, sino que además

habrá que recoger los proyectiles verdes.

Figura 2: Cuanto más avancemos en el

juego, más rápido y difícil será el recorrido

en el tubo.

Page 85: Linux Magazine - Edición en Castellano, Nº 19

supuesto es necesario que haya una pun-

tuación para que quede constancia

numérica de nuestro progreso.

Por último tiene que acompañar una

música que nos ponga en situación, gene-

ralmente maquinera y trepidante, para que

nuestra atención esté al 100% en la panta-

lla. Quizás no sean las mejores

composiciones musicales de la historia,

pero es innegable que encajan con este tipo

de juego como ninguna otra lo haría. A esta

música hay que añadirle unos efectos de

sonido adecuados, basados en explosiones

y disparos contundentes y creíbles.

Uno a unoA continuación vamos a dar un breve

repaso a los mejores exponentes de los J-

shooters destacando los puntos que los

diferencian entre ellos.

Nois2za

Es, a título personal, el mejor de los J-

Shooters actuales. En este juego,

creación de Saba, pilotas una nave com-

puesta de un punto (zona que puede

explotar por contacto con cualquier

cosa) y unas barras verdes giratorias

decorativas. Lo más diferenciador de

este título es que la destrucción de los

enemigos genera unos proyectiles verdes

que tendremos que recoger para aumen-

tar nuestra puntuación.

Se puede descargar desde este enlace: [1].

Torus Trooper

La acción se desarrolla en el interior de un

tubo sin límites. Nuestra nave irá pegada a sus

paredes interiores sobre las que podremos

desplazarnos esquivando obstáculos y elimi-

nando enemigos a velocidades de vértigo.

Será el tiempo el que determine cuando se

acabó la partida, así que tendremos que ganar

tanto tiempo extra como sea posible evitando

nuestra muerte, alcanzando ciertas puntuacio-

nes y destruyendo jefes finales. También

disponemos de un disparo especial que podre-

mos cargar durante unos segundos antes de

liberarlo con todo su poder contra las naves

enemigas. También ha sido creado por Saba.

Se puede descargar desde este enlace: [2].

Tumiki Fighters

Saba cambia de tercio con este juego y nos

coloca a los mandos de un avión que se

enfrenta a una multitud de enemigos en un

mundo de estética un poco infantil. Cuando

un enemigo es destruido, su aeronave salta en

pedazos y, si somos lo suficientemente hábi-

les, podremos ir a recoger algunas de dichas

piezas que, mágicamente, se pegarán a nues-

tra nave. Estas piezas pueden ser usadas

como simples armaduras o, si incluían un

arma, se pondrán a disparar por su cuenta,

dándonos cobertura extra.

Se puede descargar desde este enlace: [3].

rRotage

Otro de los grandes entre los J-Shooters.

Centenares de proyectiles en los niveles más

duros y cuatro modos de juego distintos

(NORMAL, PSY, IKA y GW) nos darán horas

y horas de diversión. Los distintos modos

cambian notablemente la jugabilidad y cada

modo podría considerarse un juego por sí

mismo. También es obra del incansable Saba.

Se puede descargar desde este enlace: [4].

Parsec 47

Este juego, el favorito de EvilMrHenry, nos

pone en manos de un clásico “matamarcia-

nos” donde la única diferencia con la

jugabilidad habitual reside en que nuestra

nave responderá mucho más rápidamente a

nuestras indicaciones de lo normal, lo cual es

especialmente evidente si jugamos en modo

Extreme. Por lo demás el juego sigue a rajata-

bla el guión establecido de este tipo de juegos.

Se puede descargar desde este enlace: [5].

DistribuciónDado que la mayor parte de estos juegos se

han programado en lenguaje D y el

compilador D no es libre, se ha optado por

incluir en los archivos de distribución tanto las

fuentes con el código como un binario

precompilado que debería funcionar en la

mayoría de las máquinas i386 o superiores.

Así se podrá jugar inmediatamente

simplemente haciendo doble click sobre el

ejecutable.

ConclusiónDesde el principio de la historia de los video-

juegos, los “matamarcianos” han gozado de

un gancho natural que crea adicción en los

jugadores nada más probarlos. Estos J-shoo-

ters heredan esa adicción pero la potencian

añadiendo un poco más de todo y simplifi-

cando en extremo la complejidad gráfica para

centrar al jugador en su tarea de destruir ene-

migos y esquivar disparos. Sólo los detractores

de los “matamarcianos” quedarán impasibles

ante estos juegos. �

Juegos • LINUX USER

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

[1] Noiz2sa http://noiz2sa.sourceforge.

net/

[2] Torus Trooperhttp://www.emhsoft.

net/ttrooper/

[3] Tumiki Fightershttp://tumiki.

sourceforge.net/

[4] rRotagehttp://rrootage.sourceforge.

net/

[5] Parsec 47http://parsec47.sourceforge.

net/

RECURSOS

GLOBAL:

Lo mejor

• Libres (BSD)

• Muy adictivos

Lo peor

• Requieren muchos reflejos

• El compilador D no es libre

7

Puntuación

Figura 3: Nuestro avión con algunos “extras”

recogidos en pleno vuelo.

Figura 5: Velocidad y más velocidad es lo

que encontraremos en Parsec 47, todo

depende de nuestros reflejos.

Figura 4: Probablemente rRotage sea el J-

Shooter con más proyectiles en pantalla,

una verdadera locura.

Page 86: Linux Magazine - Edición en Castellano, Nº 19

COMUNIDAD · Konsultorio

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

en algunos ordenadores modernos, aunque la

documentación de la placa diga que ya no

está soportada). Con APM el hardware contro-

laba la velocidad de la CPU, el consumo de la

CPU, aspectos de la batería, suspensión a

RAM e incluso suspensión a disco, mientras

que el sistema operativo podía ignorar feliz-

mente estas funciones.

Las cosas empezaron a cambiar con la

introducción del ahora estándar ACPI, que se

supone que no sólo debe permitir al sistema

operativo controlar las características de ener-

gía, sino también administrar parte de la

configuración hardware (IRQ) y la administra-

ción del estado del sistema. Algunos dirán que

ACPI fue introducido para conseguir más

beneficios al vender chipsets más baratos, ya

que toda la lógica se centra ahora en software

en lugar de en hardware auto-controlado. Pero

los fabricantes de placas elogian a ACPI por su

“acceso completamente controlable” a algu-

nas características (como la administración de

energía y configuración del hardware) desde

el sistema operativo, y hoy día vemos placas

que realmente no funcionan sin un kernel con

el ACPI habilitado.

Si tu placa todavía soporta APM, y no te

importa dejar que el hardware controle auto-

máticamente la administración de energía,

en lugar de ACPI cambia a APM. En mi opi-

nión, APM, si está disponible, ofrece

mejores resultados (tanto en términos de

rendimiento como en duración de las bate-

rías para portátiles) haciendo que cualquier

cosa sea extremadamente fácil de configurar.

Sólo tenemos que compilar el soporte de

APM dentro del kernel y deshabilitar ACPI

en el arranque, con la opción acpi=off del

kernel. Para algunas placas ésta es la única

manera fiable de conseguir que funcione

adecuadamente la suspensión a RAM o la

suspensión a disco.

Ahora bien, si sigues queriendo usar

ACPI (o si estás obligado porque tienes una

placa que así lo requiere), y lo configuras

todo por ti mismo, te vas a enfrentar a un

buen número de sesiones de prueba y erro-

res hasta encontrar qué partes de ACPI

funcionan y cuáles no. Yo también he

tenido que pasar por este procedimiento

con muchas placas. Si los fabricantes sim-

plemente ofrecieran ejemplos de

configuración operativos para Linux (como

hacen para Windows proporcionando “dri-

vers de placa” que arreglan también errores

de la placa madre), todo sería mucho más

fácil. Pero por algún motivo deben pensar

que todos los usuarios de Linux son exper-

tos en hardware capaces de arreglar

chipsets defectuosos.

Para configurar y experimentar con ACPI,

deberíamos instalar en primer lugar un ker-

nel REALMENTE ACTUALIZADO con ACPI

habilitado. Placas con diferentes implemen-

taciones aparecen cada dos por tres, y los

desarrolladores de Linux tienen que arreglar

fallos y encontrar cómo controlar ACPI en

estas placas nuevas en cada lanzamiento

previsto del kernel. Por tanto es fundamen-

tal usar un kernel que al menos sea más

reciente que nuestra placa de ordenador.Administración de Energía

No importa qué distribución de Linux

esté usando: no hay manera de que

me funcionen las características de adminis-

tración de energía en mi portátil con micro

Intel. El sistema, o bien no hiberna, o bien

estropea algo en este proceso. ¿Cómo puedo

averiguar cuál es el problema, y qué puedo

hacer para conseguir que me funcione la

administración de energía?

Hace un par de años existía una cosa

llamada “Automatic Power Manage-

ment” o APM (que aún funciona bien incluso

ELCONSULTORIODE KLAUS

Klaus Knopper es el creador de

Knoppix y co-fundador de la

LinuxTag Expo. Trabaja en la

actualidad como profesor,

programador y consultor. Si tiene

algún problema de configuración,

o simplemente quiere conocer

mejor cómo funciona Linux, no

dude en escribir sus preguntas a:

[email protected].

Page 87: Linux Magazine - Edición en Castellano, Nº 19

Las partes de ACPI están en la zona estática

del kernel, pero virtualmente cualquier

módulo del kernel debe implementar también

los conectores ACPI para poder apagar un dis-

positivo o cambiar el modo de energía, tras

una petición. En algunos ordenadores tendre-

mos que usar la opción de arranque

acpi=force para habilitar DE VERDAD ACPI,

incluso si al kernel no le parece una buena

idea.

Para cosas como suspensión a disco, la

parte complicada del asunto es encontrar qué

componentes hardware la soportan, así como

los módulos del kernel que tienen los conecto-

res ACPI necesarios para poner un

componente en estado latente y despertarlo

más tarde sin confundir al hardware.

Un ejemplo de procedimiento para habilitar

la suspensión a disco en nuestro portátil

podría ser algo como:

0. ¿Recuerdas la lección acerca de hacer

copia de seguridad de todos los datos impor-

tantes, no?

1. Nos aseguramos de que nuestra partición

swap tiene tamaño suficiente para albergar

toda la RAM de nuestro ordenador, además de

todos los componentes de software en ejecu-

ción con componentes en la swap. (Esto es

necesario sólo para la suspensión a disco, no

para la suspensión a RAM). El kernel debería

compilarse con el “software suspend-to-disk”

habilitado. Ojo: esta opción aparece sólo en

kernels SMP si también hemos habilitado

“software suspend-to-disk”. De igual manera,

debemos asegurarnos que la partición para la

suspensión (la mayor partición swap) se ha

configurado en el setup del kernel. Podemos

usar, no obstante, la opción resume =

/dev/hd* para declarar esto en el arranque.

2. Descargar TODOS los módulos del kernel

antes de intentar la suspensión a disco. Las

tarjetas de sonido en placa, los controladores

PCMCIA y USB y los dispositivos son especial-

mente críticos. De todos modos, la mayor

parte de estos componentes no necesitan real-

mente soporte para la suspensión, por lo que

otros sistemas operativos hacen lo mismo:

deshabilitan o descargan los drivers en la sus-

pensión y los reinician al despertar el equipo.

Probablemente deberíamos probar esta téc-

nica sin el modo framebuffer en la consola.

Hasta hace muy poco (kernel 2.6.15), el fra-

mebuffer aparentemente no despertaba bien,

en especial cuando el rendering directo estaba

habilitado. El mismo problema aparece en los

servidores X, aunque no tendríamos que apa-

gar las X para hacer suspensión a disco (y

luego despertar) de manera adecuada. A

veces ayuda cambiar a una consola de texto

antes de la suspensión, de manera que se

fuerza a refrescar más tarde el servidor X.

Incluso podemos hacer esto dentro de un

script con chvt 1.

3. Iniciamos la suspensión a disco con:

sync ; sync ; sync # Trust me...

echo 4 > /proc/acpi/sleep

(Previamente deberíamos haber conmutado a

la consola del sistema para ver qué está

pasando). Nuestro kernel debería intentar

liberar memoria copiando todo lo que está en

RAM, más el estado del chipset, a la partición

swap. Después debería borrar los bits de swap

de la partición (de manera que swapon falle si

alguien arranca por error sin la opción

resume), y por fin, apagar el equipo.

Esta parte normalmente funciona sin pro-

blemas (la parte realmente “excitante” es

cuando intentamos despertar el ordenador

más tarde).

Konsultorio • COMUNIDAD

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

Muchas placas DEBERÍAN tener imple-mentaciones correctas de ACPI queenciendan el ventilador si la CPUcomienza a recalentarse. Sin embargo,mi recomendación es no confiar en estoy hacer algunas comprobaciones al res-pecto. Podemos comprobar latemperatura de nuestra CPU en cual-quier momento tecleando:

# acpi -V

Result:

Battery 1: discharging, 99%, U

02:27:58 remaining

Thermal 1: ok, 75.0 degrees C

AC Adapter 1: off-line

(El comando “acpi” es parte del

paquete de utilidades “acpi”)

Si vemos que la temperatura sube por

encima de los 90ºC y nuestra placa falla

al controlar la “emergencia”, deberíamos

activar la refrigeración rápidamente:

# echo 0 >/proc/acpi/U

thermal_zone/THRM/cooling_mode

Algunos programas que se ejecutan como

demonios se supone que reducen automáti-

camente la velocidad de la CPU y el

consumo si no están haciendo nada dema-

siado exigente, proporcionando potencia

extra de CPU en caso de que se necesiten

cálculos intensivos o la carga sea elevada.

No obstante, muchos de estos programas

no funcionan del todo bien, y los patrones

bajo los cuales se decide proporcionar más

o menos potencia de CPU son bastante arbi-

trarios. Si queremos probar, sólo tenemos

que teclear load acpi-cpufreq, o

speedstep-ich y ver qué podemos cambiar

en /proc/acpi. Programas como cpufreqd,

powernowd y powersaved se supone que

proporcionan cierto control sobre el esca-

lado de frecuencia y el consumo de las

CPUs que los soportan.

Acerca del Calor

01 # cat /proc/acpi/thermal_zone/THRM/cooling_mode \

02 /proc/acpi/processor/CPU0/performance

03 Result:

04 cooling mode: active

05 state count: 2

06 active state: P0

07 states:

08 *P0: 1800 MHz, 20000 mW, 250 uS

09 P1: 1200 MHz, 10000 mW, 250 uS

10 # echo 1 >/proc/acpi/processor/CPU0/performance

11 # echo 1 >/proc/acpi/thermal_zone/THRM/cooling_mode

12 # cat /proc/acpi/thermal_zone/THRM/cooling_mode \

13 /proc/acpi/processor/CPU0/performance

14 Result:

15 cooling mode: passive

16 state count: 2

17 active state: P1

18 states:

19 P0: 1800 MHz, 20000 mW, 250 uS

20 *P1: 1200 MHz, 10000 mW, 250 uS

Listado 1: Ejemplo ACPI

Page 88: Linux Magazine - Edición en Castellano, Nº 19

problemáticos

suelen ser los

relacionados con las

tarjetas de sonido,

pcmcia (controlador

+ dispositivos) y

USB (controlador +

dispositivos). Los

deberíamos

compilar siempre

como módulos de

modo que pudiesen

ser deshabilitados y

recargados de

manera sencilla y

no molesten al

proceso de

suspensión y

reanudación.

A pesar de todos los problemas, ACPI pro-

porciona algunas opciones interesantes.

Algunas de las cosas “sencillas” que podemos

hacer con ACPI pueden ser trucos para con-

mutar la potencia/frecuencia de la CPU y el

ruido del ventilador (véase Listado 1). Al

menos en mi portátil, puedo reducir la fre-

cuencia de la CPU (y disminuir drásticamente

el consumo) y a continuación bajar la veloci-

dad del ventilador de la CPU para tener un

equipo más silencioso sin que vaya del todo

lento. Por supuesto, si estamos toqueteando el

ventilador del disipador, debemos asegurar-

nos que podemos conectarlo de nuevo. Más

información en el cuadro “Acerca del Calor”.

Apuesta acerca de VentanasPor favor, ayúdeme a dilucidar una

apuesta. ¿Corre un sistema significa-

tivamente más rápido si se cierran las

ventanas abiertas que están minimizadas

en la barra de tareas?

Esta apuesta no tiene un ganador

claro, ya que todo depende de los

programas que están abiertos. Si son

intensivos en cuanto a CPU y glotones de

memoria, por supuesto, el sistema irá

mucho más rápido si cerramos la

aplicación.

Por cierto, en términos de uso de CPU, a

veces ayuda si simplemente SUSPENDE-

MOS el proceso en lugar de finalizarlo. Para

ello mandamos:

kill -STOP process_id

al proceso process_id en cuestión. La ven-

tana deja de responder, pero podemos

volver a despertarla más tarde enviando:

kill -CONT process_id

lo cual permite que el programa gane algo

de tiempo de CPU. Este truco puede que no

libere temporalmente memoria, pero puede

ayudar si no queremos finalizar un pro-

grama en ejecución, sino que sólo queremos

suspenderlo.

Podemos también usar nice al iniciar un

programa, o renice más adelante, para dar

menos prioridad a un proceso. Pero lo que

es obviamente cierto es que un programa

que no se ejecuta no consume recursos de

sistema.

Desafortunadamente, KDE puede pensar

que un programa suspendido se ha colgado,

y puede que aparezca algún molesto aviso

sugiriendo que lo matemos de verdad.

Estoy de acuerdo en que OpenOffice en

segundo plano consume un montón de

memoria y puede ralentizar otros procesos

(a menos que las partes inactivas de Ope-

nOffice hayan pasado a swap). El caso más

común de programa que consume muchos

recursos del sistema es el de un navegador

Web como Konqueror o Firefox, que se

queda ejecutando gráficos animados, flash o

applets de Java que consumen CPU y

memoria. Podemos teclear “top” para verifi-

car esto. Si vemos una gran cantidad de

memoria asignada a este tipo de programas,

el sistema irá más rápido si no los ejecuta-

mos. También podemos cerrar el navegador

y reiniciarlo.

Probablemente es mejor idea editar las

preferencias del navegador, y deshabilitar la

ejecución automática de los plugins, y luego

ejecutar los que elijamos (si es que el nave-

gador lo permite. Konqueror sí lo permite).

¿Quién ganó la apuesta? �

Si experimentamos un kernel panic en este

punto, debemos verificar si todo lo que puede

compilarse como módulo (y no sea necesario

en un estadio temprano del arranque para

acceder a la información del sistema de archi-

vos) está realmente compilado como módulo

y ha sido satisfactoriamente descargado con

rmmod antes de la suspensión. No debemos

olvidar ejecutar el verificador de sistema de

archivos tras una suspensión a disco fallida, si

es que nuestro sistema no lo hace automática-

mente. Tal vez necesitemos un kernel más

reciente…

4. Para arrancar en la sesión guardada/sus-

pendida, sólo tenemos que iniciar nuestro

kernel de Linux, pero (véase punto 1) previa-

mente deberíamos haber especificado la

partición “resume” en nuestra configuración

del kernel o haber usado la opción

resume=/dev/ hd*. De otra manera, el kernel

arrancará en modo normal e ignorará el hecho

de que hay una sesión guardada en la parti-

ción de swap. Esto puede llevar a una

situación bastante indeseable. Se verificará

todo el sistema y probablemente habrá modi-

ficaciones, pero cuando se detecte

correctamente la sesión salvada en un arran-

que posterior, tomará el sistema de archivos

como bueno, lo que provocará un sistema de

archivos corrupto.

Lo mejor será que no arranquemos nunca

sin continuar una sesión guardada, incluso si

planeamos montar nuestro sistema de archi-

vos como de sólo lectura. Ext3, por ejemplo, al

menos en las versiones que he podido ver,

modifica la partición incluso cuando está

montado como sólo lectura.

El kernel debería mostrar el progreso al car-

gar los datos almacenados en la partición de

swap. Tras esto, vuelve a colocarse la marca

de swap, por lo que la partición de swap ya

puede reconocerse como tal.

En el desafortunado caso de que la reanu-

dación desde disco realmente no funcione al

primer intento, tendríamos que (re)cargar los

módulos del kernel que han sido anterior-

mente descargados de manera que podamos

tener operativa la tarjeta de sonido y todo lo

demás.

Si todo funciona correctamente, guardar a

disco y reanudar desde disco pueden ayudar

realmente a acelerar el proceso de arranque,

porque mantienen los programas existentes

en funcionamiento (salvo por aquellos que

necesitan los módulos del kernel que han

tenido que descargarse). Tendremos que

averiguar qué módulos podemos mantener

durante la suspensión y reanudación y cuáles

otros dependen de la CPU. Los más

COMUNIDAD · Konsultorio

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

Figura 1: Verificamos el uso de la CPU y la memoria con el comando

“top”.

Page 89: Linux Magazine - Edición en Castellano, Nº 19

El segundo problema con el que nos

encontramos es que los que ya están den-

tro suelen tener el ego del tamaño de un

Airbus. Son autoritarios, bocazas y des-

pectivos. No apetece nada trabajar con

gente así. Además, suelen despreciar a los

desarrolladores de otros proyectos más

“frívolos” (escritorios y cosas así),

tachando sus proyectos de superfluos e

innecesarios. Bonita manera de conseguir

ayuda: insultando el trabajo de los que te

la pueden ofrecer.

Pero es que aparte de contraprodu-

cente, las acusaciones son injustas y

mentira: el desarrollo de un escritorio usa-

ble favorece de manera clara a los

programadores de Linux, a cualquier pro-

gramador de Linux. Cuando

personalmente sólo tenía un ordenador y

Linux no daba la talla en el escritorio,

tenía que saltar de un sistema operativo a

otro para escribir un artículo. Gracias a los

desarrolladores del escritorio, puedo

escribir un artículo técnico sin tener que

reinicar al principio y al final de cada

párrafo. Ya les oigo, ya: “Pues podías utili-

zar Emacs o vi desde la consola”. Según

esa regla de tres ¿por qué no componer

mis artículos directamente en binario? O,

para el caso, ¿por qué no utilizar un mar-

tillo y un cincel sobre un bloque de

granito?

Existe una suerte de desarrollador

prepotente “machito” que, al igual que el

insolente paleta que silba e insulta a las

mujeres que pasan por la calle, tiene que

pasar a la historia. Su actitud es

inapropiada, es soez, es

contraproducente, y esto último es lo peor

de todo. Si como desarrolladores

encontrásemos un cuello de botella en un

programa y supiéramos cómo eliminarlo,

no dudaríamos en hacerlo. Pues los

bocazas que creen estar en posesión de la

verdad absoluta son el cuello de botella

que impiden el paso de nuevos

programadores a las imprescindibles

tareas de desarrollo de Linux para el

servidor.

Para cada problema existe una solu-

ción. Ya se sabe que si tu problema tiene

solución ¿de qué te preocupas? y si no la

tiene ¿de qué te preocupas? Y esto no es

para nada como lo de la velocidad de la

luz o el conflicto palestino-israelí. Sólo es

cuestión de logística.

Pero, si bien el primer paso hacia la

resolución de un problema es admitir su

existencia (y esto, a juzgar por los aulli-

dos que provienen del sótano, es algo ya

superado), el segundo es querer resol-

verlo.

La pregunta clave es: ¿Se está dispuesto

a aceptar a más gente en el seno del

desarrollo hardcore? ¿Se está dispuesto a

quitarse tiempo de desarrollo para formar

a los recién llegados, a coordinarlos y

supervisar su trabajo? ¿O se prefiere

seguir quejándose? Los enfermos del

síndrome de Munchhausen consiguen ser

el centro de atención de su entorno

simulando enfermedades en su persona.

El verdadero peligro ocurre cuando un

paciente, en su afán de convencer a los

médicos de que su enfermedad no es

imaginaria, se autoinfligen daños

tomando drogas que ayudan a simular

mejor los síntomas, cayendo en un círculo

vicioso donde, cuanta más atención

reciben, más enfermos se ponen. ¿No será

éste también un problema de los

desarrolladores hardcore? ¿Cómo piensan

atraer gente hacia su área de especialidad

siendo desagradables con todo el mundo?

Si, como ya hemos visto, el trabajo de

depuración y de desarrollo de drivers ya

de por sí es poco agradecido, y encima la

persona con la que contactas ofreciendo

tu ayuda te trata con la punta del pie

porque utilizas Kate en vez de Emacs,

apaga y vámonos.

El mensaje, desde mi punto de vista y

en muchos casos, es muy claro: muchos

desarrolladores hardcore son desagrada-

bles porque (a) eso les granjea la atención

que creen que se merecen y (b) mantiene

alejado a todo aquel que les pudiera ayu-

dar lo que (c) sirve como excusa para

seguir siendo desagradable. En este esce-

nario, los responsables de la falta de

desarrolladores serían, al menos en parte,

los mismos que denuncian esa falta.

Pero, insisto, el problema es muy real y

uno de los primeros pasos es hacer acto

de contrición, admitir la propia culpa y

humillarse, aunque sea en privado. A

continuación, dejar de insultar a los

desarrolladores de otros proyectos,

reconocer su valía, con el fin de que se

respete la valía propia. Es necesario que

los desarrolladores de servidores se den

cuenta de que han de estar dispuestos a

dar un paso atrás con el fin de intentar

conseguir dos pasos hacia delante. Esto

exige dejar de programar un rato,

organizarse entre ellos y coordinar una

campaña de captación de programadores,

ya sean de otros proyectos, ya sean de

entre los nuevos programadores que

desembarcan en Linux por motivos

profesionales o curiosidad personal. Pero,

de nada servirá captarlos para que al día

siguiente salgan pitando por no poder

soportar la arrogancia de los veteranos.

En muchos casos, los programadores se

software libre trabajan por amor al arte y

no tienen porqué aguantar desaires de

nadie. �

89

EDITORIAL

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

HARDCORE

Paul C. Brown

Director

� Viene de la página 3

[1] Análisis del uso de servidores en Internet de los últimos meses de Netcraft: http://

news.netcraft.com/archives/web_server_survey.html

[2] Artículo de Linux Today donde se explican los hallazgos de los estudios de Evans

Data: http://www.linuxtoday.com/news_story.

php3?ltsn=2006-06-02-028-26-OP-MR-DV

[3] Artículo sobre la migración de GoDaddy en Newsforge: http://business.newsforge.

com/article.pl?sid=06/04/20/1652228&from=rss

RECURSOS

Page 90: Linux Magazine - Edición en Castellano, Nº 19

COMUNIDAD · Debconf6

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

software

libre al publico

en general, a las

empresas locales y a

los medios de comunicación, se impar-

tieron una serie de charlas en español o

con traducción simultánea. A pesar de

que Oaxpetec se encuentra alejado

unas 2 horas por carretera de México

D.C., medio centenar de mexicanos se

acercaron para participar en la jornada.

Además, merece la pena destacar la

charla de Luciano Bello, ¡A darle áto-

mos a Debian!, sobre cómo contribuir

en Debian aunque no seas una persona

técnica. Luciano mantiene una página

en el wiki de Debian [3] con algunas

sugerencias de cómo puedes participar

siendo por ejemplo, una persona de

leyes, un maestro de escuela, etc.

En la semana siguiente, del 14 al 21

de mayo, tuvo lugar la DebConf propia-

mente dicha: un ciclo de conferencias

donde se mezclaron charlas técnicas,

políticas y sociales que giran entorno a

Debian.

Una de las que creó más expectación

fue Releasing in Time – Etch in Decem-

ber 06. Andreas Barth y Steve

Langasek, directores de lanzamientos

de Debian, explicaron que para que la

próxima versión de Debian, Etch, vea la

luz en diciembre como está previsto en

este momento, es necesaria una estre-

cha colaboración por parte de los

desarrolladores y mantenedores de

Debian, de tal forma que puedan con-

cluirse algunas de las metas propuestas

para el lanzamiento de esta nueva ver-

sión según el calendario propuesto [4]

y [5].

Entre otras muchas novedades, Etch

contará con X.org en lugar de XFree86,

con la versión 4.1 de GCC, con el larga-

mente esperado soporte oficial para

amd64, la versión 2.4 de Python, com-

patibilidad con LSB 3.1, apt seguro, y

además, toda la documentación licen-

ciada bajo DFSG que contiene partes

invariantes, se moverá a la sección

non-free del archivo.

Christoph Berg en su charla “The

future of the NM process”, abordó uno

de los temas más polémicos: el actual

proceso por el que hay que pasar para

llegar a ser un desarrollador oficial de

Debian. Hoy por hoy, un candidato

necesita ser avalado por un desarrolla-

dor, ha de esperar algún tiempo hasta

conseguir un examinador, además de

someterse y pasar una serie de pruebas.

Estas pruebas llevan mucho tiempo,

tanto para el candidato como para el

desarrollador que le evalúa, lo cual

La DebConf se celebra anual-

mente con el objetivo de

estrechar lazos dentro de la

comunidad Debian, que habitualmente

trabaja repartida por todo el mundo.

Este año, con el objetivo de promocio-

nar el software libre entre la

comunidad mexicana y la latinoameri-

cana en general, el país anfitrión ha

sido México.

Charlas, BOFS, Mesasredondas,…La conferencia es mucho mas que un

ciclo de charlas. Se desarrolló a lo largo

de dos semanas durante las cuales se

celebraron una serie de actos tanto

sociales como técnicos.[1]

Durante la primera semana, del 6 al

12 de mayo, tuvo lugar la DebCamp,

donde algunos de los equipos de

desarrollo de Debian, tales como el

equipo del instalador (debian-installer)

o el equipo del kernel, tuvieron la opor-

tunidad de reunirse y trabajar cara a

cara durante unos días. Además, gra-

cias a la esponsorización del gobierno

de Extremadura, algunos de estos equi-

pos tendrán una reunión adicional este

año, lo que les permitirá agilizar el tra-

bajo de cara a la próxima versión

estable de Debian, que se llamará Etch.

El 13 de mayo se celebró con bas-

tante éxito, el DebianDay [2]. Con la

intención de acercar GNU/Linux y el

Conferencia Debian 2006

DEBCONF6Bajo el lema “Hot and Spicy”

(Calentito y Picante) se reunieron

más de 300 voluntarios llegados

de todo el mundo en el Centro

Vacacional de Oaxtepec, México,

para celebrar la DebConf6, la sép-

tima conferencia de desarrollado-

res y contribuidores de Debian.

POR ANA GUERRERO.

Page 91: Linux Magazine - Edición en Castellano, Nº 19

supone una gran carga de trabajo sin

que ello redunde directamente en la

mejora de la distribución, lo que ha lle-

vado a la búsqueda de alternativas y

mejoras.

Otra charla muy interesante por su

contenido social fue la de Gabriella

Coleman llamada “Codes of Value: An

Anthropological Analysis of Hacker

Values”. Grabiella es una antrópologa

que ha pasado varios años estudiando

la interacción de los hackers en los pro-

yectos de software libre, centrándose

especialmente en Debian. En su diser-

tación examinó el código de valores de

los hackers, cómo éstos valoran y

decretan la libertad, qué significa para

ellos, y algunos de los efectos políticos

de sus acciones, no siempre comprendi-

das por la comunidad no hacker.

También hizo un repaso a algunos de

los puntos de la cultura del hacker,

como su humor, la meritocracia o el eli-

tismo.

PájarosParalelamente a las conferencias se

celebraron sesiones de discusión (en

inglés BoF – Birds of Feather), sesiones

de trabajo y mesas redondas.

Las sesiones de discusión fueron de

lo más variadas: cómo optimizar el

tiempo de arranque de Debian, el

estado actual en Latinoamérica, cómo

se gobierna un proyecto como Debian,

o cómo mejorar su actual página web.

También se contó con la participa-

ción de Ubuntu[11], distribución

derivada de Debian. Mark Shuttleworth

[8], su fundador, dio una charla a tra-

vés de la cual hacía un repaso informal

de los logros obtenidos durante el

ultimo año y organizó un par de sesio-

nes de discusión sobre cómo mejorar la

calidad dentro de Ubuntu y aumentar la

colaboración con Debian.

Uno de los proyectos más ambiciosos

dentro de Debian es la internacionaliza-

ción y localización, normalmente

abreviadas i18n y l10n, su meta es la de

hacer llegar Debian al mayor número

de personas posible en su lengua

materna. En la mesa redonda sobre el

estado actual de los proyectos de tra-

ducción se dejó patente el gran

esfuerzo que esto supone. Por ejemplo,

el instalador de la actual versión esta-

ble de Debian, Sarge, está traducido a

42 idiomas, la versión anterior, Woody,

lo estaba a 16, y actualmente el instala-

dor de la futura versión, Etch, está

traducido a 53 idiomas. Este creci-

miento hace necesario mejorar la

coordinación entre todos los proyectos

y la creación de nuevas infraestructuras

que permitan trabajar mejor a los dife-

rentes equipos.

Debian TVGracias al esfuerzo del equipo de vídeo,

las charlas y BOFs fueron retransmiti-

das por streaming y han sido grabadas

en vídeo. Aunque no están disponibles

en el momento de escribir estas líneas,

se está trabajando duro en su edición y

estarán pronto dispuestas en el archivo

de encuentros de Debian [6].

Además, alguno de los asistentes han

subido sus fotos a la galería de fotos

oficial de la DebConf [7]. De entre

todos los recopilatorios, quizás el más

divertido es el de Lars Wirzenius, quien

realizó durante toda la conferencia

fotos personales de los asistentes junto

con su nombre escrito a mano (mugs-

hot), al más puro estilo ficha policial.

También se han publicado muchas

otras fotos junto con resúmenes y cró-

nicas diarias de la conferencia en los

blogs personales de los asistentes, sin-

dicados vía planet Debian [9].

Organizar un evento de estas

características no es nada fácil. Los

organizadores de la DebConf fueron

voluntarios que tuvieron que vérselas

con todo tipo de problemas, siendo los

más destacables los que se

solucionaron al inicio de la conferencia

para poder montar la red.

La frustración de los organizadores

quedó plasmada en alguno de los artí-

culos del blog oficial [10]. Sin

embargo, pese a todo, la oportunidad

de reunir a toda la gente que trabaja en

Debian una vez al año merece todo el

esfuerzo, y ya se está trabajando en la

organización de la octava conferencia

que tendrá lugar en el verano del pró-

ximo año. El sitio aún está por

determinar, lo que sí es seguro es que

se celebrará en el continente europeo,

siendo a día de hoy Edimburgo y Sara-

jevo las candidatas con más votos.

¡Nos vemos allí! �

Debconf6 • COMUNIDAD

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

Figura 1: La Debconf6 tuvo un alto nivel de participación

[1] https://debconf6.debconf.org/about/

schedule/

[2] http://es.debconf.org/debianday/

[3] http://wiki.debian.org/LucianoBello

[4] http://lists.debian.org/

debian-devel-announce/2006/05/

msg00000.html

[5] http://lists.debian.org/

debian-devel-announce/2006/05/

msg00015.html

[6] http://ftp.acc.umu.se/pub/

debian-meetings/2006/debconf6/

[7] https://gallery.debconf.org/debconf6

[8] http://www.markshuttleworth.com/

[9] http://planet.debian.org/

[10] http://debconf6.debconf.org/blog

[11] http://www.ubuntu.com/

RECURSOS

Page 92: Linux Magazine - Edición en Castellano, Nº 19

#08

#11

#14 #15 #16

#12 #13

#09 #10

a g o t a d o

¡Hazte con tus ejemplares

atrasados!

WWW.LINUX-MAGAZINE.ES/ATRASADOS

Page 93: Linux Magazine - Edición en Castellano, Nº 19

#17 #18

¡pídelos ya!

el REPOSITORIOde conocimientos

LINUXmás COMPLETO

¡No esperes aque se agoten!

WWW.LINUX-MAGAZINE.ES/ATRASADOS

Page 94: Linux Magazine - Edición en Castellano, Nº 19

94

EVENTOS

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

LinuxWorld Conf.& Expo UK

Fecha: 25-26 Octubre

Ciudad: Londres,UK

Sitio Web:

http://www.linuxworldexpo.co.uk

I Concurso Universitario de

Software Libre

Fecha: 1-27 Septiembre

Ciudad: Sevilla, España

Web:http://concurso-softwarelibre.us.es

EuroOSCON 2006

Fecha: 18-21 Septiembre

Ciudad: Bruselas,Bélgica

Sitio Web:

http://conferences.oreillynet.com

Información de Contacto

DirectorPaul C. Brown

CoolaboradoresPaul C. Brown, Jose Manuel González Vida, JuanRafael Fernández, Pedro Orantes, José María Ruíz,Alberto Planas, Jose A. García, Ana Mª Ferreiro

TraductoresPaqui Martín Vergara, Paul C. Brown, VíctorTienda, Oliver Kurz.

MaquetaciónJuan Miguel Ramírez

Diseño de [email protected]

Publicidadwww.linux-magazine.es/pub/

Para EspañaMarketing y Comunicaciones [email protected].: (+ 34) 951 010 556Fax.: (+ 34) 951 010 516

Paul C. [email protected].: (+ 34) 951 010 556Fax.: (+ 34) 951 010 516

Para el Resto del MundoBrian Osborn [email protected] Tel.: (+49) 6509 910 495Fax.: (+49) 6509 910 497

Director EditorialPaul C. Brown

Jefe de ProducciónJuan Miguel Ramírez

Subscripciones:www.linux-magazine.es/magazine/subs

Precios Subscripción España: 54,90 €Europa: 64,90 €Resto del Mundo - Euros: 84,90 €

Tel.: (+34) 951 010 556Fax.: (+34) 951 010 516 [email protected]

Linux MagazineLinux New Media Spain, S.L.Avda. Juan López Peñalver, 2129590 - Campanillas Málaga ESPAÑA [email protected].: (+34) 951 010 556Fax.: (+34) 951 010 516

www.linux-magazine.es - Españawww.linux-magazine.com - Mundowww.linux-magazine.de - Alemania

Si bien se toman todas las medidas posibles paragarantizar la precisión del contenido de los artículos publi-cados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en larevista. Asimismo, Linux Magazine no compartenecesariamente las opiniones vertidas por suscolaboradores en sus artículos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupu-losamente para confirmar que está libre de virus y errores.

Copyright y Marcas Registradas © 2006 Linux NewMedia Spain, S.L. Linux New Media Spain S.L. prohíbela reproducción total o parcial de los contenidos deLinux Magazine sin su permiso previo y por escrito.Linux es una Marca Registrada de Linus Torvalds.

Impreso en Alemania

Impresión: Dierichs Druck + Media GmbH

Distribución: SGEL

Depósito Legal: MA-116-2005

ISSN edición impresa: 1576-4079

ISSN edición online: 1699-2237

Calendario de Eventos

Evento Fecha Ciudad Sitio Web

I Concurso Universitario de S.L. 1-27 Sept. (Inscripción) Sevilla,España concurso-softwarelibre.us.es

EuroOSCON 2006 18-21 Septiembre Bruselas,Bélgica conferences.oreillynet.com

New Security Paradigms Workshop 2006 19-22 Septiembre Dagstuhl,Alemania www.nspw.org

Nagios Konferenz 21-22 Septiembre Nürnberg,Alemania www.netways.de/de/nagios_konferenz

aKademy 2006 23-30 Septiembre Dublín, Irlanda conference2006.kde.org

AUUG 2006 8-13 Octubre Melbourne,Australia new.auug.org.au/events_store/auug2006

LinuxWorld Conference & Expo NL 11-12 Octubre Utrecht,Holanda www.linuxworldexpo.nl

hack.lu 2006 19-21 Octubre Kirchberg,Luxemburgo www.hack.lu

LinuxWorld Conference & Expo UK 25-26 Octubre Londres,U.K. www.linuxworldexpo.co.uk

Zend/PHP Conference 2006 29 Oct.-2 Noviembre San Jose,EEUU devzone.zend.com/node/view/id/89

International PHP Conference 2006 5-8 Noviembre Frankfurt,Alemania www.phpconference.com

Web 2.0 Conference 7-9 Noviembre San Francisco,EEUU www.web2con.com

Forum PHP 2006 9-10 Noviembre Paris,Francia www.afup.org/article.php3?id_article=304

Firebird Conference 2006 12-14 Noviembre Praga,República Checa www.ibphoenix.com

LinuxWorld Conference & Expo Germany 14-16 Noviembre Colonia,Alemania www.linuxworldexpo.de

Open Source Developers' Conference 5-8 Diciembre Melbourne,Australia www.osdc.com.au/

14.DFN-Cert-Workshop 7-8 Febrero 07 Hamburgo,Alemania www.cert.dfn.de/events/ws/2007/

Open Source Developers' Conference 20-22 Febrero 07 Netanya, Israel www.osdc.org.il/2007

Page 95: Linux Magazine - Edición en Castellano, Nº 19

Más del 30% de descuento respecto al precio de portada: Consigue 12 números por 54’90 Euros y todos los DVDs ¡Gratis!

A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios para que renueves tu subscripción. Ésta se renovaráautomáticamente cada año. Recibirás una confirmación aproximadamente 30 días antes del final de tu periodo de subscripción, pero no serequiere que hagas nada para seguir suscrito.

¡No te pierdas Linux Magazine nunca más! La subscripción te asegura que recibas los conocimientos Linux de más alta calidad en tu domiciliocada mes.

Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el preciode todos los números que no hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.

Linux Magazine es algo más que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre.Suscribiéndote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre allá donde haga falta.

Page 96: Linux Magazine - Edición en Castellano, Nº 19
Page 97: Linux Magazine - Edición en Castellano, Nº 19

LINUX LOCAL

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

Andalucía

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Gesinfo [email protected] www.gesinfoweb.com � � � � � �

BitRock [email protected] bitrock.com � �

Properly Software [email protected] www.properly.es/site � �

GuadaGames [email protected] www.guadagames.com �

Exprecom [email protected] www.exprecom.com � � � � � � �

LINUX LOCALLeyenda

1.- Hardware

2.- Software / Desarollo

3.- Formación

4.- Soporte / Consultoría

5.- Servidores

6.- Redes

7.- Migración

8.- Hospedaje

Cataluña

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

IWS [email protected] www.iws.es � � � � � �

Madrid

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Mono::labs [email protected] www.monolabs.com � � � � � �

Datum [email protected] www.datum.ws � � � � � �

Linux Local es tu directorio de servicios y empresas de Linux cerca de ti.

¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuen-

tra quién ofrece qué y dónde. El directorio se divide en regiones autóno-

mas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Uti-

liza la leyenda de la derecha para encontrar la empresa que ofrece el servicio

que precises.

Linux Local es tu guía de servicios Linux.

¿Por qué no está su empresa eneste directorio?

LINUX MAGAZINE llega a miles de empresas, profesionales y usuarios cada mes.

Si tiene servicios o productos Linux que ofrecer ¡Llámenos!

Tlf.: +34 951 010 556

Fax: +34 951 010 516

[email protected]

Page 98: Linux Magazine - Edición en Castellano, Nº 19

98

PRÓXIMO NÚMERO

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

NAVEGACIÓNSEGURAA medida que la red se hace más grande,

se agudizan los peligros que acechan al

internauta medio. Hoy en día hasta el

ritual de la navegación, antaño percibido

como una actividad segura, está siendo

objeto de ataques. El mes que viene exa-

minamos estrategias para devolver la

seguridad a la navegación por una web

cada vez más hostil. Primero estudiamos

el fenómeno del phishing y el arte de

hacer que incautas víctimas pierdan la

confidencialidad de sus datos y, de paso,

su dinero. Y ya que hablamos de confi-

dencialidad, veremos una de las maneras

de mantenerla a buen recaudo con Tor y

Privoxy, dos herramientas que sirven

para mantener oculta nuestra IP al

mundo externo. Claro que con legislacio-

nes intervencionistas cada vez más

represivas, no sólo querremos ocultar

nuestra identidad en la web. Antsp2p

nos ayuda a guardar el anonimato tam-

bién cuando intercambiamos ficheros en

una red P2P.

LINKCHECKER

¿Te darías cuenta inmediata-mente si un sitio web al queenlazas desde el tuyo propio hadesaparecido de la red? La herra-mienta Linkchecker es una piezaimprescindible en el arsenal delwebmaster que quiere estar altanto del estado de su sitio.

GREENSTONE

Cada año más gobiernos, bibliotecas,empresas y grupos de comunidades decidencolocar sus archivos en línea. Greenstone esuna serie de aplicaciones de software decódigo abierto que puede utilizarse para crearuna colección digital en línea. Enseñaremoscómo organizar y publicar documentosdigitales con Greenstone.

A LA VENTA: SEPTIEMBRE 2006

Octubre 2006: Número 20

PRÓXIMO NÚMERO

Page 99: Linux Magazine - Edición en Castellano, Nº 19
Page 100: Linux Magazine - Edición en Castellano, Nº 19