Linux Magazine - Edición en Castellano, Nº 19
-
Upload
linux-new-media-spain-sl -
Category
Documents
-
view
343 -
download
26
description
Transcript of 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
Clusters TomcatAlta disponibilidad para servidores web p60
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
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 �
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
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
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.
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.
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
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
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:
www.alm
ogon.de
LM
LM
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
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
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.
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.
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.
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.
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.
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
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
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
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
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.
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
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
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.
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
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
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
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
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
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
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.
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.
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
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.
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.
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.
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
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
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.
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
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
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
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
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.
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
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
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
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
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
__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”.
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
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.
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.
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.
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
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
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
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
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.
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
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
<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
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.
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
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.
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
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
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
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.
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.
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
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
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
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.
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.
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.
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.
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
¿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
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
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
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.
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.
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:
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
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”.
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
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.
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
#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
#17 #18
¡pídelos ya!
el REPOSITORIOde conocimientos
LINUXmás COMPLETO
¡No esperes aque se agoten!
WWW.LINUX-MAGAZINE.ES/ATRASADOS
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
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.
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
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