Está en la página 1de 100

Desktopia

LINUX MAGAZINE

Vdeos de escritorio
con Xvidcap

Superkaramba Edicin en

Temas impactantes
para KDE

Castellano

NMERO 04

NMERO 4 P.V.P 5,95

Wireless

Redes inalmbricas perfectas

ABCedario 802.11

WIRELESS

Sticks USB inalmbricos

El ABCedario 802.11 explicado p10


Configura un USB Stick inalmbrico
Seguridad wireless p17

p13

Seguridad Wireless

Scribus
Maquetacin profesional
bajo Linux p48

Scribus

Panorama

Panorama

Impresionantes fotos
de 360 grados p53

YUM
WarWalking

YUM

p57

Superkaramba

Actualizaciones automticas de
instalaciones Fedora

WWW.LINUX- MAGAZINE.ES

Warwalking
Hackeamos redes con
un Zaurus p22

STRATO

Hosting

The European Web Host

r
o
y
a
m
a
l
o
r
Quie

b
e
W
i
m
a
r
a
calidad p
ofesiorio avanzado como pr
Tanto si eres un usua
iento
jam
alo
e los paquetes de
nal, comprobars qu
s
m
es
en cada vez funcion
web de STRATO incluy
ete
qu
ora, por ejemplo, el pa
potentes. Contrata ah
acin
ta de una excelente rel
AdvancedWeb y disfru
!
do
por tiempo limita
calidad-precio. Slo

STRATO Hosting
SOFTWARE
INCLUIDO

(por ejemplo Advanc

edWeb)

OFERTA!

2 dominios
web,
2.000 MB de espacio
l
ua
ns
me
co
fi
50 GB tr
correo
ab 0 buzones de
20
Soluciones backup
obs
PHP, Perl, MySQL, Cron-J
Soporte gratuito
Incluye el software de
09
seguridad Steganos 20

3 meses

5.09
vlido hasta el 31.0Web
ed
nc
va
Ad
STRATO

luego 9,99 al mes

0 800 700 70
0
8
0
0
:
o
it
tu
ra
g
o
n
Telfo
pedido en
Infrmate y realiza tu

s
/e
m
o
c
.
o
t
a
r
t
s
.
w
w
w

* Periodo de contrato 12 meses. El software tiene un nico coste de 9,90 de gastos de envo. Precios sin IVA.

Escritorios

EDITORIAL

Demostrativos
Estimado Lector de Linux Magazine

Es que ya
no
me
dedico a
eso. Eso es
la enseanza
de ingls y ltimamente sta
es una de las
oraciones que
me encuentro repitiendo ms a menudo
cuando me encuentro a gente por la calle
que no he visto en tiempo. Yo me
dediqu a eso durante casi veinte aos y,
aunque fue divertido mientras dur, me
encontraba en los ltimos aos ms y
ms insatisfecho con otras cosas y me
encontraba ms y ms a menudo evangelizando a mis alumnos sobre los beneficios (tcnicos, personales, morales,
sociales, econmicos y polticos) del
software libre que ensendoles ingls.
Qu si lo hecho de menos? Pues s, por
que yo a ustedes, qu les voy a contar? Si
estn leyendo esto, es por que ya estn
convencidos de los beneficios de Linux.
Si es que han salido y se han comprado
Linux Magazine! Lo mo ahora es como
predicar a los convertidos Ah, se
refieren a lo de ensear ingls! Bueno, eso
tambin, puesto que no hay nada como
un grupo de adolescentes con acn y las
hormonas como locas dicindote: But
Windows is also free y tu rebatindoles
con Pirated, you mean. And I mean free
as in freedom, not as in beer para ejercitar el gran polemizador/el pequeo
Stallman que todos llevamos dentro.
Y esto no pasar? Esa es mi
mujer, expresando consternacin sobre
mi futuro laboral y esto es Linux.
Hombre, a la larga, s pasar, pero dale
unos cincuenta aos, una era geolgica
en el mundo de la TI. Pero, claro, ella no
est pensando en eso, sino en que, como
existen algunos webs que ella querra
visitar que no cargan bien en Konqueror,
si no ser sta un moda pasajero de cuatro tarumbas peludos. Esa fase, creo yo,
ya ha pasado. Linux ha rebasado la cima
de la aceptacin y ya rueda cuesta abajo,

a pesar de que sigue habiendo mucha


gente mirando de reojo.
Si bien queda mucho por hacer. Qu le
falta a GNU/Linux? Estabilidad? Eso ya
no es un problema. Un escritorio con
aplicaciones? Menuda tontera! Desde
hace aos que en casa no tengo nada que
no sea GNU/Linux y hago de todo lo que
se puede hacer con un ordenador y,
despus, unas cuantas cosas ms.
Teniendo, pues, un sistema estable, seguro
y bien surtido, podemos exigirle ms?
Pues s: modestia.
No es exactamente lo que le exigiras a
un puado de cdigo, pero si me parece
que hace falta dentro de la comunidad.
Todos los das leo en foros y wikis sobre
los efectos nocivos de flamewars instigados por miembros de la comunidad
cuyos egos son ms grandes que su
capacidad de programar Y algunos de
ellos tienen una gran capacidad de programacin. Pero las posiciones extremas
que toman algunos, alienando a sus
compaeros (vistos como competidores), si bien les sirve para inflar perfiles y adquirir notoriedad en el mbito
del software libre, son, a la larga, contraproducentes, tanto para el desarrollo
pacfico y armonioso, desde un punto de
vista tcnico como para la imagen que se
da puertas hacia fuera. Vanse los ltimos casos de dimisiones en Debian, en
el seno del comit de desarrollo del
Kernel y, uno poco ms atrs en el tiempo, de la junta directiva de Hispalinux.
No digo yo que las crticas no sean
buenas. De hecho, el movimiento del
software libre surge precisamente de la
desconformidad y, por tanto, de una
posicin crtica. Pero la prepotencia con
la que a veces se presentan esas crticas
para lo nico que sirve es para sembrar
la discordia y fomentar la divisin entre
usuarios cuyo fin ltimo es el mismo:
desarrollar, utilizar y fomentar el uso del
mejor sistema operativo posible.
Pero no slo se prodiga la prepotencia
entre y para los miembros de la comunidad, sino que lo derrochamos con los

Nos sentimos orgullosos de nuestros orgenes como publicacin, que


se remonta a los primero das de la
revolucin Linux. Nuestra revista
hermana, la publicacin alemana
Linux Magazin, fundada en 1994,
fue la primera revista dedicada a
Linux en Europa. Desde aquellas
tempranas fechas hasta hoy, nuestra red y experiencia han crecido y
se han expandido a la par que la
comunidad Linux a lo ancho y largo
del mundo. Como lector de Linux
Magazine, te unes a una red de
informacin dedicada a la distribucin del conocimiento y experiencia
tcnica. No nos limitamos a informar sobre el movimiento Linux y de
Software Libre, sino que somos
parte integral de l.

que no tienen nada que ver y que poco


les interesa. Como ejemplo, el ltimo
demostrativo de este mes
Es que de eso para Windows no hay.
Eso es alguna aplicacin para la cual slo
hay implementacin para Linux, a lo
sumo para BSD. Esto me encuentro
dicindolo cada vez ms a menudo ltimamente, siendo, hace algunos aos,
justo al revs. Motivo de orgullo es descubrir que cosas tan esenciales para mi
trabajo da a da, como Scribus, K3B o
los humildes split y cat, slo existen y
funcionan bajo entornos Unix.
El problema es el tonillo con el que me
encuentro dicindolo. Por mucho que
me reprima siempre sale con un tonillo
de autosuficiente satisfaccin que pone a
mi interlocutor en mi contra tachndome
de odioso tecnocretino.
Lo dicho: humildad, Paul, humildad.

www.linux-magazine.es

Paul C. Brown
Director

Nmero 04

LINUX MAGAZINE

Contenido

NOTICIAS

10

Inseguridades ....................................................................................6
Linux .........................................................................................................8
PORTADA

El ABC del 802.11

El estndar IEEE 802.11 es el centro de la revolucin inalmbrica. El alfabeto inalmbrico comienza con 802.11a y se
extiende hasta
802.11n. Linux
Magazine nos
ayuda con la
ortografa
inalmbrica.

Especial Wireless .............................................................................9


ABC del 802.11

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

Los mltiples estndares para disposistivos inalmbricos


pueden causar una gran confusin. Veamos qu es qu.

Radio USB

............................................................................................13

Analizamos los distintos dispositivos USB para conexin a


una WLAN.

Secretos Wireless ............................................................................17


Proteger una red inalmbrica es difcil. Enseamos como
implementar un tnel VPN seguro.

Wireless Hacking ...........................................................................22


Nos vamos de paseo con un Zaurus para demostrar lo fcil
que es acceder a redes inalmbricas desprotegidas.

DESARROLLO

La librera SDL (IV) ........................................................................27

13

Radio USB

Los chismes electrnicos son cada vez ms pequeos y los


adaptadores WLAN no son una excepcin. En las tiendas ya
estn disponibles
varios adaptadores
WLAN en formato
stick USB. Este
artculo
tratar
sobre que caractersticas buscar en
estos adaptadores y
como
conseguir
que funcionen.

Aprendemos como programar deteccin de colisiones entre


nuestro hroe y los otros elementos del juego.

Ruby Spider

.......................................................................................32

Desarrollamos una araa web en Ruby.

Perl: RSS ................................................................................................35


Descargamos toda la informacin que te interesa con esta herramienta Perl.

PHPNuke

............................................................................................. 39

Crear un mdulo para PHPNuke es sencillo si se sabe como


hacerlo.

Python/Jython ................................................................................43
La sencillez de Python con las librearas de Java... Qu ms
se puede pedir?

KNOW HOW

Maquetacin con Scribus (I)

...............................................48

Scribus es el primer .....programa de autoedicin visual bajo


Linux. Veremos como utilizarlo con un caso prctico

Nmero 04

www.linux-magazine.es

17

Secretos Wireless

Las redes inalmbricas son prcticas pero al mismo tiempo


peligrosas. La encriptacin WEP es improbable que pueda
detener a un atacante. Pero la solucin est disponible
de forma adicional en
las
medidas
de
seguridad tales como
un tnel OpenVPN
cifrado.

Contenido

20

De paseo con mi Zaurus

Las PDAs actuales tienen ya la potencia de clculo de los PC


de hace cinco aos y la versatilidad de los Sistemas
Operativos actuales.
Una PDA con Linux es
como tener un pingino gigante en tu bolsillo.

LINUX MAGAZINE

Panorama ............................................................................................53
Creamos fabulosas imgenes de 360 grados a partir de una
serie de fotos digitales.

Yum ..........................................................................................................57
SYSADMIN

La Columna de Charly

...............................................................59
Los mejores trucos y consejos del SysAdmin.

Encontrando cosas con find

.................................................60

Con discos duros cada vez ms grandes, conviene saber


como encontrar cosas en ellas. Para eso tenemos find.

Kontact e IMAP

48

Scribus

En este primer artculo de una serie de tres, el ex-director


artstico de un peridico, Jason Walsh, echa un vistazo a la
autoedicin
en
Linux. Jason crear
un peridico usando Scribus junto
con otras aplicaciones Linux y
lo probar en una
editorial real.

..............................................................................62

Pensamientos Competitivos ................................................64


LINUX USER

SuperKaramba ................................................................................67
SuperKaramba aporta temas y guiones a nuestro escritorio
para que lo tengamos como los chorros de oro.

DeskTOPia: xvidcap ....................................................................69


Hacemos vdeos para tutoriales de nuestro escritorio.

Configuracin: GFTP

...................................................................72

El cliente FTP, GFTP nos permite transferir ficheros de manera cmoda y eficiente.

Curso de Programacin: XUL (IV) .......................................75


Educacin: Idiomas y Alfabetos

53

Vistas de 360 grados

Podemos crear una imagen agradable alineando mltiples


paisajes para conformar un panorama. Pero la alineacin
puede ser complicada, especialmente si las fotografas individuales no coinciden. Herramientas como Hugin, Enblend y
Autopano-SIFT
pueden
ayudarnos a crear
panormicas
perfectas sin
marcas.

........................................80

Comandos: diff.................................................................................85
Tipografa con LaTeX (IV) .........................................................87
COMUNIDAD

Proyectos

............................................................................................93

Eventos .................................................................................................95
Contacto ..............................................................................................95
DVD .........................................................................................................96
Prximo Nmero ..........................................................................98

www.linux-magazine.es

Nmero 04

NOTICIAS

Inseguridades

Inseguridades
PHP
PHP es un lenguaje de guiones embebido
en HTML que habitualmente se utiliza
en conjuncin con el servidor web
Apache.
Existen fallos encontrados en el cdigo
de deserializacin de PHP que podran
conllevar al revelado de informacin,
subflujo de matriz de referencia a ndice
negativa o sin doble. El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes (Common Vulnerabilities and
Exposures o CVE http://cve.mitre.org)
ha asignado el nombre CAN-2004-1019 a
este problema.
Tambin se ha encontrado un fallo en
la extensin exif de PHP que podra
desembocar en un desbordamiento de
pila. El proyecto de Vulnerabilidades y
Exposiciones Comunes ha asignado el
nombre CAN-2004-1065 a este problema.
Asimismo, se descubri un error de
revelado de informacin en el proceso de
anlisis variables GPC en PHP (cadenas de consultas o cookies y datos de
formularios POST). Si algn script en
particular utilizara los valores de las
variables GPC, se podran revelar porciones del espacio de memoria del proceso httpd hijo al cliente. El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes ha asignado el nombre CAN2004-0958 a este problema.
Se revel un error en el anlisis de formularios datos de formulario/multiparte utilizado por guiones PHP que
permiten subir ficheros a la web. El
proyecto
de
Vulnerabilidades
y
Exposiciones Comunes ha asignado el
nombre CAN-2004-0959 a este problema.
Se encontraron fallos en las funciones
PHP shmop_write, pack y unpack. Estas
funciones no suelen recibir informacin
aportada por el usuario, por tanto
requeriran un guin PHP malicioso para
su explotacin. El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes ha asignado el nombre CAN2004-1018 a este problema.
Existen varios problemas relacionados
con el uso de la llamada al sistema

Nmero 04

select de PHP, que podra desencadenarse si se utiliza en una configuracin con Apache.
El script del shell phpsize, incluido
con PHP, puede utilizarse para construir
mdulos de extensiones de terceras
partes. Se encontr un problema de
construccin en el script phpsizeen
ciertas plataformas de 64 bits que
impeda su correcta operacin.
El mdulo de extensin pcntl se
encuentra ahora habilitado en el intrprete de la lnea de comandos de PHP (/
usr/bin/php). Este mdulo permite controlar caractersticas tales como fork y

kill desde guiones PHP.


-Referencia Gentoo: GLSA 200412-14 /
PHP
-Referencia Red Hat: RHSA:2004:687-05

Samba
Samba aporta servicios de comparticin de
ficheros e impresin a clientes SMB/CIFS.
Greg MacManus, de los laboratorios
iDEFENSE, ha descubierto un error de
desbordamiento de entero en versiones
de Samba anteriores a 3.0.10. Un usuario
autentificado
remotamente
podra
explotar este error, lo que podra llevar a
la ejecucin de cdigo arbitrario en el
servidor Samba. El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes (cve.mitre.org) ha asignado el
nombre CAN-2004-1154 a este problema.
Los usuarios de Samba debern insta
lar actualizaciones cuanto antes.
-Referencia Gentoo: GLSA 200412-13
/ Samba
-Referencia Mandrake:
MDKSA-2004:158
-Referencia Red Hat: RHSA:2004:670-10
-Referencia Suse: SUSE-SA:2004:045

ZIP
El programa Zip es una utilidad de
archivado que puede crear archivos compatibles con ZIP.
Se ha descubierto un error de desbordamiento de bfer en zip cuando maneja
nombres de archivos largos. Un atacante
podra crear un nombre de accesos espe-

www.linux-magazine.es

cialmente configurado que podra provocar el cuelgue de zip o que ejecutara


instrucciones arbitrarias. El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes (http://cve.mitre.org) ha asignado el nombre CAN-2004-1010 a este

problema.
-Referencia Debian: DSA-624-1
-Referencia Red Hat:
RHSA:2004:634-08.

nfs-utils
El paquete nfs-utils suministra un demonio para el servidor NFS del kernel y
herramientas relacionadas, lo que aporta
un nivel ms alto de rendimiento que el
servidor NFS tradicional de Linux utilizado por la mayora de los usuarios.
Este paquete tambin incluye el programa showmount. Este programa consulta al demonio de montaje en un host
remoto para recoger informacin sobre
el servidor NFS.
SGI informa que el demonio statd no
manejaba correctamente la seal SIGPIPE. Un par incorrectamente configurado o malicioso podra provocar el
cuelgue de statd, lo que conllevara un
denegacin de servicio. El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes ha asignado el nombre CAN2004-1014 a este problema.
Arjan van de Ven descubri un desbordamiento de bfer en rquotad. En arquitecturas de 64 bits, una conversin
inadecuada de enteros puede causar este
desbordamiento.
El
proyecto
de
Vulnerabilidades
y
Exposiciones
Comunes ha asignado el nombre CAN
2004-0946 a este problema.
-Referencia Gentoo: GLSA 200412-08
/ nfs-utils
-Referencia Red Hat: RHSA:2004:583-09

Kernel
El kernel Linux se encarga de llevar a
cabo las funciones bsicas del sistema
operativo.
Este aviso incluye parches para varios
problemas de seguridad:
Petr Vandrovec descubri un fallo en el
cdigo de emulacin de 32 bits que afecta al kernel 2.4 de Linux en la arquitectura AMD64. Un atacante local podra
utilizar este fallo para escalar privilegios.
El proyecto de Vulnerabilidades y
Exposiciones
Comunes
(http://

Inseguridades

cve.mitre.org) ha asignado el nombre


CAN-2004-1144 a este problema.
ISEC Security Research descubri mltiples vulnerabilidades en la funcionalidad
IGMP, que se retro-port en los kernels
Red Hat Enterprise Linux 3. Estos fallos
podran permitir a un usuario local provocar una denegacin de servicio (cuelgue)
o, potencialmente, servir para escalar privilegios en el sistema. En el caso de utilizarse aplicaciones multicast en el sistema, estos fallos tambin podran permitir a un usuario remoto provocar un
ataque de denegacin de servicio. El
proyecto
de
Vulnerabilidades
y
Exposiciones
Comunes
(http://
cve.mitre.org) ha asignado el nombre
CAN-2004-1137 a este problema.
ISEC Security Research y Georgi
Guninski descubrieron independientemente un fallo en la funcin scm_send
en la capa de mensajes auxiliares. Un
usuario local podra crear un mensaje
auxiliar cuidadosamente manipulado
que provocara una denegacin de servicio (cuelgue del sistema). El proyecto de
Vulnerabilidades
y
Exposiciones
Comunes (http://cve.mitre.org) ha asignado el nombre CAN-2004-1016 a este
problema.
Se ha descubierto una fuga de informacin de punto flotante en el cdigo de
intercambio de contexto de la arquitectura
ia64. Un usuario local podra utilizar este
fallo para leer los valores de registro de
otros procesos, estableciendo el bit MFH.
El proyecto de Vulnerabilidades y
Exposiciones
Comunes
(http://
cve.mitre.org) ha asignado el nombre
CAN-2004-0565 a este problema.
Kirill Korotaev encontr un fallo en el
binario load_elf_binary que afecta los
kernels anteriores a 2.4.26. Un usuario
local podra utilizar este fallo para crear
un binario cuidadosamente manipulado
de tal manera que provocase una denegacin de servicio (cuelgue del sistema).
El proyecto de Vulnerabilidades y
Exposiciones
Comunes
(http://
cve.mitre.org) ha asignado el nombre

CAN-2004-1234 a este problema.


-Referencia Red Hat: RHSA 2004:689-06
-Referencia Suse: SUSE-SA:2004:044

Acrobat
Acrobat Reader de Adobe es una aplicacin de escritorio que permite la vi-

sualizacin, distribucin e impresin de


documentos en el formato de portable
document format (PDF).
iDEFENSE ha informado que Adobe
Acrobat Reader 5.0 aporta un potencial
desbordamiento de bfer cuando decodifica documentos codificados con uuencode. El proyecto de Vulnerabilidades
y Exposiciones Comunes (Common
Vulnerabilities and Exposures o CVE
http://cve.mitre.org) ha asignado el
nombre CAN-2004-0631 a este problema.
Se aconseja a todos los usuarios de
Acrobat Reader que se actualicen a las

nuevas versiones.
-Referencia Red Hat: RHSA:2004:432-08

PNG
Se han descubierto varias vulnerabilidades en la librera PNG, utilizada por
aplicaciones que soportan el formato de
imgenes PNG.

NOTICIAS

Es posible provocar un desbordamiento a travs de caractersticas relacionadas con el comportamiento de la


librera PNG en aplicaciones de procesamiento de aplicaciones (VU#388984,
VU#3817368, CAN-2004-0597). Un atacante podra utilizar un tipo especial de
imagen PNG para provocar el cuelgue de
una aplicacin debido a una desreferencia a puntero nulo en la funcin
png_handle_iCPP()
(y
otras
VU#236656, CAN-2004-0598). Se han
descubierto algunos desbordamientos
de enteros en las funciones png_handle_sPLT(), png_read_png() y otras.
Estos errores pueden provocar cuelgues
en
aplicaciones
(
VU#160448,
VU#477512, VU#286464, CAN-2004
0599).
-Referencia SuSE: SUSE-SA:2004:023
-Referencia Slackware:
SSA:2004-222-01

Polticas de seguridad de la Distribuciones Mayoritarias


Distribuidor

Fuente Seguridad

Debian

Info:http://www.debian.org/security/
Lista:http://www.debian.org/debian-security-announce/
Referencia:DSA-1)

Gentoo

Mandrake

Red Hat

Slackware

Suse

Comentario

Los avisos de seguridad actuales se incluyen en la pgina de inicio. Los avisos


se proveen como pginas HTML con
enlaces a los parches. Los avisos tambin
incluyen una referencia a la lista de
correo.
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)
pgina principal. Los avisos se presentan
en HTML con cdigos para fusionar las
versiones corregidas.
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 pginas
HTML, pero no contienen enlaces a los
parches.
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)
continuacin los problemas para cada
versin de Red Hat se agrupan. Los avisos
de seguridad se proveen como una
pgina HTML con enlaces a los parches.
Info:http://www.slackware.com/security
La pgina 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 informacin adicional sobre
seguridad en Slackware.
Info:http://www.suse.de/en/private/support/
Ya no existe un enlace a la pgina de
security/index.html
seguridad tras un remodelado en el sitio
Parches:http://www.suse.de/en/private/
web de SuSE. Existe informacin 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 descripcin de la
vulnerabilidad que soluciona el parche.

1) Todos los distribuidores muestran correos de seguridad en el campo Subject.

www.linux-magazine.es

Nmero 04

NOTICIAS

Noticias Linux

Noticias Linux
Scribus
El programa de autoedicin favorito de la
redaccin de Linux Magazine acaba de
llegar a versin 1.2.1. Junto con
importantes mejoras en la estabilidad y
mltiples correcciones de bugs, la
versin 1.2.1
de Scribus
incluye dos
importantes
novedades.
Una es tcnica - ahora
Scribus importa las caractersticas de textos (y otros documentos) de OpenOffice.
Es decir, si un documento escrito en
OpenOffice se guarda en formato sxw, la
negrita, cursiva, subrayado, fuentes, colores y otras cualidades de las fuentes se
importarn de manera transparente a
Scribus. No slo eso, sino que Scribus
puede importar directamente imgenes
creadas con la utilidad de dibujo de

Openoffice y, desde dentro de Scribus, se


pueden editar cuadros, formas y textos sin
ningn tipo de complicacin.
La segunda mejora es comercial: A
partir de esta versin, Scribus ofrece
soporte comercial para editoriales,
imprentas y otras instituciones interesadas con la implementacin y el continuo soporte a sus necesidades, segn el
sitio web de Scribus. Lo que significa
que cualquier empresa que haya sido reticente a la adopcin de Scribus por
aquello de que ha sido creado por un
grupo de jipis melenudos que no sabran
lo que significa soporte aunque les
mordiese en el trasero, ya se lo pueden
pensar de nuevo.
Scribus ofrece su soporte a empresas
para Norte Amrica y Europa a travs de
Atlantic Tech Solutions y Bit Consulting,
as como a travs de su propio equipo de

desarrollo.
http://www.scribus.org.uk/index.php

LinEspa 0.30
Se acaba de liberar la versin de
LinEspa 0.30. LinEspa es una distribucin de pequeo tamao orientado al
escritorio que viene en formato live CD,
tambin instalable en el disco duro a
partir de una opcin del men de configuracin.

Julin Coccia, uno de los lderes del


proyecto, nos cuenta que los principales objetivos de LinEspa es la facilidad de uso, la ligereza de recursos y la
precisin y cuidado en las traducciones
al castellano. Para lo primero, LinEspa
cuenta con un sencillo instalador de
cuatro sencillos pasos y obvia todo lo

Nmero 04

que no es estrictamente imprescindible


para un uso de escritorio. Para lo
segundo, LinEspa no habilita servicios
innecesarios y utiliza como escritorio
por defecto Xfce, un gestor de ventanas
muy ligero y rpido, con el cual es posible conseguir un entorno de trabajo
muy vistoso sin consumir muchos
recursos, lo cual hace que esta distro
sea perfecta para ser ejecutada en
mquinas antiguas.
LinEspa 0.30 cuenta con un kernel
2.6.8, Firefox como navegador por defecto y Thunderbird como cliente de correo.
A pesar de la eleccin por defecto de
Xfce, se pueden instalar las ltimas versiones de KDE y Gnome utilizando apt, o
el front-end grfico, synaptic.
A pesar de estar en una fase temprana
de desarrollo, LinEspa es un esfuerzo
con mrito, y sus desarrolladores se han
fijado unos objetivos definidos y realistas que hacen de la distribucin una
alternativa atractiva para los recin llega
dos a Linux.
http://www.linespa.org

www.linux-magazine.es

LMI y LPI
Linux Magazine International, la revista
hermana en ingls de Linux Magazine Edicin en Castellano acaba de ser nombrada Patrocinador de Platino del Linux
Professional Institute, el principal programa de certificaciones para la comunidad
Linux a nivel mundial.
En una nota de prensa hecha pblica
el 25 de enero, Evan Leibovitch, presidente del Linux Professional Institute,
declar: Este incremento en las responsabilidades de patrocinio de Linux
Magazine aumenta el reconocimiento de
la posicin
de
LPI
dentro de
la comunidad
Linux
y
del cdigo
abierto.
Demuestra
el valor de
la
asociacin y
el importante rol
que todos
tenemos
que asumir para promocionar los estndares para avanzar en la causa del cdigo abierto. Damos la bienvenida al paso
tomado por Linux Magazine de
patrocinio de oro a patrocinio de platino.
Un incremento en el patrocinio de
LPI era una evolucin natural declara
Brian Osborn, director corporativo de
ventas y marketing de Linux New
Media. Hemos apoyado a la direccin
y dedicacin de LPI hacia un certificacin neutral de marcas para los profesionales de Linux y su persistente
dedicacin a la promocin de Linux y
la comunidad del cdigo abierto. El
seor Osborn tambin es miembro del
consejo de LPI.
El programa de certificaciones de LPI
se concede a nivel mundial en siete
idiomas y se han celebrado ms de
70.000 exmenes para las certificaciones del Nivel Uno y Dos globalmente
desde la creacin del programa en

1999.
http://www.lpi.org/
http://www.linux-magazine.com/

Introduccin

Redes Inalmbricas bajo Linux

Sin Cables
C

asi todo sobre la industria informtica asombrara a nuestros


abuelos, pero una red sin cables les
parecera especialmente futurista.
La tarea de configurar una red inalmbrica en Linux se ha vuelto ms fcil con
el transcurso de los aos. Muchas distribuciones
incluyen
instrumentos
especiales para configurar redes inalmbricas. Pero la interconexin de estas
redes siempre ha causado dolores de
cabeza. Las necesidades especiales de
una red inalmbrica requieren una atencin especial por parte del usuario.
Uno de los problemas con la configuracin de una red inalmbrica es el
enorme nmero de diferentes estndares,
algunos de ellos obsoletos o incompatibles con sistemas actuales y otros ms
modernos que apenas han sido puestos
en prctica. En nuestro tema de portada
de este mes, examinaremos los estndares de la familia IEEE 802.11, desde la
venerada 802.11b hasta las variantes ms
recientes tales como 802.11g y 802.11n.
Mostraremos qu estndares proporcionan mayor funcionalidad y cules ofrecen
mayor compatibilidad. Y describiremos
como el nuevo estndar 802.11i soluciona
algunas de las cuestiones de privacidad
asociadas a los sistemas inalmbricos
ms recientes.
La tecnologa WLAN siempre est renovndose, con nuevos productos y nuevas
tecnologas apareciendo casi a diario. Una
innovacin reciente que est llegando a

PORTADA

Cuando se usa una red inalmbrica hay que tener cuidado.


Consiga el hardware apropiado y asegrese de que su red es
tan segura como piensa. POR JOE CASAD Y PAUL C. BROWN

ser increblemente popular es el conector


USB para una WLAN, un dispositivo compacto inalmbrico que se conecta
directamente en el puerto USB del ordenador. En nuestro artculo USB Radio:
Probando Adaptadores WLAN USB,
examinamos algunos de los dispositivos
USB para WLAN ms populares. Indicaremos cmo instalarlos en Linux y
mostraremos los pasos a seguir para configurar un adaptador USB para WLAN.
Seguramente, uno de los grandes problemas a los que se enfrentan las redes
inalmbricas es el tema de la seguridad.
Las redes inalmbricas colocan todos los
datos en el aire, donde cualquiera puede
leerlos, a no ser que se protejan. Lamentablemente, el Protocolo de Equivalencia
Inalmbrica (WEP), un estndar reciente
de seguridad para redes inalmbricas, no
es tan bueno con la proteccin, dando
lugar a herramientas como AirSnort, que
puede romper la clave de una red protegida con WEP. Si realmente se quiere
seguridad real para su red
inalmbrica, necesitar
algo ms potente.
Una opcin
es una Red
Privada
Virtual

(VPN). Una VPN crea un tnel seguro


para comunicacin cifrada dentro de una
red comn. En el artculo Secretos de las
Redes Inalmbricas: Asegure la Interconexin de una WLAN con un Tnel
Cifrado OpenVPN mostraremos como
usar la herramienta de Cdigo Abierto
OpenVPN para la seguridad y la comunicacin cifrada en una red inalmbrica.
A continuacin, nos pasamos al bando
contrario y demostramos como con un
aparato que cabe en el bolsillo de una
chaqueta, podemos empezar a descubrir
redes inalmbricas poco o nada seguras:
nos vamos de warwalking con un Sharp
Zaurus.
Si tiene una red inalmbrica o si est
pensando en pasarse a una red sin
cables, esperamos que el tema de portada de este mes: Conexin sin Cables a
una red le d muchas ideas de productos
y tecnologas que le gustara explorar.

EN PORTADA
Estndares Inalmbricos .......10
Si adquiere productos inalmbricos, ser
mejor que aprenda el alfabeto 802.11.

Adaptadores USB para WLAN.....13


Un adaptador USB para WLAN es la forma
ms fcil de configurar el ordenador para
redes inalmbricas.

OpenVPN .........................................17
OpenVPN crea una red privada virtual para
una comunicacin segura sin cables.

De Paseo con un Zaurus .........22


Descubrimos todas las redes inseguras del
vecindario dando una vuelta con un Sharp
Zaurus equipado con software a medida.

www.linux-magazine..es

Nmero 04

PORTADA

Estndares Wireless

Una gua de los estndares inalmbricos

El alfabeto 802.11

El estndar IEEE 802.11 es el centro de la revolucin inalmbrica. El alfabeto inalmbrico comienza con 802.11a y se
extiende hasta 802.11n. Linux Magazine nos ayuda con la ortografa inalmbrica.
POR JRG LUTHER

as redes estn de moda y los cables


no. Pero no solo los propietarios de
equipos porttiles con capacidades
WLAN prefieren no usar cables. Muchos
hogares necesitan conectar ms de un
ordenador a la red, y aparatos electrnicos como equipos de msica o vdeos
cada vez disponen de ms conectividad
LAN. La conectividad inalmbrica es
preferible al menos que queramos tirar
cables por toda nuestra casa.
Esta tendencia se refleja en el
tremendo incremento en ventas que
han sufrido las ventas de equipos de red
inalmbricos. El negocio est en auge
para los fabricantes de chips y componentes WLAN. Solo en Europa se espera
que el beneficio alcance la mgica cifra
del billn de dlares en 2007. Esta tendencia tambin es buena para los
consumidores, debido a que el incremento de cantidades significa una
rpida cada en los precios de equipos
WLAN.

10

Nmero 04

En lugar de un nico y por tanto fiable


estndar (IEEE 802.11b), hay una completa sopa de alfabetos distintos entre los
que elegir. 802.11a, b, g y h compiten por
ser los preferidos de los usuarios de tecnologas bsicas y 802.11n que aparecer
pronto. 11c, d, e, f e i le aaden un poco
de salsa al asunto.
Los usuarios potenciales estn normalmente confusos por la variedad de
opciones: 11 54 Mbps? 2.4 5 GHz?
WEP, WPA o 802.11i? Este artculo nos
ayuda a encontrar nuestro camino entre
el alfabeto WLAN.

Repaso a la tecnologa
Las redes inalmbricas se reparten entre
dos clases principales subdivididas por la
banda de frecuencia. Las primeras tecnologas usaban la banda de 2.4 GHz
mientras que las ms modernas usan la de
5 GHz (ms ancha). La primera incluye los
estndares del Instituto de Ingenieros Elctricos y Electrnicos (IEEE) 802.11b (11

www.linux-magazine.es

Mbps) y es compatible con su sucesor


(802.11g a 54 Mbps). Esta primera opcin
es la ms comn actualmente.
Por otro lado, tanto 802.11a como
802.11h, que operan en la banda de 5
GHZ, consiguen un rendimiento nominal
de 54 Mbps. 802.11h, referida en Estados
Unidos como de compatibilidad en
Europa, es la variante Europea del
estndar Americano. Sus dos caractersticas ms importantes son la seleccin
dinmica y la potencia de transmisin
variable, obligatorias para el mercado
Europeo segn el Instituto Europeo de
Estndares de Comunicacin (ETSI) con
el fin de asegurar que los sistemas tengan una capacidad de transmisin
razonable.
IEEE 802.11c, especifica mtodos para
la conmutacin inalmbrica, o lo que es
lo mismo, mtodos para conectar diferentes tipos de redes mediante redes
inalmbricas. El 802.11d normalmente se
le conoce como el Mtodo Mundial y se

Estndares Wireless

PORTADA

refiere a las diferencias regionales en tecnologas como a cuantos y cuales son los
canales disponibles para usarse en las distintas regiones del mundo. Como usuario
slo necesitamos especificar el pas en el
que queremos usar la tarjeta WLAN y el
controlador se ocupa del resto.
El protocolo IEEE 802.11e define la
calidad del servicio y las extensiones
para el flujo de medios para 802.11a/h y
g. El objetivo es ajustar las redes de 54
Mbps para aplicaciones multimedia y de
voz sobre IP, o lo que es lo mismo, telefona a travs de redes IP e Internet. La
red debe soportar valores de transmisin
de datos garantizados para servicios
individuales o retrasos de propagacin
mnimos para que sean tiles con multimedia o voz.
El protocolo 802.11f describe como se
tratan los estndares de las comunicaciones de clientes de mviles fuera de
zona entre puntos de acceso (Roaming) con IAPP, el Protocolo de Puntos
de Acceso manejando de los detalles.

de negociacin a finales
del verano de 2004.
El alcance y duracin
de
la
fase
de
estandarizacin
de
802.11i indica lo alerta
en materia de seguriFigura 1: Airsnort es capaz de romper encriptaciones WEP tras rebuscar
dad que estn los
en el suficiente nmero de paquetes.
fabricantes y organizaciones. Las razones
diseado para evitar los puntos dbiles
para esta cautela es el casi total fallo
reemplazando las llaves estticas con
alrededor de la primera tcnica de
llaves modificadas dinmicamente e
encriptacin de WLANs conocidas como
implementando comprobaciones de inteel estndar Equivalente de Privacidad
gridad ampliamente incrementadas. Por
Inalmbrica (WEP). WEP est basado en
razones de compatibilidad descendente
RC4 con llaves estticas y un Vector de
TKIP an usa el dbil flujo de codifiInicializacin (IV) modificado para cada
cacin RC4. WPA2 es el trmino que
paquete transmitido. WEP demostr faWi-Fi Alliance usa para referirse a la
llos mayores en la implementacin de IV
implementacin de todos
que permitieron a los piratas
los componentes obligatoobtener el suficiente nmero
rios del estndar 802.11i.
de paquetes de informacin
necesarios para reconstruir
Asuntos de
las llaves. De hecho, hay
compatibilidad
herramientas de anlisis que
Figura 2: El logo certifise ocupan de esta tarea
Suponiendo que no vamos
cado por la alianza Wi-Fi
Estndares de Seguridad
automticamente [2].
a montar una WLAN comen los paquetes de pro802.11i fue elegido para resolver los proAntes de la introduccin
pletamente nueva es muy
ductos indican su
blemas de seguridad que comprometieron
de 802.11i, los fabricantes
probable que tengamos
conformidad con los
en su momento las redes inalmbricas.
de WLAN intentaron comque ofrecer compatibilidad
estndares y compatibiliIntegra todo lo que el mundo de la seguripensar los fallos internos de
con
los
dispositivos
dad con productos de
dad ofrece. Las caractersticas ms
WEP usando una solucin
802.11b existentes. 802.11g
otros fabricantes.
importantes de 802.11i incluyen la autenticonocida como Acceso Prodispone de una serie de
cacin IEEE 802.1x con Protocolo de
tegido Wi-Fi (WPA), desarrollado al
aspectos al respecto: los dispositivos
Autenticacin Extendido (EAP), RADIUS,
amparo de la Alianza Wi-Fi [3]. Las car11b y g usan la misma banda de freKerberos y encriptacin basada en el algoactersticas ms importantes de WPA son
cuencias, la misma tcnica de
ritmo de Rijndael AES. La complejidad de
la Anulacin de Llaves Dbiles (WEPmodulacin y el mismo rango, por lo
802.11i hizo extremadamente complicada
plus), Habilitacin de la Autentificacin
que las operaciones mezcladas no son
su finalizacin. El estndar fue finalmente
EAP y el Protocolo Temporal de Inteproblemticas. No obstante la compatilanzado por la IEEE tras un difcil proceso
gracin de Llaves (TKIP). TKIP est
bilidad afecta a las prestaciones: si un
nico elemento 11b se asocia a una red
11g el rendimiento del sistema inmeTabla 1: IEEE 802.11 de un Vistazo
diatamente baja de 54 a 11 Mbps.
Las operaciones mezcladas de elemenGrupo de Trabajo Enfoque
tos
802.11b y g, pero incluso mezclas de
802.11a
54 Mbps WLAN en la banda 5 GHz
elementos
g antiguos con nuevos pueden
802.11b
11 Mbps WLAN en la banda 2.4 GHz
802.11c
Cruce sin cables
causar problemas. El estndar de seguri802.11d
Modo Mundial. Adaptacin a los requerimientos regionales.
dad WLAN 802.11i no fue introducido
802.11e
QoS y extensiones que fluyen a travs de 802.11a/g/h
hasta el verano de 2004. Las redes
802.11f
Transito para 802.11a/g/h (Protocolo de Punto de Acceso Interno IAPP)
inalmbricas ms antiguas normalmente
802.11g
54 Mbps WLAN en la banda 2.4 GHz
solo soportan el mtodo WEP mucho
802.11h
802.11a con DFS y TPC,11a Europa
ms dbil y necesitan medidas adi802.11i
Autenticacin y encriptado (AES,802.1x)
cionales para incrementar la seguridad
802.11j
802.11a con canales adicionales por encima de 4.9 GHz,11a Japn
de la red usando mtodos VPN. Algunos
802.11k
Intercambio de informacin de capacidad entre clientes y puntos de acceso
fabricantes de dispositivos que soportan
802.11l
no se usa debido al peligro de confusin tipogrfica
un subconjunto 802.11i WPA ofrecen
802.11m
Mantenimiento,publicacin de actualizaciones estndar
actualizaciones de firmware a 802.11i/
802.11n
Nueva generacin de WLAN de redes de al menos 100 Mbps
WPA2.

www.linux-magazine.es

Nmero 04

11

PORTADA

Estndares Wireless

Figura 3: Algunos fabricantes ya han empezado a ofrecer sistemas Pre-N basados en el principio
MIMO. El router Belkin que se muestra, ofrece un valor de transferencia superior a 300 Mbps en la
banda 2.4 GHz.

Los denominados productos DualBand/Triple-Mode (Banda Doble/Modo


Triple) nos pueden ayudar a evitar problemas de compatibilidad desde el
principio. Estos sistemas soportan operaciones en los anchos de banda 2.4 y 5
GHz y las tres tecnologas bsicas: 11a,
11b, y 11g. Desde el punto de vista de la
tecnologa de radio, no hay obstculos
de interpolarizacin con cualquier otro
componente WLAN. Lo malo es que
estos dispositivos son mucho ms caros.
La alianza Wi-Fi ha introducido la etiqueta Certificado Wi-Fi para garantizar
interoperaciones sin problemas entre los
sistemas LAN de distintos fabricantes. Se
requiere a los productos que demuestren
su conformidad con los estndares
actuales pasando unas extensas pruebas
para demostrar su interoperatibilidad
con dispositivos de otros fabricantes
antes de que se les de el sello de
aprobacin. La alianza Wi-Fi asigna el
logo del certificado a sistemas 2.4 GHz
con velocidades de 11 y 54 Mbps y a sistemas de 54 Mbps 5 GHz para WPA,
WPA2 yWMM. WMM significa Wi-Fi
Multimedia e indica conformidad con
802.11e.
Chipsets especficos y tecnologas de
transmisin no estandarizadas con tasas
de datos ms altas fallaron estrepitosamente en su apuesta de compatibilidad.

12

Nmero 04

Especficamente, son 802.11b+ con


una velocidad de 22 Mbps, modos 108
Mbps para IEEE 802.11 (Turbo Mode) y
802.11g (Super G, Extreme G). La
mayora de los valores de transferencia
prometidos por estos sistemas solo se
obtienen utilizando equipo del mismo
fabricante y la misma gama.

WLAN 2006: 802.11n


La prxima generacin de WLAN espera
ofrecer valores de transmisin de datos
ms altos, con el comit IEEE 802.11 trabajando en un borrador del estndar con
fabricantes de chips WLAN .
Agere ya ha producido un chip para
demostrar como funciona la tecnologa.
El prototipo usa mtodos simples para
acelerar la tecnologa 802.11 existente
hasta velocidades de 162 Mbps. El sistema usa tres antenas de transmisin/
recepcin para incrementar el valor de
transferencia
usando
Multiplexado
Ortogonal de Divisin de Frecuencia
(OFDM), definido por 11a para proporcionar separaciones limpias entre los
distintos portadores de la misma banda
de frecuencias. Este truco, llamado
MIMO (Entrada Mltiple / Salida Mltiple), permite que el rendimiento se
incremente en funcin del nmero de
antenas usadas segn indica Agere. El
nuevo estndar 802.11n, cuyo lanza-

www.linux-magazine.es

miento esta programado para 2006,


debera conseguir valores de transferencia de al menos 100 Mbps usando la
tecnologa MIMO. Esto es lo nico que
podemos decir con seguridad respecto al
sucesor de las actuales redes inalmbricas. Dos empresas est compitiendo en
el rea del protocolo del futuro, el estndar 802.11n.
Los partidarios TGn Sync [4] (la abreviacin significa Grupo de Tarea y
Sincronizacin) incluye Agere y otros
socios principales como Atheros, Intel,
Sony o Philips. El grupo intenta usar
canales de 40 MHz en la banda de 5 GHz,
y, segn Agere, esto les pondr en una posicin que les permitir soportar un valor de
transmisin de red de hasta 500 Mbps.
La tendencia WWiSE (Espectro de
Eficacia Mundial) [5] apoya un protocolos ms conservador con canales de 20
MHz en la banda 2.4 GHz. Sus miembros
ms conocidos son Broadcom, Conexant,
Texas Instruments, Airgo y STMicroelectronics la tendencia WwiSE promete
compatibilidad de sistemas anteriores
con b/g y ofrece un uso ms conservador
de los recursos de las frecuencias, si bien
no soporta valores de transmisin
extremadamente rpidos.

Conclusin
El agotado y conocido estndar 802.11b
an no ha llegado al final de su vida til
a pesar de la competencia de sus sucesores de 54 Mbps. La versatilidad y los
bajos precios hacen de 802.11b una tecnologa ideal para principiantes. Si
nuestros requerimientos de ancho de
banda son moderados y podemos pasar
sin soporte multimedia, 802.11b es an
una buena opcin.
802.11g es el sucesor especfico para el
mercado de la pequea oficina y tiene la
ventaja de ser compatible hacia abajo.
Como contraste, los WLANs 802.11a/h
son las mejores para grandes redes con

grandes nmeros de usuarios.

RECURSOS
[1] Bluetooth: http://www.bluetooth.com/
[2] WEPCrack: http://wepcrack.sourceforge.
net/,AirSnort:http://airsnort.shmoo.com/
[3] Alianza Wi-Fi: http://www.wi-fi.net/
[4] Propuesta TGn Sync: http://tgnsync.org/
[5] Alicanza WWiSE: http://www.wwise.org/

Adaptadores USB WLAN

PORTADA

Probando adaptadores WLAN USB

Radio USB
Los chismes electrnicos son cada vez ms pequeos y los
adaptadores WLAN no son una excepcin. En las tiendas ya
estn disponibles varios adaptadores WLAN en formato stick
USB. Este artculo tratar sobre que caractersticas buscar en
estos adaptadores y como conseguir que funcionen.
POR MARCEL HILZINGER

a ha llegado la primavera y ms
de uno quisiera poder trabajar
sentadito en el jardn o la terraza
de casa, disfrutando del sol maanero y
del porttil nuevo que lleg por navidad.
Aunque los adaptadores Wireless LAN
no slo se han diseado para el trabajo
al aire libre; pueden ser muy tiles dentro de casa, en el trabajo, en el
aeropuerto y en muchos otros sitios
donde exista un punto de acceso publico.
Un adaptador WLAN en formato stick
USB no es ms grande que un pendrive
de memoria flash y se puede guardar
perfectamente en un bolsillo o un bolso
mientras no se necesite.
Hay algunas detalles que se han de
vigilar antes de comprar un adaptador
WLAN en formato stick USB. De hecho,
Linux no funciona con muchos de los
nuevos modelos de 54 Mbits y algunos
de los modelos ms antiguos, pueden
dar algn que otro dolor de cabeza.

Tirando a por lo Seguro


Como el boom WLAN no cesa, los fabricantes y proveedores de adaptadores

WLAN en formato
stick USB parecen que
han aumentado de
repente. Dicho esto,
los nicos adaptadores que funcionan con Linux, nada
ms salir de la caja son los adaptadores
USB de 11Mbits que usan el chipset
Prism2. Los modelos Netgear MA111 y DLink DWL-122 de nuestra prueba (Vase
la Tabla 1) son solo dos ejemplos. Se
puede encontrar una lista de dispositivos
ms amplia, aunque no muy actualizada, en [1].
La versin 9.0 o posterior de Suse
Linux ofrece un sencillo procedimiento
para hacer funcionar estos dos adaptadores. Despus de conectar el adaptador,
simplemente hay que lanzar el modulo
de configuracin de la tarjeta de red de
YaST, elegir Other (not detected) y pulsar
sobre Configure... seleccionando Wireless en el men desplegable Device type y
entonces pulsar sobre el botn de la
derecha Select from List. Ahora seleccionar la entrada en el botn de la lista
Wireless device using kernel module

prism2_usb.o y pulsar en OK para confirmar (Vase la Figura 1). Despus se


pulsa en Wireless settings para configurar el ESSID y el modo de trabajo.
Para usar un punto de acceso pblico
(en el aeropuerto, por ejemplo) o el
enrutador DSL WLAN de casa, se
mantiene la opcin predeterminada que
es managed. Ahora hace falta introducir
el ESSID y pulsar en OK. Esto cerrar la
ventana actual y se volver a la ventana
Manual network card configuration. Si
ocurriera la extraa casualidad de que el
punto de acceso tambin realiza la funcin de servidor DHCP, solamente resta
pulsar sobre Next y a continuacin en
Finish para comenzar a navegar. Si no se
posee un servidor DHCP, habr que configurar una direccin IP fija. Se
recomienda verificar la documentacin
del punto de acceso o del encaminador
WLAN para ms informacin. Sobre

Tabla 1: Candidatos a las pruebas USB WLAN


Nombre
MA111
DWL-122
DWL-G122
WL-U356
WG111
C54RU
SMC2862W-G

Fabricante
Netgear
D-Link
D-Link
Planet
Netgear
Conceptronic
SMC Networks

Chip
Prism2
Prism2
Ralink
ZyDAS ZD1211
Prism Freesbe
Intersil/Prism
Prism Freesbe

Modulo
prism2_usb
prism2_usb
rt2570
zd1211
?
?
prism54u

Velocidad
11 Mbits/s
11 Mbits/s
54 Mbits/s
54 Mbits/s
54 Mbits/s
54 Mbits/s
54 Mbits/s

Drivers de Linux

Punto de acceso

www.linux-magazine.es

Ad-Hoc

Precio aprox.
EUR30
EUR25
EUR55
EUR40
EUR55
EUR30
EUR50

Nmero 04

13

PORTADA

Adaptadores USB WLAN

DHCP se puede consultar el artculo


Redes sin Estrs en el nmero 1 de Linux
Magazine, pgina 16.
Si solo se necesita conectar directamente dos mquinas,en vez de Managed
hay que seleccionar el modo Ad-Hoc. En
este caso tambin habr que seleccionar
el canal de comunicaciones. El proyecto
Linux-wlan-ng por omisin utiliza el
canal 6; as que sta es una seleccin
segura. En el cuadro de dialogo donde se
introdujo el ESSID, se pulsa Expert settings para seleccionar el canal desde la
lista. Despus se pulsa OK y Next para ir
a la ventana donde se configur la direc-

cin IP. Se selecciona Static Adress settup


y se introduce la direccin IP. Por ejemplo, puede se puede usar 192.168.1.1 en
una mquina y 192.168.1.2 en la otra a
qu son IPs imaginativas?
Una ltima pulsacin en Next permitir tener el adaptador listo para
funcionar. Como alguna distribucin
espera que se configure el adaptador
manualmente, en el Cuadro 1 se encuentra informacin sobre como hacerlo.

Deshaciendo entuertos
Si al conectarlo, el adaptador falla,
primero se debe teclear

Cuadro 1: Configurando el adaptador Prism2_usb


Para configurar un adaptador USB WLAN
con el chipset Prism2, se necesita
linux-wlan-ng [2] y las wireless-tools [3].
Aunque la mayora de las distribuciones
usan dos paquetes para almacenar estas
herramientas, en Suse Linux linux-wlan-ng
es parte de wireless-tools y por tanto no es
necesario que se instale aparte, si se usa
esta distribucin. Adems Suse Linux utiliza
un mtodo diferente para a la configuracin
de adaptadores USB con Prism2, por tanto
se recomienda a los usuarios de Suse Linux
que sigan el mtodo basado en YaST.
Para compilar las wireless-tools, primero hay
que desempaquetar el archivo tar.gz,
despus hay que entrar en el subdirectorio
creado por esta operacin y teclear make.
Normalmente se utilizar la orden su para
tener privilegios de root y se teclea make
install para colocar las herramientas en
/usr/local. Si se desea utilizar una ruta diferente (por ejemplo /usr) se necesitar
editar el archivo makefile. La instalacin de
linux-wlan-ng sigue un patrn similar. En
este caso make config lanza un dialogo de
configuracin donde se puede seleccionar
los controladores de dispositivo que se necesiten. Para los sticks USB hay que decir que
no a las tres primeras preguntas y teclear [y]
seguido de [enter] a la pregunta Build
Prism2.5 USB (_usb) driver? (y/n). Para el resto
de preguntas se puede pulsar [enter].
Suponiendo que las fuentes del ncleo
estn instaladas y correctamente configuradas, make lanzar el proceso de
compilacin y make install, trabajando como
root, instalar el programa.
Tras completarse este proceso, hay que
aadir la siguiente lnea
alias wlan0 prism2_usb
al final de archivo /etcmodprobe.conf o de
/etc/modules.conf (si se trata de un ncleo

14

Nmero 04

de la serie 2.4) y entonces se teclea modprobe prism2_usb para cargar el modulo del
ncleo. Ahora iwconfig debera mostrar una
entrada wlan0 para la tarjeta (Vase el
Cuadro 2).
Para habilitar el adaptador, aun se necesita
editar dos archivos ms bajo /etc/wlan/.
Para permitir que 2 tarjetas WLAN funcionen en modo ad-hoc y se vean la una a la
otra, se necesita una direccin IP para cada
tarjeta y una sola ID de red o ESSID. Para configurar esto hay que rellenar la entrada
SSID_wlan0 que se haya aproximadamente
en
la
lnea
80
del
archivo
/etc/wlan/wlan.conf como, por ejemplo:
SSID_wlan0="wireless"
El siguiente paso consiste en renombrar el
archivo /etc/wlan/wlancfg-DEFAULT por la
ESSID elegida (en el ejemplo sera
wlangcfg-wireless) y cambiar la lnea 31 de
IS_ADHOC=n a IS_ADHOC=y para usar el
modo ad-hoc. Ahora se puede lanzar el servicio WLAN tecleando /etc/init.d/wlan start.
Si todo va bien, debe ser posible asignar una
direccin IP al adaptador usando
ifconfig wlan0 192.168.1.1 netmask
255.255.255.0
y despus hacer ping hacia la otra mquina:
ping 192.168.1.2
Para poder usar un punto de acceso hay que
elegir el modo managed en vez del Ad-hoc.
En otras palabras hay que volver a dejar la
entrada como estaba IS_ADHOC=n. Como
en modo managed es el punto de acceso
quien asigna el canal, hace falta habilitar el
muestreo de canales. Para hacer esto hay
que establecer la variable WLAN_SCAN de
/etc/wlan/wlan.conf as: WLAN_SCAN=y y si
se conoce los canales que utiliza el punto de
acceso se pueden eliminar los canales
innecesarios de ChannelList para aumentar
la velocidad del muestreo.

www.linux-magazine.es

iwconfig

para comprobar que el sistema ha detectado el adaptador WLAN. En el Cuadro 2


se muestra el tipo de salida que se
espera. Si la orden no muestra un dispositivo wireless, hay que teclear
/sbin/lsmod/ | grep prism

para comprobar si el modulo prism2_usb


est cargado. Si no es as se puede intentar con
modprobe prism2_usb

para cargar el modulo manualmente.


Tambin pueden ser tiles Los mensajes del ncleo cuando se conecta el
stick USB. Para leer estos mensajes, trabajando como root, se teclea
tail -f /var/log/messages

en una ventana de terminal, esto permitir visualizar los mensajes en dicha


ventana mientras se conecta o se
desconecta el stick. En los sistemas en
los que la conexin en caliente (hotplug)
est soportada (tales como Fedora, Mandrake y Suse) el mdulo se cargar
automticamente cuando se conecte el
stick WLAN.
Tambin se debe verificar el cortafuegos, ya que, por ejemplo, SuseLinux 9.2
o posterior lo lanza automticamente
cuando se habilita un dispositivo de red.
Es necesario ajustar la configuracin del
cortafuegos de acuerdo al nuevo dispositivo o deshabilitarlo temporalmente para
estar seguros de que no es la causa del
problema.

Por el filo de la navaja


En el momento en que se hicieron las
pruebas de laboratorio para este artculo
el nico dispositivo USB de 54 Mbits que
funcionaba en Linux era el D-Link DWLG122, a pesar de que el controlador de
dispositivo no se haba publicado por
aquel entonces. En Linux Magazine Lab
se utiliz una versin beta, junto a un
ncleo 2.6.7, ya que, desafortunadamente, D-Link no ha intentado siquiera
publicar un controlador de dispositivo
compatible con la serie 2.4 del ncleo.
Es probable que en el momento en que
este artculo est en los quioscos haya

Adaptadores USB WLAN

posee un servidor DHCP. Segn D-Link


el controlador de dispositivo oficial para
el ncleo 2.6 estar disponible para
descargas en el servidor de FTP en breve.
Esperamos que el problema con el modo
ad-hoc se haya resuelto para entonces.

Experimentos

Figura 1: Configuracin de un adaptador USB


WLAN con chipset Prism2 en Suse Linux 9.1.

ms dispositivos USB de 54 Mbits que


estn funcionando en Linux y existan
versiones ms elaboradas y estables de
los controladores de dispositivo para 54
Mbits.
De no ser as lo primero que se ha de
hacer es compilar el controlador tecleando:
make -C /ruta/a/las/U
fuentes/del/kernelU
SUBDIRS=$PWD modules

despus (trabajando como root) se teclea


insmod rt2570.ko

para cargar el modulo. Por ultimo se


habilita el dispositivo WLAN tecleando:
ifconfig rausb0 up

Se puede asignar una direccin IP


esttica o usar un cliente DHCP, si se

Los desarrolladores y hackers del ncleo


quizs quieran comprobar el adaptador
WL-U356 de Planet y el SMC2862W-G de
SMC Networks. Hay un controlador de
dispositivo para Linux en la pgina web
de Planet para su adaptador y el controlador de dispositivo se puede compilar
sobre ncleos de las series 2.4 y 2.6.
Despus de haber compilado el controlador, mediante make, otra vez como
root, hay que cargar manualmente
zd1211 y habilitar la interfaz
ifconfig eth1 up

Despues de esto, iwconfig debe listar el


dispositivo. En los laboratorio de Linux
Magazine solo se lleg a obtener esto;
cualquier intento de conseguir que el
stick hablar con el punto de acceso u
otras mquinas fue condenado al error.
El problema es que iwconfig no permiti
que se configurar cualquier otro
parmetro, incluyendo el ESSID. Linux
Magazine ha contactado con el
desarrollador del controlador de dispositivo, aunque en el momento de escribir
esto, no ha habido resultados.
El controlador de dispositivo de SMC
es otra tarea pendiente que puede

Cuadro 2a: ejemplos de iwconfig sin cifrado


en modo ad-hoc
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

suse92:/home/marcel # iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0 IEEE 802.11-DS ESSID:"wireless" Nickname:"suse92"
Mode:Ad-Hoc Frequency:2.442 GHz Cell: 02:0F:DA:B5:C1:3E
Bit Rate:2 Mb/s Tx-Power:2346 dBm
Retry min limit:8 RTS thr:off Fragment thr:off
Encryption key:off
Link Quality=0/92 Signal level=-100 dBm Noise level=-100 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
sit0 no wireless extensions.

PORTADA

retomar algn valiente. El controlador de


dispositivo para Prism Frisbee basado en
el dispositivo WLAN est bajo desarrollo
y disponible junto con el firmware en
[5]. Despus de desempaquetar las
fuentes hay que seguir los mismos pasos
que para el adaptador DWL-G122 que
son, como root
make -C /ruta/a/las/U
fuentes/del/kernel U
SUBDIRS=$PWD modules

Despus se carga el modulo tecleando


insmod prism54u.ko

Ocurre lo mismo que con el stick de


Planet. El adaptador ser detectado
cuando se carga el modulo, pero, si
ocurre lo mismo que paso en nuestro
laboratorio, no se puede hablar con el.

Cerrando brechas
Puede tener sentido configurar un conexin WLAN sin cifrado para hacer
pruebas, pero en un entorno de produccin es obligatorio una clave WEP para
configurar una conexin cifrada. Para el
adaptador Prism 2 USB se necesita editar
el archivo /etc/wlan/wlancfg-ESSID. Hay
que usar la variable AuthType para
especificar si linux-wlang-ng usar una
clave compartida. Sin embargo, al ser
este modo ms propenso a los ataques,
quizs se prefiera optar por el modo
Open. La versin 0.2.1-pre22 de las
herramientas causaron algunos desarreglos en nuestras pruebas. A pesar de la
modificacin de la variable, iwconfig
insista en mostrar como modo Security
mode:restricted. Sin embargo las pruebas
con claves compartidas y en modo
abierto demostraron que el stick USB
sencillamente ignoraba la variable.
Ahora se cambia la seccin
#==wep== como se muestra en el
Cuadro 3. Las dos primeras variables
permiten especificar si el cliente usara
cifrado basado en hardware (false) o
basado en el controlador de dispositivo
linux-wlan-ng. Supuestamente el cifrado
por software es ms rpido, as que se
deja esta variable en true. La entrada
dot11PrivacyInvoked=true habilita el
cifrado.
En la siguiente lnea se especifica la
clave de cifrado. El programa almace-

www.linux-magazine.es

Nmero 04

15

PORTADA

Adaptadores USB WLAN

Cuadro 2b: ejemplos de iwconfig con cifrado en modo


managed
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16

client:/home/otto # iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0 IEEE 802.11-b ESSID:"wireless" Nickname:"wireless"
Mode:Managed Frequency:2.462 GHz Access Point:
:09:5B:2D:B8:98
Bit Rate:11 Mb/s Tx-Power:2346 dBm
Retry min limit:8 RTS thr:off Fragment thr:off
Encryption key:3BFA-1658-F26F-65BB-1015-0222-49 Security mode:open
Link Quality=92/92 Signal level=-40 dBm Noise level=-95 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
sit0 no wireless extensions.

nar hasta 4 descripciones de claves para


asociarlas a otras tantas redes inalmbricas. Para evitar que el host acepte datos
sin cifrar, establezca la variable
dot11ExcludeUnencrypted
a
true,
aunque esto solo funcionar en el modo
de clave compartida.
La segunda seccin indica el mecanismo que usar linux-wlan-ng para cifrar
la clave. Con make install se instalar
predeterminadamente la herramienta
nwepgen. En el subdirectorio add-ons,

debajo del directorio del cdigo fuente


de linux-wlan-ng, tambin estn las
herramientas lwepgen y keygen que
pueden compilarse y luego copiar a
/sbin/ o a /usr/local/sbin. Ambas herramientas pueden generar claves WEP, sin
embargo, no son compatibles con todos
los dispositivos.
Si se desea utilizar una de estas herramientas, ser necesario introducir una
contrasea debajo de PRIV_GENSTR; la
contrasea se usa como semilla para

Cuadro 3: Configuracin de cifrado WEP


01 #=======WEP===========================================
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20

16

# [Dis/En]able WEP. Settings only matter if PrivacyInvoked is true


lnxreq_hostWEPEncrypt=true # true|false
lnxreq_hostWEPDecrypt=true # true|false
dot11PrivacyInvoked=true # true|false
dot11WEPDefaultKeyID=0 # 0|1|2|3
dot11ExcludeUnencrypted=true # true|false, in AP this means WEP is
required.
# If PRIV_GENSTR is not empty, use PRIV_GENTSTR to generate
# keys (just a convenience)
# add-ons/ in the tarball contains other key generators.
PRIV_GENERATOR=/sbin/nwepgen # nwepgen, Nessus compatible
PRIV_KEY128=true # keylength to generate
PRIV_GENSTR=""
# or set them explicitly. Set genstr or keys, not both.
dot11WEPDefaultKey0=3B:FA:16:58:F2:6F:65:BB:10:15:02:22:49
dot11WEPDefaultKey1= # xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
dot11WEPDefaultKey2= # e.g. 01:20:03:40:05 or
dot11WEPDefaultKey3= # 01:02:03:04:05:06:07:08:09:0a:0b:0c:0d

Nmero 04

www.linux-magazine.es

generar la clave. De todos modos, lo usual


es crear una contrasea en el punto de
acceso y simplemente introducir la clave
debajo de dot11WEPDefaultKey0. Hay que
notar que se necesita entrar la clave como
se muestra en el ejemplo, no en grupos de
cuatro dgitos separados con signos
menos o dos puntos.
La entrada PRIV_KEY128 permite optar
entre 128 bits , ms seguro, o la antigua
variante de 64 bits. Como algunos dispositivos antiguos no dan soporte a las
claves de 128 bits, la opcin de 64 bits es
la predeterminada, sin embargo, todos los
adaptadores WLAN de nuestra pruebas
funcionaron con cifrado de 128 bits.
Una vez ms, Suse Linux descarga al
usuario de algunas de estas tareas de
configuracin. Simplemente se necesita
introducir el tipo de clave (Passphrase,
ASCII, o Hexadecimal) y teclear la clave
cifrada en la caja de texto debajo de los
botones radiales. Las herramientas mencionadas anteriormente sern de ayuda
si se desea usar una clave hexadecimal;
se debe tener en cuenta que en Suse
Linux, estas herramientas son parte del
paquete wireless-tools

Logout
Aunque los fabricantes ofertan un
amplio rango de sticks WLAN de 54
Mbits, los usuarios de Linux necesitarn
aguardar un tiempo y seguir trabajando
con dispositivos de 11 Mbits basados en
el chipset Prism2. Esta tipo de
rendimiento es adecuado para navegar
por Internet. No se debe perder la
esperanza; el D-Link DWLG-122 es un
adaptador USB de 54 Mbits que funciona
en Linux y el controlador de dispositivo

est bastante avanzado.

INFO
[1] Adaptadores
WLAN:
http://www.
linux-wlan.org/docs/wlan_adapters.html.
gz
[2] Proyecto Linux-wlan-ng: http://www.
linux-wlan.org/
[3] Wireless-tools: http://www.hpl.hp.com/
personal/Jean_Tourrilhes/Linux/Tools.
html
[4] Controlador de dispositivo de Planet:
http://www.planet.com.tw/download.
php
[5] Controlador de dispositivo Prism54 USB:
http://jbnote.free.fr/prism54usb/

Red Privada Virtual

PORTADA

Redes WLAN seguras con un tnel OpenVPN encriptado

Secretitos en Reunin
Las redes inalmbricas son prcticas
pero al mismo tiempo peligrosas. La
encriptacin WEP es improbable que
pueda detener a un atacante. La solucin viene de la mano de medidas de
seguridad adicionales, tales como un
tnel OpenVPN encriptado.
POR ACHIM LEITNER

a tecnologa WLAN es insegura. La


mayora de la gente no est al tanto
de momento. La tecnologa de
encriptacin integrada es fcil de romper
o incluso deshabilitar en el peor de los
casos posibles. Mientras que un cracker
malintencionado tendra que acceder
fsicamente a su apartamento para robar
datos de una red cableada, ahora con
una red inalmbrica cualquier extrao
podra ir por la calle armado con un
porttil y un adaptador WLAN para
acceder fcilmente a su red inalmbrica
(de hecho, en este mismo nmero vemos
como se hace utilizando un simple Zaurus).
Antenas
especiales
y
amplificadores de seal aumentan de
forma considerable el rango de accin de
la red en varios cientos de metros.
A pesar del riesgo, las redes inalmbricas estn ya aqu y se van a quedar. La
posibilidad de navegar por Internet con
un porttil desde la terraza o desde el
jardn, o copiar los ficheros del PC de
sobremesa al porttil, mejoran la experiencia del usuario. Y esto es algo bueno,
suponiendo que se tomen algunas medidas bsicas de seguridad para eliminar el
riesgo.

detenidamente como el ordenador se


conecta a la red y la clase de trfico de
red que va soportar el adaptador inalmbrico.
La proteccin integrada en la WLAN
podra ser suficiente para algunos usuarios y otros incluso deshabilitarn
deliberadamente cualquier clase de
seguridad. Pero si se necesita ms, las
soluciones VPN como OpenVPN [1] son

una buena eleccin: simples de usar,


pero seguras y modernas. OpenVPN
encripta y autentifica los intercambios
entre dos mquinas, ya sean Linux o
Windows.
Fuera de la red particular, Internet
est llena de los mismos peligros que
las WLAN. Los atacantes pueden
acceder o manipular los datos o incluso
introducir contenidos dainos. Hay que

Cuadro 1: Un ordenador Aislado


El escenario ms simple de todos es aquel
formado por un slo ordenador que usa un
punto de acceso para conectarse a Internet
(Vase la Figura 1). Adems de los riesgos que
afectan a las redes cableadas, tenemos que
considerar el secuestro de la conexin, la
denegacin de servicios, el acceso no autorizado desde porttiles desde la calle o de
nuestros vecinos. Aquellos que estn paranoicos con ser atacados por crackers, vern
que las redes inalmbricas es un sector
potencialmente fcil de atacar. Pero un
ataque aleatorio puede venir tanto desde la

Web como desde unos metros a la redonda


entre el porttil y el punto de acceso inalmbrico.
Tambin es conveniete estar bastante paranoico por cualquier tipo de dato. La nica
forma de cerciorarse de que los datos no han
sido manipulados es usar criptografa e
impedir los accesos no autorizados. En otras
palabras, usar SSL/TSL para obtener el contenido de la Web y habilitar la proteccin SSL
en el cliente de correo. SSL encripta y autentifica los datos en la transmisin.

Pntelo, Pnselo
Antes de decidir que clase de proteccin
es mejor para un entorno, hay que mirar

Figura 1: Conexin a Internet con un router WLAN.

www.linux-magazine.es

Para aadir una capa


ms de proteccin hay
que usar PGP o S/MIME.
Ambos encriptan los
mensajes de correo, en
vez de proteger el trfico. Y usar SSH para las
conexiones
remotas
seguras.

Nmero 04

17

PORTADA

Red Privada Virtual

distinguir entre dos casos: PCs aislados


o porttiles que usen la red inalmbrica
y un router WLAN para el acceso
(Vase el Cuadro 1) y redes particulares
protegidas donde una WLAN se ha
instalado para ampliar su uso, o incluso
reemplazar parte de la red cableada
(Vase el Cuadro 2).

Gorrones y Alborotadores
Las redes WLAN presentan un nuevo
tipo de riesgo: toda clase de desconocidos pueden aprovecharse del punto de
acceso de la WLAN para obtener acceso
gratuito a Internet. La extensin del dao
que esto puede causar depende de la
clase de tarifa de Internet que se tenga
contratada. Si se tiene tarifa plana,
puede ser que no le importe que su
vecino se le cuele por la WLAN y compartan la Web. Pero si se tiene una tarifa
basada en el trfico de datos, el compartir el acceso puede afectar de forma
negativa su cartera. La forma de evitar
que esto suceda es habilitando el filtrado
basado en MAC del router WLAN y, adicionalmente, el uso de la encriptacin
WEP.
Ninguna de estas medidas proporciona
una proteccin perfecta, pero al menos
levanta una barrera extra contra los
crackers y se asegura de que nadie pueda
acceder de forma accidental a la WLAN
o negar que se est compartiendo el
acceso de forma deliberada. Hay que cerciorarse de que la encriptacin WEP y el
filtrado MAC estn activados en todo
momento; el no tenerlos es una

Figura 2: La Red Privada Virtual (VPN) funciona a travs de un tnel, en los extremos es donde estn las
direcciones IPs reales del porttil y del PC.

invitacin para los crackers, gorrones y


espas.
Ms proteccin implica mayor trabajo,
pero al menos WEP ya tiene sucesor designado. En el pasado mes de junio del
2004, IEEE present un estndar ms
seguro llamado 802.11i, tambin conocido como WPA-2. Desafortunadamente,
esta tecnologa est limitada a los nuevos
adaptadores y es difcil hacer las cosas
bien. El nuevo estndar especifica un
nmero de tcnicas, pero no todas ellas
son seguras. Se recomendan AES-CCMP
para la encriptacin y 802.1x para autentificacin y gestin de claves.

Proteccin VPN
Linux soporta un sistema de seguridad
para WLAN con operaciones anti-intrusos sin la necesidad de una tarjeta
nueva. Si su tarjeta no le proporciona la
clase de proteccin que necesita, la solucin est en aadir software de

Cuadro 2: Redes Particulares


Una red para una pequea empresa o para
una casa con un grupo de ordenadores
conectados es algo ms complicado de proteger que un simple PC aislado, comentado
en el Cuadro 1. Las redes de esta clase usan
un cortafuego para proteger la conexin de
Internet y los usuarios se sienten seguros
detrs de l. Los cortafuegos a menudo impiden cualquier clase de conexin desde
Internet. Pero este tipo de ambiente puede
provocar que los usuarios se descuiden.
Los daos potenciales incluyen los servicios
de NFS o Samba que permiten acceso compartido annimo de los directorios privados,
los servicios de impresin que envan datos
sin encriptar y las conexiones basadas en Telnet y Rlogin. Se supone que cada ordenador
confa en la red y en los equipos conectados

18

Nmero 04

en ella. La confianza es peligrosa en las LAN


tradicionales, as que mucho ms en las
redes WLAN. El atacante est detrs del
cortafuegos y puede lanzar ataques desde
dentro. En una red cableada tradicional, un
espa o saboteador tendra que tener acceso
fsico a las instalaciones para poder lanzar el
ataque. Con las WLAN, el atacante tan slo
tiene que estar en las proximidades. Ya no
hacen falta ni los cables ni puntos de acceso.
La nica manera de protegerse en las redes
inalmbricas contra los atacantes es usando
la criptografa. El primer intento por
estandarizar la criptografa para las redes
LAN inalmbricas ha fallado miserablemente: WEP es fcil de romper y no ha sido
un buen trabajo. Sin embargo, VPN permite
aadir una capa ms de proteccin.

www.linux-magazine.es

seguridad. El protocolo VPN (Virtual Private Network) encripta y autentifica


datos en la capa IP. Un terminal VPN
acepta sus datos, los encripta, los firma y
los transmite por el enlace de radio. El
receptor desempaqueta los paquetes
entrantes.
Una VPN usar los recursos de una
WLAN tradicional pero parecer como
una red nueva (una red virtual) desde el
punto de vista del cliente. La Figura 2
explica el principio: El porttil y el PC de
sobremesa tienen una conexin WLAN.
Ambos son accesibles a travs de sus
direcciones IP reales sobre la red inalmbrica.
La VPN le da al porttil y al PC de
sobremesa direcciones IP adicionales.
Los datos enviados a las direcciones virtuales se encapsulan por la VPN y se
envian a la IP real de destino. El destino
desempaqueta los datos y los trata como
si hubiesen llegado por la direccin virtual, as se crea un tnel entre el porttil
y el PC de sobremesa.
Las reglas del cortafuegos se aseguran
de que ambas mquinas slo aceptan
datos provenientes del tnel. Esto significa que los paquetes insertados
directamente dentro de la WLAN por
algn cracker malintencionado sern
inofensivos.

OpenVPN
El principio en el que se basa VPN es
usado por diversos protocolos, productos y proyectos. OpenVPN [1] es una
mtodo probado y verificado, siendo
estable y simple, funciona sin manipular ni el kernel ni la pila IP. Como este
programa se basa en el popular protocolo
criptogrfico
TLS
y
la
implementacin es clara, OpenVPN se

Red Privada Virtual

ha ganado la reputacin de ser


extremadamente seguro.
A ambos lados del tnel, OpenVPN
recoge los paquetes destinados al otro
lado, y usando una clave local encripta
los paquetes antes de enviarlos. En el
punto de recepcin tan solo se aceptarn datos que hayan sido encriptados
usando la clave vlida. Cualquier otro
paquete se ignorar. Con esta solucin
los datos se transportan en contenedores seguros a travs de ambientes
hostiles.
El siguiente ejemplo supone que
wlan0 es la conexin de red inalmbrica.
El PC de sobremesa tiene adems una
NIC cableada, eth0. Las otras mquinas
de la red y de Internet son accesibles va
conexin Ethernet (Vase la Figura 2).

Empezando
Si an no lo ha hecho, instale el paquete
OpenVPN antes de continuar (Vase el
Cuadro 3). OpenVPN no modifica el kernel. En vez de ello, para ser capaz de
reenviar los paquetes, usa el driver
TUN/TAP [4]. La mayora de las distribuciones instalan el mdulo del kernel por
defecto, as que lo nico que hay que
hacer es cargar el mdulo. Como root,
teclese lo siguiente para hacerlo:
modprobe tun

Linux normalmente no usa ficheros de


dispositivo para los interfaces de red;
es decir, no hay /dev/eth0. Esto podra
parecer inconsistente, pero es innecesario ya que la interfaz socket maneja
la comunicacin. El interfaz TUN se
aprovecha de esto y rompe las reglas
creando un fichero de dispositivo, que
permite a un servicio de usuario tomar

los paquetes IP, reempaquetarlos y


reenviarlos.
El servicio escribe el paquete en
/dev/tun0 o en /dev/tun (Vase el
Cuadro 3), y llegan al kernel por el interfaz tun0. Cada paquete que el kernel
enva a tun0 llega al servicio por
/dev/tun0 o en /dev/tun (Vase la Figura
2). El interfaz funciona como cualquier
otro interfaz de red; se le puede asignar
una direccin IP, usarse para encaminamiento y aplicrsele las reglas del
cortafuegos. La nica diferencia est en
que no usa la tarjeta Ethernet para poner
los datos en el cable, sino que usa el dispositivo para enviarle los datos a un
proceso.

Claves
OpenVPN necesita las claves para proporcionar la seguridad. En el caso ms
simple, ambos usuarios confiaran en
una clave secreta compartida. El siguiente comando crea una clave y la
almacena en un fichero llamado
secret.key:
openvpn --genkeyU
--secret secret.key

Slo las dos mquinas deberan conocer


las claves y slo el root debera tener
acceso de lectura a ellas. Si alguien
conoce la clave, podra irrumpir fcilmente en el tnel. Es muy importante
asegurarse de que las claves no sean
pirateadas por el cable cuando se copien
entre las dos mquinas. Alguien podra
estar escuchando en la lnea. Lo mejor
sera usar un disquete; sin olvidarse de
formatear el disquete una vez que se
haya terminado la copia! Si se tiene
OpenSSH, PGP, GnuPG o una he-

PORTADA

rramienta similar, se podra usar alguno


de estos programas para transferir el
fichero de forma segura.

Cavando el Tnel
Lo siguiente que hay que hacer es crear
el tnel. Para ello, OpenVPN necesita la
direccin IP (esttica) de la mquina
destino, el nombre del dispositivo del
tnel (por defecto tun0), las dos direcciones virtuales de VPN y el fichero de la
clave. En el porttil, el comando a introducir sera como:
openvpn --dev tun0 --remoteU
[Real_DesktopIP] --ifconfigU
[Virtual_LaptopIP]U
[Virtual_DesktopIP]U
--secret secret.key

Hay que ser root para ejecutar este


comando y todos los siguientes. En el PC
de sobremesa, el comando con la IP
modificada sera:
openvpn --dev tun0 --remoteU
[Real_LaptopIP] --ifconfigU
[Virtual_DesktopIP]U
[Virtual_LaptopIP]U
--secret secret.key

Las direcciones virtuales del tnel son


ms o menos arbitrarias; pero tienen que
ser direcciones privadas. Las direcciones virtuales deberan ser de un
bloque diferente de las reales para facilitar el enrutamiento y hacerlas fcilmente
distinguibles de las direcciones reales de
la red.

Asignacin de Direcciones
Supongamos que la tarjeta WLAN en el
porttil tiene la direccin IP real

Glosario
S/MIME: Secure/Multipurpose Internet Mail
Extensions es otra forma de encriptar y firmar digitalmente los mensajes de correo,
una alternativa a PGP.

es un mtodo probado en el que se puede


confiar para las transmisiones encriptadas.
Transport Layer Security es un desarrollo
sobre SSL.

PGP: Pretty Good Privacy se usa para


encriptar y firmar los mensajes de correo.
OpenPGP es una implementacin estndar
y GnuPG es una alternativa ms actual.

WEP: Wired Equivalent Privacy fue el primer


intento de los desarrolladores de WLAN de
estandarizar un protocolo cripto-seguro para
darle al trfico inalmbrico la misma clase de
proteccin que el trfico cableado. Pronto se
comprob que el protocolo tena fallos y era
adems inseguro.

VPN: Virtual Private Network. Usa una red


existente para emular una red diferente dentro de un entorno de red. El software VPN
encripta el trfico de datos antes de enviarlos.

Private address: Las direcciones IPs pblicas son nicas. Esta es la nica forma de
asegurarse de que los paquetes puedan
encontrar el camino al destino. Las direcciones IP privadas slo son vlidas en una
red local y no son enrutadas dentro de la
Internet pblica. Esto permite que varias
redes puedan usar las mismas direcciones
privadas.

SSL/TLS: Secure Sockets Layer es un protocolo


criptogrfico desarrollado por Netscape. SSL

SSH: El Secure Shell permite a los usuarios de


Linux conectarse de forma segura desde un
ordenador remoto. Las sesiones completas,
incluido el intercambio de claves, se encripta
con SSH.

www.linux-magazine.es

Nmero 04

19

PORTADA

Red Privada Virtual

172.16.0.1 y el PC de sobremesa
172.16.0.2. La VPN necesita direcciones
de un espacio privado de direcciones,
tales como 10.0.0.1 para la direccin virtual del porttil y 10.0.0.2 para el PC de
sobremesa. En este caso, el comando en
el porttil sera:
openvpn --dev tun0 --remoteU
172.16.0.2 --ifconfig 10.0.0.1U
10.0.0.2 --secret secret.key

y en el PC de sobremesa:
openvpn --dev tun0 --remoteU
172.16.0.1 --ifconfig 10.0.0.2U
10.0.0.1 --secret secret.key

Se puede usar el comando ping para


comprobar que el tnel est funcionando. En el porttil, ping 10.0.0.2
debera funcionar e indicar que la direccin virtual del PC de sobremesa es
alcanzable.
Si todo funciona tal y como se ha
planeado, se querr ejecutar el servidor
de OpenVPN en segundo plano; el servidor enviar mensajes de salida a syslog.
Para conseguirlo se usa la opcin --daemon. Ntese que se necesita indicar la
ruta absoluta al fichero con la clave secreta.

El Camino Seguro
El tnel ya est listo y los paquetes llegan al otro lado. Pero tanto el porttil
como el PC de sobremesa necesitan
conocer qu paquetes tienen que enviar
por el tnel. En otras palabras, necesitan
saber la direccin IP virtual del otro lado
del tnel. El comando de OpenVPN
establece la ruta para reflejar esta direccin. Todas las otras direcciones sern
enrutadas como se haca anteriormente,
sin el tnel.
La ruta desde el PC de sobremesa al
porttil funcionar bien, si se usa la
nueva direccin IP virtual para comunicarse con el porttil. De hecho, las
antiguas direcciones reales asignadas a
las tarjetas WLAN en el porttil y en el
PC de sobremesa slo sirven para un
propsito: son los extremos del tnel. No
se usarn con las conexiones normales
salvo para esta tarea.
El camino de regreso desde el porttil
hasta el PC de sobremesa (y desde all
hasta los dems PC de la red cableada e

20

Nmero 04

Internet) necesita editarse de forma


manual. La ruta por defecto tiene que ser
reconfigurada. El siguiente comando le
indica la porttil que enve todos los
paquetes por el tnel:
route del default
route add default gwU
10.0.0.2

Los paquetes que se direccionan a la


direccin IP real de la WLAN del PC de
sobremesa (172.16.0.2) no se ven afectados por esta configuracin. Y est bien
porque el tnel usa esta direccin.
Ahora, el PC de sobremesa necesita
saber que debe reenviar los paquetes
que ha desempaquetado si fuera necesario. El siguiente comando se encarga
de ello:
echo "1" > /proc/sys/U
net/ipv4/ip_forward

Combatiendo el Fuego
Casi hemos terminado a ambos lados
del tnel. El porttil y el PC de
sobremesa ya usan felizmente el tnel,
los datos estn protegidos y nadie
puede hacerse con ellos. Pero an es
posible infiltrar paquetes dainos y
permitir a un atacante compartir la
conexin a Internet.

Incluso si se est pagando una tarifa


plana para acceder a Internet, no se
querr compartir el ancho de banda.
Todos los servicios de red que el PC de
sobremesa y el porttil comparten (Web,
SSH, FTP,) pueden ser atacados por la
WLAN. Y si se tiene una red, tambin
existe otra fuente de peligro: cualquier
paquete infiltrado a travs de la WLAN
se salta el cortafuegos, que tpicamente
est instalado entre Internet y la red
local, donde la WLAN est conectada.
La solucin est en proporcionar
alguna clase de proteccin de cortafuegos para la WLAN. La distribucin de
OpenVPN [1] tiene un script de ejemplo
de cortafuegos. Pero se necesitan reglas
adicionales para el tnel de la WLAN. La
Figura 3 muestra cmo se aplican estas
reglas.

Fuera!
OpenVPN usa UDP para enviar los paquetes encriptados al puerto 5000 al otro lado
del tnel. Como usa la interfaz de WLAN
wlan0 para ello, hay que admitir los
paquetes UDP que van al puerto 5000 del
interfaz. La siguiente sintaxis maneja esto
para los paquetes entrantes:
iptables -A INPUT -i wlan0U
-p udp --dport 5000 -j ACCEPT
iptables -A INPUT -i wlan0U
-j DROP

Cuadro 3: Instalacin
OpenVPN es muy fcil de instalar. El paquete
de cdigo fuente para la versin estable 1.6.0
est disponible en la pgina web del
proyecto [1]. Los siguientes comandos
descomprimen el paquete, compilan el software y lo instala con los privilegios de root:
tar -xvzf openvpn-1.6.0.tar.gz
cd openvpn-1.6.0
./configure --disable-lzo
make
su
make install
Necesita ejecutar configure con el parmetro
--disable-lzo para deshabilitar la compresin.
Como los datos no pueden comprimirse
despus de encriptarse, esta librera est
recomendada sobre todo para las conexiones lentas. La librera est disponible en
[2]. Lo que se necesita aqu es la librera
OpenSSL y los ficheros de desarrollo, que
estn localizados en dos paquetes separados
en Suse: openssl y openssl-devel. Otras dis-

www.linux-magazine.es

tribuciones tambin contienen el paquete


SSL o puede mirarse la pgina web del
proyecto OpenSSL [3] para obtener ms
detalles y productos relacionados.
El kernel actual tiene el dispositivo tnel por
defecto; el paquete disponible en [4] es para
las versiones ms antiguas del kernel. Si
compilas tu propio kernel, el mdulo TUN
est localizado en la seccin Network device
supportbajo Universal TUN/TAP device driver support de make xconfig. Desde luego
que se puede compilar e instalar el mdulo
sin sustituir el kernel al completo. Despus
de configurar el kernel, teclese:
make modules
make modules_install
El siguiente paso es crear el fichero de dispositivo /dev/net/tun. Si /dev/net/ no existe,
teclee primero mkdir /dev/net/ y luego cree
el dispositivo:
mknod /dev/net/tun c 10 200

Red Privada Virtual

PORTADA

comando permite la recepcin y envo


de paquetes:
iptables -A INPUT -i tun0 -jU
ACCEPT
iptables -A OUTPUT -o tun0 -jU
ACCEPT

Esto es todo lo que necesitamos para el


porttil; que no est conectado a otras
redes ni necesita reenviar paquetes.
Figura 3:Las reglas de los cortafuegos impiden a los intrusos entrar en la WLAN. Slo al tnel OpenVPN
se le permite enviar paquetes a travs de la WLAN.

La ltima lnea se asegura de que la


mquina no aceptare ningn otro
paquete entrante. La primera regla de
entrada podra incluso ser ms estricta y
especificar -s RealIP para restringir la
direccin IP fuente, donde los paquetes
se permiten que sean originados. Esta
tendra que ser la direccin IP real del
otro extremo del tnel, es decir, -s
172.16.0.2 en el porttil. Tambin es
necesario restricciones para el envo y
reenvo de paquetes:
iptables -A OUTPUT -o wlan0U
-p udp --dport 5000 -j ACCEPT

iptables -A OUTPUT -o wlan0U


-j DROP
iptables -A FORWARD -i wlan0U
-j DROP

Los extremos del tnel slo reenvan


los paquetes que son originados por un
compaero conocido y slo si este
compaero conocido usa la clave (secreta) correcta. Esto significa que
podemos confiar, aceptar y procesar
los paquetes que vienen desde el dispositivo tun. Naturalmente, an falta
permitir a las mquinas el envo de
paquetes por el tnel. El siguiente

Cuadro 4: Variedad de Funciones en OpenVPN


Adems del sencillo ejemplo mostrado de
una conexin VPN, OpenVPN tambin permite
conectar
sitios
completos.
Simplemente cambiando la configuracin de
enrutamiento se consigue esto. En el modo
puente, OpenVPN puede incluso conectar
dos secciones de LAN de forma transparente,
permitindoles usar el mismo espacio de
direcciones.
La solucin de la clave secreta descrita en
este artculo no funciona bien si la red tiene
mltiples nodos. Pero esto es una de las
mejores caractersticas de TLS. Est diseada
para usarse con certificados X.509. La versin
2.0 (actualmente en fase beta) hace que el
trabajo sea mucho ms sencillo para los
administradores: no hace falta crear una configuracin de servidor para cada cliente VPN;
tan slo se necesita un certificado X.509
vlido. Adems, el nuevo servidor debera
realizar la mayor parte del trabajo duro.
En modo UDP, OpenVPN no distingue entre
clientes y servidores pero ejecuta aplicaciones peer-to-peer. Estableciendo la opcin
--float se permite que el tnel pueda transportar flujos sin interrupciones incluso si las
direcciones IP reales de un extremo cambian,

por ejemplo, debido a un reseteo forzoso


diario. Las conexiones TCP se mantendran, lo
que es til si se necesita transferir grandes
ficheros mediante FTP.
Si lo que se necesita es enviar grandes
ficheros a travs del tnel, podra especificarse la opcin --shaper [ancho de banda]. La
opcin restringe la velocidad de entrada al
tnel a un nmero especfico de bytes por
segundo. Para restringir el ancho de banda
en ambas direcciones se necesita especificar
la misma opcin a ambos lados. OpenVPN
puede abrir mltiples tneles entre dos compaeros al mismo tiempo y asignar
diferentes anchos de banda a cada tnel:
esto puede ser til para tareas administrativas. La configuracin del router especifica
qu datos se enva por cada tnel.
La versin 1.5 de OpenVPN y posteriores tambin soportan TCP. Si est detrs de un
cortafuegos que slo acepta TCP no habr
otra alternativa posible. La desventaja de
esto, si hay problemas en la red, es que la
combinacin de VPN sobre TCP hara que las
cosas empeorasen. A pesar de todo, se
debera configurar OpenVPN para que usase
la solucin tradicional basada en UDP.

Reenvo
El PC de sobremesa necesita reglas de
reenvo y necesita usar enmascaramiento para permitir que el porttil
llegue al otro lado del mundo:
iptables -A FORWARD -i tun0 -jU
ACCEPT
iptables -t nat -A POSTROUTINGU
-o eth0 -j MASQUERADE

La regla de enmascaramiento le indica al


PC de sobremesa que inserte su propia
direccin IP pblica en vez de la direccin privada de la VPN. La direccin
privada no puede ser enrutada en Internet, pero con esta configuracin, el PC
de sobremesa enrutar cualquier
paquete que el porttil enve a travs del
tnel a su propio interfaz LAN y a Internet. Si el PC de sobremesa tiene una
conexin DSL o mdem simplemente
hay que sustituir ppp0 por eth0.

Limitaciones de Seguridad
Una red es tan segura como lo puedan ser
los ordenadores conectados a ella. Una
persona no autorizada podra acceder al
porttil OpenVPN, leer la clave y usarla
para romper la seguridad de la red virtual.
Las redes inalmbricas necesitan una
mejor proteccin ante los ladrones.
Si se atiene a las reglas bsicas
descritas en este artculo, encontrar que
OpenVPN es un producto de VPN seguro

y al mismo tiempo de uso sencillo.

RECURSOS
[1] OpenVPN: http://openvpn.sourceforge.net
[2] Proyecto OpenSSL: http://www.openssl.
org/
[3] Librera LZO: http://www.oberhumer.
com/opensource/lzo/
[4] Driver TUN/TAP: http://vtun.sourceforge.
net/tun/

www.linux-magazine.es

Nmero 04

21

PORTADA

Wireless Sniffing

WarWalking con una PDA con Linux

De paseo con mi Zaurus

Las PDAs actuales tienen ya la potencia de clculo de los PC de hace cinco aos y la versatilidad de los Sistemas Operativos actuales. Una PDA con Linux es como tener un pingino gigante en tu bolsillo.
POR ALBERTO PLANAS

i es que, reconozcmoslo, el sueo


de todo Geek es tener todo un sistema Linux con sus herramientas
preferidas (Emacs, VI, LATEX, nmap,
GCC, Apache, MySQL, ) integradas
directamente en el sistema nervioso central (o eso, o que alguna chica le
pregunte por el bulto del pingino en el
pantaln). Ahora bien, nos tendremos
que conformar con llevar en nuestra PDA
todo este arsenal, que siempre ser
mejor que llevar colgado del cuello un
DVD con la KNOPPIX.

22

Nmero 04

En la redaccin hemos logrado un par


de Zaurus bien apaadas. Corresponden
a los modelos SL-5500 y SL-C860. El
primero ha podido adquirirse en Europa
hasta hace un ao, el segundo slo se ha
vendido oficialmente en Japn. Si piensas comprar una Zaurus recomendamos
echar una vistazo a la SL-6000 y a la SLC3000, ltimos modelos de la rama
Europea y Japonesa respectivamente. En
particular la SL-C3000 dispone de un
disco duro de 4.4GB modelo Toshiba que
permite, sin paliativos, la instalacin de

www.linux-magazine.es

una Debian completa. Para el presente


artculo vamos a experimentar con el
modelo SL-5500. Es una PDA al gusto
Europeo: disposicin vertical de la pantalla y pequeo tamao. Puede
encontrarse una comparativa de las
caractersticas de ambos dispositivos en
la Tabla 1.
Por su versatilidad y potencia, este
tipo de PDAs son ideales para realizar
auditoras de redes Wireless. Vamos a
incorporar conectividad inalmbrica a la
Zaurus por medio de una tarjeta Com-

Wireless Sniffing

compilar programas para la PDA, es precisamente esta capacidad y la de estar


basada en Linux, lo que hace de la Zaurus una magnfica herramienta para
Hackers (en el sentido correcto de la palabra).

Plataforma de desarrollo
En Internet podemos encontrar varias
Toolchains para nuestra Zaurus, yo he
probado varias y aconsejo usar la
desarrollada por Francois Leiber que
puede descargarse en [1]. Solo presenta
dos problemas, su host es lentsimo y al
estar basado en la magnfica Toolchain
de OpenZaurus, las cabeceras del kernel
son algo diferentes a las que hay en la
distribucin de Sharp. Por esas razones
hemos preparado un paquete donde se
han corregido algunas de esas deficiencias, que puede descargarse desde [2].
Instalar el programa solo es descomprimir el paquete y ejecutar como root
un pequeo script:
mkdir zaurus
cd zaurus
tar -xjvf ../toolchain.tbz2
cd devel
./postinstall

Figura 1: Configuracin para tarjetas CF-WCF11


con chipset Prism2.

pactFlash WCF11. Si bien el modelo es


un poco antiguo y de no excesivamente
bajo consumo, con esta CF podremos
conectar a cualquier red 802.11b existente. Ahora podemos hacer uso de la
vasta cantidad de herramientas de auditora para redes wireless y no wireless
que hay para Linux. Muchas de las ms
importantes utilidades estn ya empaquetadas
para
ser
directamente
instaladas, pero para hacer ms interesante el artculo compilaremos nosotros
mismos nuestra seleccin de aplicaciones. No hay que asustarse de

El script postinstall solo crea enlaces


simblicos al directorio devel, sin
tocar nada del resto del sistema. Con un
simple ls -la /opt y ls -la /usr/local veremos los enlaces recin creados. Dentro
del directorio devel hemos colocado
otro script que debe ser ejecutado desde
la consola donde se van a realizar las
compilaciones. Este programa exporta
algunas variables de entorno, lo que
nos obliga a que lo ejecutemos de la

Tabla 2: Opciones ms importantes de Kismet


Tecla

Funcin

cursores

Seleccionamos una red de la lista

Zoom del rea de informacion de redes localizadas

Muestra los clientes de la red seleccionada

Concentramos el escaneo a la red seleccionada

Sale de la ventana activa

Muestra una ventana con informacin detallada de la red

Ordena las redes encontradas. Usad un orden diferente al auto-fit para poder usar las teclas del
cursor a la hora de seleccionar redes

Estadstica general

Estadstica de los paquetes encontrados

Muestra las cadenas ASCII imprimibles encontradas

Sale de la aplicacin

PORTADA

siguiente forma (notar el punto del


principio)
. ./dev-arm-qpe.sh

Antes de nada vamos a probar nuestra


reluciente plataforma compilando un
programa que ejecutaremos en nuestra
PDA. Echaremos mano del famoso Hola
Mundo en su versin Zaurus. Para eso
teclearemos el siguiente micro-programa.
#include <stdio.h>
int main() {
printf("Hola Zaurus!\n");
}

Compilaremos
con
el
comando
arm-linux-gcc hola.c -o hola y procederemos a la transferencia del cdigo
generado a la PDA. La conexin con la
PDA se realiza mediante TCP/IP sobre el
cable USB. El procedimiento habitual
consiste en conectar la Zaurus a nuestro
equipo usando el cable suministrado, y
luego desde el ordenador ejecutar este
script que se encargar de crear el interfaz de red usb0 y de asignarle una IP.
/sbin/modprobe usbnet
/sbin/ifconfig usb0U
192.168.129.1 netmaskU
255.255.255.255 up
/sbin/route add -hostU
192.168.129.201 usb0

Desde la Zaurus abriremos el terminal


y
ejecutaremos
su
-c
"/etc/rc.d/init.d/samba start" para lanzar el servidor Samba, que nos permitir
transferir archivos entre los dos equipos.
Montaremos la unidad Samba desde el
Linux de nuestro escritorio con el
comando
mount
-t
smbfs
//192.168.129.201/home ./samba. Ya
solo queda copiar el binario y ejecutarlo
con ./hola.

Compilacin del ltimo


Kismet
Llegados a este punto podemos compilar
cualquier aplicacin Linux mnimamente
portable a nuestra Zaurus. Deseamos
analizar redes WiFi y para eso nada
mejor que trastear con Kismet, un detector de redes wireless con opciones
bsicas de sniffer y deteccin de intru-

www.linux-magazine.es

Nmero 04

23

PORTADA

Wireless Sniffing

Kismet tiene varios frontends disponibles. Por defecto


incorpora uno en modo texto,
usando las famosas ncurses.
Tenemos disponible otro
interfaz en modo grfico
SL-5500
SL-C860
basado en QT/E especialFormato
Vertical
Concha
mente diseado para PDAs.
Pantalla
3.5 320x240
3.5 640x480
Podemos descargarlo desde
Procesador
SA1100 206MHz
PXA255 400MHz
http://sourceforge.net/
RAM
64 MB
64 MB
projects/kismet-qte/. La comFLASH
16 MB
128 MB
pilacin e instalacin de esta
Ranuras
1 SD / 1 CF
1 SD / 1 CF
aplicacin es un poco ms
ofuscada, hay que parchearla y modisos. La ROM que trae por defecto la PDA
ficar a mano el Makefile. As que para
de Sharp tiene drivers para dispositivos
ahorrar tiempo hemos incluido un
WiFi un poco obsoletos, eso hace que no
paquete que puede descargarse desde [2]
podamos echar mano de la librera pcap
con todas las aplicaciones mencionadas
para la captura de paquetes. No la neceen este artculo ya compiladas. Como
sitamos realmente, pero para hacer
Kismet va a ejecutarse en la Zaurus,
trabajos de auditora serios es necesario
deberemos
modificar
el
fichero
actualizar estos drivers o, preferiblekismet.conf segn el Listado 1. En lo
mente, usar otra ROM como por ejemplo
esencial indicaremos el tipo de tarjeta
la OpenZaurus.
wireless que tenemos y que use los
Descargaremos la ltima versin de
canales reservados para Europa.
Kismet (actualmente Kismet-2005-01-R1)
Perfecto! queda copiar el directorio
desde su pgina oficial en http://www.
~/zaurus/install a la PDA. Como
kismetwireless.net. En el proceso de
recomendacin copiara este directorio
compilacin indicaremos que la aplien una tarjeta SD, para luego crear un
cacin se encontrar en /home/zaurus/
enlace simblico desde el directorio
wireless. Esto nos permitir instalar
$HOME de la Zaurus.
Kismet en la PDA sin tocar nada del sistema, haciendo ms segura su ejecucin
y posterior desinstalacin.
ln -s /mnt/card/wirelessU

Tabla 1: Especificaciones

Figura 2: Algunas de las redes encontradas. Aqu


se muestran dos sin encriptacin WEP.

export PATH=/home/zaurus/U
wireless/bin:$PATH
export LD_LIBRARY_PATH=/home/U
zaurus/wireless/lib
export TERM=sun

/home/zaurus/wireless
./configure \
--build=i686-linux
--host=arm-linux \
--disable-pcap \
--enable-zaurus \
--disable-suid-root \
--prefix=/home/zaurusU
/wireless
make
make install prefix=~/zaurusU
/install

Nos damos una vuelta?


Ha llegado la hora de poner en marcha
nuestro flamante Kismet especialmente
compilado por nosotros. Respiremos hondo
y disfrutemos de este momento previo a la
culminacin de nuestro trabajo. Bien, una
vez oxigenados tomemos la PDA y desde la
lnea de comando ejecutemos este pequeo
script para actualizar algunas de las variables de entorno.

Listado 1: /home/zaurus/wireless/kismet.conf
01
02
03
04
05
06
07
08
09
10

24

...
suiduser=zaurus
...
# Si tenemos una Prism2 necesitamos usar el driver wlanng_legacy
source=wlanng_legacy,eth0,wcf11
...
# Usaremos los canales Europeos
defaultchannels=IEEE80211b:1,7,13,2,8,3,14,9,4,10,5,11,6,12
# defaultchannels=IEEE80211b:1,6,11,2,7,3,8,4,9,5,10
...

Nmero 04

www.linux-magazine.es

Para un primer escaneo ejecutaremos


el front-end grfico. Nos proporcionar un interfaz mucho ms
simple donde ver los datos esenciales
de las redes wireless localizadas por
Kismet. Ejecutaremos, por tanto, el
programa kismet_qt, donde una vez
configurado (ver Figura 1) empezaremos a detectar redes WiFi cercanas.
La informacin que nos muestra es la
bsica, a saber:

El SSID de la red

Velocidad de la transmisin

Codificacin WEP (o ausencia


de ella)

Direccin MAC del Punto de


Acceso

Relacin Seal / Ruido

Nmero y tipo de paquetes


encontrados

Paquetes con vectores IV


dbiles

Nmero de mquinas clientes


asociadas

Wireless Sniffing

En este primer paseo hemos detectado


17 redes, todas juntitas y con mucha
informacin que ofrecer. Como vemos en
la Figura 2 hemos tenido algo de suerte,
puesto que ocho de estas redes transmiten sin encriptacin WEP. Aunque
parezca mentira an muchos usuarios de
redes WiFi desconocen la existencia de
mecanismos de seguridad bsicos como
el control de acceso por MAC,
encriptacin WEP / WPA u ocultacin
(cloaked) de redes. Aunque reconozco
que s es alarmante que en escasos cinco
minutos (segn mis logs desde las
13:46:55 hasta las 13:51:02) de WarWalking dentro de un rea de alta tecnolgica
hayamos encontrado una tasa de un
47% de redes desprotegidas. Desde
luego sera interesante ampliar el rea de

anlisis para ver si esta proporcin es


representativa, pero para eso deberamos
pasar de un simple WarWalking a un
WarDriving (usar el coche para ir
recorriendo superficies ms extensas).
Un experimento divertido que
podemos realizar con el mnimo
esfuerzo es ver las cadenas de texto que
se transmiten dentro de esas redes sin
proteccin. Kismet puede hacer de sniffer seleccionando para nosotros el
conjunto de cadenas ASCII transmitidas
en las tramas TCP/IP que pueden ser ledas sin dificultad. En la Figura 3 vemos
algunas de estas cadenas. Posiblemente
correspondan a algn paquete UDP de
una conexin Samba. De hecho hay un
par de tramas que indican accesos a
impresoras en red mediante el protocolo

PORTADA

Figura 3: Texto en claro transmitido por algunas


de estas redes sin proteccin.

Listado 2: Kismet-Jan-21-2005-5.xml
01 ...
02
<wireless-network
number="11"
type="infrastructure"
wep="false" cloaked="false"
first-time="Fri Jan 21
13:51:02 2005" last-time="Fri
Jan 21 13:58:15 2005">
03
<SSID>XXXXXXX</SSID>
04
<BSSID>00:20:ED:1F:EF:XX</BSSI
D>
05
<channel>11</channel>
06
<maxrate>11.0</maxrate>
07
<maxseenrate>0</maxseenrate>
08
<carrier>IEEE
802.11b</carrier>
09
<packets>
10
<LLC>590</LLC>
11
<data>8</data>
12
<crypt>0</crypt>
13
<weak>0</weak>
14
<dupeiv>0</dupeiv>
15
<total>598</total>
16
</packets>
17
<datasize>1350</datasize>
18
<gps-info unit="english">
19
...
20
</gps-info>
21
<ip-address type="tcp">
22
<ip-range>10.1.1.150</ip-range
>
23
</ip-address>
24
<wireless-client

number="1" type="fromds"
wep="false" first-time="Fri
Jan 21 13:51:05 2005"
last-time="Fri Jan 21 13:57:33
2005">
25
<client-mac>00:20:ED:1F:EF:XX<
/client-mac>
26
<client-packets>
27
<client-data>8</client-data>
28
<client-crypt>0</client-crypt>
29
<client-weak>0</client-weak>
30
</client-packets>
31
<client-gps-info
unit="english">
32
...
33
</client-gps-info>
34
<client-datasize>1350</clientdatasize>
35
<client-maxrate>0.0</client-ma
xrate>
36
<client-maxseenrate>0</clientmaxseenrate>
37
<client-ip-address
type="tcp">10.1.1.150</clientip-address>
38
</wireless-client>
39
</wireless-network>
40 ...

Figura 4: Listado de las primeras redes encontradas en nuestro paseo.

IPP. Francamente interesante ese Archer


NAS 3.0.10.
Haciendo un esfuerzo por reprimir
nuestra alma de voyeur, continuaremos
con el anlisis de redes wireless con
este programa de auditora. Kismet va
generando logs donde almacena todo lo
encontrado desde el inicio de la sesin.
Genera cuatro tipo de archivos, en uno
de ellos almacena los paquetes capturados para poder ser analizados offline,
un fichero network donde lista las redes
encontradas usando un formato de
texto propietario. Existe un formato
CSV y uno XML donde se muestra toda
la informacin esencial de las redes,

www.linux-magazine.es

Nmero 04

25

Wireless Sniffing

talla de ayuda con las opciones del


programa. Un resumen de estas
opciones podemos encontrarlas en
el Tabla 2.
El nivel de detalle de esta aplicacin es mayor que el del
front-end basado en QT/E. Ahora
podremos analizar las transferencias de los clientes, y no solo la de
los puntos de accesos de las redes
existentes. Por desgracia el uso
del teclado dificulta el empleo gil
del programa. En la Figura 4
vemos el aspecto de Kismet en
modo texto, y en la Figura 5 una
ventana con informacin detallada de la red seleccionada.

Expandiendo horizontes
Un viaje interesante ste que nos
ha proporcionado Zaurus. Esta
mquina ha causado que un
grupo de buenos programadores,
fanticos de la tecnologa y de las
PDAs, hayan desarrollando una
versin alternativa de la ROM de
Sharp, mejorando cada uno de los
aspectos posibles. Empezando
porque usa el compilador GCC3.2.3 que genera binarios ms
Figura 5: Informacin adicional sobre la red wireless
optimizados para procesadores de
gigabyte.
la familia ARM (StrongArm y
PXA255) y mejora la velocidad
clientes y protocolos encontrados
del clculo matemtico en un factor que
durante el rastreo (ver Listado 2). Hay
ronda entre el 400% y el 500%, hasta
un programa escrito en Perl que transuna necesaria actualizacin de los driforma el fichero XML a HTML, un
vers del control tctil de pantalla,
formato ms apropiado para su visualiwireless, bateras, memoria Actuazacin (Kismet Log Viewer en [3]). Si
lizacin del kernel (ya mismo
dispusiramos de un adaptador GPS,
dispondremos de un kernel 2.6 para la
Kismet ira almacenando en los logs la
Zaurus) y restantes aplicaciones, como
longitud y la latitud de las redes enconla disponibilidad de GPE con XFree y
tradas, es una opcin muy til para
Matchbox. Por desgracia la versin
paseos prolongados y para la geneactual de esta ROM (OpenZaurus 3.5.2
racin de mapas sensibles donde
en el momento de escribir este artculo)
mostrar las diversas localizaciones de
es poco adecuada para el uso rutinario
nuestros hallazgos.
de la PDA, pero se aproxima el momento
Este front-end nos ha sido realmente
de tener una mejora realmente importil, pero no muestra toda la informacin
tante que alargar la vida til de estas
que proporciona esta nueva versin de
mquinas.
Kismet. Para extraer el resto de su potenOpenZaurus (ver [4]) se ha confeccia necesitaremos ejecutar su versin
cionado a partir de una configuracin
ncurses, un poco ms difcil de utilizar.
determinada del proyecto BitBake (ver
Para trastear con este nuevo interfaz, lan[5]). Este proyecto es una emulacin de
zaremos el cliente con el comando kismet.
las metadistribuciones al estilo Gentoo
Una opcin muy til que usaremos con
aplicadas al mbito de los dispositivos
frecuencia la conseguiremos por medio de
empotrables. Desde BitBake podemos
la tecla h, que nos mostrar una pangenerar distribuciones Linux para las

26

Nmero 04

www.linux-magazine.es

Zaurus, para las IPAQs, para algunos


TabletPCs basados en procesadores
ARM, PPC Cualquier desarrollador con
ganas de desarrollar para este tipo de
dispositivos debera dedicarle un tiempo
a su estudio, puesto que ahorra gran
cantidad de esfuerzo en la compilacin
cruzada (cross compiling) automtica.

Seguridad relativa
Como hemos visto, establecer una
comunicacin inalmbrica sin las mnimas consideraciones de seguridad es un
suicidio. Cualquiera con unos mnimos
conocimientos puede sentarse tranquilamente mientras analiza todo el trfico
que se produce por la red. En nuestro
experimento con la Zaurus hemos tenido
la decencia de observar poco tiempo
dicho trfico, pero con algo ms de
paciencia y malicia yo me pregunto
Cunto tiempo tardara en ver una
trama con cadenas como USER
isabel\nPASS 1B55w#4\n? La recopilacin de contraseas y usuarios ha
pasado a ser una actividad pasiva. Configurar el punto de acceso wireless para
que realice control de MACs y establezca
comunicaciones encriptadas mediante
protocolo WEP / WPA es lo mnimo que
podemos hacer, pero por desgracia como
veremos en el siguiente artculo, es un
mnimo que con el conocimiento actual
y nuestra mini-mquina quedar

reducido a la nada.

RECURSOS
[1] Toolchain de Francois Leiber: http://www.
nautilus6.org/operation/download/
cross_install-2.95.tar.bz2
[2] Paquetes de este artculo: http://www.
linux-magazine.es/ Magazine/Downloads/04
[2] Kismet Logviewer http://www.mindflip.
org/klv/
[3] Open Zaurus: http://www.openzaurus.org
[4] Proyecto Bitbake: http://www.
openembedded.org

EL AUTOR

PORTADA

Alberto Planas es desarrollador de aplicaciones bajo entornos libres desde hace


varios aos. Aficionado a la tecnologa
desde siempre, alterna sus horas de
sueo con las horas dedicadas al estudios de las Redes Bayesianas,
programacin con las QT, perfeccionamiento de C++, desarrollo en Java
y mil cosas ms.

SDL

DESARROLLO

Ms que SDL

La fabrica de
xitos
SDL suministra los componentes grficos para construir un juego. Desafortunadamente, en la programacin de juegos hay algo ms que un motor grfico.
Este mes Steven Goodwin analizar algunas de las cosas que SDL no hace y
demostrar como se pueden hacer.
POR STEVEN GOODWIN

DL es un API (Aplication Program


juego de plataformas Manic Miner, pero
Interface) multimedia. La mayora
los principios bsicos son los mismos. Se
de sus funcionalidades se pueden
supone que el jugador comienza el nivel
llevar a cabo dentro del subsistema de
en un lugar seguro (libre de colisiones) y
grficos, pero tambin tiene
se requiere que permanezca
bibliotecas
para
sonido,
en una posicin segura al final
palanca de juegos y hebras. Sin
de cada cuadro.
embargo no soporta la detecSi no se puede encontrar
cin de colisiones. Esto no es Figura 1:El jugador y
una nueva posicin segura,
una sorpresa ya que caera su cuadro de limites.
entonces hay que volver a la
fuera de su alcance. En el
posicin original (suponiendo
campo de las 3D, OpenGL tampoco suque esta posicin aun sea segura), o
ministra una infraestructura para la
matar al jugador. Esto es una decisin de
deteccin de colisiones. Y escribir un
diseo del juego, no es una decisin tcjuego sin deteccin de colisiones es
nica. Como los juegos son cada vez ms
como comer curry sin cerveza A la
complejos, con ms y ms objetos
postre es insatisfactorio!
mviles, este problema ha llegado a ser
ms difcil. Cuando los juegos con autenOjala que llueva caf
tica 3D llegaron a estar disponibles, esta
complejidad aument en varias rdenes
Las colisiones son como el clima: No se
de magnitud. Incluso hoy, los juegos
trata de una sola cosa. El cdigo de colicomerciales tienen que hacer trampas
sin para comprobar que el jugador no
se da bruces con una pared es diferente
con sus sistemas de colisin para hacerdel cdigo del jugador dndose de
los jugables en un PC , o una consola,
bruces con un enemigo. Y eso es diferazonablemente modernos porque las
rente de la colisin del jugador cogiendo
matemticas implicadas son muy comuna llave. Se cubrirn varios mtodos de
plejas.
deteccin de la colisin, cmo funcioCinco a uno
nan, porqu ese mtodo particular es
pertinente, y donde ayudar a implePara el sistema de colisin en movimiento
mentarlo SDL.
se comprobar un pixel cada vez, busMoverse desde la posicin A a la posicando colisiones y reseteando a la ultima
cin B no es tan simple como pudiera
posicin segura conocida si esto no es
pensarse. Y desde luego que no es tan
posible. ste es el mtodo que toman la
simple como cuando sali el primer
mayora de los juegos de este tipo.

Aunque se comprobar un pixel cada vez,


se movern varios pixels en el transcurso
de un solo cuadro. Esto permitir cambiar
la velocidad de caminando a arrastrndose y moverse por el nivel de una forma
mucho ms realista.
Verificar varias posiciones en un
cuadro puede parecer un derroche, pero
es ms fiable que verificar solamente
que el punto final es valido (Vase Consideraciones del proyectil) y ms flexible
que escribir cdigo especifico para escu-

Consideraciones del
proyectil
El problema en mover objetos varios pixeles
en un cuadro se llama consideraciones del
proyectil. Imagine una bala movindose
muy rpidamente hacia la izquierda. Ahora
imagine al jugador movindose muy rpidamente hacia la derecha. En el mundo real, la
bala golpeara al jugador. En el juego, si solamente se considera la validez de la posicin
final No se puede!
La bala podra terminar totalmente a la
izquierda del jugador despus de un solo
cuadro, y no habra ocurrido ninguna colisin. Para evitar esto, se debe escribir un
cdigo especial que comprueba toda la
trayectoria de la bala. Como a la mayora de
nosotros nos interesa ms escribir juegos
que ecuaciones matemticas, se utilizara la
fuerza bruta para comprobar cada punto a lo
largo de la trayectoria.

www.linux-magazine.es

Nmero 04

27

DESARROLLO

SDL

driar la ruta buscando obstculos. La


un cuadro de lmites de tamao fijo a lo
funcin que hace esto se llama plyChecklargo del juego.
Collisions.
La funcin para verificar las colisiones
Para determinar si cualquier posicin
funciona de la siguiente manera:
en particular es segura,
Comienza procesando el
debemos comparar la
cuadro de limites del
posicin del jugador
jugador
actual
y
contra cada bloque exisentonces solicita detalles
tente para ver si se
de casi todos los objetos
solapan. Para simplificar
dentro del rectngulo
este problema, no se
(estamos usurpando la
considerar los datos de Figura 2:El cuadro de limites no
estructura
SDL_Rect,
la imagen del jugador, es refleja siempre los grficos.
aunque SDL en s mismo
decir su contorno exacto.
no tiene soporte para
Miraremos solamente el cuadro que lo
colisin). Dije casi porque el primer
rodea, conocida como bounding box
argumento para exGetRectCollision se uti(cuadro de limites). Si esta cuadro choca
liza como parmetro ignorado. Esto es
con el cuadro contenedor de cualquier
porque si se comprueba todo en el
bloque, no puede moverse a esta posimundo contra el cuadro de limites del
cin.
jugador siempre habr como mnimo un
Esta no es un compromiso tan infreobjeto en en colisin: El jugador! Como
cuente, puesto que cualquier problema
esto es intil, se ignora explcitamente.
en el cdigo de colisin es tan molesto
La ListOfCollisions ofrecer ms inforpara el jugador que juega, como para el
macin acerca del estado de las
programador que lo programa. El
colisiones: Cuantas colisiones ha habido,
jugador podra meterse en un hueco,
que objetos han sido afectados (bloques,
podra ejecutarse una animacin donde
enemigos, y as) e incluso la posicin x,
el personaje se rasca la nariz y despus
y donde ha ocurrido la colisin. Esta
se encuentra que un pixel en particular
ultima informacin permitir, por ejemest en colisin con el mundo y ya no
plo, determinar si una flecha golpea en
puede escapar. As que especificamos al
la cabeza o en la pierna. Entonces se
artista que el grfico del jugador debe
puedes usar esto para modificar el transpermanecer dentro de un rea fija, y no
curso del juego. Teniendo una rutina de
se tomar en consideracin nada exterior
colisin de propsito general tal como
del cuadro durante la deteccin de la coesta, se puede enfocar el esfuerzo en
lisin. Por la misma razn, mantenemos
otras reas. Por el momento slo esta-

Listado 1: Choca o no?


01
02
03
04

SDL_Rect PlayersBoundingBox;
EX_COLLISION_LIST ListOfCollisions;
plyGetPlayerRect(pPlyObj, &PlayersBoundingBox);
exGetRectCollision(pPlyObj, &PlayersBoundingBox, &ListOfCollisions);

Listado 2: Desde exCheckCollision en collision.c


01
02
03
04
05
06
07
08

tx = pCollisionRc->x / TheGame.iTileWidth;
ty = pCollisionRc->y / TheGame.iTileHeight;
TestTileCollision(pCollisionRc, tx, ty, pCollisionList);
if (pCollisionRc->x%TheGame.iTileWidth)
TestTileCollision(pCollisionRc, tx+1, ty, pCollisionList);
if (pCollisionRc->y%TheGame.iTileHeight)
TestTileCollision(pCollisionRc, tx, ty+1, pCollisionList);
if ((pCollisionRc->x%TheGame.iTileWidth) && (pCollision
Rc->y%TheGame.iTileHeight))
09 TestTileCollision(pCollisionRc, tx+1, ty+1, pCollisionList);

28

Nmero 04

www.linux-magazine.es

Figura 3:Comprobacin de proximidad.

mos interesados en si la nueva posicin


es segura, o no.
Dentro de la funcin exGetRectCollosion se puede optimizar el cdigo
comprobar cada bloque en el mundo
para comprobar solamente los bloques
con los que se pueden colisionar (una
mejora en la velocidad que beneficiara a
todo el juego; otra razn para usar un
cdigo de colisin de propsito general).
La funcin exGetRectCollosion funciona de la misma forma que la funcin
repair que se vio el mes pasado. En esta
etapa tampoco se har caso de las colisiones enemigas, puesto que para esto se
realizar un tipo de comprobacin diferente y sera un desperdicio realizar esta
prueba dos veces.
Si, por ejemplo, el personaje est
saltando y colisiona con algo, no puede
quedarse parado en medio del aire, hay
que pensar en dejarlo caer. O si el personaje est saltando arriba y a la
izquierda y choca se debera intentar
saltar recto hacia arriba, ignorando el
movimiento hacia la izquierda o comenzar a caer? Todas estas son decisiones
sobre el transcurso del juego y se implementa de forma muy simple utilizando
la misma funcin exGetRectCollision para
cada una de las posibles nuevas posiciones. La funcin plyUpdJumping
muestra que decisiones he realizado
para el componente de saltos.
La misma funcin exGetRectCollision
se puede usar para otra parte del
movimiento de colisin: la deteccin de
un choque con el suelo. Se debe
averiguar si el jugador est sobre algo
solido, o no. Para esto se puede usar la
misma funcin, pero con un rectngulo
de colisin distinto. Principalmente, una

SDL

pequea cuadro justo debajo de los pies,


que es la anchura del jugador. Si hay una
colisin, hay que alegrarse, ya que el
jugador se encuentra seguro sobre algo.
Si no fuese as, habr que cambiar al
estado de cada y procesar la colisin de
la manera normal como descenso del
jugador. La deteccin de suelo resalta
una limitacin con el mtodo de colisin
por medio de el cuadro de limites, pues
un pixel pudo chocar con una superficie,
pero no lo hacen los grficos, segn se
muestra en la Figura 2.

A la medianoche
Es mucho ms fcil detectar qu objetos
quiere coger el jugador. Aunque nuestra
rutina de uso general de la colisin funcionara no es siempre el mejor mtodo,
ya que es innecesario realizar deteccin
de colisin. La recogida se acciona por
proximidad, tan pronto como el jugador
est dentro, por ejemplo, de la mitad del
ancho de un bloque (o 16 pixeles) se
puede recoger el objeto.
El mtodo matemtico para comprobar
la distancia es el que usaba Pitgoras:
El cuadrado de la hipotenusa es igual a
la suma de los cuadrados de los catetos.
Esto dejar que se realice una comprobacin circular, buscando cualquier

Listado 3: Matemticas de
los das del colegio
01 dx = pObj1->x - pObj2->x;
02 dy = pObj1->y - pObj2->y;
03 iDistance = sqrt( dx*dx +
dy*dy
04 );
05 if (iDistance < iProximity)
06 { /* ... coger est en el
rango
07 ... */ }

Listado 4: Pitgoras hecho


fcil.
01
02
03
04
05

dx = pObj1->x - pObj2->x;
dy = pObj1->y - pObj2->y;
if (iDistanceSquared <
iProximity*iProximity)
{ /* ... coger est en el
rango
06 ... */ }

DESARROLLO

Listado 5: Matriz de la superficie de colisin


01 if (SDL_LockSurface(pCurrentSurface) < 0)
02 {
03 fprintf(stderr, "No puede bloquear la superficie: %s\n",
SDL_GetError());
04 return NULL;
05 }
06 pCollisionData = (Uint8 *)malloc(pCurrentSurface->w *
pCurrentSurface07 >h);
08 /* pCurrSurface->pixels ahora apunta a datos de pixel validos para
leer/escribir */
09 SDL_UnlockSurface(pCurrentSurface);

Listado 6: Consultar la paleta


01
02
03
04
05
06
07

if (iBytesPerPixel == 1)
{
pixel = *(Uint8 *)pSurfacePtr;
r = pCurrentSurface->format->palette->colors[pixel].r;
g = pCurrentSurface->format->palette->colors[pixel].g;
b = pCurrentSurface->format->palette->colors[pixel].b;
}

objeto dentro de un radio especfico


desde la posicin actual del jugador.
Debido a que la raz cuadrada es lenta
y solo funciona en punto flotante y con
nmeros de doble precisin, habr que
ahorrar tiempo evitndola. No se tiene
verdadero inters en conocer la
respuesta a la ecuacin, slo su resultado. Est dentro del radio de
proximidad? Se puede elevar al cuadrado
cada lado de la ecuacin obteniendo el
mismo resultado.

Odisea espacial
En un principio, tambin se puede utilizar el cuadro de limites de colisin
cuando se choca con el enemigo. Sin
embargo, puesto que se puede tener una
amplia gama de enemigos diferentes (y
solo se dispone del tamao de un bloque
para almacenarlos) puede que sea un
poco injusto si se representan con unos
grficos tan pequeos que podran matar
al jugador a una distancia de 30 pixeles.
De manera parecida, tambin es
injusto si la animacin provoca que el
enemigo se encoja a la mitad de su
tamao original, pero todava se considera la colisin del enemigo como
cuando estaba a tamao completo. Por
lo tanto se va a necesitar una forma de

colisin que este basada en pixeles y eso


va a necesitar que se investigue a fondo
en SDL para determinar que pixeles son
transparentes. Lamentablemente, no es
tan simple como pudiera parecer.

Dulce perfeccin
La colisin basada en pixels en realidad
es realmente fcil en teora: Comprobar
cada pixel de la imagen y si alguno de
ellos es opaco (es decir, no es transparente) se ha encontrado una colisin. SDL, a
pesar de toda su potencia, no proporciona
una sencilla funcin GetPixel. De hecho,
no proporciona ninguna funcin GetPixel.
As que habr que escribir una.
El primer paso en el proceso es bloquear la superficie. El bloqueo es un
mtodo donde la imagen de la superficie
(ya est en memoria de vdeo o de sistema) se copia a un nuevo bfer en la
memoria del sistema. Entonces se
pueden leer, escribir o cambiar los pixeles en este bfer, todo lo que se necesite
y cuando se desbloquee la superficie,
estos nuevos datos se copian nuevamente dentro de la superficie original.
Mientras la superficie est bloqueada,
no se podrn hacer operaciones de transferencia de bloques (blit) desde o haca
ella. Es el copiado de estos datos a y

www.linux-magazine.es

Nmero 04

29

SDL

DESARROLLO

desde la memoria lo que convierte el


bloqueo de la superficie en una
operacin muy costosa, por tanto los
pixeles no se deben escribir uno a uno.
Si se est trabajando con algn algoritmo
especial de mapa de bits (como fractales,
por ejemplo) entonces se procesan un
gran nmero de pixeles y se escriben
todos juntos en la superficie bloqueada.
Para la colisin (que es una circunstancia excepcional) se bloquear la
superficie una vez al comienzo del
juego, se copiarn los datos necesarios
dentro de lo que se llamar la superficie
de colisin y despus se desbloquear la
superficie inmediatamente.
La superficie de colisin ser una simple matriz, donde un elemento en la
matriz tendr una equivalencia directa
con un pixel en la imagen. Un valor de
de cero en la matriz significar sin colisin, mientras que un uno significar
colisin. Para simplificar, cada elemento en la matriz sera un byte, aunque
en el futuro se puede ahorrar memoria
reduciendo esto a un solo bit.
Los
datos
de
pixel
(en
pCurrentSurface->pixels) se almacenan
en el mismo formato que en la superficie. Como ya se ha visto (en las partes 1
y 2 de esta serie), cada superficie debe
crearse con un bit de profundidad diferente, as que se necesita comprender
como leer diferentes formatos de pixel.
Aqu hay dos maneras. Antes de nada,
hay que saber cul es el formato del pixel:
iBytesPerPixel = U
pCurrentSurface->U
format->BytesPerPixel;
pSurfacePtr = (Uint8 U

Listado 7: Normalizando
01
02
03
04
05
06
07

Uint32 pixel;
SDL_PixelFormat *fmt = pCurrentSurface->format;
pixel = *(Uint32 *)pSurfacePtr; /* Leyendo de una superficie
de 4-bytes-per-pixel */
r = ((pixel & fmt->Rmask) >> fmt->Rshift) << fmt->Rloss;
g = ((pixel & fmt->Gmask) >> fmt->Gshift) << fmt->Gloss;
b = ((pixel & fmt->Bmask) >> fmt->Bshift) << fmt->Bloss;

Listado 8: Leyendo bytes


01
02
03
04
05
06

if (iBytesPerPixel == 2) pixel = *(Uint16


*)pSurfacePtr;
if (iBytesPerPixel == 3) pixel = (*(Uint32
*)pSurfacePtr)&0xffffff;
if (iBytesPerPixel == 4) pixel = *(Uint32
*)pSurfacePtr;

*)pCurrentSurface->U
pixels;

Con un bit por pixel, se est usando una


superficie paletizada y se tiene que consultar la paleta para conseguir los
componentes rojo, verde y azul. Esos
componentes
estn
fcilmente
disponibles en la superficie, como se
muestra en el Listado 6.
Con los formatos de pixel empaquetado
(2, 3 o 4 bytes por pixel) se tiene que
realizar un poco de aritmtica a nivel de
bit para aislar los componentes individuales del RGB, y se normalizan de modo
que cada uno est dentro de la gama 0 a
255. El Listado 7 muestra este cdigo.
La rutina de conversin del listado 7 es
idntica para todos los formatos empa-

Listado 9: Comparando color.


01
02
03
04
05
06
07
08
09
10
11
12
13

30

if (iBytesPerPixel == 2) pixel = *(Uint16


*)pSurfacePtr;
if (iBytesPerPixel == 3) pixel = (*(Uint32
*)pSurfacePtr)&0xffffff;
if (iBytesPerPixel == 4) pixel = *(Uint32
*)pSurfacePtr;
if (SDL_MapRGB(pCurr->format, r, g, b) ==
pCurrentSurface->format->colorkey)
*pCollisionData = 0; /* este pixel es transparente */
else
*pCollisionData = 1; /* este pixel no lo es! */
pCollisionData++;

Nmero 04

www.linux-magazine.es

quetados. La superficie tiene su propia


combinacin de mscaras, de cambios y
de parmetros de prdida para alcanzar
esta unidad. El nico cdigo adicional
(mostrado en el Listado 8) es necesario
para leer el correcto nmero de bytes
desde el puntero de la superficie.
Habiendo recogido los datos RGB,
ahora se puede usar la funcin
SDL_MapRGB para crear una superficie
compatible en color y compararla con la
clave de color, escribiendo el resultado
en la matriz de colisin.
Despus de leer un pixel, se debe
mover sobre el siguiente. Aunque esto
puede parecer como un bucle fcil, es
aqu que la segunda manera toma la
delantera. Es decir de la tonalidad, o
intervalo, de la superficie.

Cantando canciones
disparatadas
Cuando se crea una superficie, no es
siempre del tamao que se solicita. Las
superficies en memoria de vdeo,por
ejemplo, suelen ser una potencia de 2
(128, 256, 512) y por tanto la pantalla de
640x480 podra potencialmente ser de
1024x512 pixeles. Puesto que el tamao
real est bajo el control de la tarjeta grfica hay muy poco que se pueda hacer
sobre esto.
Al usar las funciones de transferencia
de bloque estndares, SDL estimar
automticamente esto. Pero puesto que
se he puenteado SDL, se debe estar
enterado de qu est sucediendo bajo el

SDL

cap, puesto que cada lnea puede tener


un suplemento de 384 pixeles. El valor
pCurrentSurface->pitch mantiene el
tamao (en bytes) de cada lnea de la
superficie. Por lo tanto se debe aumentar
el indicador de pixel como corresponde.
Vase el Listado 10.
Nuestros datos de colisin (porque son
nuestros, almacenados en nuestra
memoria) no tienen el problema de
tonalidad, y por tanto cada octeto se
puede almacenar secuencialmente.
Como referencia, la funcin se llama
exCUBuildCollisionSurface y se encuentra dentro de collision.c

Contonalo (pero solo un


poco)
Ahora hay que escribir la funcin exCCBoundingBox2Pixel, para determinar si
hay pixeles letales enemigos dentro del
cuadro de limites del jugador. Otra vez, la
oferta de SDL no da soporte para esto, as
que toca leer por completo todos los pixeles manualmente. Sin embargo, hay dos
atajos que se pueden tomar. El primero es
que se puede comprobar primero el
cuadro de limites de cada objeto, antes de
hacer otra cosa. Si stos no se interceptan,
entonces la prueba de colisin de pixel

magistral es una prdida de tiempo, y se


puede salir pronto de la funcin.
La segunda optimizacin es comprobar solamente el rea de pixeles donde
ambas cuadros de limites se solapan, es
decir, el conjunto unin. SDL no proporciona ninguna funcin para procesar
esta unin, pero se puede hacer bastante
fcilmente considerando cada caso por
separado: El enemigo est encima o
debajo del jugador? El enemigo est a la
izquierda o a la derecha del jugador?
Habiendo encontrado el rea para
comprobar de (x1,y1) a (x2,y2). Ahora
se debe encontrar el primer pixel en
nuestros datos de colisin que
pertenezca a la posicin (x1,y1) (Listado 11) y despus iterar a travs de
cada pixel uno por uno . El haber estipulado una anchura constante de 640
para los grficos tambin tiene aqu una
prima adicional. Puesto que nuestros
datos de la colisin se relacionan directamente con los grficos de la
superficie, cada lnea de datos de la colisin es siempre de 640 pixeles, lo que
hace fcil moverse a partir de una lnea
a la siguiente.
El bucle de deteccin de colisin
(Vase el Listado 12) es muy parecido al

Listado 10: Incrementando el puntero de pixel.


01
02
03
04
05
06
07
08
09
10
11
12

pSurfacePtr = (Uint8 *)pCurrentSurface->pixels;


for(y=0; y<pCurrentSurface->h; y++)
{
for(x=0; x<pCurrentSurface->w; x++)
{
/* ... lee los datos del pixel como arriba .. */
pSurfacePtr += iBytesPerPixel;
}
/* Move onto the next line */
pSurfacePtr -= pCurrentSurface->w * iBytesPerPixel; /* rebobinando
al principio de la lnea */
pSurfacePtr += pCurrentSurface->pitch; /* la tonalidad ya est en
bytes */

Listado 11: Encontrando x1 e y1


01 pColData = pCollisionData;
02 pColData += (iRegion%TheGame.iNumTileWidth) * TheGame.iTileWidth;
03 pColData += (iRegion/TheGame.iNumTileWidth) * TheGame.iTileHeight *
640;
04 pColData += x1;
05 pColData += y1 * 640;

DESARROLLO

Figura 4:Un conjunto unin.

cdigo para crear una superficie de colisin, mientras que el procesado de x1,
y1 pide el cdigo prestado del cdigo
exDrawTile; ambos deben ser fciles de
seguir. Vase el archivo collision.c.
Una solucin alternativa es crear una
superficie de 8 bits con SDL_CreateRGBSurface y escribir en ella los datos de
colisin, quizs con una transferencia de
bloque (blit), o una combinacin de bloqueo-desbloqueo.
Entonces,
para
ahorrar tiempo de procesador, se puede
bloquear la superficie para toda la
duracin del juego (porque no se transferir nada hacia o desde l). Siempre
hay ms de una solucin a un problema.
A modo de ejercicio intente [1] y vaya a

la carpeta sources/sdl.

Listado 12: Bucle de


deteccin de colisin
el puntero de pixel.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

for(y=y1;y<y2;y++)
{
for(x=x1;x<x2;x++)
{
if (*pColData)
{
/* Colisin encontrada!!
Almacnela!!! */
return TRUE;
}
pColData++;
}
pColData -= (x2-x1);
pColData += 640;
}

RECURSOS
[1] http://www.bluedust.com/pub/

www.linux-magazine.es

Nmero 04

31

DESARROLLO

Ruby

Construyendo una Araa Web con Ruby

Araa en la Red
Ruby es un lenguaje muy elegante y
armonioso (sus partes funcionan de
forma conjunta de manera efectiva).
Ruby tambin reduce significativamente los agobios del desarrollador.
Mostraremos como usar Ruby para
construir una aplicacin de
araaWeb rpida y sencilla.
POR DAVID BERUBE
www.spidertim.com

uby es un lenguaje de guiones


desarrollado por Yukihiro Matsumoto y distribuido bajo GPL. El
lenguaje Ruby dispone de un excelente
juego instrucciones para la manipulacin
de cadenas de caracteres y libreras de
redes, hacindolo una gran eleccin para
escribir araas Web. Para los que no os
resulten familiares, indicaros que las
araas Web son programas diseados
para atravesar automticamente la Web.
Los motores de bsqueda usan las
araas Web para aadir paginas Web a
sus catlogos. Compaas como Netcraft
usan araas Web para obtener estadsticas de servidores Web.
Podemos usar araas Web para encontrar informacin automticamente de
casi cualquier sitio Web. En este artculo
veremos como usar Ruby para recuperar
informacin de LiveJournal, el popular
proveedor de bitcoras Web. Podemos
aplicar stas tcnicas a virtualmente
cualquier lugar Web que proporcione
informacin pblica.

Obtencin de datos Web


Los programadores disponen de varias
maneras de recuperar informacin desde
una pgina Web. Algunos lugares ofrecen informacin en formatos fciles de

32

Nmero 04

procesar, como XML. Un buen ejemplo


de esto es lo que se denomina RSS, en
formato XML. RSS son las siglas de
Really Simple Syndication (Sindicacin
Realmente Simple), y es una manera de
que los sitios Web de noticias proporcionen titulares al minuto a otros sitios y a
programas diseados para mostrar la
informacin. Un gran nmero de sitios
proporcionan sus titulares en formato
RSS (la BBC proporciona todas sus secciones en RSS). Muchos programas
gestionan titulares en RSS. Por ejemplo,
Mozilla Firefox nos permite crear carpetas de marcadores en vivo que
automticamente se llenan con titulares
RSS.
Otro mtodo para recuperar informacin es el llamado rascar pantallas
(descargar pginas HTML de la misma
forma que lo hara un buscador Web
para luego desechar las secciones en las
que no estamos interesados). LiveJournal proporciona cierta informacin (por
ejemplo una lista de mensajes de usuarios) en formato RSS XML y exige a los
usuarios que usen ese formato siempre
que sea posible. Otra informacin slo
puede ser rescatada rascando la pantalla, por ejemplo, la lista de amigos de
un usuario.

www.linux-magazine.es

Debido a que las bitcoras LiveJournal


contienen gran cantidad de informacin,
se podran minar en busca de una gran
variedad de diferentes tipos de datos. En
este ejemplo vamos a escribir un programa que compila comentarios de un
usuario nico de LiveJournal, o lo que es
lo mismo, el programa descargar cada
comentario que el usuario ha hecho en
cualquiera de los blogs de sus amigos y
muestra los comentarios. Por supuesto
no encontrar mensajes dejados en bitcoras que no estn en la lista de los
amigos del usuario ni tampoco encontrar mensajes privados.
Las araas de red solo pueden encontrar informacin accesible pblicamente,
por lo que esta aplicacin solo encontrar informacin que el usuario objetivo
ha decidido hacer pblico. Por supuesto
esto puede representar mucha informacin en algunos casos. Es fcil extender
esta tcnica a casi cualquier tipo de
informacin pblica disponible en la
Web.

Plan de la Araa
El programa usar el nombre de un
usuario de LiveJournal y descargar su
lista de amigos. Entonces el programa
recuperar una lista de publicaciones

Ruby

para el usuario y para todos sus amigos y


descargar todas estas. Entonces
analizar gramaticalmente los archivos
HTML e imprimir los comentarios
hechos por nuestro usuario objeto en
STDOUT, separando cada comentario
por tres guiones alineados.

Las herramientas que


tenemos
De qu herramientas disponemos? La
primera es la librera Ruby net/http que
viene con la distribucin Ruby. La librera Ruby net/http nos permite acceder al
protocolo HTTP a travs de un interfaz
orientado a objetos. Para descargar pginas Web primero debemos hacer una
conexin con el servidor llamando el
mtodo Net::HTTP.new, que recoge la

Listado 1: parse_user.rb
01 require 'net/http'
02 h =
Net::HTTP.new('www.livejournal
.com', 80)
03 friend_arr = []
04 person = ARGV[0]
05 resp, data
=h.get("http://www.livejournal
.com/userinfo.bml?user=#{perso
n}",nil)
06 print "Lista amistades de
#{person}\n"
07 data.split("\n").each do|line|
08
line.split(",").each do
|token|
09
if token
=~/userinfo.bml\?user=([^'&]*)
\'/friend_arr.push $1
10
print "#$1\n"
11
end
12
end
13 end
14 print "\n"
15 friend_arr.each do |friend|
16
print "Analizando bitcora
de #{friend} en busca de
comentarios de
#{person}...\n";
17
f
=File.new("#{person}_#{friend}
.txt","w")
18
f.puts `ruby
parse_journal.rb
#{friend}#{person}`
19
f.close
20 end

direccin del servidor y un nmero de


puerto y devuelve un objeto Net::HTTP.
Llegados a este punto, llamamos al
mtodo get en el objeto para recuperar
una pgina. El mtodo get nos devuelve
una matriz: el primer elemento de la
matriz es un objeto HTTPResponse y el
segundo es una cadena que contiene el
cuerpo del resultado. En otras palabras,
los contenidos de la pgina solicitada. El
objeto
HTTPResponsecontiene
las
cabeceras y el cuerpo del resultado.
Ambos mtodos se incluyen por motivos
de compatibilidad y por simplicidad,
puesto que habitualmente solo estamos
interesados en los datos de una respuesta
y no en el estado del cdigo HTTP.
Otras potentes herramientas que
podemos usar son los mtodos split y
each. El mtodo split coge una cadena y
la divide en una matriz delimitada o por
una expresin regular o por una cadena:
es similar a la funcin split en Perl o
PHP. Observaremos no obstante que
puede ser encadenado con otros mtodos como ocurre en nuestro ejemplo.
El mtodo each recoge la matriz y pasa
cada elemento a un bloque de cdigo. A
propsito, la sintaxis del bloque es
genrica y podemos usar esta sintaxis en
nuestras propias funciones. El bloque de
cdigo tiene la palabra clave do al principio y end al final y los parmetros estn
rodeados por smbolos de tubera. El
mtodo each es muy similar al mtodo
foreach de otros lenguajes, si bien no es
una estructura del lenguajes como en la
mayora, sino un mtodo con el cual
podemos construir fcilmente nuestro
propio iterador.

Arrastrndonos por
LiveJournal
Tenemos dos scripts involucrados en el
anlisis gramatical de un portal de noticias. El primero, parse_user.rb (ver el
Listado 1), recoge un argumento de la
lnea de comandos (el usuario que
deseamos monitorizar). Entonces descarga
la lista de personas que el usuario ha marcado como amigos, en teora con los que
es ms probable que comente sus blogs. Si
lo deseamos, podemos buscar los amigos
de esos amigos y los amigos de los amigos
de sus amigos y as sucesivamente. Esto
llama repetidamente el segundo cdigo,
parse_journal.rb (ver Listado 2), una vez
por cada amigo.

DESARROLLO

El segundo cdigo recoge dos argumentos:


Qu
blog
analizar
gramaticalmente y qu comentarios de
usuario estamos buscando. El segundo
cdigo tambin puede ser llamado por si
mismo si solo deseamos buscar el
cuaderno de bitcora de un usuario concreto para comentarlo con otros
usuarios.
El primer script recupera una lista de
amigos descargando la pgina de informacin de usuarios del LiveJournal de
ese usuario. La pgina de informacin
del usuario es una pgina Web que contiene el perfil del usuario y, muy
importante para nosotros, un enlace a la
pgina de informacin del usuario de
cada una de sus amigos.
El script busca esos enlaces, coge los
nombres de usuario de cada uno de los
amigos y aade el amigo a la matriz.
Cuando acaba con esto, llama al
segundo script para cada uno de esos
amigos, indicando al segundo script que
recupere cada comentario hecho por el
usuario objetivo en el blog de su amigo.
Tambin recoge el resultado del segundo
cdigo y lo escribe en un archivo para
facilitar el acceso.
El segundo script, primero descarga el
alimentador de noticias RSS para el
usuario. Como conveniencia, este contiene, entre otras cosas, un enlace a cada
uno de las publicaciones del usuario.
ste recupera todos estos enlaces y los
coloca en una matriz. Es entonces
cuando, interaccionando con la matriz,
recoge cada pgina e interacciona con
cada lnea de cada pgina.
El procesamiento de lneas se separa en
dos partes. Primero, el script espera hasta
que encuentra una publicacin realizada
por el usuario adecuado, sealndolo con
un enlace para usar su pgina de informacin. A partir de este momento, la
siguiente lnea que parezca un mensaje, se
supone que es un comentario de ese
usuario. La lnea se detecta, luego el
comentario y el enlace se extraen.
El comentario se transforma para que
sea ms amigable. La secuencia <br/>
se transforma en caracteres de nueva
lnea y se despoja el texto de las etiquetas HTML y otra informacin no
importante. Despus se imprime el
comentario y el script comienza a buscar
otros comentarios realizados por el
usuario objetivo.

www.linux-magazine.es

Nmero 04

33

Ruby

Como podemos imaginar, todo este


proceso es extremadamente sensible al
formato exacto de la pgina e ilustra uno
de los problemas bsicos de este proceso. Debido a que el formato de los
datos puede ser, y de hecho es, cambiante, ocasionalmente tenemos que
actualizar nuestra araa para que siga
funcionando. En este caso, cambios al
formato de LiveJournal pueden requerir
cambios a la araa para que pueda
procesar un blog adecuadamente. No
obstante debemos saber que la araa es
generalmente fcil de modificar cuando
se producen cambios.

Cuando las cosas van mal


Pueden ocurrir errores en una serie de
lugares mientras se desarrolla y usa una
araa. No obstante, es habitual que los
errores ocurran en dos lugares: uno es el
cdigo de la red, y el otro es el cdigo de
rascar la pantalla. El cdigo de la red
puede tener problemas debido a que
Internet es inherentemente poco fiable.
Las pginas se mueven, las mquinas se
caen, hay demandas a las que se les

acaba el tiempo u otros problemas. Con


el objeto de atajar estos problemas, es
importante la ayuda de la informacin
que nos ofrece el objeto HTTPResponse
con la funcin Net:HTTP.get.
Debido a que nuestro ejemplo slo
recupera un nmero limitado de grupos
de URLs, errores como pginas movidas
son menos probables. Si an as ocurrieran, es muy probable que sealaran a
un cambio en la jerarqua de LiveJournal
y requeriran una reescritura. No
obstante, para otras muchas araas, esto
no es cierto y sera correcto hacer planes
de contingencias. Por ejemplo, qu
debera hacer nuestra araa si el servidor
retorna un error del tipo HTTPRequestTime-Out?. Puede que queramos intentar
la descarga de nuevo. Como alternativa
puede que queramos ignorar el error y
ejecutar cualquier otra accin.
El cdigo de rascar la pantalla causa
problemas frecuentemente tanto durante
el desarrollo como despus del desarrollo.
Durante
el
desarrollo
es
recomendable descargar una copia de la
pgina que intentamos analizar gramati-

Listado 2: parse_journal.rb
01 require 'net/http'
02 h =
Net::HTTP.new('www.livejournal
.com', 80)
03 url_array = []
04 person = ARGV[0]
05 watch_for = ARGV[1]
06 resp, data
=h.get("http://www.livejournal
.com/users/#{person}/data/rss"
,nil)
07 data.split("\n").each do|line|
08
if line
=~/<comments>http:\/\/www.live
journal.com([^<]*)<\/comments>
/
09
url_array.push $1
10
end
11 end
12 url_array.each { |url|
13
response, data =
h.get(url,nil)
14
logging = false
15
data.split("\n").each do
|line|
16
if line =~ /<a
[^>]*href='http:\/\/www.livejour
nal.com\/users\/([^"]*)\/'><b>/

34

Nmero 04

17
18
19
20
21
22
23
24

if $1 ==watch_for
print "\n---\n"
logging= true
else
logging = false
end
end
if line =~ /<a
href='(http:\/\/www.livejourna
l.com\/users\/[^\/]*\/[^']*thr
ead[^']*)'>.*<\/td><\/tr><tr><
td>(.*)<p style='margin:/ and
logging
25
url = $1
26
comment = $2
27
comment.gsub!('<br
/>',"\n")
28
comment.gsub!(/<\/*[^>]*>/,'')
29
comment.gsub!('(Reply to
this) (Parent)','')
30
print"#{url}\n#{comment}"
31
logging=false
32 end
33 end
34 }

www.linux-magazine.es

calmente y trabajar sobre sta de forma


local en nuestra mquina. Esto incrementa la velocidad de desarrollo y nos
permite centrarnos en recuperar las
piezas apropiadas del cdigo en las que
estamos interesados. Tambin es
recomendable usar el anlisis gramatical
menos restrictivo posible, incluyendo la
menor informacin posible en nuestras
expresiones regulares y an estar
seguros de obtener la informacin que
buscamos. De esta forma nuestro cdigo
se romper en muchas menos ocasiones
debido a cambios en el sitio objetivo.

Conclusin
Las araas son poderosas y Ruby es un
gran lenguaje para escribirlas. Ni que
decir tiene, que un gran poder entraa
una gran responsabilidad, y han de
utilizarse con cautela. Historias de
araas que se han comportado de
forma incorrecta sobrecargando servidores Web con demandas son
comunes. Deberamos asegurarnos de
que nuestra araa no causa problemas
a los administradores. En algunos
casos, los administradores publican
instrucciones respecto a como deben
utilizar los servicios automticos su
sitio. Si es as deberamos preocuparnos de seguirlas. Nos proveen con
un servicio gratuito y no es obligatorio

que lo sigan haciendo.

RECURSOS
[1] Documentacin Ruby http://www.
ruby-doc.org/
[2] Programming Ruby (Programando Ruby).un libro electrnico gratuito de Ruby
http://www.rubycentral.com/book/
[3] Un tutorial bien documentado de araas
Web http://www.searchlores.org/
phpregexspider.htm

EL AUTOR

DESARROLLO

David Berube es un desarrollador de


software, escritor y orador autnomo.
Tpicamente desarrolla usando una
mezcla de tecnologas de cliente de
Microsoft y servidor de cdigo libre,
como Ruby. Su artculo,Databases and
Dynamic Ruby Classes(Bases de datos y
clases dinmicas Ruby) apareci en Dr.
Dobb Journal de diciembre de 2004.
Podemos leer ms sobre este artculo en
http://berubeconsulting.com/.

Perl

DESARROLLO

Un guin Perl que recoge automticamente titulares de noticias.

Reportero a domicilio
En vez de visitar peridicamente
sitios de noticias para estar al da de
los ltimos reportajes, mucha gente
prefiere dejar este trabajo a un agregador de noticias. El agregador
avisar cuando aparezcan noticias. Si
un sitio web no tiene un alimentador
RSS, un nuevo modulo Perl simplificar la tarea de programar un
alimentador RSS para uso personal.
POR MICHAEL SCHILLI

l gran volumen de informacin en


Internet implica que nadie puede
leerlo todo. Visitar un par de docenas de sitios web al da para conseguir
las ltimas noticias es tal perdida de
tiempo que se necesitara aparcar el trabajo para conseguirlo.
Esto anim a muchos sitios de noticias a introducir los alimentadores de
RSS con los titulares y los enlaces a los
artculos en un formato legible por la
mquina. RSS es la abreviatura de RDF
Site Summary (Sumario RDF del Sitio)
donde RDF significa Resource Description
Framework
(Esquema
de
descripcin de recursos). Los archivos
RSS utilizan XML, un formato que los
llamados agregadores de noticias
pueden analizar fcilmente. Los artcu-

los que an no han ledo los usuarios se


presentan como titulares seleccionables.
Este proceso de sindicacin, es decir,
recopilar y presentar mensajes que
estn disponibles en otra localizacin,
ayuda a manejar la avalancha de informacin y ahorra un montn de tiempo.
Sitios populares como Slashdot ofrecen ahora alimentadores RSS, con
agregadores como Amphetadesk ([2] y
Figura 1) que recogen a noticias a intervalos regulares si se ha suscrito al
servicio, es decir, si se puls el botn de
Suscribir.

Construyase uno
Lamentablemente, no todos los sitios
de noticias disponen de alimentadores
RSS. Realmente piensan que los usua-

rios se detendrn todos los das para


rebuscar entre la informacin que proporcionan? El mdulo RssMaker que
veremos en este artculo ofrece una
funcin que puede ayudar a generar un
archivo RSS a partir de una pgina de
portada con titulares y URLs con
aproximadamente 10 lneas de cdigo
Perl. Si despus se configura una tarea
cron para generar el archivo RSS una
vez al da, se podr pasar el archivo al
agregador de noticias, con el que se
obtiene como resultado una aproximacin a la amplia cobertura de
noticias que se anunciaba para el siglo
XXI.
Toda lo que hay que hacer es una llamada a la funcin make dentro del
mdulo Perl RssMaker, mostrado en el

www.linux-magazine.es

Nmero 04

35

DESARROLLO

Perl

Figura 1:El alimentador de noticias books.perl.org en Amphetadesk.

Listado 1, RssMaker.pm, que espera


una URL que apunte a una pgina web
de noticias. La funcin coge la Web,
analiza su cdigo HTML y despus
extrae los enlaces insertados y muestra
el texto. Por cada instancia que encuentre, llama a un filtro de la funcin
definible por el usuario, le pasa el
enlace y su descripcin textual y deja
que decida. Si la funcin de filtro
devuelve el valor true, significa que el
enlace es un titular y se aade al
resumen RSS.
Para terminar, make() enva la salida
XML al archivo indicado por el
parmetro output.

Dos formatos de fecha


Para convertir la marca temporal (time
stamp) HTTP del documento web al formato ISO-8601 que necesita RSS, la
funcin
str2time
del
modulo
HTTP::Date, primero repasa la cadena de
fecha (por ejemplo Tue, 26 Oct 2004
05:10:08 GMT) y devuelve el la hora y
fecha en segundos Unix. La funcin
from_epoch() del modulo DateTime
toma ese valor y genera un nuevo objeto
DateTime, que se pasa al formato ISO8601
entre
dobles
comillas
(2004-10-26T05:10:08).

Codificando
XML espera texto codificado en UTF-8.
UTF-8 es compatible con el cdigo

36

Nmero 04

Figura 2:El validador RSS en feeds.archive.org.

ASCII normal, mientras se evite la


mitad superior de los 256 caracteres de
la tabla. Esto significa que los caracteres especiales utilizados en algunos
idiomas europeos pueden ser problemticos. La del espaol, sin ir ms
lejos.
No ser compatible con UTF-8
cualquier carcter de la mitad superior
que se use con ISO-8859-1.
RssMaker evita este problema permitiendo a los desarrolladores indicar
que codificacin se debe usar en el
documento RSS resultante. Si el sitio
web en cuestin tiene codificacin
HTML del tipo &uuml para el carcter
, HTML::TreeBuilder convierte el
texto extrado del enlace a ISO-8859-1.
El cdigo ASCII de este carcter es
252.
Sin embargo, se puede causar un
problema si en el archivo RSS se ha
especificado
<?xml version=1.0U
encoding=utf-8?>

Y las estn codificadas como ASCII


252. Los desarrolladores pueden especificar encoding => iso-8859-1 para
conseguir que la funcin escriba el siguiente documento XML:
<?xml version=1.0
encoding=iso-8859-1?>

www.linux-magazine.es

Y 252 codificado como ser correctamente interpretado por el agregador de


noticias.

Alimentacin RSS
Pondremos a RssMaker a prueba, creando un alimentador RSS de la gran pgina
web http://books.perl.org/. Este sitio
destaca y examina los libros sobre Perl y
sera muy til saber cuando se han agregado nuevos ttulos. Como esto ocurre
de tarde en tarde, seria estupendo tener
un sistema de alerta.
bpo2rss ensea como llevar a cabo
esta tarea rpidamente. La funcin make
del modulo RssMaker hace el trabajo
pesado. El parmetro url especifica la
URL para la pgina web de
books.perl.org que contiene los enlaces a
los libros analizados recientemente. output especifica el nombre de archivo RSS
resultante. title es el titulo del alimentador que ms tarde se mostrar en el
agregador de noticias.
RssMaker llama a la annima subrutina
filter una vez por cada enlace. Cada vez
que hace eso RssMaker pasa dos parmetros: La URL para el enlace y el texto
correspondiente. La subrutina utiliza esta
informacin para comprobar si el enlace
es un titular que se debe aadir al alimentador. Si el filtro devuelve un 1, el enlace
ser aadido al alimentador; si el filtro
devuelve un 0, el enlace no se aade. En
el caso del sitio de books.perl.org, bpo2rss

Perl

simplemente comprueba si la URL corresponde con el patrn /books/n donde n es


un valor numrico. Esa parece ser la convencin de books.perl.org para enlazar las
reseas de los libros. Eso es todo lo que
hace falta para terminar el alimentador
RSS.
Es incluso posible modificar el enlace
extrado o su descripcin textual antes de

que se agregue al archivo del alimentador


RSS, usando un truco simple: Si le pasa
un parmetro a una subrutina en Perl,
este le da permisos de escritura y de lectura. Fijar $_[0] a un valor diferente en la
funcin modificar el parmetro pasado
por el programa principal. Cuando make
llama a filter($url, $text) y filter modifica
$_[0] $_[1], entonces $url o $text habr

DESARROLLO

cambiado en el bpo2rss, dando por resultado entradas modificadas en el archivo


saliente del alimentador RSS.

Agregadores
Servicios como Bloglines (http://www.
bloglines.com/) ejecutan aplicaciones
web que permite a los usuarios registrados suscribirse a los alimentadores y

Listado 1:RssMaker.pm
001

002
003
004
005
006

007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041

#############################
##
# RssMaker -- Genera un
alimentador
# RSS de una pgina web
# Mike Schilli, 2004
# (m@perlmeister.com)
#############################
######
package RssMaker;
use warnings;
use strict;
use LWP::UserAgent;
use HTTP::Request::Common;
use XML::RSS;
use HTML::Entities
qw(decode_entities);
use URI::URL;
use HTTP::Date;
use DateTime;
use HTML::TreeBuilder;
use Log::Log4perl qw(:easy);
#############################
sub make {
#############################
my (%o) = @_;
$o{url}
|| LOGDIE "url ausente";
$o{title}
|| LOGDIE
"titulo ausente";
$o{output} ||= "out.rdf";
$o{filter} ||= sub { 1 };
$o{encoding} ||= 'utf-8';
my $ua =
LWP::UserAgent->new();
INFO "Sacando $o{url}";
my $resp =
$ua->request(
GET $o{url} );
LOGDIE "Error sacando ",
"$o{url}"
if $resp->is_error();
my $http_time =

042
043
044
045
046

$resp->header(
'last-modified');
$http_time ||=
time2str( time() );
INFO "Ultima modificacin:
",

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

$http_time;
my $mtime =
str2time($http_time);
my $isotime =
DateTime->from_epoch(
epoch => $mtime);
DEBUG "Ultima
modificacin:",
$isotime;
my $rss =
XML::RSS->new(
encoding =>
$o{encoding} );
$rss->channel(
title => $o{title},
link => $o{url},
dc => {
date => $isotime . "Z"
},
);
foreach(exlinks(
$resp->content(),
$o{url})) {
my ($lurl, $text) = @$_;
$text =
decode_entities($text);
if ($o{filter}->(
$lurl, $text)) {
INFO "Adding rss ",
"entry: $text $lurl";
$rss->add_item(
title => $text,
link => $lurl);
}
}
INFO "Guardando la salida
en ",

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

"$o{output}";
$rss->save( $o{output} )
or LOGDIE "Cannot write",
" to", " $o{output}";
}
#############################
sub exlinks {
#############################
my ($html, $base_url) = @_;
my @links = ();
my $tree =
HTML::TreeBuilder->new();
$tree->parse($html)
or return ();
for(@{$tree->extract_links(
'a')}) {
my ($link, $element,
$attr, $tag) = @$_;
next
unless $attr eq "href";
my $uri =
URI->new_abs( $link,
$base_url );
next
unless length $element
->as_trimmed_text();
push @links,
[
URI->new_abs(
$link, $base_url
),
$element
->as_trimmed_text()
];
}
return @links;
}
1;

www.linux-magazine.es

Nmero 04

37

Perl

Figura 3:Un alimentador de noticias en Bloglines.

observar sobre la marcha las actualizaciones


de
los
mismos.
Como
herramienta
local
aconsejo
Amphetadesk [2], un guin Perl que ejecuta un servidor HTTP en la mquina
local y muestra un resumen de titulares
en el navegador (Vase la Figura 1).
Se puede validar el archivo en lnea, si se
desea comprobar que el archivo RSS
cumple las estrictas reglas del estndar con:
http://feeds.archive.org/U
validator/

Donde hay un servicio gratuito y en


tiempo real, que ofrece un sello de

aprobacin si el alimentador pasa la


prueba correctamente
(Vase la Figura 2).
En
RssMaker.pm
utiliza Log4perl en
modo easy para la
depuracin,
LWP::UserAgent para
extraer las URLs y
XML:RSS para crear el
archivo
RSS.
Las
secuencias de escape
HTML tales como
&uuml; las decodifica
decode_entities
de
HTML::Entities.
La
funcin exlinks en
RssMaker.pm facilita
la
extraccin
de
enlaces
utilizando
HTML::TreeBuilder.
as_trimmed_text() busca el texto en la
etiquetas de enlace <A> del cdigo
HTML.

Tiempo atmico
Parece que en el futuro prximo, el
estndar RSS ser reemplazado por un
nuevo estndar llamado Atom. Los
comits habituales estn ahora trabajando en este asunto. Si los clientes
Atom listados en [6] alcanzan una masa
critica, probablemente CPAN tenga un
modulo AtomMaker con una funcionalidad similar a RssMaker. Entonces este
modulo usar el modulo XML::Atom que
ya est disponible en CPAN. Por el

Listado 2:bpo2rss
01 #!/usr/bin/perl
02 #############################
03 # bpo2rss -- books.perl.org
04 # generador de alimentador
RSS
05 # Mike Schilli, 2004
06 # (m@perlmeister.com)
07 #############################
08 use warnings;
09 use strict;
10
11 use RssMaker;
12 use Log::Log4perl qw(:easy);
13
14 Log::Log4perl->easy_init(
15
$INFO);
16

38

Nmero 04

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

www.linux-magazine.es

my $url =
'http://books.perl.org/';
RssMaker::make(
url => $url,
title => "books.perl.org",
filter => sub {
my ( $link, $text ) = @_;
return 1
if $link =~
m#/book/\d+#;
return 0;
},
output => "bpo.rss",
);

momento muchos clientes populares no


dan soporte al formato Atom y algunos
de los clientes listados son demasiado
inestables. En [3] se ofrece una introduccin a Atom y hay un tutorial asequible
en [4].

Instalacin
Todos los mdulos que necesita RssMaker.pm estn disponibles desde
CPAN. Se debe configurar cualquier
guin nivelador tal como bpo2rss para
que se ejecute en su sistema una vez al
da como una tarea cron. Los archivos
RSS obtenidos slo se deben publicar en
la Intranet local, puesto que los
archivos RSS publicados en Internet se
podran interpretar como enlazamiento
profundo y pueden originar problemas
legales.
Durante la fase de eliminacin de
errores, es conveniente establecer la
configuracin Log4perl del guin a
$DEBUG. La ventaja de fijar Log4perl a
$DEBUG es que $DEBUG permitir que
se supervisen actividades tales como
sacar, extraccin de enlaces y la generacin del alimentador RSS en la
pantalla. En un ambiente de produccin, se puede utilizar el ajuste
$ERROR en su lugar para quitar
cualquier salida indeseada y parar el
bombardeo de mensajes de email

desde la tarea cron.

RECURSOS
[1] Listados de este artculo: http://www.
linux-magazine.com/Magazine/
Downloads/51/Perl/
[2] Amphetadesk: http://www.disobey.com/
amphetadesk/
[3] Michael Fitzgerald, XML Hacks, OReilly
[4] Reuven Lerner, Aggregating with Atom,
Linux-Journal 11/2004, p.18 y siguientes.
[5] Ben Hammersley, Content Syndication
with RSS, OReilly 2003.
[6] Listado de aplicaciones que dan soporte
al formato Atom: http://atomenabled.
org/everyone/atomenabled/

EL AUTOR

DESARROLLO

Michael Schilli trabaja como desarrollador de software en Yahoo!, Sunnyvale,


California. Es el autor de Perl Power de
la editorial Addison-Wesley y se le puede
contactar en mschilli@perlmeister.com.
Su pgina est en http://perlmeister.
com.

Php

DESARROLLO

Creacin de un Mdulo PHPNuke

Cocina Nuklear
Con PHPNuke se puede crear una obra maestra o un desastre total. Todo depende de las herramientas que se usen y de
la destreza que se tenga con ellas. Incluso con el mtodo y la herramienta ms sencilla, PHPNuke permite crear fcilmente sitios webs dinmicos que pueden acceder tanto a datos en formato texto como a bases de datos empresariales.
POR JAMES MOHR

ncluso antes de finalizar la configuracin de su sitio web, se habr dado


cuenta de la necesidad de desarrollar
sus propios mdulos PHP. Hay varias
formas sencillas de crear los mdulos sin
tener que escribir mucho cdigo PHP.
Sin embargo, si se desea obtener mdulos con un poco ms de funcionalidad y
complejidad, habr que programar algo
ms.

Reuniendo los Ingredientes


Adecuados
Si se sabe Perl, pasarse a PHP es bastante
fcil (esto tambin es aplicable a los programadores de C y lenguajes similares).
En vez de convertir este artculo en un
tutorial de PHP, se supondr que se tiene
ya unas nociones bsicas de Perl, C o
algn lenguaje similar ya que el cdigo
que vamos a comentar es muy simple.
Adems supondremos que se tiene
tambin unas nociones bsicas de SQL.
No vamos a construir ninguna consulta
compleja, pero se debe conocer al menos
la sintaxis bsica o cmo se construyen
las consultas.
Algo que an no hemos comentado es
cmo vamos a editar el cdigo. Aunque
se puede usar cualquier editor que
guarde el fichero en formato ASCII
(como vi), seguramente se preferir uno
mejor y existen una gran variedad de
herramientas que le proporcionarn la
ayuda necesaria en la tarea de programacin. Para todos mis desarrollos web,
ya sea HTML, Perl o PHP, uso Quanta
Plus (http://quanta.sourceforge.net/). De
hecho, Quanta Plus est diseado para
desarrollar en multitud de lenguajes de
programacin diferentes.
Adems Quanta es bastante configurable. Entre otras cosas, Quanta Plus

Figura 1: El entorno de desarrollo Web Quanta Plus.

permite crear las llamadas acciones.


Estas pueden ser cualquier cosa, desde
etiquetas especiales y bloques de texto, a
salida de programas que se insertan
directamente dentro del cdigo. Incluso
se pueden aadir diversas barras de
herramientas al sistema, que pueden
incluir tanto acciones existentes como
acciones propias. Las barras de herramientas pueden exportarse e importarse, permitiendo que cualquier persona
que trabaje en el mismo proyecto pueda
tener las mismas herramientas.

Inicio
Antes de empezar a escribir un mdulo,
debera establecer los criterios. Como los
principios bsicos a aplicar, tal y como

se hace en cualquier lenguaje de programacin o proyecto, como usar variables


auto-explicativas y comentar el cdigo
(algo que desafortunadamente no tiene
el cdigo de PHPNuke).
A menos que se especifique explcitamente otro fichero, modules.php
automticamente cargar el fichero
index.php. Un fichero a medida podra
ser til en la mayora de los casos (como
en los mdulos muy complejos), pero
por ahora, nos conformaremos con el
que viene predeterminado.
Otros ficheros, como las imgenes, se
incluyen usando el fichero modules.php.
As pues, las rutas tienen que ser
definidas relativas a la localizacin de
modules.php en vez de la de los mdu-

www.linux-magazine.es

Nmero 04

39

DESARROLLO

Php

los. Normalmente, modules.php reside


en el directorio raz del servidor, as que
se podr usar una ruta absoluta (por
ejemplo, /image). Incluso si se colocan
las imgenes en el directorio del mdulo,
se puede seguir usando una ruta absoluta (por ejemplo, /modules/nombredelmodulo/images).

Acceso Bases de Datos SQL


Una ventaja de PHPNuke es su capa de
abstraccin de datos, que permite acceder a los datos de cualquier motor SQL
sin la necesidad de escribir cdigo
especfico para esa base de datos. Esta
caracterstica permite usar el mismo
cdigo independientemente de la base
de datos que se est usando.
Las tablas dentro de la base de datos
de Nuke siempre tienen un prefijo que se
define en el fichero config.php. El prefijo
por defecto es nuke, pero he llegado a
usar otros prefijos. De hecho, se tienen
que usar distintos prefijos si se tienen
mltiples instancias de Nuke en una
nica mquina. La tabla por defecto que
contiene todos los datos de los usuarios
es nuke_users.
Un punto de conexin es donde se
colocan datos que no pertenecen a la
base de datos estndar de PHPNuke.
Algunas personas le dirn que las
incluya en la misma base de datos como
la base de datos por defecto de
PHPNuke. Esto en algunos casos permite
que la administracin sea algo menos
compleja.
Otro grupo de personas (entre las que
yo me incluyo) dice que los datos propios deben estar separados de los de
PHPNuke y por ello se ha de crear una
base de datos separada. Tengo unas 60
tablas e incluirlas con las 90 o ms que

Funciones PHP
Aqu aparecen algunas funciones PHP que
se deberan mirar cuando se est
desarrollando un filtro para la entrada que
se ha de mandar a la base de datos:
addslashes
stripslashes
htmlentities
htmlspecialchars
striphtml
Para ms detalles consltese: http://www.
php.net/manual/en/.

40

Nmero 04

tiene Nuke sera muy lioso. Dividiendo


los datos de esta forma, se evitan problemas potenciales si se necesita actualizar
PHPNuke o mover los datos a otra base
de datos (por ejemplo, de MySQL a
Oracle).
La desventaja es que hay que realizar
personalmente la conexin a la base de
datos. Si los datos estn almacenados en
las tablas de Nuke, entonces, la conexin
ya est realizada desde los ficheros de
PHPNuke. Si se tienen unas pocas tablas
podra valer la pena ya que habra que
programar menos.
Si se hace esto, mi recomendacin es
que se use un prefijo diferente del que se
usa por defecto. Recuerde que, cuando
se instala PHPNuke se define el prefijo
para las tablas de PHPNuke. Por defecto
es nuke. As que, yo definira mis
tablas que no son de Nuke con el prefijo
jimmo. Mi tabla de recetas sera
entonces jimmo_recipes.
Para evitar convertir este artculo en
uno de administracin de bases de datos,
abordaremos el caso ms sencillo donde
todos los datos estn en una misma
tabla. Imaginemos una tabla de recetas
con campos como nombre, ingredientes,
etc.
Sorprendentemente,
podemos acceder a una base de datos
con tan slo unas simples lneas. Por
ejemplo, si queremos extraer el nombre
de nuestra primera receta, podramos
poner algo como esto:
$sql_a = "SELECT name U
FROM jimmo_recipes U
WHERE recipe_id='1' ";
$result_a = $db-> U
sql_query($sql_a);
$row_a = $db-> U
sql_fetchrow($result_a);
print "Nombre Receta: U
".$row_a[name]."\n";

En la primera lnea de nuestro ejemplo,


se define la consulta que vamos realizar.
Esta se utiliza en la segunda lnea para
realizar la consulta. Los resultados de la
consulta realmente no son devueltos. Si
no que se devuelve un puntero. En la
siguiente lnea, usamos el puntero para
extraer una fila (con todos los campos
especificados), que es devuelta como un
array $row_a.
En la ltima lnea, se imprime el contenido de un nico elemento del array.

www.linux-magazine.es

En este caso, el campo nombre. Ntese


cmo usamos directamente el nombre
del campo como ndice del array y no
algo como $row_a[0]. Si cambiamos la
consulta original a algo como SELECT
name, ingredients,..., entonces tambin
podramos usar algo como $row_a[ingredients].
Para poder acceder a todas las filas, se
hace la siguiente modificacin:
while ( $row_a = $db-> U
sql_fetchrow($result_a) ) {
print "Nombre Receta: U
".$row_a[name]."\n";
}

Como en otros lenguajes, la sentencia


while repite el bloque especificado mientras la condicin sea verdad. En este
caso, la condicin que estamos comprobando es si somos capaces o no de
extraer una nueva fila de la base de
datos. Cada vez que se ejecuta el bucle
se imprime el nombre de la receta.

Creacin de una Aplicacin


Con unos cuantos cambios, se puede
transformar la lista de nombres en
hiperenlaces, que dirigirn al usuario a
los detalles de la respectiva receta. Hay
varias formas de hacer esto. Creo que la
ms simple de ellas es incluir toda la
funcionalidad dentro de un mismo
fichero (por ejemplo, index.php), como
es el caso en la mayora de los mdulos
por defecto (al menos los ms sencillos).
Para hacerlo englobamos el cdigo que
hemos escrito dentro de una funcin.
Como las funciones de otros lenguajes
de programacin, una funcin en PHP es
simplemente un bloque de cdigo separado que puede ser invocado desde otros
lugares, se le pueden pasar valores y
devolverlos. As que podemos tener una
funcin que cree una lista de recetas con
algo como:
function list() {
... cuerpo de funcin ...
}

Tambin har falta una segunda funcin


para mostrar los detalles de las recetas.
Para saber que receta tenemos que
mostrar habr que pasarle el identificador de la misma (nombre de la receta)
a la funcin. Como podra ser:

Php

function show_recipe($recid) {
... cuerpo de funcin ...
}

Ahora, dentro de la funcin show_recipe,


se puede usar simplemente la variable
$recid donde se necesite, as como
incluirla dentro de la consulta SQL. Los
detalles de esta funcin aparecern en
breve.
Cuando se pasan variables como sta,
me gusta usar identificadores nicos IDs
en vez de texto. Es bastante fcil
aadirlas automticamente a la base de
datos y recuperarlas despus.

Aadiendo la Sentencia
Switch
A continuacin, tenemos que usar la
sentencia switch. Como su nombre indica, se utiliza para conmutar el comportamiento del programa. En este caso, se
conmuta segn el valor de una variable
de la cadena de consulta (aparece en la
URL) que indica qu operacin debe
realizarse. Hacindolo podramos tener
algo parecido a esto:
switch ($op) {
case "show":
show_recipe($recid);
break;
default:
list();
break;
}

Dentro del bloque switch, la sentencia


case dirige el flujo segn el valor de la
variable dada (en este caso $op). Si la
variable $op es igual a show, entonces
la variable $recid se pasa a la funcin
show_recipe. Para posteriormente usarse
dentro de la funcin show_recipe.
Al final se puede ver un bloque etiquetado con default. Este bloque se usa si el
valor de $op no coincide con ningn otro
(incluso si estuviera vaco, que es a
menudo el caso por defecto). Al final de
cada bloque, se tiene la sentencia break
que le indica al programa que se salga
del bloque switch.
Si se desea, se puede aadir cualquier
nmero de sentencias case que puedan
llamar a varias funciones. Adems se le
pueden pasar valores a las funciones,
como ocurre en la mayora de los lenguajes.

Dentro del cuerpo de la funcin


show_recipe, el cdigo que insertamos es
muy similar al que ha aparecido en el
primer ejemplo anterior. Tan slo la consulta SQL es diferente:
$sql_a = "SELECT U
name,ingredients,instructions U
FROM recipes U
where recipe_id =".$recid;

Aqu, se obtienen los valores de name,


ingredients e instructions de la nica fila
de la tabla recipes que coincide con
recipe_id. Luego se carga dicha fila en un
array, como se explic antes y se muestra.

Mostrar los Campos


Para mostrar los campos se hace, bsicamente, como se ha visto anteriormente.
Sin embargo, ahora queremos darle un
poco de formato. Como la salida va a ser
interpretada por un navegador de
Internet, se puede aadir cdigo HTML
en el texto que el programa PHP genera y
formatearlo tal y como se desee. El cdigo podra ser como el siguiente:
print "<H1>".$row_a[name].U
"</H1>\n"
print "<H2>Ingredientes</H2>\n"
print $row_a[ingredients]."\n";
print "<H2>instrucciones</H2>\n"
print $row_a[instructions]."\n";

En este punto se necesita volver un


momento atrs. Anteriormente se cre
una lista de nombres de recetas, pero no
tenamos forma de crear los enlaces para
acceder a ellas. Para hacerlo, simplemente hay que cambiar un poco la sentencia print, que quedara de la siguiente
forma:
print "<a href=/modules.php?U
name=Recipes&U
op=show&U
recid=".$row_a[recipe_id].">". U
$row_a[name]."</A><BR>\n";

Como se puede ver, se llama a modules.php como normalmente se hara


y se le pasara el nombre del mdulo
(Recipes en este caso). Si paramos
aqu, no se establecera otra variable;
la sentencia switch entrara en el caso
por defecto y se mostrara la lista.

DESARROLLO

En este caso, sin embargo, estamos


estableciendo op a show, as el programa entrar en la funcin show_recipe.
Ntese que recipe_id est extrayndose
de la base de datos, junto con el nombre
de la receta y estos valores simplemente
se insertan en el lugar adecuado.
Se podra formatear mucho ms tanto
la lista como la salida. Podramos crear
tambin una consulta que ordenase las
recetas por los nombres de las mismas.
Sin embargo, esto entra en ms detalle
de lo que podemos permitirnos aqu.
Esta sencilla forma de acceder a una
base de datos SQL no est limitada a la
lectura de datos. Ahora se podra dar un
paso ms e implementar un formulario
que insertara datos, por poner un ejemplo. Una de las cosas maravillosas de
PHP es que no hay que procesar los
datos insertados por los formularios.
PHP lo hace por nosotros.
Como con las variables en la cadena
de consulta que se vio anteriormente
(por ejemplo, recipe_id) las variables de
formularios
estn
inmediatamente
disponibles en la pgina que se llama
por la accin del formulario. Esto se
puede combinar para crear una consulta
SQL (usando el comando INSERT, desde
luego), que se pasara a la funcin
$db->sql_query tal y como se hizo anteriormente con SELECT. Se puede ir ms
all y usar el comando UPDATE para
realizar cambios en las filas existentes de
la base de datos.

Acceso Seguro a Bases de


Datos
En este punto debemos hacer un alto y
hablar sobre la seguridad cuando se trabaje con bases de datos. Se podra pensar que si los nicos datos con los que
se trabajan son las recetas, entonces no
hay que preocuparse mucho de la
seguridad. Pero con un sistema inseguro, alguien podra hacer cambios o
borrar los datos.
Pongmonos en un caso an peor, si
sus propios datos estn en la misma
base de datos que las tablas de
PHPNuke, un usuario que tenga acceso
a sus datos, tendra fcil acceso a los
datos de PHPNuke. Tenga en cuanta
que una vez que la conexin est
establecida, el usuario no necesitar
ninguna autorizacin extra para cambiar los datos de las tablas de

www.linux-magazine.es

Nmero 04

41

DESARROLLO

Php

PHPNuke una vez que tenga acceso a


sus tablas.
Incluso si separa sus datos de las
tablas de PHPNuke, los mismos principios son aplicables. No querr que la
gente tenga acceso a sus datos. Hay
diversas cosas que puede hacer para
incrementar la seguridad.
La mayora de las bases de datos
tienen la posibilidad de restringir el acceso, tanto a la base de datos como a las
tablas. Se puede crear un usuario (en la
base de datos) que slo tenga acceso a
sus datos, pero no a las tablas de
PHPNuke. Sin embargo, esto puede volverse complicado y confuso muy pronto.
Creo que esto es una razn ms para
dividir los datos en diferentes bases de
datos, a pesar del esfuerzo que pueda
representar en la programacin debido a
cada acceso.
Cuando los datos se reparten entre
diferentes bases de datos, tan slo tiene
que preocuparse de sus propios datos. Se
realiza la conexin a su propia base de
datos y se deja que PHPNuke maneje las
tablas de PHPNuke y los datos. Esto hace
que sea improbable que vaya a dar acceso de forma inadvertida a las tablas de
PHPNuke.
Sin embargo, y esto es en maysculas,
la conexin a las tablas de PHPNuke
estn aun abiertas cuando sus ficheros
se carguen. As que debe de asegurarse
de que accede a sus tablas y no a las de
PHPNuke.

SQL Injection
Otra cosa de la que hay que hablar es
algo llamado SQL injection. Esto es
un truco usado por los crackers para
conseguir que una consulta SQL haga
algo ms de lo que iba a hacer originalmente. Por ejemplo, si tiene un
mdulo que muestra el nombre de una
receta introducida por el usuario, se
tendra una consulta que devolviera
todos los campos y podra ser como
sigue:
select * from recipes where U
recipename = '$userinput';

Si el usuario es lo bastante listo, l o ella


puede crear un recipename que es en
realidad una consulta SQL adicional y
que es entonces ejecutada en el mismo
contexto.

42

Nmero 04

De este modo, nunca se debera confiar en los datos pasados por la cadena
de consulta de la URL. Esto es especialmente cierto si los valores en la consulta
provienen de la lectura de un formulario
que son introducidos por los usuarios,
como en este ejemplo. Incluso si el
usuario no conoce cmo se crea la consulta, es an posible introducir valores
para cambiarla.
La manera ms fcil es comprobar la
variable $userinput en busca de cadenas que no pertenezcan a la consulta,
como las comillas e incluso la palabra
union. Incluso se podra ir ms lejos
y escribir una funcin que realizara
una comprobacin a fondo. Esta podra
incluir diferentes funciones PHP que
convirtieran el texto de entrada en valores seguros antes de insertarlos en
la base de datos. Mirar el cuadro
adjunto para ms detalles. Para ms
informacin sobre SQL injection y
temas de seguridad con PHPNuke se
pueden consultar en las referencias [2]
y [3].
En nuestro ejemplo, alguien podra
tericamente pasar el identificador de la
receta directamente en la cadena de consulta de la URL (por ejemplo,
&$recid=42) y manipular el valor de tal
forma que se cree una consulta SQL
nueva. En este caso, sera bastante simple comprobar si el valor asignado a la
variable es un nmero. Si no lo fuera, el
programa simplemente no realizara la
consulta (y podra generar un mensaje
de error).

Hogar, Dulce Hogar


La capacidad de acceder a las pginas
webs en el idioma nativo del usuario es
siempre un valor aadido a la hora de
continuar visitando una pgina web particular. La gran mayora de las pginas
webs estn en ingls, lo que hace que
muchos usuarios estn en desventaja.
La mayora de los usuarios de ordenadores que no tienen el ingls como
lengua nativa, tienen al menos
conocimientos de ingls tcnico y
pueden moverse con relativa facilidad
por Internet. Sin embargo, en general,
los sitios webs estn en ingls o en el
idioma nativo del webmaster. Con la
excepcin de los grandes centros comerciales, los sitios webs multilinges son
una rareza.

www.linux-magazine.es

PHPNuke viene con capacidades multilinges incluidas que pueden ser configurados desde el panel de administracin y proporcionar servicios en unos
30 idiomas. En el directorio de PHPNuke,
as como en el de la mayora de los
mdulos, se encuentra un directorio llamado language que contiene un nmero
de ficheros con el formato language.php.
Estos ficheros contienen la traduccin
para la mayora del texto que se muestra
en cada pgina y son de la forma
define("_CONSTANT","Traduccin");.
Por ejemplo, para definir lo que se muestra para la constante _YES, se podra
tener:
define("_YES","S"); -Espaol
define("_YES","Ja"); -Alemn
define("_YES","Kyll");
-Finlands

Para incluir esta funcionalidad en nuestro mdulo, hay que aadir el directorio
language en el mdulo junto con los
ficheros de los idiomas que se deseen
incluir.
Lo mejor es crear un fichero para su
idioma por defecto (como se define en el
panel de administracin) y copiarlo. Esto
asegura que todos los trminos que se
usen estarn definidos. Si se deja un trmino particular, se produce un error al
cargarse la pgina para ese idioma, lo
que va en contra de la funcionalidad del
sitio web.

RECURSOS
[1] Vase el sistema PHPNuke en accin con
varios mdulos y bloques hechos por mi:
http://www.linux-tutorial.info
[2] NukeCops FAQ para SQL Injection: http://
www.nukecops.com/article74.html
[3] Artculo sobre SQL Injection del HOWTO
de PHPNuke: http://www.karakas-online.
de/EN-Book/sql-injection-with-php-nuke.
html
[4] El sitio PHPNuke: www.phpnuke.org
[5] Gran foro de PHPNuke y otros recursos:
www.nukecops.com
[6] Como indica su nombre, contiene parches
para varias versiones:www.nukefixes.com
[7] Diversos recursos para PHPNuke: www.
nukeresources.com
[8] Temas de seguridad y parches: www.
nukesecurity.com

Python

DESARROLLO

No has encontrado tu lector RSS? Hazte uno tu mismo con Jython.

Cuando los Mundos


Chocan
Este mes, os descubrimos Jython. La forma mas sencilla
de desarrollar vuestras aplicaciones Java como si las programramos con Python.
POR PEDRO ORANTES Y JOS MARA RUZ

uchos os preguntareis que es


Jython. Bien, empecemos
desde el principio. Un grupo
de programadores, Jim Hugunim (su
creador) y Guido van Rossum (personalidad dentro del mundo de Python) entre
otros, decidieron que la simpleza y la
limpieza del cdigo de Python hara perfecto programar en Java, as que se
pusieron manos a la obra, y crearon
Jython. Jython es la implementacin de
Python en la plataforma Java, combinando la potencia de los paquetes de Java,
como JavaBeans, con la facilidad y rapidez de desarrollo de aplicaciones de
Python. Recordad que desarrollar una
aplicacin es por lo menos dos veces
ms corto en Python que en Java.
Jython posee las mismas caractersticas
de Python y adems posee la caracterstica
de poder trabajar con las libreras de Java,
de forma que, por ejemplo, podemos
disponer del bonito swing de Java o utilizar JavaBeans e incluso programar
applets. En la Web de Jython en [1] aparecen algunos ejemplos de applets
desarrollados en Jython. Esto hace de l
un lenguaje muy potente ya que nos
ahorramos tiempo, lneas de cdigo y
resulta menos engorroso de leer que Java.
Incluso podemos compilar el cdigo para
no tener la necesidad de instalar Jython
antes de ejecutar nuestra aplicacin en
cualquier ordenador ya que es capaz de
generar Bytecode Java (aunque s necesitamos tener Java, obviamente). Aunque

ciertamente no todo es positivo. Las aplicaciones desarrolladas con Jython suelen


ser bastante ms lentas que las desarrolladas con Java y de esto se quejan
muchos programadores, pero an as, la
potencia y rapidez de los ordenadores de
hoy hace que apenas se note la diferencia.
Muchos os preguntareis si hace falta
saber Java para programar Jython. En
principio, no. S es conveniente tener

idea de su funcionamiento y disponer de


la API de Java, disponible en la web de
Sun [2], para saber que queremos hacer
y como lo queremos hacer, pero la sintaxis y la forma de programar es muy
diferente. Programar en Java sin la API
de Sun resulta, en la mayor parte de los
casos, imposible. En cambio, para programar en Jython s es necesario saber
programar en Python, as pues, damos

Listado 1: Tres botones


01 import javax.swing as swing
02 import java.awt as awt
03
04 cuadroTexto =
swing.JTextField(10)
05
06 def __init__():
07
win =
swing.JFrame("Ejemplo con
botones")
08
acciones = ['uno',
'dos', 'tres']
09
10
pnlBotones =
swing.JPanel(awt.FlowLayout())
11
12
pnlBotones.add(cuadroTexto)
13
for cadaBoton in
acciones:
14
pnlBotones.add(swing.JButton(cad
aBoton,actionPerformed=accion))

15
16
win.contentPane.add(pnlBotones
)
17
win.size=(300,300)
18
win.pack()
19
win.show()
20
21 def accion(event):
22
accionBoton =
event.getActionCommand()
23
if accionBoton ==
"uno":
24
cuadroTexto.setText("UNO")
25
elif accionBoton ==
"dos":
26
cuadroTexto.setText("DOS")
27
else:
28
cuadroTexto.setText("TRES")
29 root = __init__()

www.linux-magazine.es

Nmero 04

43

DESARROLLO

Python

Listado 2: JyRSS.py
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022

#!/usr/bin/jython

034

import
import
import
import
import

035

javax.swing as swing
java.lang as lang
java.awt as awt
java.util as util
os

class Lector:

036
037
038

def exit(self, event):


lang.System.exit(0)

039
self.pnlBoton.add(lblNombre)
040

def __init__(self):
self.vectorrss =
util.Vector()
self.vectorurl =
util.Vector()
self.listaRSS()
self.listaNoticias()
self.pnlBotones()
self.menu()
if
os.path.exists('listarss.txt'
):

self.pnlBoton.add(self.txtNom
bre)
041
self.pnlBoton.add(lblUrl)
042
self.pnlBoton.add(self.txtUrl
)
043
044

self.leeFicheroRss()
self.win =
swing.JFrame("JyRss",
size=(300,
300),windowClosing=self.exit)

025
self.win.setJMenuBar(self.men
u)
026
self.win.contentPane.add(self
.pnlBoton,awt.BorderLayout.NO
RTH)
027
self.win.contentPane.add(self
.jscplista,
awt.BorderLayout.WEST)
028
self.win.contentPane.add(self
.jscpNoticias,
awt.BorderLayout.CENTER)
029
self.win.setSize(600,
400)
030
self.win.show()
031
032
def pnlBotones(self):
033
self.pnlBoton =
swing.JPanel(awt.FlowLayout()
)

44

Nmero 04

for cadaBoton in
acciones:

045
self.pnlBoton.add(swing.JButt
on(cadaBoton,
actionPerformed=self.accionMe
nu))

023
024

acciones =
["Aadir","Borrar","Leer"]
self.txtUrl =
swing.JTextField(10)
lblNombre =
swing.JLabel("Nombre")
self.txtNombre =
swing.JTextField(10)
lblUrl =
swing.JLabel("Url")

046
047
048

def menu(self):
opciones =
["Guardar"]
049
self.menu =
swing.JMenuBar()
050
archivo =
swing.JMenu("Archivo")
051
for eachOpcion in
opciones:
052
archivo.add(swing.JMenuItem(e
achOpcion,
actionPerformed=self.accionMe
nu))
053
self.menu.add(archivo)
054
055
def listaRSS(self):
056
self.lstLista =
swing.JList()
057
self.jscplista =
swing.JScrollPane(self.lstLis
ta)
058
self.jscplista.setSize(100,10
0)

www.linux-magazine.es

059
060
061

def listaNoticias(self):
self.lstNoticias =
swing.JEditorPane()
062
self.jscpNoticias =
swing.JScrollPane(self.lstNot
icias)
063
064
def leeFicheroRss(self):
065
f =
open('listarss.txt','r')
066
fu =
open('listaurl.txt', 'r')
067
linea = f.readline()
068
lurl = fu.readline()
069
while linea:
070
self.vectorrss.add(linea)
071
self.vectorurl.add(lurl)
072
linea =
f.readline()
073
lurl =
fu.readline()
074
f.close()
075
fu.close()
076
self.lstLista.setListData(sel
f.vectorrss)
077
078
def
leeFicheroNoticias(self):
079
fg =
open('news.txt','r')
080
texto = fg.read()
081
fg.close()
082
self.lstNoticias.setText(text
o)
083
084
def guardarFichero(self):
085
fg =
open('listarss.txt','w')
086
furl =
open('listaurl.txt','w')
087
j =
self.vectorrss.size()
088
i = 0
089
while i<=j-1:
090
texto =
self.vectorrss.get(i)
091
fg.write(texto
+'\n')
092
texto =
self.vectorurl.get(i)

Python

Figura 1: Nuestra utilidad busca-palabras en marcha.

por sabido todo lo que hayis aprendido


en los artculos anteriores de esta revista.
En este artculo aprenderemos a usar
elementos bsicos de Java en Jython,
trabajaremos con swing, y usaremos
algunos objetos de Java como son los
vectores, entre otras cosas. Para el ejem-

plo de este artculo nos valdremos de


una aplicacin externa ligeramente
modificada (el cdigo original lo encontrareis en la web de xml.com en [3])
desarrollada en Python, para que podis
echarle un ojo al cdigo si os apetece,
desde la cual parsearemos el xml de un
documento RSS para leer las ltimas
noticias de los blogs que mas frecuentemente visitemos. Ms adelante explicaremos esto detalladamente.

Instalacin de Jython.
Para trabajar con Jython, necesitamos
tener Java instalado en nuestro ordenador. Podemos usar el Java Runtime
Edition (j2re), o el Java Developers
Kit(j2sdk), en su version 1.4.2 como
mnimo, descargables desde [2].

Listado 2: JyRSS.py (continuacin)


093

furl.write(texto
+'\n')

094
095
096
097
098

self.txtNombre.setText("")
112

i = i+1
fg.close()
furl.close()

def accionMenu(self,
event):
099
self.accion =
event.getActionCommand()
100
if self.accion ==
'Aadir':
101
if
self.txtNombre.getText() ==
"":
102
self.vectorrss.add("SIN
NOMBRE\n")
103
else:
104
self.vectorrss.add(self.txtNo
mbre.getText())
105
if
self.txtUrl.getText() == "":
106
self.vectorurl.add("SIN
URL\n")
107
else:
108
self.vectorurl.add(self.txtUr
l.getText())
109
110
self.lstLista.setListData(sel
f.vectorrss)
111

elif self.accion ==
'Leer':

115

Adems necesitamos instalar el intrprete de Jython disponible en [1], en su


ltima versin estable (la jython-2.1) y,
por ltimo, para ejecutar nuestra aplicacin, deberemos tener instalado el
intrprete de Python (versin 2.3).
Una vez hemos descargado el intrprete de Jython, debemos proceder a la
instalacin del mismo. Ejecutamos java
jython-21 y nos saldr el instalador
(Figura 1), que nos pedir confirmar una
serie de opciones y un directorio y ya
tendremos Jython instalado en nuestro
ordenador. Adicionalmente podemos
enlazar los ejecutables de Jython a nuestro directorio de binarios del sistema (ln
-s jython-2.1/jython /usr/bin/jython y ln
-s jython-2.1/jythonc /usr/bin/jythonc en
nuestro caso) para no tener que ejecutar
los binarios desde el directorio donde lo
tengamos instalado. Esto ltimo es
recomendable, adems de que resulta
mucho ms cmodo.

Primeros pasos

self.txtUrl.setText("")
113
114

DESARROLLO

item =
self.lstLista.getSelectedInde
x()
116
url =
self.vectorurl.get(item)
117
os.system('python
lrss.py '+ url)
118
self.leeFicheroNoticias()
119
120
elif self.accion ==
'Borrar':
121
itemborrar =
self.lstLista.getSelectedInde
x()
122
self.vectorrss.remove(itembor
rar)
123
self.vectorurl.remove(itembor
rar)
124
self.lstLista.setListData(sel
f.vectorrss)
125
126
elif self.accion ==
'Guardar':
127
self.guardarFichero()
128 root = Lector()

Bueno, ya est todo preparado en nuestro sistema. Es hora de ver como funciona Jython. Para empezar, podis
trastear un poco con el intrprete como
lo habis hecho con el de Python, y as
podris ver que el funcionamiento es
idntico.
$ jython
Jython 2.1 on java1.4.2_05U
(JIT: null)
Type "copyright", "credits" orU
"license" for more information.
>>> print 'Hola Mundo'
Hola Mundo
>>>

Bien, vamos a empezar a ver algunos


ejemplitos en java. Para empezar, qu
tal el tpico Hola mundo con swing? Este
ejemplo mostrar una ventana llamada
Hola Mundo, con un cuadro de texto.
Para cerrarla tendris que cerrar el intrprete con Control + C ya que en el ejemplo, no implementamos la salida de la
aplicacin.
01 $ jython
02 Jython 2.1 on java1.4.2_05
(JIT: null)
03 Type "copyright", "credits"
or "license"
for more information.

www.linux-magazine.es

Nmero 04

45

DESARROLLO

Python

04 >>> import javax.swing as


swing
05 >>> win = swing.JFrame("Hola
mundo")
06 >>> texto =
swing.JLabel("Hola
mundo")
07 >>>
win.contentPane.add(texto)
08 >>> win.pack()
09 >>> win.show()
10 >>>

Como podis ver resulta muy sencillo a


la vez de que swing resulta muy agra-

dable para la vista. Java incluye tambin


un sistema para cambiar la apariencia
del interfaz por si no os gusta la que
arranca por defecto.

Programacin
Al igual que en Python, para nuestras
aplicaciones, lo mas cmodo es hacer
que el intrprete ejecute un fichero (o
varios) de cdigo. Jython no tiene
ningn tipo de extensin establecida
para los ficheros, y lo ms normal es
usar la misma que Python .py para tener
nuestros ficheros de cdigo bien diferenciados de los dems.

Listado 3: lrss.py
01 from xml.dom import minidom
02 import urllib
03
04 DEFAULT_NAMESPACES = \
05
(None, # RSS 0.91, 0.92,
0.93, 0.94, 2.0
06
'http://purl.org/rss/1.0/',
# RSS 1.0
07
'http://my.netscape.com/rdf/si
mple/0.9/' # RSS 0.90
08
)
09 DUBLIN_CORE =
('http://purl.org/dc/elements/
1.1/',)
10
11 def load(rssURL):
12
return
minidom.parse(urllib.urlopen(r
ssURL))
13
14 def getElementsByTagName(node,
tagName,
possibleNamespaces=DEFAULT_NAM
ESPACES):
15
for namespace in
possibleNamespaces:
16
children =
node.getElementsByTagNameNS(na
mespace, tagName)
17
if len(children): return
children
18
return []
19
20 def first(node, tagName,
possibleNamespaces=DEFAULT_NAM
ESPACES):
21
children =
getElementsByTagName(node,
tagName, possibleNamespaces)

46

Nmero 04

22

return len(children) and


children[0] or None

23
24 def textOf(node):
25
return node and
"".join([child.data for child
in node.childNodes]) or ""
26
27 if __name__ == '__main__':
28
import sys
29
rssDocument =
load(sys.argv[1])
30
fn = open('news.txt','w')
31
Noticia=""
32
for item in
getElementsByTagName(rssDocume
nt, 'item'):
33
Noticia = 'Title: __' +
textOf(first(item, 'title'))+
"__\n"
34
Noticia = Noticia + 'Link:
\n
'+ textOf(first(item,
'link'))+ "\n"
35
Noticia = Noticia +
'Description: \n\n
' +
textOf(first(item,
'description'))+ "\n"
36
Noticia = Noticia +
'\nDate: ' +
textOf(first(item, 'date',
DUBLIN_CORE))+ "\n"
37
Noticia = Noticia +
'\nAuthor: '+
textOf(first(item, 'creator',
DUBLIN_CORE))+ "\n"
38
Noticia = Noticia +
"--------------------------------------\n"
39
fn.write(Noticia)
40
fn.close()

www.linux-magazine.es

Para usar las libreras de Java, lo


primero que tenemos que hacer es
importarlas al estilo de siempre de
Python. Como hemos visto en el ejemplo
de antes, para importar las libreras de
swing, basta con importar lo que necesitemos. Imaginad que necesitamos la
clase Vector, que esta dentro del paquete
de utilidades, bien podemos hacer
import java.util as util o bien directamente import java.util.vector as vector, y
ya tendremos acceso a esa clase. Para
utilizarla bastara con llamar a su constructor (os recuerdo que tengis siempre
a mano la documentacin del API de
Java) con l, crearemos una ocurrencia
vector (en este caso), pepe = util.vector() y una vez creada, podemos acceder
a cualquiera de sus mtodos directamente en la ocurrencia que acabamos de
crear, pepe.add(Hola) que, para los
que no estn muy familiarizados con
Java, aade un objeto de tipo String
(cadena de caracteres) al vector.
Cada ocurrencia de Java tiene el
mismo funcionamiento en Jython. Es
importante que tengis esto en cuenta.
Ahora vamos a mezclar un poco de cada
(Figura 2). Para ello voy a crear tres
botones, a cada uno lo llamaremos de
una forma distinta y les aadiremos un
listener (para coger los eventos que produce cada botn) de forma que al pulsar
en cada uno, se escriba su nombre en un
cuadro de texto. Veamos como se hace
esto en el Listado 1.
Es sencillo verdad?, si os dais cuenta,
para crear los botones he usado cdigo
propio de Python usando una lista con
los nombres de los botones y crendolos
con un bucle for, dentro del cual llamo al
constructor de JButton, pasndole unos
argumentos, y aadindolos en el panel
mediante el mtodo .add() que implementa JPanel. Bueno, espero que os haya
gustado el ejemplo porque ahora viene
nuestra aplicacin en serio.

Lector de Noticias RSS -JyRSSPuede que algunos de vosotros os preguntis que es RSS. RSS no es ms que
un fichero .xml con una serie de etiquetas. stas siguen un estndar definido
por xml.com para transmitir pequeas
noticias, por ejemplo, a travs de
Internet, de forma que no haga falta
abrir un navegador para leerlas, slo
bastara con usar una aplicacin que

Python

Figura 2: Ejemplo con botones Swing.

Figura 3: Buscador desde la lnea de comandos.

direcciones. El vector de nombres se lo


pasaremos a la ocurrencia JList para que
aada todos los nombres de los sitios en
pantalla. Usaremos el paquete java.lang
para implementar la funcin de salir de
la ventana al pulsar la x de nuestra aplicacin (no se implementa por defecto).
De Python, haremos uso del paquete
os, desde el que nos valdremos de
os.path.exists() para comprobar si existe
el fichero de nombres al arrancar la aplicacin y de os.system() que ejecutara el
script Python que leer las noticias. ste
guardar las noticias en un fichero, que
luego leer nuestra aplicacin. No os preocupis si veis que tarda un poco, eso es
por dos motivos, tiene que descargar el
fichero de Internet, y adems tiene que
parsearlo y las libreras que utiliza
(minidom) son bastante lentas. Usaremos
tambin las utilidades de escritura y lectura de ficheros (open(), write(), read(),
etc) para manejarnos con ellos.
Podemos ver el resultado en la Figura 3.
Como veis, programar java con Jython
no resulta para nada difcil, al contrario,
resulta muy cmodo, y desde luego
mucho mas sencillo que Java. En el
Listado 3 encontrareis el cdigo Python
de la pequea aplicacin externa.
Pongo los nombres de las clases y
paquetes de Java que se van a usar, para
que os vayan sonando cuando vayis
leyendo el cdigo. As podris buscar
ms rpido en la API de Java y no tendris problemas para encontrarlas.
Vuelvo a hacer hincapi en que es necesario que lo tengis.

servir para practicar con el cdigo que


os dejamos. Por ejemplo, hacer que el
cuadro JEditorPane os cambie la apariencia del texto (negrita, cursiva, etc),
que cada vez que pulsis sobre un nombre en la JList lea la noticia directamente
(deberis trabajar con el listener de
JList), aadir la opcin de guardar las
noticias del sitio que mas os gusten,
etc

Entornos de programacin
Jython.
Mucha gente prefiere trabajar con IDEs
(interfaz para el desarrollo de aplicaciones) a la hora de programar.
Actualmente no he encontrado an
ninguno que sea exclusivamente para
desarrollar en Jython. Lo que s existe,
son plugins que instalamos en otros
IDEs y que nos permiten trabajar con
este lenguaje. Podemos encontrar diferentes plugins para dos de los IDEs ms
populares, uno para Netbeans (ver [4])
que os podis bajar desde la aplicacin
de actualizacin que lleva implementada. Y luego tenis otro para Eclipse (ver
[5]), llamado Red Robin que podis
encontrar en [6]. Tanto en la web de
Netbeans, como en la web de Red
Robin, se explica como debemos insta
larlos.

RECURSOS
[1] Pgina de Jython: http://www.jython.org
[2] Descarga de Java: http://java.sun.com
[3] Cdigo original del programa: http://
www.xml.com/lpt/a/2002/12/18/
dive-into-xml.html
[4] Plugins de Netbean: http://www.
netbeans.org
[5] IDE Eclipse: http://www.eclipse.org
[6] Plugin Jython para Eclipse: http://home.
tiscali.be/redrobin/jython/

Jos Pedro Orantes est cursando 3

Mejoras para JyRSS

de Ingeniera Tcnica en Informtica

Es obvio que a este cdigo le faltan


muchas cosas adems de que debe tener
varios bugs como por ejemplo que al
pulsar el botn Leer cuando no hay
ninguna url y/o ningn nombre, Java
lanza una excepcin. Os animamos a que
lo depuris.
Os sugerimos que le hagis algunas
mejoras, ya que de esta manera os

LOS AUTORES

descargue y prepare la noticia para que


la podamos leer, como hace nuestra aplicacin JyRSS.
Para empezar, necesitamos el cdigo
que hemos mencionado al principio del
artculo. Este cdigo ser el encargado
de descargar y parsear el fichero RSS con
las noticias, de forma que guardar en
un fichero, el contenido ya parseado del
documento RSS para que nuestra aplicacin pueda cargar su contenido dentro
de un cuadro de texto. Tiene algunas
limitaciones y es que no soporta todas
las codificaciones de texto, por lo que os
recomiendo que cuando lo probis, usis
direcciones extranjeras, a ser posible en
ingls, como Slashdot.com (http://www.
slashdot.com/index.rss) ya que con
algunos blogs en castellano, como barrapunto.com, no funciona correctamente
debido a una serie de caracteres contenidos en el documento.
JyRSS constar de varias partes. Un
JFrame (ver Listado 1) donde irn embebidos el Panel de botones y los cuadros
de texto. Uno de los cuadros de texto es
un JList donde mostraremos los nombres
de los sitios que contienen las noticias y
el otro un JEditorPane donde se
mostraran las noticias. Adems ambos
hacen uso de JScrollPane para que
puedan hacer scroll en caso de que haya
texto que ocupe toda la pantalla.
Tambin hacemos uso del JMenu y de
JMenuBar para crear el pequeo men
archivo, donde est la opcin de
guardar, que guardar en dos ficheros
(uno con los nombres de los sitios y otro
las urls de cada sitio) todos los sitios web
que le hayamos aadido. Este men no
es nada necesario, pero queramos
incluirlo para que vierais lo fcil que es
crearlo.
El panel de botones tendr tres
JButtons, uno para aadir una nueva url
a la lista, uno para borrar una url de la
lista y otro que lanzar el pequeo parser de RSS (lrss.py) y nos mostrar las
noticias de cada sitio que aparecern en
el JEditorPane.
Tambin se hace uso de la clase Vector.
Usaremos dos vectores, uno para
guardar los nombres y otro para las

DESARROLLO

de Sistemas y desde hace tiempo utiliza linux como herramienta de


trabajo. Jos Mara est realizando el
Proyecto Fn de Carrera de Ingeniera
Tcnica en informtica de Sistemas y
lleva 7 aos usando y desarrollando
software libre, y desde hace dos en
FreeBSD.

www.linux-magazine.es

Nmero 04

47

KNOW HOW

Scribus

Maquetacin en Linux con Scribus

Un Peridico en Linux
En este primer artculo de una serie
de tres, el ex-director artstico de un
peridico, Jason Walsh, echa un vistazo a la autoedicin en Linux. Jason
crear un peridico usando Scribus
junto con otras aplicaciones Linux y
lo probar en una editorial real.
POR JASON WALSH

a clave del incremento de la penetracin industrial de Linux no ha


sido en el uso generalizado de ordenadores, sino que ha sido gracias la
invasin sistemtica en distintos nichos,
notablemente en los servidores web, clculo cientfico y desarrollo de aplicaciones. Es indiscutible que ha sido un
rotundo xito. En la actualidad a Linux
le pertenecen varias reas claves de la
informtica.
Una de las reas en las que Linux no
ha hecho grandes avances es en el
mundo de la autoedicin, una industria
que pertenece casi exclusivamente a
Apple Macintosh. Despus de aos de
dirigir a los usuarios potenciales a sistemas complejos y poco extendidos
como LaTeX, Linux por fin tiene una

Salida
Antes de la etapa RIP, habr que exportar
nuestras pginas a ficheros PDF. Los PDF de
Adobe se han convertido en los formatos
estndar para el intercambio de documentos impresos; si su PDF se crea de forma adecuada, se podrn imprimir en un amplio
rango de dispositivos de salida, incluyendo
impresoras de chorro de tinta, prensas digitales y prensas offset de cuatro colores.

48

Nmero 04

excelente herramienta WYSIWYG de


escritorio para la autoedicin.
En esta serie produciremos cuatro
hojas de peridico de prueba bajo Linux
que sern evaluadas por David Hunter
del departamento de preimpresin del
Belfast News Letter, la ms antigua publicacin diaria continuada en lengua
inglesa del mundo.
Podramos decir que esta mini-edicin
equivaldra al Hello World de la
autoedicin de escritorio de Linux.

Historia de la Edicin
Anteriormente a la aparicin de sistemas
de escritorio WYSIWYG para la edicin,
la produccin de peridicos y revistas
era un complicado y arcano proceso que
implicaba equipos especializados como
mquinas de linotipia, cmaras de procesos e impresoras de bromuro. El interfaz
de usuario grfico del Apple Macintosh y
su
primera
aplicacin
estrella,
Pagemaker, lo cambi todo para siempre.
Despus de siglos, la maquetacin era
accesible para cualquiera, al menos a
cualquiera que pudiera permitirse un
Mac y una copia de Pagemaker.
El dominio de Pagemaker ha declinado
hasta el punto de ser casi un producto
usado en las empresas exclusivamente

www.linux-magazine.es

para crear boletines de noticias. La aplicacin ms importante en el mundo de


la edicin profesional es Quark XPress. A
finales de los noventa, un serio rival ret
a Quark llegado desde Adobe: InDesign.
InDesign ofreca la mayora de las caractersticas de Quark XPress, adems de
otras muchas que no tena Quark, todo
con el interfaz de usuario de Adobe, que
los diseadores ya conocan gracias a
Photoshop e Illustrator. Ni Quark ni
InDesign se encuentran disponibles para
Linux, ni tampoco parece que sea probable que lo vayan a estar en breve.

Presentamos Scribus
Sin embargo an no est todo perdido.
Siguiendo la tradicin del cdigo abierto, cuando una aplicacin no est
disponible, un grupo de programadores
se renen para producir una alternativa
gratuita. Esa alternativa es Scribus
(vase la Figura 1).
La instalacin de Scribus es razonablemente sencilla, desafortunadamente no
hay paquetes binarios universalmente compatibles, pero compilarlo es bastante fcil:
./configure
make
make install

Scribus

Figura 1: Scribus ejecutndose en Suse 9.1. Por fin, una aplicacin de maquetacin con calidad profesional llega a Linux.

Luego se configura. Alternativamente,


estn disponibles para los sistemas Red
Hat paquetes RPMs, y tambin estn
soportados Gentoo y Debian.

Creacin de Pginas
Para nuestro proyecto vamos a trabajar
con unos requerimientos especficos predefinidos. El resultado final ser un cierto nmero de pginas para un peridico.
El primer paso es definir la forma y el
tamao de la pgina, junto con algunos
otros parmetros comunes: mrgenes y
columnas.
La Figura 2 muestra el cuadro de dilogo de las propiedades de maquetacin de
Quark XPress 6 en el Mac OS X (Layout
> Layout Properties). Si se est pasando
a Scribus desde Quark, el primer paso es
copiar estos datos bsicos e introducirlos
en Scribus. Si se est creando una nueva
maqueta,
hay
que
definir
las
propiedades equivalentes.
Por qu no se importa la plantilla
original de Quark a Scribus? Porque
lamentablemente Scribus no puede
importar ficheros de otras aplicaciones
de maquetacin. Tal y como dicen los
desarrolladores, los formatos de
ficheros DTP son internamente muy
complejos, probablemente los ms com-

plejos en un PC. Crear los filtros para


importar/exportar es una tarea mucho
ms compleja que la de importar los formatos de ficheros de una hoja de clculo
o de un procesador de textos.
Esto es un impedimento, pero es un
problema comn. Adobe InDesign puede
abrir ficheros de Quark 4 pero no de
Quark 5 o 6. Quark no puede abrir
ningn fichero de InDesign, ni siquiera
Quark versin 6 puede guardar como
versin 4. Siguiendo un grado de cordura
con respecto a la apertura de archivos
que parece que ni Quark ni Indesign
muestran, Scribus usa el estndar XML
para su formato de fichero nativo. Esto
significa que ser posible abrir los
ficheros de Scribus en otras aplicaciones
de maquetacin en el futuro.
Tabloid (el formato de pgina que
vamos a usar para el peridico) en
EE.UU. se refiere a un tamao especfico
de pgina de 279.4mm x 431.8mm. En
Europa, es un trmino ms o menos
genrico que se refiere a una pgina de
peridico de un tamao aproximado a
un A3, la mitad del tamao de la hoja
completa, a todo lo ancho, que compone
el peridico.
El cuadro de dilogo New Document
en Scribus es donde la pgina bsica se

KNOW HOW

crea inicialmente (vase la Figura 3). La


pgina que vamos a crear servir de
plantilla para las siguientes (y de hecho,
para todas las dems, aunque ligeramente modificadas). Nuestras plantillas
van a ser muy bsicas, simplemente se
definen el tamao y la forma de la pgina y si van a tener mrgenes.
Nuestro proyecto ser de 297mm x
386mm; bastante parecido al tamao de
hoja del peridico ingls Independent y
algo diferente de la mayora de los
tabloids. As pues pondremos en el
ancho 297mm y en el alto 386mm.
La impresin al filo de la pgina es
bastante comn en las revistas, pero es
bastante raro en los peridicos ya que las
prensas no son capaces de realizarlas.
Incluso cuando son capaces, nunca se
usan en la pgina delantera. Hay que
definir un rea imprimible y lo hacemos
estableciendo los mrgenes en el cuadro
de dilogo New Document. Estas
propiedades son definidas por el peridico y difieren de unos a otros. En nuestro
caso, los mrgenes los estableceremos
en: Top, 29mm; Bottom, 16mm; Inside,
8mm; Outside 23mm.
Los mrgenes se han establecido de
forma desigual para crear una zona rectangular de 265mm x 340mm: sta es el
rea mnimamente imprimible en la
posicin correcta.
En algunas pginas los elementos
pueden salirse de este rectngulo inicial;
en otras palabras, podran no imprimirse. Esto es un asunto de paginacin e
imposicin que es, de nuevo, impuesto
por el peridico y no por el diseador,
as que no vamos a discutirlo en detalles
aqu.
Dentro de este rectngulo central,
definiremos ms tarde nuestra maquetacin principal basada en cinco columnas de texto. Scribus maneja las columnas de manera diferente a como lo hacen
otras aplicaciones DTP (se ver ms adelante) pero el diseo es eficiente y muy
manejable.
El cuadro de dilogo New Document
tiene otras opciones: marcos de texto
automticos rellenan el rea imprimible
con un marco de texto en cada pgina
nueva, tiles para la creacin de grandes
documentos como diseos de libros,
pero sin relevancia aqu.
El resto de las opciones son relativas a
la impresin. Hay que asegurarse de que

www.linux-magazine.es

Nmero 04

49

KNOW HOW

Scribus

tria. Por extrao que parezca,


hay cientos de publicaciones
que no cuentan con un departamento de TI; con sistemas basados en Mac, simplemente no
necesitan tener dentro de la
empresa un departamento de
TI.
La principal objecin a
Scribus parece estar en su uso:
la maquetacin basada en marcos; es decir, todos los objetos
estn contenido dentro de un
marco y pueden ser manipulaFigura 2: El men de las propiedades de la pgina en Quark
dos de dos formas: como un
XPress muestran los parmetros por defecto del East Belfast
objeto o como un contenido.
Observer.
Esta forma de trabajo es
comn tanto en Quark como en
InDesign y de hecho es una forma muy
se marca la opcin Facing Pages que
eficiente de separar diseo de contenido.
hace que la maquetacin corresponda a
Ms an, es esencial para Scribus el ofreuna disposicin de dos pginas de
cer un entorno cmodo para impresores
ancho.
profesionales, ya sean diseadores, periCuando las pginas se imprimen, se
odistas o subeditores, si lo que se prehacen en pares. La de delante y la de
tende es introducirse de forma seria en el
atrs lo hacen juntas y se doblan por la
mundo de la edicin.
mitad y cubren a las siguientes y as con
Una vez que uno se acostumbra a ello,
todas. Un peridico completo se forma a
esta forma de trabajar es bastante propartir de varios ficheros con distintos
ductiva: para situar el texto en la pgina,
nmeros de pginas, en vez de hacerse
primero se debe crear un marco de texto,
con un solo fichero que contenga el peluego se inserta o se teclea el texto denridico entero. Esto permite que difetro del marco. Para colocar una imagen
rentes pginas puedan ser creadas en
en la pgina, se crea un marco de imamomentos diferentes (y por personas
gen y luego se importa la fotografa o el
diferentes) e impide que los ficheros de
grfico dentro de este marco. De esta
Scribus lleguen a ser tan grandes que no
forma, los marcos y los contenidos que
se puedan manejar.
albergan pueden ser manipulados indeMaquetacin Basada en
pendientemente.

Marcos

Algunos de los crticos de programas de


cdigo abierto se han quejado del interfaz de Scribus, criticando que no es muy
apropiado para los usuarios domsticos.
Esta es una crtica bastante extraa, ya
que este software est enfocado a usuarios profesionales. Tanto Quark XPress
como Adobe InDesign no son nada intuitivos para los usuarios amateurs, pero la
publicacin es un mundo complejo
esto no es un procesador de textos.
Uno de los grandes problemas a los
que se enfrenta Scribus es al hecho de
que no dispone de una versin binaria
estable universalmente compatible.
Esperar que los diseadores y periodistas
compilen software desde los fuentes es
ridculo y es un serio impedimento para
que Scribus sea adoptado por la indus-

50

Nmero 04

Gestin del Color

unidos un efecto global sobre el resultado final.


Una de las reas que es ms difcil de
conseguir es la reproduccin del color y
aunque todos los elementos nombrados
anteriormente tendrn un impacto, es
importante asegurarse que antes de
enviarse los ficheros a la imprenta que
sean de tan alta calidad como sea posible.
El color es un tema sorprendentemente complejo. La gestin interna del
color fue una de las mayores ventajas
jugadas por los Macintosh como
plataforma de impresin y una de las
mayores desventajas de Linux. Hasta
ahora.
La gestin del color es una tecnologa
que se usa para calibrar el color de los
dispositivos de entrada, los monitores y
los dispositivos de salida. La clave principal es el espacio de trabajo. Esto es
una referencia de color que no est ligada a ningn dispositivo especfico,
comnmente sRGB, un perfil bsico de
adicin del color adecuado para los monitores. El problema que representa es
que los dispositivos de salida, ya sean el
monitor o la impresora, deben hacer una
transformacin desde sRGB a su espacio
nativo de color y la calidad de esta transformacin ser determinada por la calidad del driver del dispositivo.
Un mtodo mejor es el uso de un sistema de gestin de color compatible
con
el
International
Color
Consortium. El ICC define un estndar
abierto para los mdulos de coincidencia de color, preferiblemente definidos
a nivel del SO y perfiles de colores
tanto para los dispositivos como para el
espacio de trabajo.
La tecnologa de gestin del color
puede ser implementada por el sistema

La impresin es ms un arte que una


ciencia y es perfectamente posible
saberlo todo sobre ella y an as
enfrentarse a un desastre en el peridico. Hay demasiadas
variables para ser
sinceros, y muchas
de ellas no pueden
ser
controladas
desde el escritorio.
El tipo y grado del
papel a usar, la calidad y la viscosidad
de la tinta, el tipo y
los aos de la
Figura 3: El cuadro de dilogo New Document de Scribus. En este dilogo
imprenta y la habilise define la forma bsica de la pgina. Hemos usado aqu los parmetros
dad de los impreusado por EBO tomados de Quark XPress.Hugin.
sores tendrn todos

www.linux-magazine.es

Scribus

Figura 4: El ttulo del East Belfast Observer.

operativo, en la API, o directamente por


la aplicacin. Desde hace aos, Mac OS
ha incluido un software de la propia
Apple para la gestin del color,
ColorSync. Actualmente Linux cuenta
con una solucin compatible denominada LittleCMS. Los usuarios domsticos
puede ser que no necesiten instalar
LittleCMS, pero para los usuarios profesionales es obligatorio.
LittleCMS incluye perfiles de color
estndar ICC y una vez instalado
LittleCMS, los ficheros PDF producidos
por Scribus sern impresos tal y como
aparecen en pantalla. Sin l, habr que
estar adivinando como quedar un color
dado al imprimirse.
Es importante entender que LittleCMS
no es una aplicacin propiamente dicha,
sino ms bien, es una biblioteca de programacin que puede utilizarse en el
desarrollo de aplicaciones y Scribus es
una de las aplicaciones que la usan. Si se
instala antes de instalar Scribus, Scribus
automticamente la usar.
Desafortunadamente, en Linux, el
nico programa de retoque fotogrfico
que soporta gestin del color es Corel
Photopaint. Esperemos que las bondades
de LittleCMS sean aprovechadas por los
desarrolladores de GIMP antes de que se
les escape el tren.
El aspecto ms importante a la hora de
usar un sistema de gestin de color es
recordar activarlo. Cuando llegue el
momento de exportar nuestros PDFs
finales, volveremos sobre esto en detalle,
pero por ahora se puede echar un vistazo
en File>Export>Save Page as PDF. En el
cuadro de dilogo que aparece, hay que
seleccionar la solapa color. Si se tiene
LittleCMS instalado, se ver un men
desplegable bajo PDF/X-3. Este men
contiene los perfiles de impresin.
Consltese la impresora y seleccinese el
ms relevante.
En nuestro caso de prueba, el perfil
correcto va a ser Euroscale Uncoated v2.

KNOW HOW

forma correcta, los elementos con color


como fotografas y grficos, deben estar
en el espacio de color CMYK. Las imgenes en las pantallas de los ordenadores
suelen estar en formato RGB, Rojo, Verde
y Azul. Estos son los colores primarios
aditivos usados para formar colores
secundarios y terciarios con luz.
Pero con tintas, es necesario usar los
colores primarios substractivos, Rojo,
Amarillo y Azul. En impresin, son sustituidos por Magenta, Amarillo y Cin,
que ofrecen una gama ms amplia de
colores imprimibles. El orden en que los
colores son impresos es, primero el Cin,
luego el Magenta y por ltimo el
Amarillo: CMY. La K viene de Key
(clave), que es el color de registro,
Negro. Sin la plancha final de negro, en
el resultado final los elementos en negro
como el texto, se veran como marrn
oscuro, prpura o verde.
Si se imprime un fichero RGB en una
impresora de chorros de tinta, algunos
colores parecern estar fuera de la
gama, esto es, fuera del rango de colores imprimibles. Una inconveniencia,
pero no un desastre.
Si se est imprimiendo en una prensa
CMYK, es de vital importancia hacer
coincidir los colores RGB vistos en la
pantalla con la gama de colores CMYK
que se van a imprimir.
Ms an, si se envan los ficheros RGB
al RIP, no sern reconocidos como imgenes en color y se imprimirn como un

Porque Euroscale es un intento para proporcionar un perfil genrico para


Europa. Opciones para Amrica del
Norte
y
Japn
estn
tambin
disponibles, Web/SWOP y Japan Color
respectivamente, as que si usted vive en
Amrica o Japn, el escoger el perfil adecuado le proporcionar los mejores
resultados. Uncoated se refiere al tipo de
papel; muchas revistas se imprimen en
papeles caros con brillo, pero no los peridicos.
Para saber que gestor del color es
esencial, es necesario comprender los
principios bsicos de la impresin offset,
ya que difiere de forma significativa de la
impresin por chorros de tinta.
La impresin offset, litografa, es el
proceso con el que se imprimen los pe
ridicos. Los ficheros se pasan por un
RIP o Raster Image Processor, que lo
convierte en una imagen PostScript.
Cada pgina se convierte en una imagen
simple, que posteriormente se imprime
en una pelcula y se transfiere a una
plancha de aluminio.
Esta plancha se fija a un
tambor que rueda a travs de
una cubeta de agua. El agua
se adhiere a las partes negativas
de
la
imagen.
Posteriormente, la plancha
pasa por una cubeta de tinta,
que se adhiere a las reas
positivas; el siguiente paso,
es hacer rodar un tambor de
goma sobre la plancha para
escurrir el agua y recoger la
tinta. Este tambor se hace
rodar sobre el papel para
transferir la tinta.
El color se imprime separndolo en cuatro planchas
distintas, una para cada color
usado en el proceso de impreFigura 5: Despus de exportar el ttulo del programa de dibujo
sin. Este proceso se denomi en nuestro caso Inkscape se abre con GIMP y se cambia a
na separacin del color. Para
imagen de 1 bit seleccionando Image>Mode>Indexed y escoque este proceso funcione de
giendo una paleta de 1 bit con No Color Dithering.

www.linux-magazine.es

Nmero 04

51

KNOW HOW

Scribus

film nico. El resultado final ser una


especie de imagen en escala de grises.
Usar colores CMYK significa que no se
acabar accidentalmente con una pgina
monocromo; el uso de un gestor de colores significa que los colores que se ven
en las pruebas sern los mismos que los
del resultado final.

tos por pulgada (vase la Figura 5). 600dpi


es una resolucin increblemente alta,
especialmente teniendo en cuenta que la
prensa que vamos a usar imprime a unos
180dpi, entonces por qu molestarnos
con esta resolucin tan alta?
Los ficheros que usan un espacio de
color de 1 bit son en blanco y negro: no
son de escala de grises, sino literalmente
Elementos de la pgina
en blanco y negro. Hablando de forma
Las pginas consisten en tres elementos
genrica, TIFFs de 1 bit se usan para
bsicos: textos, grficos y espacios en
delineacin. La ventaja de usar un espablanco. La proporcin de cada uno de
cio de color de 1 bit es que el color de las
ellos depender de lo que se est dilneas (o en nuestro caso de los caracseando; la publicidad difiere de forma
teres) pueden ser cambiados dentro de la
significativa del contenido editorial y las
aplicacin de maquetacin, as que un
pginas de la editorial diferirn de publisimple fichero fuente puede usarse para
cacin a publicacin e
mltiples variaciones de la
incluso dentro de la misma
misma imagen. El lado
publicacin.
negativo de las imgenes
Con algunas excepciones
de 1 bit es que se
notables, como el francs
degradan a baja resoluLibration y el ingls
cin. Incluso a 300dpi una
Guardian, el diseo de un
imagen de 1 bit empezar
peridico no es nada imaa mostrar bordes rugosos.
ginativo. No es que los pePara importar el ttulo,
ridicos estn mal diseaseleccionamos
Insert
dos, simplemente es que el
Picture, el tercer icono de
criterio es diferente del de
la barra de herramientas y
otras reas del diseo grdibujamos un marco que
fico.
ocupe el rea entera
Los dos aspectos claves
imprimible entre los dos
en el diseo de un peridimrgenes.
co son: la facilidad de lecA continuacin, selectura y la facilidad de
cionamos File> Import
Figura 6: El cuadro de dilogo
maquetacin. La primera
>Get Picture. Despus de
de Propiedades de Scribus,
es importante porque un
seleccionar el fichero
donde se ajusta casi
peridico debe ser digerido
apropiado, seleccionamos
cualquier aspecto de un
rpidamente por un lector
Tools>Properties para lleobjeto.
genrico, no por un espegar al cuadro de dilogos
cialista. Siendo consisde Propiedades de Scribus
tentes y ajustndonos a ciertas reglas
(vase la Figura 6) y seleccionamos
bsicas harn que la tarea de lectura sea
Image. Se selecciona la opcin Scale to
bastante fcil. El otro aspecto es imporFrame Size y nos aseguramos de que el
tante porque, a diferencia de las revistas,
botn proportional est marcado. El ttuque tienen una tirada mensual, los pelo debera ahora tener el ancho de la
ridicos suelen ser diarios y suele haber
pgina frontal del peridico, excluyendo
una presin significativamente alta sobre
los mrgenes.
el equipo de maquetacin.
Encima del ttulo hay tres cajas, que
Para nuestro peridico de prueba, el
resaltan el contenido dentro del peridico.
primer elemento va a ser el ttulo (vase
Estas cajas son marcos vacos de imgenes
la Figura 4). En este caso, las fuentes
que han sido coloreados usando el cuadro
usadas han sido Gill Sans Light Italic y
de dilogo Tools>Properties>Colors.
Gill Sans Bold Condensed.
Directamente debajo del ttulo estn la
Para nuestro peridico el ttulo es un
fecha y el nmero del peridico, adems
fichero TIFF de alta resolucin que se cre
del precio. Ambos han sido creados con
en Inkscape, se export y se convirti a un
elementos de textos en Scribus de la forma
TIFF de 1 bit a una resolucin de 600 punhabitual. Es tambin posible crear el ttulo

52

Nmero 04

www.linux-magazine.es

como un marco de texto dentro de Scribus,


pero como es un elemento inalterable, es
mejor usar un fichero grfico, ya que se
podra colar una errata con el tiempo.
El siguiente elemento a incluir es el
texto. En trminos de entrada de texto,
es ineficiente introducirlo directamente
en Scribus. Incluso si se tiene un monitor bastante grande, se perder bastante tiempo haciendo zoom para leer
las partes de las pginas. En vez de
ello, se debera preparar todo el texto a
introducir en un fichero con un procesador de textos como el Writer de
OpenOffice, corregirlo, comprobando
las ortografa e importarlo posteriormente a Scribus.
En este punto se debera salvar el texto
como texto plano antes de importarlo a
Scribus. A partir de la versin 1.2.1,
Scribus ya puede importar texto directamente de ficheros OpenOffice (.sxw). La
ventaja de esto es que se respetan las
caractersticas estticas del original,
pudiendo importarse negritas, cursivas,
subrayados y, si Scribus apunta a los
mismo directorios de fuentes que
OpenOffice, el tipo de letra.
El prximo mes discutiremos en
detalle la forma de trabajar con el texto,
pero por ahora concentrmonos en conseguir incluir algn texto dentro de la
maqueta.
Conseguir meter el texto es tarea
fcil: seleccionamos el botn Insert Text
Frame de la barra de herramientas de
Scribus y dibujamos un marco en la
pgina, donde se quiera que el texto
aparezca. A continuacin, seleccionamos File> Import> Get Text. El
texto del fichero seleccionado fluir
dentro del marco seleccionado.
Para editar el texto, seleccionamos Edit
Contents of Frame de la barra de herramientas y usamos el cursor con forma de
I para marcar el texto de la forma que se
desee como en cualquier procesador de
textos. Alternativamente, se puede usar
el Story Editor (tambin en la barra de
herramientas) para editar el texto.

Conclusin
Este artculo nos ha presentado Scribus,
una aplicacin de maquetacin con calidad profesional de cdigo abierto para
Linux. En el prximo nmero, aprenderemos a manipular el texto y los grficos

en el entorno de Scribus.

Panoramas

KNOW HOW

Panormicas perfectas con Hugin, Enblend y Autopano-SIFT

Vistas de 360 grados

Podemos crear una imagen agradable alineando mltiples paisajes para conformar un panorama. Pero la alineacin
puede ser complicada, especialmente si las fotografas individuales no coinciden. Herramientas como Hugin, Enblend y
Autopano-SIFT pueden ayudarnos a crear panormicas perfectas sin marcas.
POR OLIVER FROMMEL

i tenemos ms fotos de las que


podemos ajustar en una imagen
puede que queramos intentar el
viejo truco de combinar mltiples
fotografas digitales en una agradable
vista panormica. Ser muy difcil combinar estas fotografas en una imagen sin
cortes usando Gimp. Este artculo trata
algunas de las herramientas alternativas
que podemos usar para ajustar y alinear
las imgenes automticamente. Estas
herramientas crearan panormicas sin
cortes partiendo de fotografas separadas.

Es fcil tomar una serie de fotografas


para formar una panormica, pero aqu
es donde comienza el problema. Es difcil conseguir cortes suaves e invisibles.
Normalmente, las fotografas estn tan
deformadas que es imposible corregirlas
manualmente. Las lentes son parcialmente culpables. stas distorsionan normalmente las imgenes, convirtiendo
lneas rectas en curvas que hacen la
composicin de fotografas difcil.
La otra razn es la distorsin causada
por la propia realizacin de una serie de
fotografas. Si permanecemos quietos y

Cuadro 1: PanoTools
Durante mucho tiempo, el paquete
PanoTools fue el nico software gratuito para
crear imgenes panormicas. Las condiciones de la licencia de PanoTools siempre
han sido complejas. La librera y PTOptimizer
se distribuye bajo la GPL, mientras que se
aplican varias licencias a algunos de los programas.

Debido a que el autor del programa, Helmut


Dersch, ya no tiene el programa en su pgina
Web, otras personas ofrecen paquetes
antiguos. De hecho hay incluso algunos versiones comerciales, si bien puede que no sean
del todo legales. Se ha fundado un proyecto
Sourceforge para mantener las partes gratuitas de PanoTools [1].

giramos la cmara de izquierda a


derecha, los objetos de la derecha de la
imagen aparecern muy grandes, mientras que los de la izquierda sern ms
pequeos.
Hay software gratuito que nos puede
ayudar a corregir este tipo de distorsin,
alinear imgenes individuales y finalmente montarlas para crear una
panormica.

Ecualizacin y Alineado de
Fotografas
El programa de grficos Hugin [2] muestra las imgenes permitiendo al usuario
seleccionar puntos neurlgicos para
ecualizar y alinear las imgenes.
El programa es fcil de instalar pero
requiere algunas libreras que algunas
distribuciones no incluyen. En el
recuadro Instalacin hay ms detalles
al respecto de la instalacin.
Tras escribir hugin para lanzar el programa aparece la ventana mostrada en la
figura 2. Pulsamos Add individual

www.linux-magazine.es

Nmero 04

53

KNOW HOW

Panoramas

Figura 1: Carga de las imgenes individuales en la ventana principal de

Figura 2: La pestaa Camera and Lens.

Hugin.

images para seleccionar imgenes


individuales. En el dilogo que aparece
podemos mantener pulsado [Ctrl] y pulsar para seleccionar mltiples imgenes.
Hugin muestra una lista de imgenes en
el panel de la izquierda aadiendo algunos
detalles como la anchura y altura o los
valores de rotacin (Yaw, Pitch, Roll), si
bien estos cuentan con el valor cero por
defecto. Hugin usa la primera fotografa
como punto de referencia para alinear las
otras imgenes. El botn Anchor this
image permite seleccionar otra imagen
como punto de referencia.
La segunda pestaa, Camera and
Lens, se usa para corregir las distorsin

ptica causada por la cmara y las


lentes. Si nuestras imgenes incluyen
informacin
EXIF,
Hugin
puede
automticamente extraer los datos
requeridos. Si no conocemos el ngulo
de la vista de nuestras lentes debemos
consultar la Tabla 1 (extrada de la documentacin de PanoTools).
El conmutador Inherit permite que el
resto de las imgenes adquieran los
ajustes de la imagen actual. Si deshabilitamos estos ajustes el programa puede
gestionar imgenes con diferentes valores de distorsin. Tras descubrir los
mejores valores para nuestra cmara
(mediante el mtodo de prueba y error)

podemos almacenar estos valores en


Lens Management y cargarlos para nuestros prximos proyectos panormicos.

Puntos de control manual


Hugin necesita unos detalles definitivos
de las imgenes para ser capaz de
alinearlas correctamente. La pestaa
Control Points se encarga de esto. La pestaa nos muestra las dos imgenes permitindonos pulsar sobre los puntos de
control para crear asignaciones.
Primero debemos ajustar Hugin para
que muestre dos imgenes adyacentes
ajustando el nmero en la pestaa sobre
la imagen de la derecha un nmero ms

Cuadro 2: Instalacin
Hugin necesita la librera WxWidgets
(antiguamente WxWindows) y la extensin
WxWidgets-XRC. La mayora de las distribuciones incluyen las otras libreras requeridas, como Libtiff, LibPNG y LibJPG. Al margen del paquete matemtico FFTW, Hugin
tambin necesita la librera Boost Library si
pretendemos construir Hugin nosotros
mismos.
Desafortunadamente, la versin y nombre
dependen de la distribucin. Por ejemplo, la
librera Boost de desarrollo para Fedora
simplemente se llama libboost-devel; los
usuarios de Debian necesitan tres paquetes
llamados libboost-graph-dev, libboostdev y
libboost-python-dev. Los archivos requeridos para Fedora estn localizados en el subdirectorio del DVD. El siguiente comando
instala las libreras:
rpm -iv panorama-tools-2.7a-1.U
i386.rpm wxGTK-* fftw2-*

54

Nmero 04

Las herramientas Panorama incluyen libpano12,lo que no impide que el paquete gestor
se queje de que el paquete falta porque las
dependencias del paquete son errneas. El
camino que resuelve el problema implica
especificar una opcin del programa RPM para
deshabilitar la comprobacin de dependencia:

2-4.1.fc2.dag.i386.rpm
Debian no dispone de los paquetes adicionales wxGTK que incluyen el nombre xrc
en el paquete; en su lugar debemos buscar
libwxgtk2.4-contrib-dev. Podemos usar los
siguientes comandos para instalar las libreras requeridas, LibPano y Hugin:

rpm -iv --nodeps hugin-0.4-cvsU


20041021.bp.fc2.i386.rpm
Si bien Suse tiene una versin de WxWindows
por defecto, Hugin no puede usar la versin
por defecto. Por tanto deberemos eliminar el
paquete existente y usar los paquetes de
Fedora en su lugar. No os preocupis, funcion
bien en Suse 9.1 en nuestro laboratorio:

apt-get install libwxgtk2.4-devU


libwxgtk2.4-contrib-dev fftw2
dpkg -i libpano12_20040917-1_i386.U
deb
dpkg -i hugin_0.4pre20040917-1_iU
386.deb
Si esto funciona o no depende del software y
las libreras que hayamos instalado con anterioridad. Si aun nos falta algn paquete
puede que queramos intentar buscarlo en
Google por su nombre y formato. Los cuadros
de Autopano y Enblend nos ofrecen ms
detalles sobre los requisitos

rpm -iv panorama-tools-2.U


7a-1.i386.rpm wxGTK-xrc-2.4.U
2-4.1.fc2.dag.i386.rpm fftw-2.1.U
3-1102.i586.rpm hugin-200409U
21-1.bp.fc1.i386.rpm wxGTK-2.4.U

www.linux-magazine.es

Panoramas

KNOW HOW

Figura 3: Hugin muestra dos imgenes adyacentes, permitiendo al usuario

Figura 4: La pestaa Optimizer soporta el control granular de los valoras de

seleccionar los detalles de la imagen que se usarn como puntos de control.

optimizacin ajustados automticamente por Hugin.

alto que el de la pestaa sobre la imagen


de la derecha (figura 3). En otras palabras, si cuando empecemos las dos
imgenes tienen un cero cuando
empecemos debemos ajustar la pestaa
de la derecha a uno. Entonces podemos
usar las teclas de las flechas para mover
las imgenes y Hugin nos mostrar imgenes consecutivas a la izquierda y a la
derecha.
Tambin debemos echar un vistazo a
auto fine-tune (ajuste fino automtico) y
auto-estimate (estimacin automtica),
que le indica a Hugin que nos debe ayudar a asignar los puntos de control. La
funcin auto add (aadir automticamente) indica al programa que aada
cada par de trazas en los puntos especificados, lo que tambin podemos hacer
manualmente pulsando el botn Add.
Si tenemos los puntos suficientes,
podemos arrancar el proceso de
machaqueo de nmeros pulsando
Optimizer (figura 4). Comprobamos la
opcin Positions (pairwise optim., starting from Anchor) para el Optimizer y
luego pulsamos Optimize now!. Las tres
cajas de texto debajo muestran el
nmero de la imagen y el valor que

Hugin necesita para corregir la imagen


individual a continuacin de los parntesis cuadrados con o sin marca. Si una
imagen no esta marcada significa que
Hugin no la modificar como ocurre con
la imagen de referencia (Anchor). Si
seleccionamos Custom parameters below
para el Optimizer podemos ajustar manualmente los valores para cada imagen
(esto es un ajuste para expertos).
La barra Preview en la parte superior
nos muestra una imagen previa con los
valores calculados. Puede que queramos
seleccionar Auto en la ventana de vista
previa para indicar al programa que nos
muestre los ltimos resultados.

Montando imgenes
La ltima pestaa, Stitcher (Coser), es el
corazn del programa y el principal
desafo al mismo tiempo: las cosas no
siempre funcionan de la forma que se
esperan. Coser es el proceso de poner
mltiples imgenes juntas para crear una
imagen panormica.
Este proceso normalmente implica
primero alinear las imgenes y corregir
la distorsin antes de proceder al cosido.
Hugin soporta los llamados motores de

Tabla 1: Lentes y campos de visin


Distancia focal

Campo de visin Panorama

28mm

65

Campo de visin Retrato


46

35mm

54

38

50mm

40

27

costura: los motores de costura son


mdulos de software que realmente ajustan las imgenes panormicas. El costurero Nona suministrado con el programa funciona muy bien, si bien la calidad no es extremadamente bueno. Una
cicatriz aparece en la mayora de los
casos.
Antes de que comencemos a coser
debemos asegurarnos de que seleccionamos Calculate Field of View para
recalcular el rea de visin. Slo el autor
del programa conoce porque Hugin no
hace esto automticamente. Tambin
necesitamos modificar el tamao de la
imagen seleccionando Calculate Optimal
Size. Si usamos el motor de costura Noma
suministrado con el programa el formato
de imagen preseleccionado es JPG, por lo
que solo deberemos pulsar Stitch now! .
Transcurrido un poco de tiempo (o
puede que bastante, dependiendo del
tamao y nmero de imgenes) dispondremos de la imagen final en nuestro
disco duro con el nombre que hemos
seleccionado.
La alternativa es usar el programa
externo Enblend, no soportado directamente por Hugin, lo que implica un paso
ms. Primero usamos Hugin para crear
una serie de imgenes TIFF que estn
correctamente alineadas pero no cosidas.
Entonces seleccionamos la opcin into a
layered TIFF file for Stitch the images (ver
figura 6).
El programa entonces selecciona
automticamente Multiple TIFF como el

www.linux-magazine.es

Nmero 04

55

KNOW HOW

Panoramas

mente los puntos de control. AutopanoSIFT incluso busca emparejamientos que


son invisibles al ojo humano. Para lanzar
la herramienta ejecutamos el cdigo no
olvidando el nombre del archivo (usando el parmetro -o), analizado gramaticalmente luego por Hugin al igual que
las imgenes individuales.

Caja 3: Mono para


Autopano
Autopano-SIFT est escrito en el lenguaje
de programacin C# y necesita las libreras del proyecto Mono [3]. Para usar el
software no necesitamos el entorno completo de Mono. S necesitamos el interprete, el cual ejecuta el programa, y unas
pocas libreras. Los paquetes de Suse son
mono-core-1.0.2-1.ximian.9.1.i586.rpm,
libicu26-2.6.2-1.ximian.9.0.i586.rpm, gtksharp-1.0.2-1.ximian.9.2.i586.rpm,
libgtkhtml3.1_7-3.1.13.0.200405120525-0.s
nap.ximian.9.1.i586.rpm. Los usuarios de
Fedora no necesitan el paquete
libgtkhtml.
Los usuarios de Debian deberan aadir el
deposito Apt a /etc/apt/sources.list e instalar
los paquetes mono, libgtk-cil y libglib-cil a
travs de la lnea de comandos. La pgina
Web de Mono en Debian [4] nos ofrece ms
detalles.
Los archivos ejecutables escritos en Mono
son
lanzados
escribiendo
mono
programa.exe. El mdulo basado en el kernel
Binfmt-Misc puede ejecutar el cdigo Mono
directamente. La mayora de las distribuciones incluyen el mdulo por defecto. Si
nuestro montador automtico no carga los
sistemas de archivos requeridos para usar
esta funcin debemos intentar el siguiente
comando:
mount -t binfmt_misc none /proc/U
sys/fs/binfmt_misc
Por ltimo debemos indicarle al kernel como
reconocer los archivos Mono y lanzar mono .
echo
':CLR:M::MZ::/usr/bin/mono:'U
> /proc/sys/fs/binfmt_misc/register
Suponiendo que nuestros archivos exe son
ejecutables (chmod +x) ahora los podemos
arrancar. An necesitamos desempaquetar
Autopano-SIFT [5]. Para hacer esto podemos
o
arrancarlo
directamente
con
/path/to/autopano-sift-2.0/bin/autopano.ex
e
o
usar
el
programa
Mono
mono/path/to/autopano-sift-2.0/bin/autop
ano.exe. Si todo esto funciona, Autopano
debe producir un corto texto de ayuda. Si bin
est en nuestra variable ejecutable PATH
(ruta) no necesitamos introducir la ruta
completa. Est es tambin la mejor forma de
comprobar la versin basada en GUI
autopanog.exe.
Para permitir que el cdigo autopano-complete.sh funcione debemos ajustar la variable PATH como hemos descrito con anterioridad. De lo contrario el cdigo mostrar
un error indicando que no lo encontr.

56

Nmero 04

autopano-complete.sh -o outputU
left center right.jpg
Figura 6: El mdulo de costura de Hugin soporta
varios formatos..

formato de salida. Pulsamos en Stitch


Now!, y Hugin nos solicitar un nombre
de archivo adjuntando un nmero de
cuatro dgitos a los nombres de archivo
de cada imagen. Entonces podemos lanzar una ventana terminal para coser las
imgenes TIFF usando Enblend; usaremos -o para especificar el nombre del
archivo:
enblend -o panorama.tifU
pic0000.tif pic0001.tifU
pic0002.tif

Los resultados son impresionantes.


Enblend cose las imgenes sin feas cicatrices.

Automatizando puntos de
control
Si todo esto implica demasiadas pulsaciones para nuestro gusto podemos usar
otro programa que ajusta automtica-

Cuadro 4: Enblend
El paquete Enblend [6] no necesita nada
especial en la lnea de libreras aparte de
LibTIFF y LibJPG. En Fedora y Suse podemos
instalar Enblend escribiendo
rpm -iv enblend-2.0-1.bp.fc2.U
i386.rpm.
Desafortunadamente, los binarios no estn
disponibles para cada distribucin y puede
que necesitemos construir Enblend nosotros
mismos. La siguiente lnea se ocupa de la
instalacin en Debian:
apt-get install libjpeg62-devU
libtiff4-dev libpng3-dev fftw-U
dev libboost-graph-dev libU
boost-dev libboost-python-dev
Ahora podemos proceder a compilar
Enblend.

www.linux-magazine.es

como alternativa puede que prefiramos


usar autopanog.exe, basado en GUI, el
cual hace exactamente lo mismo pero
nos ahorra escribir el nombre de los
archivos. Cuando cargamos el archivo
PTO resultante con Hugin deberemos
ajustar degrees of view en la pestaa
Camera and Lens. Los pasos Optimizer y
Stitcher son como se han descrito anteriormente.

Qu es lo siguiente?
Estas pistas nos deberan ayudar a
comenzar a crear nuestras imgenes
panormicas propias. El hecho de que ni
siquiera hemos visto una mnima parte
del ingente nmero de opciones y mens
disponibles muestra el potencial de
herramientas como Hugin.
Una lista de correo amistosa nos ayudar a descubrir los ltimos avances en
el software panormico, con usuarios
muy felices de asistir a los desarrolladores. Es lgico pensar que los pequeos
errores sern eliminados del programa
en breve. Y si deseamos ayudar despus
de leer este artculo, por qu no ha
cerlo?

RECURSOS
[1] Nueva pgina Web para las hurfanas
Panotools: http://panotools.sourceforge.
net/
[2] Hugin: http://hugin.sourceforge.net/
[3] Descargas
Mono:
http://www.
mono-project.com/downloads/
[4] Mono en Debian: http://pkg-mono.alioth.
debian.org/
[5] Autopano-SIFT: http://user.cs.tu-berlin.de/
~nowozin/autopano-sift/
[6] Enblend: http://enblend.sourceforge.net/
[7] Paquetes para varias herramientas de
panormicas: http://bugbear.blackfish.
org.uk/~bruno/ panorama-tools/

Yum

KNOW HOW

Al da con Yum

Hasta que Lleg su


Hora
Ni siquiera Linux est totalmente libre de errores y esto hace que lo ms importante sea mantener el sistema actualizado con paquetes parcheados. Fedora utiliza la herramienta Yum para este trabajo. Y lo que es ms, Yum puede
actualizar sistemas Red Hat antiguos. POR ROMAN JORDAN

l programa Yum (Yellowdog Updater


Modified) maneja la gestin de las
actualizaciones de los sistemas
Fedora. Yum detecta y resuelve las dependencias de programas ms limpiamente
que RPM. La Figura 1 muestra un ejemplo
de una actualizacin de Yum con el
paquete x11-org.
Yum fue desarrollado por un grupo de
usuarios de Linux en la Universidad Duke,
[1]. La distribucin Linux Fedora incluye
este programa y los RPMs para distribuciones ms antiguas estn disponibles en
[2].
Yum incluye algunas de las siguientes
caractersticas:

Soporte para mltiples repositorios;

Ficheros de configuracin simples con ASCII;

Chequeo de dependencias de
paquetes;

Listado 1: Extracto de
yum.conf
01 [base]
02 name=Fedora Core $releasever $basearch - Base
03
baseurl=http://mirrors.kernel.
org/fedora/core/$releasever/$b
asearch/os/
04
05 [updates-released]
06 name=Fedora Core $releasever $basearch - Released Updates
07
baseurl=http://mirrors.kernel.
org/fedora/core/updates/$relea
sever/$basearch/os/

Compatibilidad con RPM.


Yum, que est desarrollado bajo GPL, se
incluye con Fedora Core (FC) 1, 2 y 3.

Tiene sentido escoger un servidor mirror cerca de donde estamos para mejorar
la velocidad de descarga.

Configuracin del Servidor

Usos Prcticos

Yum necesita una fuente de datos en la


red local o en Internet, aunque puede
utilizar el equipo local. Por defecto, el
fichero
de
configuracin,
/etc/
yum.conf, accede al servidor US. Los
lectores internacionales pueden comprobar la lista en [3] para consultar un
servidor local. Necesitar especificar el
servidor indicado en la etiqueta
baseurl. Yum soporta tanto servidores
HTTP como FTP, aunque HTTP funciona mejor si se tiene un cortafuegos.
Vamos a echarle un vistazo a cmo
configurar Yum para usarlo con la pgina web de la Univerdidad de Stanford
(http://mirrors.kernel.org/fedora/core/).
Las entradas que se necesitan se muestran en el Listado 1, las cuales tienen
una entrada para los paquetes bsicos y
una para las actualizaciones. Yum
sustituye las variables, que se pueden
identificar por los signos de dlar, con
los valores apropiados en tiempo de
ejecucin.

Como se ha mencionado anteriormente,


Yum se utiliza principalmente para la
actualizacin de software. Para averiguar
si los desarrolladores han realizado
nuevas actualizaciones para Yum,
ejectese yum check-update como se
muestra en la Figura 2.
Dependiendo de la velocidad de su
conexin a Internet, puede llevar varios
minutos descargar los ficheros de
cabeceras requeridos, que Yum va almacenado localmente. Las cabeceras contienen
detalles de los paquetes pero no los
paquetes en s. yum list le proporciona
una lista de los paquetes disponibles. Y
yum update comienza a actualizar los programas.
Como se muestra en el ejemplo x11org, Yum le deja especificar los paquetes
individuales que quiere actualizar.
Cuanto ms tiempo se tarde entre actualizacin y actualizacin, mayor ser el
nmero de bytes que tendr que descargar. Por ello, ser conveniente configurar
un servicio en segundo plano para que se
encargue de las actualizaciones durante
la noche. De hecho,
Fedora ya tiene un
servicio de actualizacin que hace
esto. Para lanzar el
servicio, teclese:

Figura 1: Yum resolviendo dependencias del paquete x11-org.

www.linux-magazine.es

service yum start

Nmero 04

57

KNOW HOW

Yum

(anaconda es el programa de instalacin


de Red Hat y de
Fedora) para actualizar el sistema.
Una mejora completa del sistema
siempre es una odisea,
por
ello
asegrese de que se
dispone de una
copia de seguridad.
Deje que la actuaFigura 2: yum check-update muestra las actualizaciones disponibles.
lizacin se complete
para evitar que se
quede el sistema medio actualizado y no
Si quiere comenzar los servicios cuando
arranque la distribucin.
se arranque la mquina, en vez de lo anterior usse el siguiente comando:

Cuidado con el Kernel!

chkconfig yum on

Puede utilizar la herramienta del GUI


(interfaz grfico) para lanzar los servicios
en la sesin actual o configurar el servicio
para lanzarlo cuando reinicie.
Yum soporta el uso de comodines en los
nombres de los paquetes. Por ejemplo,
yum upgrade X11*

actualizar cualquier paquete que


comience con X11. Por supuesto que Yum
se ocupa de las dependencias.

Distro-Actualizacin Yum
Yum puede incluso actualizar distribuciones completas, probablemente use Red
Hat o Fedora. Podramos actualizar Red
Hat 9.0 al actual Fedora Core 3, por ejemplo.
Un inconveniente es que la actualizacin de una distribucin necesita
mucho espacio en el disco duro y no funcionar si su sistema utiliza LVM (Logical
Volumen Management). Los usuarios de
LVM debern acudir a los CDs de instalacin y ejecutar la herramienta anaconda

El kernel es el centro de cualquier sistema,


as que preste especial atencin a lo que
ocurre. Primero, deber comprobar que
versin del kernel tiene instalado:
rpm -q kernel kernel-smp

Es buena idea ejecutar RPM o Yum para


actualizar el kernel primero. Elimine
cualquier versin del kernel que no necesite. Segn los autores de Yum, no slo
ahorra espacio en disco, tambin puede
evitarle un montn de problemas. El
comando uname -a le dice la versin del
kernel actual.
Esto tambin es aplicable a los recursos
del kernel. Los siguientes comandos eliminan un kernel y el cdigo que le acompaa:
rpm -e kernel-2.4.22-1.2115.nptl
rpm -e kernel-source-U
2.4.22-1.2188.nptl

Puede darse el caso de que tenga que


eliminar cualquier otro paquete que no
forme parte de la distribucin original
pero que fue instalado ms tarde. Si Yum

no encuentra una actualizacin para un


paquete instalado, muestra un mensaje de
error y se sale. Su mejor opcin en este
caso es eliminar el paquete y relanzar
Yum. Siga repitiendo estos pasos de eliminar y reinstalar de nuevo el proceso hasta
que Yum le avise. Para una descripcin del
software instalado, seleccione System settings | Add/Remove Application.
Por supuesto, puede que necesite aadir
Yum a su distribucin original. Los
ficheros de antiguas versiones Red Hat
estn disponibles en [1]. Debera evitar
corregir a mano el fichero yum.conf; en
vez de ello descargue el fedora-release2.4.i386.rpm y ejecute rpm -U para instalarlo. Esto asegura que Yum estableca las
variables en yum.conf correctamente.

Conclusin
Yum es extremadamente til para la
gestin de grupos de ordenadores en red.
Teniendo un servidor de paquetes Yum en
la red se facilita realmente el mantenimiento de todas las mquinas Linux. Las
pginas de ayuda de Yum (man yum) proporcionan ms detalles sobre el uso de
Yum y el proyecto Yum facilita una lista de

correo para temas complejos.

RECURSOS
[1] Pgina web del proyecto Yum: http://
linux.duke.edu/projects/yum
[2] Descargas de Yum: http://linux.duke.edu/
projects/yum/download.ptml
[3] Servidores mirror de Fedora: http://www.
fedora.redhat.com/download/mirrors.
html
[4] Como mejorar el sistema con Yum: http://
linux.duke.edu/%7Eskvidal/misc/
fc1-fc2-yum-hints.txt
[5] Multimedia repository: http://rpm.livna.
org
[6] FAQ no oficial de Fedora: http://www.
fedorafaq.org/

Tabla 1: Yum Opciones tiles


yum info up2date
yum remove xemacs
yum list
yum search nmap gui

Muestra una corta descripcin e informacin sobre el programa up2date. La salida de este comando se muestra en la Figura 3.

yum clean all


yum update yum

Elimina toda la informacin del directorio cache de yum.

58

Nmero 04

Elimina el paquete del programa xemacs y unas cuantas herramientas que lo acompaan.
Muestra informacin sobre los paquetes disponibles.
Busca los paquetes dsiponibles para la cadena especificada (nmap y gui en este caso). Esto permite buscar los paquetes slo si no conoce
exactamente sus nombres.
Actualiza el paquete Yum, si hay alguna actualizacin disponible.

www.linux-magazine.es

Charly

La rutina diaria del administrador de sistemas: OpenNTPD

Tiempo Libre

Kontact e IMAP ...........................62

suficiente, pero los ordenadores necesitan medidas de tiempo ms precisas.


Por suerte, existen relojes atmicos que pueden recibir seales de tiempo por
radio y sin estar en Internet. POR CHARLY KHNAST
Un servidor de tiempo acta como un
sistema de referencia y los otros sistemas
de la red utilizan NTP para sincronizarse
con este servidor. NTP es un viejo conocido para nosotros. (Sola llamarse
XNTP.) [1] Pero me gustara presentaros
al servidor de tiempo OpenNTPD [2]. El
servidor llega por cortesa del proyecto
OpenBSD, pero tambin est disponible
para Linux. El archivo tar con la ltima
versin 3.6 es de slo 113 Kbytes. Tras
descomprimir el archivo como sigue:

Cmo configurar el Kontact para almacenar


datos de la libreta de direcciones, calendario,
etc. en un servidor IMAP.

Bloqueos ........................................64
Los bloqueos impiden conflictos cuando dos
procesos intentan acceder al mismo recurso
simultneamente. Aprendemos a implementarlos en este artculo.

el primer servidor no responde, lo intentar con el segundo.


Por supuesto, no sera de mucha utilidad
si el servidor tomara la seal slo y exclusivamente para l mismo, por el contrario, lo
que pretendemos es que proporcione la
seal como referencia a otros servidores de
nuestra red. Esto es lo que indica la tercera
lnea. El servidor en la direccin IP
10.0.0.42 proporciona la seal de tiempo a
otras mquinas de la red. Con esto se concluye la fase de configuracin. Ya es hora
de lanzar OpenNTPD:

tar xvzpf openntpd-3.6p1.tar.gz


/usr/local/sbin/ntpd -s

se sigue con los pasos de siempre:


./configure
make
make install

para compilar el programa. El servidor


debera estar localizado en /usr/local/sbin.
Antes de nada, hay que decirle a OpenNTPD qu fuente va a proporcionar la
seal de tiempo de referencia. Yo selecciono el servidor de tiempo de
Physikalisch-Technischen Bundesanstalt
en Braunschweig (PTB), en Alemania. El
reloj atmico de PTB suministra una seal
de tiempo basada en NTP.

Tres lneas para dos servidores

OpenNTPD inmediatamente compara su


propio sistema de tiempo con la seal de
tiempo suministrada por el servidor de
referencia. Si el reloj local no est en
hora, el servicio lo pondr gradual y
cuidadosamente. OpenNTPD tan slo
establece la hora en un solo paso si el
reloj del sistema est dentro de un rango
de 180 segundos con respecto al tiempo
de referencia; este es el valor que se
establece con el parmetro -s cuando se

lanz el programa.

INFO
[1] NTP: http://www.ntp.org
[2] OpenNTPD:http://openntpd.com/

OpenNTPd normalmente lee un fichero de


configuracin llamado /etc/ntpd.conf. Este
fichero es bastante sencillo en nuestro caso:

EL AUTOR

SYSADMIN
Bsquedas con find .................60
En un archivo de centenares de Gigabytes
cmo encontrar un fichero perdido?

Durante las vacaciones con tan solo echarle un vistazo a la posicin del sol es

oy un tipo prctico y me encanta la


puntualidad. Por supuesto, espero
que mis servidores sean exactos a
la hora de medir el tiempo. Medio minuto puede ser la diferencia entre un
administrador feliz y un caos en la red.
Por ejemplo, imaginemos que alguien
me enva un mensaje de correo electrnico. Lo primero que ocurre es que los
filtros de spam obtienen y comprueban
el mensaje, para posteriormente
pasrselo al servidor
de antivirus. Si el
servidor de AV da por
vlido el mensaje, el
siguiente paso a
seguir es distribuir el
correo, el cual localiza el servidor de
correo correcto y lo
reenva a su localizacin,
donde
finalmente el servidor
de
correo
deposita el mensaje
en mi bandeja de
entrada.
En otras palabras,
los
mensajes
de
correo electrnico en mi red pasan por
no menos de cuatro servidores. Si hay
un problema, compruebo los ficheros
de registros para ver donde ha ocurrido
el error. Y aqu es donde es imperativo
que tengamos una lectura exacta del
tiempo.
El timestamp (marca temporal) permite a los administradores seguir el
progreso de un mensaje a travs de varios sistemas suponiendo que los
relojes de estos sistemas sean precisos.
Esto es exactamente lo que hace el Network Time Protocol (NTP).

ADMINISTRACIN

server ptbtime1.ptb.de
server ptbtime2.ptb.de
listen on 10.0.0.42

Las dos primeras lneas identifican donde


OpenNTPd tomar su seal de tiempo. Si

Charly Khnast es
Gerente de Sistemas
Unix en el centro de
datos de Moers, Alemania cerca del
conocido Rhin. Entre
sus labores se incluye
la seguridad del
cortafuegos, la disponibilidad y cuidado
del DMZ (zona desmilitarizada).

www.linux-magazine.es

Nmero 04

59

ADMINISTRACIN

Find

Consejos de Experto: Find y Locate

Oficina de Objetos
Perdidos
Los ordenadores actuales con sus mltiples discos duros con Gigabytes y Gigabytes de
espacio, almacenan miles de ficheros. Un
fichero perdido puede causar gran cantidad de
trabajo y tambin puede plantear un riesgo de
seguridad. Afortunadamente, Linux tiene
algunas herramientas verstiles para encontrar
estos ficheros perdidos.
POR ANDR SELIG

i ests buscando ficheros en


Linux, la lnea de comandos es la
mejor opcin para unos resultados rpidos y fiables. Las GUIs como
KDE (Figura 1) carecen de funcionalidad, flexibilidad y velocidad comparable.
El comando ms importante para la
bsqueda de ficheros es find. Sin especificar ninguna etiqueta, la herramienta
slo buscar todos los ficheros bajo el
directorio actual. Si quiere buscar en
cualquier otro directorio, simplemente
hay que especificar el nombre del directorio como primer argumento. Por ejemplo, find /home mostrar una lista de
todos los ficheros y directorios bajo
/home.
Pero find realmente es til cuando
comienza a utilizarse con opciones. El
argumento -name permite a los usuarios
decirle los ficheros a buscar que coincidan con el patrn dado. Por ejemplo,
find ~ -name "*firefox*" busca todos
los ficheros en el directorio home del
usuario que incluyan la cadena firefox
en sus nombres.
Tiene sentido encerrar los argumentos
entre comillas dobles, o al menos, entre

60

Nmero 04

comillas simples. Esto impide que la


shell expanda los parmetros como
*firefox*.

Opciones, Pruebas y Acciones


find reconoce tres tipos de argumentos:
opciones, pruebas y acciones. Las
opciones influyen en el comportamiento de find por s mismo, por
ejemplo, restringiendo el nmero de
niveles de subdirectorios a buscar o
restringiendo la bsqueda a una sola
particin. Las pruebas permiten al
usuario restringir la bsqueda a ficheros
especficos, por ejemplo, ficheros que
tienen menos de una semana, find
-mtime -8; o ficheros que tienen ms de
una semana, find -mtime +7.
Las acciones influyen en la forma que
se muestran los resultados. La siguiente
accin -exec command pasara los nombres de los ficheros que encuentre al
programa command.
Las acciones tambin soportan operadores lgicos, permitiendo a los
administradores especificar un comportamiento de salidas complejo. Esto
quiere decir, que los administradores
prefieren utilizar las pruebas ms que

www.linux-magazine.es

usar otro tipo de argumentos. Las pruebas podran restringir los comandos a
un tipo especfico, tal como -type f (para
buscar slo ficheros), -type d (para buscar slo directorios) o -type l (para buscar slo enlaces).
Los administradores responsables
buscan ficheros que pertenecen a usuarios o grupos inexistentes en el proceso
de limpieza. El siguiente comando se
ocupar de realizar esa tarea: find /
-nouser -o -nogroup. La opcin -o es el

Listado 1: Script generado


por find
01 mkdir -p
/export/backup//home/mas
02 cp -p /home/mas/.emacs
/export/backup//home/mas/.emac
s.copy
03
04 mkdir -p
/export/backup//home/mas
05 cp -p /home/mas/.fetchmailrc
/export/
backup//home/mas/.fetchmailrc.
copy

Find

pblicos (como /tmp o el


directorio /home) no es muy
buena idea. Hay un retardo
entre el hallazgo de los
archivos que coinciden con
el parmetro de bsqueda y
la ejecucin de la orden
indicada y un atacante ladino podran explotar este
hueco. En el pasado ha
habido numerosos ataques
en instalaciones Unix que
Figura 1: El programa de KDE, KFind da un excelente interfaz
utilizaban el comando find
para la bsqueda de ficheros, pero no puede competir con la
para limpiar el directorio
flexibilidad de find
/tmp. El parmetro -exec es
seguido por un comando
operador lgico OR, que enlaza las dos
que se incluye entre corchetes {}. El
expresiones, -nouser y -nogroup. Otro
programa sustituye los corchetes por el
truco que es muy til para los adminombre del fichero que encuentre en la
nistradores es la bsqueda de ficheros
bsqueda. Un punto y coma finaliza el
por el UID o GID usando find / -perm
comando. Necesitamos escapar el
+6000 -ls. El -ls aade a este comando
punto y coma con una barra para
que ejecute ls -lisd para cada fichero.
impedir que la shell lo interprete. El
siguiente comando es una variante del
Ejecucin de Comandos
comando DOS ren , que renombra
ficheros con la extensin *.txt a la
-exec permite usar nombres de ficheros
extensin *.txt.bak:
como argumentos y hasta crear
pequeos guiones. Pero hay que tener
$ find . -name '*.txt'U
cuidado con los peligros: usando esta
-exec mv {} {}.bak \;
funcionalidad como root en directorios

Ficheros de Otros Usuarios


Locate utiliza una base de datos centralizada, lo que puede llevar a una cuestin de
seguridad en algunos entornos. Si un
usuario quiere ocultar un fichero, que normalmente se hace asignndole permisos al
directorio (chmod go -rwx). Esto hace que los
ficheros no sean visibles por los comandos
como find y ls, excepto para los propietarios
y por supuesto, para el root.
Sin embargo, si el fichero est almacenado
en la base de datos, porque updatedb se ejecut con privilegios de root (mediante
crontab o por el root), llegarn a ser visibles
para todo el mundo. Aunque los otros usuarios slo conseguirn ver el nombre del
fichero.
Los sistemas multiusuarios pueden utilizar
los parmetros --localuser y --netuser cuando realicen la llamada a updatedb. La herramienta espera un nombre de usuario como
argumento. El nombre de usuario debera
ser nobody, por ejemplo, en un sistema en el
que los usuarios tengan privilegios limitados. Esto significa que la base de datos de
locate slo contendr un mnimo de ficheros
visibles.

Si los requisitos de lo que queremos


h a c e r s o n m a s c o m p l e j o s, s e r a
preferible usar la salida de
find en
un script de la shell. El comando
-printf puede ayudarnos. El siguiente
comando crea un fichero como el
mostrado en el Listado 1:
$ find /home/mas -type fU
-name '*.txt' -printf "mkdirU
-p /export/backup/%h\ncpU
-p %p /export/backup/%h/U
%f.copy\n\n"

Locate
Adems de las caractersticas mencionadas aqu, find tiene un amplio
rango de opciones que no podemos
incluir. Sin embargo, el programa tiene
un gran inconveniente: es lento.
find analiza los directorios de bsqueda uno por uno y tambin puede tener
que analizar los inodos de los archivos
para realizar las pruebas que se le
especifican. Si slo necesita buscar una
subseccin del directorio home con
unos cuantos cientos de ficheros, no

ADMINISTRACIN

notar el retardo. Pero si se est buscando un fichero que est oculto en


cualquier parte del sistema, find necesitar buscar entre los miles y miles de
nodos. Naturalmente, esto puede llevar
algn tiempo.
Locate resuelve este problema
mediante la creacin de un ndice de los
ficheros recopilados en el equipo y
almacenando sus nombres en una base
de datos centralizada. La herramienta
no necesita leer los nodos para realizar
la bsqueda; en vez de ello buscar en
la base de datos. Est bsqueda normalmente devolver los resultados en una
fraccin de segundo, eliminando la
necesidad de esperar unos minutos y
tambin evita cualquier posible efecto
en el funcionamiento para usuarios y
servicios.
Locate tiene unas cuantas limitaciones, as que en muchos casos, se
sigue utilizando find. En vez de la compleja sintaxis de find en la lnea de
comandos,
locate
slo
soporta
bsquedas bsicas de componentes de
nombres de ficheros (de hecho, esto es
todo lo que se almacena en la base de
datos). La herramienta locate tiene
comodines, como la interrogacin para
un solo carcter y el asterisco para unos
cuantos caracteres. Estos comodines
tambin pueden representar al carcter
barra (/), en contraste con los
comodines de la shell:
$ locate /home/mas/*mail*
/home/mas/.fetchmailrc
/home/mas/.procmaildata-bulk
/home/mas/.procmaildata-inbox
/home/mas/.procmailrc

Hay dos requisitos bsicos para la


utilizacin de locate, sin embargo
pueden ser bastante molestos. El
primero de todos, no todas las distribuciones de Linux instalan esta
utilidad GNU. En segundo lugar, la
base de datos normalmente se actualiza mediante cron. Si se apaga el
equipo durante la noche y si la distribucin no utiliza Anacron o una
herramienta parecida para actualizar
con las tareas del cron que han fallado, los usuarios necesitarn actualizar
la base de datos manualmente uti
lizando el comando updatedb.

www.linux-magazine.es

Nmero 04

61

ADMINISTRACIN

Kontact + IMAP

Kontact con agenda y gestin de direcciones basados en IMAP

Todos a
Bordo
Kontact proporciona correo electrnico, libreta de direcciones y agenda en un slo paquete. Con soporte IMAP
significa que se puede acceder a los datos desde cualquier
sitio en la red. POR DANIEL MOLKENTIN

a aplicacin Kontact 1.0 Personal


Information Manager (PIM) para
KDE soporta una caracterstica que
proporciona un sistema basado en IMAP
para almacenar en la red la agenda y las
direcciones. Kontact permite almacenar
la informacin de la agenda y de las
direcciones junto con los mensajes de
correo electrnico en un servidor IMAP.
Esta informacin est disponible cada
vez que se acceda al servidor desde
cualquier parte de la red.

Recursos IMAP
Con el crecimiento diario de los buzones
de correo electrnico, cada vez ms
proveedores ofrecen a sus clientes acceso a un servidor IMAP (Internet Message
Access Protocol). IMAP tiene varias ventajas sobre el anterior protocolo POP
(Post Office Protocol). A pesar de ello,
tan slo unos pocos proveedores de
Internet han proporcionado a sus
clientes la suficiente capacidad de almacenamiento como para aprovechar al
mximo las capacidades que puede llegar a ofrecer IMAP. Pero Google ha
empezado la ofensiva en la guerra de las
cuentas de correo electrnico de los
Gigabytes y sus competidores estn

Glosario
Recursos: El concepto Kontact de un recurso
es una agenda o libreta de direcciones almacenada en una localizacin especfica (como
otro ordenador o un servidor), al que se
puede acceder usando un protocolo especfico (IMAP, ssh, etc).

62

Nmero 04

empezando a ofrecer capacidades similares en los buzones de sus cuentas.


Independientemente de que se tenga
una cuenta IMAP con un proveedor comercial o se tenga un servidor IMAP en
una red local, uno puede aprovecharse
de los beneficios que puede proporcionar
Kontact con su caracterstica de almacenamiento centralizado. Kontact soporta
los llamados recursos IMAP, que fueron
originalmente diseados para usarse con
el servidor Kolab [2]. De hecho, los
recursos IMAP son carpetas especiales
que almacenan informacin de contactos
y direcciones en vez de correos electrnicos. Estas carpetas normalmente estn
escondidas, aunque se pueden hacer visibles para realizar pruebas.
En este artculo, mostraremos cmo
acceder a los datos de las direcciones y
la agenda basadas en un servidor con
Kontact. Se necesita al menos Kontact
1.0 de KDE 3.3.0, aunque es recomen-

dable KDE 3.3.1. Lase Actualizacin de


KDE para ms detalles sobre la manera
de actualizar KDE en una instalacin de
Suse Linux.

Configuracin de Kontact

El primer paso es proporcionarle a


Kontact los detalles de la cuenta IMAP.
Kontact permite especificar una cuenta
IMAP online o una cuenta IMAP
desconectada. Elegir la opcin desconectada le indica a KMail que guarde localmente una copia de cada fichero almacenado en el servidor. Esta opcin tiene
sentido especialmente para los usuarios
de ordenadores porttiles o si el servidor
no tiene una conexin permanente a
Internet. Por el contrario, no se
recomienda el uso de la opcin de IMAP
normal, en vez de la de desconexin, ya
que los usuarios tendran que actualizar
manualmente las carpetas - lo que no es
viable.
Para instalar la cuenta
en
Kontact,
escoja
Settings | Configure
KMail | Network y seleccinese Add en la solapa Receiving.
Una vez configurado
el buzn de correo,
vyase a la solapa Misc
y seleccinese Configure
KMail. Hay que seleccionar Enable groupware functionality. Para
Figura 1: Las opciones del idioma en las carpetas del grupo de trabajo
la opcin etiquetada
son tan solo requeridas cuando se intente acceder desde Microsoft
Resource folders are subOutlook.
folders of, se selecciona

www.linux-magazine.es

Kontact + IMAP

ADMINISTRACIN

antese la URL de la libreta de direcciones local e imprtese la URL seleccionado File | Import | Import vCard.

Prioridades

Figura 3: La migracin a la
cuenta IMAP proporciona una
gestin consistente de la
agenda y la libreta de direcciones desde distintos
ordenadores.
Figura 2: Antes de que pueda migrar a la cuenta de IMAP, hay que
definir una agenda nueva.

inbox. Pero hay que tener cuidado: si


selecciona su bandeja de entrada normal, ser capaz de guardar sus datos,
pero tan slo se almacenarn localmente. Esto es un punto a tener en cuenta para comprobar en el caso de que
surja algn problema.
Si las carpetas del grupo de trabajo no
existen, Kontact las crear automticamente ahora. Normalmente, no importa
el idioma que use el programa para las
carpetas: tan pronto como se tenga todo
configurado, se querr ocultar las carpetas seleccionando Hide workgroup
folders. Pero si se usa un cliente Outlook
al mismo tiempo que Kontact, no hay
que perderle la vista a las opciones del
idioma.

Migracin
Por ltimo, tendr que migrar su agenda
y su libreta de direcciones. Tasks usa la
misma configuracin que la agenda, as
que se puede ignorar. Lo primero que
hay que hacer es crear una agenda
nueva. Para ello, hay que abrir la vista
sobre la agenda existente a la izquierda
debajo de la vista del mes.
Seccionando Add, se selecciona el elemento Calendar on IMAP-server via
kmail en el desplegable, y por ltimo se
teclea un nombre intuitivo para la agenda nueva, como Agenda en el servidor
IMAP. Kontact debera mostrar ahora la
agenda local y la agenda nueva en
Resources.
El siguiente paso es mover las citas
desde la agenda local a la agenda nueva.
Para ello, primero se selecciona la agenda local y luego se usa el cuadro de di-

logo Edit para copiar la


ruta del sistema de
ficheros. Posteriormente hay que deshabilitar el recurso local en el botn.
Sus citas deberan estar ocultas al principio. Seleccionando File | Import | Merge
Calendar, importar la ruta copiada en el
paso anterior como una Address y se
selecciona OK. Sus eventos deberan
estar ahora en el servidor IMAP.
Hay que seguir los mismos pasos para
la libreta de direcciones: las libretas de
direcciones estn ocultas en Settings |
Show extension bar | Address books. De
nuevo hay que crear un recurso IMAP;

Actualizacin de KDE
Para que todo esto funcione, se necesita
Kontact 1.0 en KDE 3.3 o superior. Las buenas
noticias son que los usuarios de Suse 9.1 y
9.0 se pueden beneficiar de KDE 3.3. Existe
incluso una forma sencilla de actualizarse,
suponiendo que se dispone de una conexin
rpida de Internet: la descarga ocupa unos
300Mb.
Para empezar la actualizacin, hay que
salirse del GUI y, como root, lanzar la versin
en modo texto de YaST en la consola. En
Software | Change Source of Installation se
aade una nueva entrada ftp://ftp.suse.com/
pub/suse/i386/supplementary/KDE/
update_for_9.1/yast-source/
(bzw.
update_for_9.0). Una vez hecho esto, se
selecciona System Update. Hay que indicarle
al gestor de paquetes que resuelva (Resolve)
cualquier dependencia. Se puede ignorar los
conflictos que tengan que ver con kdebase3-suse. Si tiene problemas de estabilidad
despus de la instalacin, habr que eliminar kdebase3-suse. Sin embargo, eliminando
kdebase3-suse se elimina la integracin de
KDE Suse.

El procedimiento que se ha detallado


permite ligar cualquier nmero de ordenadores a sus recursos IMAP. Sin embargo, asegrese de que la primera mquina
intercambia los mensajes de correo con
el servidor primero. Si no tiene eventos o
direcciones que sincronizar, se pueden
saltar los pasos de la migracin. En este
caso, simplemente hay que deshabilitar
la agenda local.
Si surge algn conflicto - quizs
porque dos clientes tengan el mismo
evento - la cita nueva ganar. Kontact no
tiene un sistema de resolucin de conflictos, es decir, una opcin para mezclar
dos citas.

Vistas
Si intenta usar los recursos nuevos en
Windows, tendr dos opciones. Una
opcin es el cliente compatible Kolab
Athera [3] para Windows de The
Kompany. Pero si quiere tener Outlook o
si no tiene permiso para eliminarlo,
debera considerar usar el plug-in
para
Outlook
de
Toltech.
Desafortunadamente, el cliente es software comercial y tiene un coste de 14 $
US por mquina.
Ambos programas permiten que se
puedan usar los recursos IMAP en el
entorno de Microsoft. Los usuarios de la
versin de Outlook tendrn que usar el
idioma cuando creen los recursos en el
servidor de IMAP.

Progreso
Adems de no disponer de una caracterstica para la resolucin de conflictos,
Kontact actualmente carece de la opcin
para usar mltiples recursos IMAP.
Ambas funciones estarn disponibles
cuando la versin 3.4 del paquete KDE
PIM salga a la luz. Su salida est prevista

para principios del 2005.

RECURSOS
[1] Sitio web de Kontact: http://www.
kontact.org
[2] Sitio web Kolab: http://www.kolab.org
[3] Cliente Athera: http://www.thekompany.
com/projects/aethera/

www.linux-magazine.es

Nmero 04

63

ADMINISTRACIN

Bloqueos

Consejos Expertos

Competencia
Encarnizada
Un genuino sistema multitarea como Linux ejecuta varios procesos concurrentemente. Los programas deben competir por el
acceso a los datos. Con la asignacin de bloqueos a los ficheros se
asegura el acceso exclusivo y se previene la posibilidad de prdida
BMW AG

de datos.
POR MARC ANDR SELIG

a mayora de mquinas Linux


tienen un MTA, un Agente de
Transferencia de Correo. Este
puede ser Postfix, Exim o simplemente
Sendmail. El MTA utiliza el proceso
Fetchmail o TCP para transferir mensajes de correo electrnico. Cuando el
MTA encuentra un mensaje dirigido a
un usuario local, se lo pasa al Agente de
Entrega Local (LDA). Y el LDA lo almacena en un fichero buzn, posiblemente
despus de darse una vuelta por un filtro como Procmail.
Si dos mensajes llegan a la vez, el
MTA manejar a ambos en el mismo
proceso de LDA (vase Figura 1). Cada
proceso entonces intentar escribir en
el mismo archivo buzn, al mismo
tiempo. Si se tiene suerte, los mensajes
terminarn en el archivo correcto, pero
en orden incorrecto, aunque habr
mayor probabilidad de perder el archivo
ya que los procesos se sobrescriben los
datos unos a otros.

Acceso Organizado con


Bloqueos
Los bloqueos son la respuesta tpica a
esta cuestin. Un bloqueo deniega el
acceso a un recurso mientras otro proceso lo est usando. Si se intenta acceder a un fichero bloqueado, se mostrar
un mensaje de error o el fichero que

64

Nmero 04

quiere utilizarlo deber esperar un


poquito. La funcin no volver al programa principal hasta que el proceso
actual no haya liberado el fichero, permitiendo al siguiente usuario abrirlo.
As, los bloqueos pueden solucionar
el problema de los mensajes de correo
electrnico que llegan al mismo tiempo.
El LDA con el primer mensaje simplemente paraliza el buzn. El LDA con el
segundo mensaje obtiene un error cuando intenta abrir el buzn, espera un
ratito y vuelve a intentarlo otra vez ms
tarde. Cuando el primer LDA ha escrito
el mensaje, ha cerrado el buzn y ha
quitado el bloqueo no hay nada que
detenga la llegada del segundo mensaje.
Lamentablemente, los bloqueos de
archivo tambin crean unos cuantos
problemas. Uno de los problemas ms
comunes y de menor importancia es
que pueden cambiar el orden en el que
las cosas pasan. El argumento siguiente
explica qu puede pasar: imaginemos
que el LDA solamente entrega un mensaje y tiene bloqueado el buzn; un
segundo proceso est esperando que el
archivo sea liberado ya que necesita
entregar un segundo mensaje.
Qu ocurre si un tercer mensaje llega
exactamente al mismo tiempo que el
primer LDA libera el buzn. El tercer
mensaje otra vez bloquea el archivo y el

www.linux-magazine.es

segundo LDA tiene que esperar: un


clsico ejemplo de una carrera de competicin.

Anticuado
Los bloqueos antiguos son un problema
mucho ms serio. Este tipo de bloqueos
ocurren cuando un programa no logra
liberar archivos porque estos se han
colgado o un usuario ha matado el programa.
Esto significara que otros procesos
tendran que esperar literalmente una
eternidad a que el archivo sea liberado.

Listado 1: Bloqueo de un
fichero con Perl
01 #!/usr/bin/perl -wT
02 use Fcntl ':flock';
03 sysopen(FH, "File",
O_RDWR|O_CREAT) or die
04
"Error sysopen: $!";
05 flock(FH, LOCK_EX) or die
"Error flock: $!";
06
07 # ... Escribir a fichero ...
08
09 flock(FH, LOCK_UN) or die
"Error flock: $!";
10
close FH or die "Error
close: $!";

Bloqueos

Figura 1: Sin bloqueo, dos mensajes de correo que


llegan a la vez podran sobrescribirse entre ellos,
ya que un proceso LDA no se da cuenta de lo que
el otro hace.

Los mensajes de correo electrnico no


pueden ser entregados y los usuarios no
pueden editar el buzn. Los bloqueos
antiguos son particularmente peligrosos
en servidores NFS; hasta pueden causar
la parada del servidor.
Cuando un programa utiliza bloqueos,
debera comprobar si hay un proceso
activo asignado al archivo bloqueado.
Algunos
bloqueos
desaparecen
automticamente cuando el proceso que
lo acompaa finaliza. Otros ficheros de
bloqueo utilizan la identificacin del proceso en sus nombres o como parte de su
contenido.

Variantes de Bloqueos
Hay muchas formas distintas de implementar el bloqueo de archivos. Las dos
categoras bsicas son bloqueos obligatorios y bloqueos informativos, el kernel
que tenga el sistema llama a ambas variantes.
Los procesos no pueden ignorar a los
bloqueos obligatorios. El kernel tiene

Listado 2: Bloqueando un
fichero en Perl
01 #!/usr/bin/perl -w
02 use Fcntl;
03 sysopen(FH, "file.lock",
O_WRONLY|O_EXCL|O_CREAT)
04
or die "Error sysopen: $!");

cuidado de denegar el acceso al recurso


bloqueado hasta que el bloqueo se
quita. Esto es bsicamente un mtodo
de seguridad, aunque sea susceptible a
bloqueos antiguos e intil para sistemas
de ficheros de red como NFS y AFS.
Un bloqueo informativo o circunstancial es simplemente una nota en el sentido en que un archivo est bloqueado,
aunque no hay nada que indique si los
programas respetarn el bloqueo. Esto
siempre hace que tome sentido el tener
cuidado con archivos bloqueados.
Los bloqueos blandos de esta clase
pueden implementarse por el kernel y
por las bibliotecas especficas de los
usuarios. Asimismo es posible usar
ficheros para implementar bloqueos a
modo de aviso. Este mtodo tambin
funciona con NFS, suponiendo que el
programa proporciona funciones ms o
menos atmicas de apertura de
ficheros.
Las noticias malas son: si se busca
escribir un programa para usar con
cualquier tipo de Unix, los bloqueos
obligatorios no son una buena opcin.
Lo bueno es que los programas para
usar con cualquier versin de Linux son
mucho ms simples, desde que Linux
tiene la funcin POSIX-compatible fcntl
(que es idntica a lockf en Linux) y la
BSD-compatible flock. Las bibliotecas a
menudo facilitan el empleo de estos
monstruos. El listado 1 muestra un
ejemplo en Perl.

Ficheros de Bloqueo
Los antiguos semforos son ms simples
que los bloqueos del kernel que hemos
visto hasta ahora. Literalmente hablando, un semforo es una seal visual para
controlar el trfico. Bajo Unix, un semforo es un archivo o la estructura de

Listado 3: Bloqueo
primitiva de fichero desde
el Shell
01 #!/bin/sh
02 # lockfile is part of the
procmail distribution and
03 # available on most Linux
distributions
04 lockfile file.lock
05 # ...
06 rm -f file.lock

ADMINISTRACIN

datos que indica un estado, por ejemplo


el estado de un recurso.
Los programas indican que un buzn
est bloqueado aadiendo una extensin .lock al nombre del archivo (por
ejemplo, el archivo de buzn /var/mail/
mas conducira a un fichero de bloqueo
llamado /var/mail/mas.lock). Esta tcnica funciona con NFS, aunque se
supone que permite al programa modificar el buzn creando un archivo
nuevo en /var/mail/.
Los programas tienen que comprobar
la existencia de ficheros bloqueados,
como los mencionados anteriormente.
La comprobacin y la creacin de este
tipo de ficheros debe ser una operacin
nica para permitir la exclusin mutua
dentro de la seccin crtica. El pseudocdigo siguiente muestra cmo controlar la condicin de entrada a la seccin
crtica:
IF: no existe fichero.lock
THEN: crear fichero.lock
ELSE: esperar

Si dos programas ejecutan este cdigo


exactamente en el mismo tiempo,
ambos entran en la rama de la condicin del THEN y crean el archivo de bloqueo. Esto debilita completamente el
principio de bloqueo, ya que otra vez
ambos programas tendrn acceso al
buzn al mismo tiempo. El cdigo siguiente tiene ms sentido:
IF: crear fichero.lock
exclusivo
THEN: hacer algo
ELSE: esperar

Esto comprueba y crea el fichero de bloqueo en una nica operacin. Incluso si


dos programas controlan este cdigo al
mismo tiempo, no entrarn a la vez en
la seccin crtica porque uno de los programas crear el archivo antes que el
otro.
El listado 2 muestra una puesta en
prctica del pseudo-cdigo anterior en
Perl. El script del Listado 3 emplea el
programa lockfile que forma parte de
Procmail.
Unas palabras de advertencia: para
sistemas de archivos de red, los ficheros
de bloqueo no son muy fiables normal
mente.

www.linux-magazine.es

Nmero 04

65

Bienvenidos a Linux User


sta es la seccin dedicada a la presentacin de software interesante y til que nos ayuda
en nuestro quehacer diario con el escritorio Linux. Aqu aprenderemos a utilizar
software estndar de una manera ms eficiente, adquiriremos valiosos
conocimientos y descubriremos apasionantes nuevas aplicaciones.

Herramientas: Superkaramba

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
SuperKaramba permite dotar de un aspecto precioso a tu escritorio con una coleccin
de temas que te permitir dar a tu entorno de trabajo un toque personal.

Desktopia: xvidcap

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Muchas veces puede resultar difcil explicar la funcionalidad de una aplicacin con palabras. Un pantallazo puede ayudar, pero si necesitamos algo ms que una imagen fija,
xvidcap nos puede ayudar. Ahora es posible hacer ayudas de tutoriales que usan animaciones grabadas por nosotros mismos usando el software para que otros puedan
ver exactamente lo que estamos haciendo.

Configuracion: GFTP

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
Tanto si le gustan las transferencias de ficheros desde una GUI o desde la lnea de
comandos, GFTP tiene la herramienta adecuada para el trabajo diario. El cliente de
GFTP tambin soporta caractersticas avanzadas como la transferencia segura de
ficheros con SSH.

Programacin Bsica: XUL (IV)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
Sin duda hay mucho donde rascar con el navegador Mozilla. En este artculo usaremos
XUL para crear el men de una pgina Web perfecta. A lo largo del camino aprenderemos cosas sobre el Lenguaje de Coligacin Extensible (XBL) y como podemos usar XBL
para realzar la potencia de nuestras creaciones en XUL

Educacin: Otros Idiomas. Otros Caracteres

. . . . . . . . . . . .80
Con un poco de filosofa por compaera, expondremos el modo en que podemos satisfacer las necesidades de nuestros compaeros profesores de otras lenguas, y de los
alumnos inmigrantes, en materia de interfaz de usuario y de entrada de caracteres.

Linea de Comandos: diff

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Los programas diff y diff3 del paquete diffutils nos ayudan a comparar ficheros de
texto, mostrando cualquier variacin entre ellos en la lnea de comandos e, incluso, si
es necesario, automticamente mezclar los ficheros.

Iniciacin a LaTeX (IV): Bibliografas y Ms All

. . . . . .87
Con esta cuarta entrega llegamos al final de este curso. Hemos considerado necesario
llegar hasta esta entrega para poder alcanzar un nivel que nos permita construir nuestro primer documento completo, un proyecto con ndices, captulos y bibliografa,
construido a partir de ficheros independientes.

KTools

LINUX USER

Ktools: SuperKaramba

Decoracin de Escritorios
SuperKaramba permite dotar de un aspecto precioso a tu escritorio con una coleccin de temas que te permitir dar a tu
entorno de trabajo un toque personal. POR STEFANIE TEUFEL

a
extensin
de
escritorio
de extensiones del escritorio, no obstante,
make; make install. Y, como de costumSuperKaramba realmente realza
la versin 1.0 es tan inestable que para
bre, no debemos olvidar la variable de
nuestro escritorio. SuperKaramba
este artculo hemos decidido restringirnos
entorno KDEDIRS que refleje la ruta a los
es til para un amplio nmero de tareas,
a la versin 0.34 (la versin estable ms
directorios KDE. Por ejemplo, podemos
como mostrar informacin de la carga
actual). El programa esta disponible en la
ajustar la variable de entorno KDEDIRS
del procesador o el uso de memoria,
pgina Web del proyecto en la direccin
de la siguiente forma:
archivos de registros o alimentadores de
http://netdragon.sourceforge.net/index.
noticias. Superkaramba nos ofrece un
php?page=Download%20SuperKaramba.
export KDEDIRS=/opt/kde3:/usr/U
enfoque ordenado y flexible a la hora de
Como es habitual cuando se trata de
local/kde
personalizar nuestro escritorio
aplicaciones en proceso de desarrollo, no
Tras construir el programa satisfactoriaLa flexibilidad es uno de las mayores
hay paquete oficial RPM disponible
mente, tendremos una entrada en nuestro
ventajas de SuperKaramba. Con slo unas
actualmente. Tras la descarga de
men
de
inicio
para
Tools
|
pocas lneas de cdigo podemos modificar
Superkaramba debemos descomprimir el
SuperKaramba. La pulsaremos para
fcilmente el programa para que
iniciar el programa. Alternativarefleje nuestras necesidades. Esta
mente
podemos
escribir
flexibilidad significa que no existe
superkaramba & en una ventana de
una configuracin predeterminada
terminal. Seremos recompensados
de Superkaramba. Pero continuemos
con la aparicin de una pantalla de
viendo ms sobre los variados y cobienvenida como la que aparece en
lorista ejemplos preconfigurados
la Figura 1. La pantalla nos solicita
(tambin conocidos como temas)
que indiquemos dnde queremos ir
que van desde extremadamente
a continuacin.
tiles a simplemente bonitos.
Pulsando Help iremos directaAlgunos lectores puede que estn
familiarizados con el predecesor de
mente a la pgina de ayuda del
Superkaramba, conocido simpleprograma si tenemos conexin a
mente como Karamba. La principal
Internet. Download nos lleva a
innovacin
introducida
por
la pgina de temas oficiales de la
Figura 1: La pantalla de bienvenida de SuperKaramba nos lleva
Superkaramba es su habilidad de
aplicacin (tambin hay enlaces
a importantes sitios.
hacer guiones, por ejemplo con
directos listados en el panel de la
Python. Esta extensin significa que el
cdigo fuente y construir la aplicacin
derecha). Pulsar Open nos permite
programa est incluso mejor preparado
nosotros mismos. De nuevo, el truco de
abrir temas de Superkaramba en nuestro
para usos interactivos.
las tres cartas funcionar: configure;
ordenador.
Actualmente, los desarrolladores estn
trabajando duro en la nueva generacin

Glosario

KTools
En esta columna presentaremos cada mes
herramientas que han demostrado ser especialmente tiles trabajando bajo KDE,
resolver un problema que de otra forma se
ignorara deliberadamente o simplemente
son de las cosas ms agradables de la vida,
sin las cuales no querramos pasar una vez
descubiertas.

Python: Python es un lenguaje de programacin desarrollado a principios de los


noventa por Guido van Rossum. No debemos
preocuparnos si nos asustan las serpientes
(el nombre del lenguaje proviene el los comediantes britnicos Monty Python). Python es
til para escribir programas para el interfaz
de comandos Linux al igual que Perl, pero
tambin puede utilizarse para programar
aplicaciones completas para el escritorio de

Linux. Una gran variedad de mdulos (para


manipulacin de imagen y sonido o
exportacin XML por ejemplo) y el hecho de
que el intrprete est disponible para casi
cualquier plataforma de sistemas operativos
ha hecho de Python un lenguaje aceptado
universalmente. No obstante, en contraste
con Perl o con PHP, Python fue diseado
desde el principio como un lenguaje orientado a objetos.

www.linux-magazine.es

Nmero 04

67

LINUX USER

KTools

mostrado en la Figura 5, es similar al


main.theme pero mucho ms colorista.
Adems, muestra los nmeros de las versiones del kernel y KDE, nos monitoriza
el trfico de red, nos proporciona salida
del comando uptime y controla el popular reproductor de audio XMMS.

Clculos

Figura 2: Abriendo temas en SuperKaramba.


Figura 4: Es una lstima que el tiempo sea ms

El motivo de la calculadora del escritorio


(http://www.kdelook.org/content/show.
php?content=14426) proporciona al
usuario una completa calculadora que nos
recuerda a la del sistema operativo Mac
OS X. Si nos hemos acostumbrado a las
pulsaciones nicas como usuarios de
KDE, esta aplicacin puede que nos llegue
a confundir, puesto que requiere pulsaciones dobles para introducir datos y calcular. Si es as puede que deseemos pulsar
con el botn derecho del ratn para que
aparezca el men contextual y bloquear el
tema. Esto cambiar su comportamiento
hacia uno de pulsacin simple.

Por cierto, en lugar de slo visitar la


difcil de cambiar que el tema.
pgina de descarga predeterminado,
puede que tambin queramos visitar
memoria. Al igual que cualquier otro
http://www.kde-look.org. La seccin
tema, aade una perfecta transparencia a
Karamba tiene muchos ms
nuestro
escritorio.
Por
motivos que la pgina oficial
supuesto, esto solo se ve
del proyecto. Pero los
bien si tenemos una imagen
desarrolladores prometen que
como fondo de escritorio. Si
esto cambiar pronto, puesto
no es as puede que no
que el archivo temas pronseamos capaces de ver nada.
El Da de Maana
to dejar de ser beta y ser
Pulsaremos con el botn
extendido en el futuro.
derecho sobre el tema para
Paraguas o gafas de sol? Abrigo de
Es posible que tambin
abrir el men contextual, en
invierno o protector solar? El tema Liadvirtamos una bala de
el
que
encontramos
quid Weather (http://www.message.co.
can en nuestro lanzador
opciones como Open new
nz/~matt-sarah/lwp-3.1.1.tar.bz2) no
que nos da acceso a los
theme (abrir nuevo tema),
solo nos mantiene al da de las ltimas
temas en nuestro equipo,
bloquear o desbloquear la
previsiones meteorolgicas, si no que
permitindonos
cargar
posicin de un tema (Toggle
tambin nos ofrece datos para los prxitemas adicionales o elegir
Figura 5: Al margen de
locked position), Close this
mos cinco das en una bonito formato.
entre los activos (Figura 2).
mostrar informacin de
theme (cerrar
Tras descargar el tema
nuestro sistema, el tema
este
tema),
podemos recuperar el men
Ceirse al Tema
Ubermon nos ofrece
Quit(cerrar) el
contextual para proceder a
controles de nuestro
Como hemos mencionado
programa o ediconfigurar el tema (Confireproductor MP3.
previamente, podemos pultar el cdigo
gure theme, Figura 4).
sar Open en la ventana de
fuente del tema.
La forma ms fcil de
seleccin para abrir un tema. El paquete
Para editar el cdigo debeencontrar el tiempo local es
incluye por omisin un tema de prueba
mos seleccionar esta ltima
seleccionando Find location
Figura 6: Liquid Weather
llamado
main.theme
oculto
en
opcin, y Superkaramba
on weather.com (Buscar
nos ofrece la prediccin
superkaramba-0.34/examples/autoHide/.
cargar el cdigo fuente del
localizacin
en
del tiempo en nuestro
Como podemos observar en la Figura
tema actual en nuestro ediweather.com), donde introescritorio.
3, el tema nos muestra la hora del sistor de texto predeterminaduciremos el nombre de la
tema, el uso de la CPU o la carga de
do. Para saber como modilocalidad en la que nos
ficar los parmetros que permiten camencontremos. No nos debemos preocubiar el aspecto y funcionalidad del tema
par si no hay datos sobre la localidad
recomendamos los HOWTOS localizados
buscada de forma inmediata. Deberemos
en las siguientes pginas: http://
recargar el tema para obtener la informanetdragon.sourceforge.net/index.
cin que deseamos (en nuestro ejemplo
php?page=Create+A+Theme thttp://
de la figura 6 muestra el tiempo en USCIwww.efd.lth.se/~d98hk/karamba.
TYHERE). Incluso podemos optar por
que nos muestre los resultados en
Un Mundo de Color
unidades mtricas pulsando Use metric
Figura 3: Toda la informacin que necesitamos en
El tema Ubermon (http://www.kde-look.
units (Celsius) si preferimos grados Cel
un bonito paquete.
org/content/show.php?content=13166),
sius en lugar de grados Fahrenheit.

68

Nmero 04

www.linux-magazine.es

xvidcap

LINUX USER

xvidcap

Tele-Linux
Muchas veces puede resultar difcil explicar la funcionalidad de una aplicacin con palabras. Un
pantallazo puede ayudar, pero si necesitamos algo
ms que una imagen fija, xvidcap nos puede ayudar. Ahora es posible hacer ayudas de tutoriales
que usan animaciones grabadas por nosotros mismos usando el software para que otros puedan ver
exactamente lo que estamos haciendo.
POR ANDREA MLLER

a grabacin de la ejecucin de
pasos de programas desde el
escritorio nunca ha sido una tarea
fcil. Si bien hay al menos una docena
de programas luchando por el beneplcito de los usuarios que producen documentacin, ninguno de ellos es en realidad un buen generador de pelculas. Presentamos xvidcap [1] de Rasca Gmelch.
El programa, ahora mantenido y desarrollado por Karl H. Beckers, crea
demostraciones en pantalla a medida.
Podemos crear imgenes o archivos
MPEG de reas del escritorio definidas
por el usuario, estando por tanto perfectamente capacitado para mostrar el
camino a travs de estructuras de mens
anidadas.

Cmara, Luces, Accin!


Antes de dar los primeros pasos como
director de pelculas en pantalla debemos evidentemente instalar el programa.
Esto es sencillo para usuarios de distribuciones que soporten paquetes RPM
o Debian desde la pgina de xvidcap. El
RPM proporcionado por el desarrollador
del programa soporta Suse Linux 9.0 y
Red Hat 9.0 entre otros. Hay dos paquetes para Debian: uno para la versin
estable (Woody) y otro para la versin de
pruebas (Sarge).
Los usuarios de otras distribuciones
debern compilar xvidcap ellos mismos.

Se supone que tenemos instalados los


paquetes de desarrollo para libpng, libjpeg
y XFree86 en nuestro sistema. Simplemente debemos seguir el procedimiento
estndar: ./configure; make; su -c "make
install" para construir xvidcap e instalar el
programa en la estructura del directorio
bajo /usr/local. Como root es el nico
usuario con permisos de escritura en este
nivel tendremos que introducir su -c para
asumir temporalmente privilegios de root
para el paso make install.
El programa xvidcap se basa en el programa ffmpeg [2] para crear vdeos. Si
ste no est instalado en nuestro sistema
an podremos crear capturas de pantallas con nuestra versin de xvidcap,
pero no manipular vdeos. Si nuestra distribucin no incluye el paquete ffmpeg
necesitaremos crear la versin de ffmpeg
incluida con la distribucin xvidcap. Para
hacer esto debemos aadir el parmetro
-withforced-embedded-ffmpeg al comando ./configure para crear un xvidcap con

soporte para embedded ffmpeg o cambiar


al subdirectorio ffmpeg antes de compilar xvidcap. Introducimos ./configure;
make; su -c make install en este directorio para crear el codificador ffmpeg y el
reproductor ffplay, y entonces escribimos make install para copiar todas estas
herramientas a /usr/local/bin. La principal ventaja de este mtodo es que nos
permite usar ffmpeg y ffplay de forma
independiente de xvidcap, algo que no
nos permite la versin integrada.
La opcin -with-gtk2 ./configure es
muy interesante si estamos construyendo el programa nosotros mismos puesto
que crea un programa llamado gvidcap.
A diferencia del original, gvidcap
dispone de un moderno gtk-2 GUI que se
ajusta perfectamente al escritorio actual
de Gnome.

El Archivo de Comandos
Para lanzar la nueva herramienta instalada en el ltimo paso escribimos:
xvidcap &

Figura 1: El creador de pelculas de escritorio xvid-

o tecleamos

cap.

gvidcap &

Figura 2: La variante gtk-2 tiene un aspecto ms


moderno que la original.

para lanzar la versin gtk-2. Los elementos de control para xvidcap (ver figura 1)
y para gvidcap (ver figura 2) estn organi-

www.linux-magazine.es

Nmero 04

69

LINUX USER

xvidcap

Figura 3: Usaremos este dilogo para especificar


el formato de salida y el nombre del archivo.

zados exactamente de la misma forma.


Esto tiene una parte positiva y una negativa. La versin original puede que parezca
aburrida, pero ciertamente es ms estable
y mucho ms configurable que la versin
moderna. Estabilidad, configurabilidad y
el hecho de que ambas interfaces son
similares es lo que hizo que nosotros nos
decantsemos por concentrarnos en xvidcap en este artculo.
Cuando lanzamos el programa nos
muestra un marco rojo de aproximadamente el tamao de una tarjeta de crdito para indicar el rea de grabacin. El
marco se mueve con la ventana del programa. Para evitar esto podemos pulsar
en el botn x para separar el marco del
resto de la aplicacin. Como el tamao
por defecto es muy pequeo para
cualquier cosa excepto la ms pequea
de las aplicaciones deberemos definir el
rea del escritorio que queremos grabar
antes de hacer nada ms. Pulsaremos en
el aspa de la barra de herramientas para
cambiar el puntero del ratn a una cruz.

Bien podemos mantener pulsado el


botn izquierdo y arrastrar el ratn al
rea definida o pulsar en una ventana
(Suponiendo que estemos interesados en
el contenido de sta). Si seleccionamos
una ventana el vdeo no incluir la barra
del ttulo de esta.
Tras seleccionar nuestra localizacin,
el siguiente paso es definir algunos
parmetros, como el formato de
grabacin. [Alt-O] (o [Ctrl-P] para gvidcap) abrir el dilogo de configuracin
mostrado en la figura 3.
Lo primero que haremos ser ajustar el
valor de Max Frames a 0 debido a que
xvidcap tiene una restriccin por defecto
de 30 imgenes. El valor 0 elimina este
lmite, permitindonos crear vdeo de
cualquier longitud. Usaremos la caja
Frames per Second (FPS) para especificar el nmero de imgenes por segundo
que queremos que xvidcap capture. El
valor por defecto es 25 (no debemos confundirnos con el formato en que est
mostrado 25.000000). Si necesitamos
vdeos MPEG1 o MPEG4 debemos ver la
pgina principal de xvidcap (opcin -fps)
para ver los valores requeridos de imgenes por segundo. Por ejemplo, 25 y 50
son valores vlidos para MPEG1, mientras que MPEG4 puede usar valores entre
7.5 y 30. Si introducimos un valor
incorrecto nuestros vdeos o irn muy
rpidos o muy lentos.
Introducimos el cdigo de vdeo (por
ejemplo MPEG4) en el campo codec. Esto
hace que por defecto usemos MPEG1, si
bien podemos cambarlo a MPEG4 para
grabaciones de mayor calidad. En nues-

GLOSARIO
gtk-2: El conjunto de herramientas Gimp que
vienen con la versin 2. esta librera grfica
proporciona a los desarrolladores controles
pre-hechos para aplicaciones basadas en
GUI, como botones de radio, cajas de dilogo
y campos de entrada de datos. Al margen del
escritorio Gnome versin 2 o superior, el
nuevo Gimp tambin est basado en gtk-2.
MPEG: Abreviatura de Motion Pictures Expert
Group (Grupo Experto de Pelculas). Este
grupo, el cual abarca empresas y universidades, estandariz tcnicas de compresin
para formatos de vdeo. La codificacin MPEG
intenta describir todos los segmentos de
imgenes posibles especificando en qu se
diferencian de la imagen previa, obteniendo
por tanto archivos ms pequeos.

70

Nmero 04

ImageMagick: Una coleccin de diez herramientas de manipulacin de imgenes.


Como la mayora de las herramientas
basadas en la lnea de comandos, ImageMagick es la solucin perfecta para cdigos de
conversin de imgenes y trabajos de manipulacin.
~/.Xdefaults: Aqu es donde los usuarios
pueden definir sus preferencias para programas basados en GUI, como el color de fondo
o las fuentes. Para averiguar las preferencias
que un programa puede usar tenemos que
comprobar la pgina Web de esa aplicacin.
Las aplicaciones actuales de KDE y Gnome
ignoran habitualmente los ajustes de ~/.Xdefaults.

www.linux-magazine.es

tras pruebas, la resolucin de los vdeos


MPEG1, era tan pobre que en ocasiones
no podamos distinguir algunos de los
mens.

Vdeo o imagen fija?


An necesitamos escribir el nombre del
archivo que deseamos grabar en la caja
File pattern. Si dejamos el que aparece
frm-%04d.xwd, xvidcap no crear un
vdeo, si no archivos individuales de formato xwd (x window dump) en el directorio donde lanzamos el programa. La lnea
%04d aade un nmero de serie al nombre del archivo creado creando los
archivos
frm-0000.xwd
hasta
frm-9999.xwd. El smbolo del porcentaje
indica informacin del formato: 04d (d
para decimales) especifica el nmero de
dgitos. Si nuestra demo va ha tener ms
de 10.000 imgenes deberemos cambiar el
valor de File pattern o frm-%05d.xwd o
incluso a frm-%06d.xwd. Podemos modificar el nombre base de archivos (frm) y el
formato de salida. xvidcap tambin puede
crear archivos JPEG o PNG. Las imgenes
fijas son tiles para editar resultados o si
estamos intentando conseguir un pantallazo que programas como ksnapshot no
pueden ofrecer, como un mensaje de error
que aparece en nuestra pantalla e
inmediatamente desaparece.
Para crear el vdeo directamente cambiamos la entrada en File pattern al nombre del archivo que deseemos con la
extensin mpeg, por ejemplo programdemo.mpeg. Para evitar tener que modificar las opciones cada vez que usemos
el programa pulsamos Save. Esto indica
a xvidcap que debe almacenar los
ajustes en el archivo .xvidcap.scf bajo
nuestro directorio de inicio. El homlogo
gtk-2, gvidcap lee los ajustes del mismo
archivo. En otras palabras, cualquier
cambio realizado en un programa tendr
efecto inmediato en el otro. Borrando
~/.xvidcap.scf restauraremos los valores
por defecto del programa.

Toma uno, accin!


Pulsaremos el botn con el punto rojo
para comenzar a grabar el rea del
escritorio dentro del cuadro rojo. Tras
demostrar los aspecto del software en los
que estemos interesados pulsamos el
botn con el cuadrado negro para detener la grabacin. Podemos usar un
reproductor como MPlayer (ver figura 4)

xvidcap

LINUX USER

Figura 5: xvidcap usa Display


para abrir imgenes individuales. Display dispone de una
serie de funciones para manipular imgenes. El men
Enhance tiene opciones para
modificar el brillo, valores
gamma y la saturacin.

Figura 4: MPlayer reproduciendo un vdeo sobre lectores de correo electrnico creado con xvidcap.

ffplay videodemo.mpeg

Presionando [q] cerramos la reproduccin.


Tras crear una serie de imgenes
podemos pulsar los botones con las flechas hacia la izquierda o hacia la
derecha para ir pasando entre las imgenes individuales. Pulsando el botn
con la figura del lpiz a la derecha abrimos la imagen actual en display, el visor
de imgenes del paquete ImageMagick.
Entonces podemos pulsar sobre la ventana de la imagen para que se abra un
men con una serie de funciones para
manipularla (ver Figura 5), pudiendo
alterar colores y tamao (Enhance), rotar
(Transform) u otros efectos Effects (F/X).
El botn con la tira de pelcula ejecuta
animate, otra herramienta de la coleccin ImageMagick. Como indica su nombre, animate crea y reproduce animaciones hechas de archivos imgenes
individuales. Debemos evitar usar esta
opcin con colecciones de imgenes
superiores a 400. Intentar alimentar a
animate con demasiado material har

que incluso el ms potente de lo equipos


se venga abajo.

De Simples Imgenes a
Vdeos
File | Make Video convierte nuestras
imgenes en vdeos. xvidcap analiza gramaticalmente
~/.Xdefaults
para
averiguar que programa debe usar para
esto. Aqu es donde se almacenan los
valores por defecto para los programas
grficos. Dicho esto, gvidcap no distingue lo asignado en ~/.Xdefaults, por
lo que el comando de conversin slo se
aplicar a xvidcap. Supongamos que
tenemos una coleccin de imgenes con
formato PNG con nombres basados en
una
serie
con
formato
como
pic%04d.png y deseamos usar ffmpeg
para convertirlas en un vdeo MPEG1. la
siguiente lnea

RECURSOS
[1] xvidcap:http://sourceforge.net/projects/
xvidcap
[2] ffmpeg:http://ffmpeg.sourceforge.net/

xvidcap*mkVideoCommand:ffmpegU
-i %s video.mpeg

en ~/.Xdefaults indica a xvidcap que debe


ejecutar ffmpeg cuando seleccionemos
Make Video. Para que esto funcione necesitamos el programa ffmpeg apropiado. No
podemos utilizar la variante incrustada de
xvidcap. xvidcap reemplaza la serie %s
con el nombre del modelo usado por los
archivos de imgenes individuales
(pic%04d.png en nuestro ejemplo). Como

LA AUTORA

para reproducir nuestra demo a la


audiencia. Para hacer las cosas sencillas
podemos optar por usar el reproductor
de la lnea de comandos ffplay suministrado con ffmpeg. El siguiente comando ejecuta la herramienta:

ffmpeg reconoce esta


norma de llamar archivos
puede convertir archivos
con
nombres
como
pic0000.png,
pic0001.png uno a uno y almacenar el
resultado en el archivo resultante
(video.mpeg) bajo el directorio actual.
Hay un escollo del que debemos estar
alerta cuando usemos ffmpeg para generar un vdeo desde archivos de imgenes
individuales. Puede que el codificador no
pueda soportar archivos xwd que xvidcap
cree por defecto. ffmpeg usa los siguientes
formatos grficos: pnm, pam, pgmyuv,
yuv, png, jpeg y gif. El formato PNG es
una buena opcin para capturar imgenes
de pantalla con xvidcap. Para seleccionar
el formato PNG debemos seleccionar la
extensin de archivo PNG en File pattern
en las opciones de men de xvidcap.
El mtodo ms rpido para que un director amateur triunfe es indicar a xvidcap que
cree salida de vdeo y deje el procesado de
imgenes individuales a usuarios que estn
insatisfechos con los vdeo automatizados y deseen modificar el material base

antes de generar los vdeos.

Tras cerca de dos


aos como periodista
independiente,
Andrea
Mueller acaba de
acceder a un nuevo
cargo editorial en
Linux New Media
AG. Cuando no se
est ocupando de artculos o
envolviendo paquetes para la zona de
descargas de EasyLinux, Andrea va
ms all de Linux y se involucra con
otros sistemas operatives como QNX,
BeOS y NetBSD.

www.linux-magazine.es

Nmero 04

71

LINUX USER

GFTP

Transferencia de ficheros verstil con GFTP

FTP y ms all
Tanto si le gustan las transferencias de ficheros desde una GUI o desde la lnea
de comandos, GFTP tiene la herramienta adecuada para el trabajo diario. El
cliente de GFTP tambin soporta caractersticas avanzadas como la transferencia segura de ficheros con SSH.
POR MARTIN STEIGERWALD

FTP es un cliente para el protocolo de transferencias de ficheros


(FTP) eficiente y verstil para sistemas Linux. GFTP, que fu escrito por
Brian Masney, realiza todas las tareas
asociadas con la descarga y subida de
ficheros de los servidores de FTP, y
adems ofrece servicios adicionales,
como la transferencia de ficheros HTTP,
la transferencia de ficheros basada en
SSH y la descarga simultnea desde
mltiples servidores. El programa GFTP
proporciona algunas caractersticas
interesantes, como las de arrastrar y
soltar, control inteligente de la gestin de
los archivos existentes, entrada directa
de comandos FTP y transferencias directas entre dos servidores FTP.
Podemos encontrar GFTP en dos versiones: gftp-gtk que proporciona una interfaz grfica para la transferencia de
ficheros y gftp-text que es una versin del
cliente de FTP en modo consola, lista para
ser usada desde la shell. Si se teclea gftp,

Y FTPS?
FTPS es una variante de FTP basada en la
proteccin SSL. GFTP soporta el protocolo
FTPS para encriptar las conexiones de control: El programa transmite comandos FTP
con sus parmetros como las contraseas
con texto cifrado pero no cifra los ficheros.

72

Nmero 04

el sistema podr lanzar tanto la versin


X11 como la versin en modo texto,
dependiendo de cmo est configurado.
GFTP est disponible para varias distribuciones Linux, aunque no siempre se
instala de forma automtica. Vase el
cuadro titulado Instalacin de GFTP
para saber ms acerca de la instalacin
de GFTP en Suse o Debian, adems de

detallar cmo se puede compilar GFTP


desde los ficheros fuentes.

Trabajando con GFTP


GFTP lanza una ventana tpica estilo
FTP partida en dos zonas, con paneles
indicando los directorios locales y remotos (Vase la Figura 1). Una zona de
estado situada en la parte de abajo de la

Instalacin de GFTP
Si se tiene Linux Suse, se puede ejecutar YaST
| Install and remove software para instalar el
paquete gftp. SuSE Linux 9.1 tiene la versin
2.0.16-44.
Si prefiere compilarse el software, necesitar
instalar algunas herramientas y ficheros de
desarrollo antes de empezar. Por ejemplo, en
Suse, hay que asegurarse de tener instalado
Yast C/C++ Compiler and Tools y Gnome
Development.
Hay que descargar el cdigo fuente desde la
pgina web del proyecto [1], y descomprimir
el
paquete
tecleando
tar
-xjf
gftp-2.0.17.tar.bz2, o usar las herramientas del
escritorio para descomprimir el fichero tar.
Hay que entrar en el directorio gftp-2.0.17 y
seguir los pasos normales: ./configure; make;
su -c make install.
Por defecto, make install coloca los ficheros
ejecutables de GFTP en /usr/local/bin. Esto
coloca la versin recompilada en lo ms alto
del path y se asegura de que los elementos

www.linux-magazine.es

del men que instala el paquete de instalacin hacen referencia a esta versin. Si
necesita eliminar su propia versin, porque
Suse haya presentado algn paquete nuevo,
por ejemplo, se puede introducir su -c "make
uninstall".
En Debian Linux, se puede introducir su -c
-apt-get install gftp- o escoger un gestor de
paquetes como Synaptic o KPackage para
instalar GFTP. Hemos probado GFTP con
Debian Sarge version 2.0.17-5. El paquete gftp
instala automticamente ambas versiones
de GFTP, aunque si prefiere se puede instalar
los paquetes individuales, gftp-gtk y gftp-text
de forma separada.
El paquete de la versin de Debian actualmente no soporta SSL (vase [2]). Si se intenta usar FTPS o HTTPS, hay que compilar el
software como se describi anteriormente.
Pero no olvidemos instalar el paquete libssldev con los ficheros de desarrollo de OpenSSL
antes de hacerlo.

GFTP

GFTP intenta
resolver los conflictos con los
nombres
de
ficheros antes de
que empiece la
transferencia. Si
un fichero con el
mismo nombre
ya existe en el
directorio de destino, GFTP preguntar
qu
hacer con dicho
Figura 1: La ventana principal de GFTP proporciona una GUI FTP tpica para
fichero (Vase la
subir y bajar ficheros desde los servidores ftp.
Figura
2).
El
cuadro de dilogo
permite seleccionar una accin tanto
ventana proporciona informacin de las
para un fichero como para un grupo de
transferencias actuales y otra muestra la
ellos. El programa soporta sobrescritura
accin actual del protocolo.
y tiene un modo para continuar la
Para conectarse a un servidor de FTP
descarga de los ficheros cuyas transfehay que teclear el nombre del mismo en
rencias hayan sido interrumpidas. Por
la caja de texto titulada Host en la parte
defecto, GFTP sugiere continuar una
de arriba de la ventana principal. Tamtransferencia de fichero. Se puede selecbin se puede introducir el nombre de
cionar Overwrite by default en FTP |
usuario y la contrasea, adems de
Options | General para modificar este criespecificar el nmero de puerto en el que
terio (Vase la Figura 3).
se desee realizar la conexin. La ventana
La configuracin en Options | General
dividida en dos muestra el rbol de
etiquetada con Allow command input in
directorios local en la zona de la izquierGUI permite la entrada de comandos FTP
da y en la derecha los directorios remo(Vase la Figura 3). Esta opcin permite
tos. Cuando se encuentre el fichero que
a los usuarios el poder usar una GUI sin
se desee transferir, hay que seleccionarlo
perder los beneficios de la entrada direcy pulsar el botn con la flecha adecuada.
ta de comandos del cliente en modo con(Los botones con las flechas estn locasola. Si esta opcin est activada, se
lizados entre las zonas local y remota de
puede introducir un comando FTP al
la ventana principal; ver Figura 1. Para
estilo de la lnea de comandos desde la
transferir un fichero desde el directorio
ventana principal de GFTP (vase la
local al remoto hay que pulsar la flecha
Figura 4).
que apunta hacia la derecha. Para transSi se desea seleccionar mltiples direcferirlo desde el directorio remoto hasta el
torios para transferir de una sola vez,
directorio local, hay que pulsar la flecha
hay que deshabilitar Start transfer para
que apunta hacia la izquierda).
que se pare GFTP y capture los ficheros.
Entonces se seleccionan los ficheros que
se necesiten, y se habilita de nuevo la
opcin para indicarle al programa que
reanude la transferencia.
El soporte de descargas desde mltiples servidores de GFTP es excelente.
Simplemente hay que desconectarse del
servidor actual y conectarse a otro
durante la descarga de un fichero para
que se quede en segundo plano.
Si se selecciona Do transfer one at a
time, el cliente de FTP procesar las
Figura 2: Resolucin de conflictos de nombres en
descargas una despus de otra. De otra
GFTP.
manera, el programa descargar un

LINUX USER

fichero de cada servidor simultneamente. Esta opcin es interesante si se


tiene una rpida conexin a Internet.
GFTP tambin soporta la transferencia
de ficheros directa entre dos servidores
de FTP. En otras palabras, se puede usar
FTP para mover un fichero desde un
servidor de FTP a otro, sin necesidad de
almacenar el fichero en la mquina del
cliente de GFTP. La opcin de transferencia directa de GFTP requiere que ambos
servidores soporten el protocolo de intercambio de ficheros (FXP File Exchange
Protocol), una extensin de FTP. Para
lanzar una sesin de transferencia directa hay que conectarse al servidor de FTP
que recibir los ficheros. Entonces se
selecciona Local | Open URL para
conectarse al servidor de FTP que
enviar los ficheros.
Si se intenta terminar una conexin
mientras el programa est estableciendo
una conexin o leyendo un directorio,
GFTP mostrar un mensaje solicitando al
usuario que primero pulse el botn Stop.
Si no se advierte el mensaje que se
muestra en el rea de informacin,
podra preguntarse que por qu el programa no responde.

Configuracin de Tipos de
Ficheros
La configuracin de ficheros de GFTP permite especificar qu programa usar para
mostrar los ficheros de un tipo determinado. El programa no tiene un cuadro de
dilogo para realizar esta tarea. Hay que
abrir el fichero .gftp/gftprc del directorio
home con un editor de textos. Hay que
mirar las lneas que empiecen por ext=.

Figura 3: La solapa General en el cuadro de dilogo Options controla el comportamiento general


del programa.

www.linux-magazine.es

Nmero 04

73

GFTP

Cada lnea sigue el mismo patrn,


empiezan por ext=, luego le sigue un
punto y la extensin del fichero, el
fichero XPM a usar, el modo de transmisin, B para binaria y A para ASCII y
finalmente el nombre, y si fuera necesario, la ruta del programa a utilizar para
mostrar o reproducir el tipo de fichero.
Los ficheros ms comunes de formatos
de imgenes y msica, as como los documentos HTML estn predefinidos. Tan
slo hay que aadir el programa favorito
que se desee para mostrar dichos
ficheros. Es bastante fcil crear un nuevo
tipo de fichero, copiando y modificando
una lnea existente.

GFTP desde Shell


Si se necesita transferir ficheros
automticamente usando un script, la
variante shell de GFTP es la mejor
opcin. Si se teclea help el programa
muestra un listado de los comandos que
soporta. Se puede teclear help nombrecomando para que muestre ms detalles de
un comando especfico.
Tecleando gftp -d ftp://nombredeusuario:contrasea@dominio.com/dir
ectorio-con-sus-paginas-web
conseguimos que almacene pginas HTML
en nuestra cuenta de alojamiento web y
configurando cronjob con este comando
se obtendr una copia de seguridad
peridica.
Hemos de asegurarnos de restringir los
privilegios del script para proteger la
contrasea de la cuenta FTP. Un script
que contiene una contrasea no debera
ser accesible por nadie ms que uno
mismo. En caso de duda, dejaremos en
blanco la contrasea, entonces, tendremos que introducirla cada vez, lo que
impedir que nos podamos beneficiar de
la ejecucin automtica del script por
parte de cronjob.

Otros Protocolos
GFTP tambin soporta la transferencia
de ficheros por HTTP y SSH. Por HTTP,
hay que teclear una URL que empiece
por http:// en el cuadro de texto Host de
la ventana principal; para SSH, hay que
introducir una URL que empiece por
ssh2://.
No hay necesidad de modificar la configuracin por defecto para las transmisiones de FTP y HTTP, a menos que se
use un servidor proxy, pero para que las

74

Nmero 04

transmisiones
SSH funcionen,
hay que cambiar
unos
cuantos
parmetros
en
FTP | Options |
SSH.
El cliente de
FTP usa SFTP
como protocolo
de transmisin.
Para que funcione, el servidor
SFTP tiene que
estar en un path
Figura 4: Lo mejor de los dos mundos: GFTP permite usar el ratn para naveejecutable en el
gar por el directorio destino y permite introducir comandos en formato texto
servidor remoto.
al estilo de los FTP en modo consola.
Hay que habilitar
la opcin Use SSH2 SFTP subsys para los
an hay espacio para seguir aadiendo
servidores que lo soporten.
mejoras. El botn Stop no es siempre
Hemos comprobado satisfactoriamente
intuitivo. Y el programa se beneficiara
las dos versiones con una instalacin del
con un sistema de configuracin de tipos
servidor SSH en Debian. El primer intento
MIME y programas asociados con una
de conexin (usando la funcin SSH2
GUI. Tambin sera interesante que
SFTP) no funcion porque SSH nos pidi
soportara el proyecto de Free Desktop de

que confirmramos la confianza en la


base de datos MIME [4].
autenticidad del servidor. GFTP interpret la consulta como un error. Pero en
RECURSOS
las conexiones restantes en esta sesin
funcionaron correctamente, ya que SSH
[1] Proyecto GFTP: http://www.gftp.org
solamente pregunta una vez por sesin.
[2] Binarios GFTP para Debian sin soporte
Si se tiene la intencin de usar SFTP
SSH: http://bugs.debian.org/cgi-bin/
para transferencias seguras, probablebugreport.cgi?bug=251121
mente sera preferible esperar a que
[3] GFTP FAQ: http://www.gftp.org/readme.
salga la versin 2.0.18 de GFTP. La imahtml
gen CVS actual de GFTP ya resuelve
[4] Base de Datos compartida MIME: http://
dicho problema, segn comenta su
www.freedesktop.org/Standards/
autor. Y se han solucionado algunos
shared-mime-info-spec
problemas ms, pero la versin actual
[5] Acciones MIME: http://www.freedesktop.
an est refinndose segn el FAQ [3].
org/Standards/mime-actions-spec
Por ejemplo, ya no hace falta especificar
el path del servidor SFTP. SFTP debera
funcionar sin ninguna configuracin adiMartin
Steigercional. En una breve prueba con la verwald trabaja como
sin pre-release 2.0.18, la conexin con
administrador de
un servidor SSH funcion con la confisistemas
en
guracin por defecto.
team(ix) GmbH en
Las transferencias seguras con SFTP
Nuremberg, Aleson bastante tiles si estamos subiendo
mana,
http://
ficheros a nuestro propio sitio web. A
www.teamix.de.
Uno de los objediferencia de un cliente FTP, un cliente
tivos de su trabajo
SFTP cifra la contrasea y los datos, sin
es dar soporte de segundo nivel para
embargo, supone que el proveedor tiene
Linux como herramienta de negocio
acceso SSH y soporte SFTP.

EL AUTOR

LINUX USER

Conclusin
GFTP es una herramienta efectiva con
un amplio rango de caractersticas. Pero

www.linux-magazine.es

para los clientes de team(ix). Ya


instal Linux en su Amiga 4000 y usa
Linux, preferiblemente Debian Linux,
en su ordenador personal.

XUL

LINUX USER

Mens Web con XUL y XBL

Remate Final

Sin duda hay mucho donde rascar con el navegador Mozilla. En este artculo usaremos XUL para crear el men de una
pgina Web perfecta. A lo largo del camino aprenderemos cosas sobre el Lenguaje de Coligacin Extensible (XBL) y como
podemos usar XBL para realzar la potencia de nuestras creaciones en XUL
POR JONO BACON

n los ltimos nmeros de Linux


Magazine hemos explorado las
diferentes formas de construir
interfaces en XUL. En este artculo, el
ltimo de la serie, integraremos XUL

con contenidos Web aadiendo un


interfaz XUL a una pgina Web en
forma de una barra de men especial.
Esta barra de men usar el mismo
conjunto de componentes que Mozilla

y usar el tema y aspecto del buscador.


El efecto ser similar al de las barras
especiales como las de Google o Yahoo,
pero el usuario no necesitar instalarlas especficamente (se cargarn solo

www.linux-magazine.es

Nmero 04

75

LINUX USER

XUL

Figura 1: Nuestra pgina Web antes de convertirla con XUL.

cuando el usuario acceda a la pgina


Web).

La Caja de Herramientas
Con muchas innovaciones informticas,
los desarrolladores y los usuarios han
puesto la tecnologa en cajas, discriminando como deben ser usadas. PHP es
un buen ejemplo. Si bien podemos usar
Javascript, ASP u otras tecnologas en
pginas PHP, la mayora de los desarrolladores parece que se quedan con PHP y
tecnologas relacionadas con PHP.
PHP es un lenguaje de guiones por el
lado del servidor, Javascript es un
lenguaje del lado del cliente y HTML es
un lenguaje para formatear el contenido.
Cada tecnologa tiene su uso definido y
la mayora de los desarrolladores se ajustan a estos usos.
Puede que ya hayamos puesto XUL en
una de estas cajas conceptuales. En esta
serie hemos vistos ejemplos de scripts
XUL como el Buscador Amazon de
Mozilla, y parece que estos scripts convierten a Mozilla un entorno para aplicaciones Web. Estos ejemplos demuestran
que las tecnologas orbitan casi por completo alrededor del XUL para crear la
interfaz. Es por tanto bastante razonable
poner a XUL en una caja conceptual
donde se utiliza para la interfaz,
Javascript se utiliza para la interaccin y
las otras tecnologas realmente ni aparecen.
Al margen de la aplicabilidad de este
concepto para algunas aplicaciones, ciertamente esto no es cierto para todas las
aplicaciones. Javascript no tiene soporte

76

Nmero 04

nativo para recuperar informacin de


una basa de datos MySQL. Cmo conseguiremos introducir los datos de la
base de datos en nuestra interfaz XUL?
En una situacin como sta necesitaremos recurrir a un objeto especial de
Mozilla XPCOM o usar otro lenguaje que
disponga de este tipo de soporte.
Otros ejemplos de integracin de XUL
con otras tecnologas se producen si
queremos integrar elementos XUL en
nuestro sitio Web. Y si quisisemos
tener una caja especial que muestre
informacin del mercado de valores
dinmicamente? Sera ideal usar XUL
para esta caja de informacin, pero necesitaremos integrarla perfectamente costura en nuestro sitio Web, donde HTML
y CSS estn a la orden del da.
En su forma actual, XUL puede utilizarse para virtualmente cualquier sitio
con casi cualquier tecnologa. Hay algo
de soporte dentro de Mozilla para ayudarnos a realizar este tipo de integraciones, pero en algunos casos necesitamos saber algunos trucos y pistas que
nos ayuden a resolver determinadas
limitaciones intrnsecas de XUL.

XUL en un Sitio Web


Con el aumento de las personas cambindose a Mozilla desde Internet
Explorer u otros navegadores, XUL se
est convirtiendo en una tecnologa
viable que puede utilizarse bajo contenidos Web en general. Si bien algunos
puristas Web pueden no estar de acuerdo con que una tecnologa tan especfica
sea buena para la Web, XUL puede uti-

www.linux-magazine.es

lizarse en las ocasiones en las


que confiemos en que la mayora
de los usuarios usen Mozilla o
cuando podamos ofrecer algunos
contenidos para usuarios de
Mozilla y algunos otros para no
usuarios de Mozilla.
Si bien podramos crear contenidos especficos para usuarios
de Mozilla, esto es desaconsejable por el mismo motivo que los
contenidos
especficos
para
usuarios de Internet Explorer
estn
desaconsejados.
Solo
crearemos contenidos especficos
para Mozilla si sabemos que se
utiliza Mozilla o si podemos crear
una alternativa adecuada.
Vamos a integrar XUL con contenidos Web aadiendo una interfaz XUL
a una pgina Web en forma de una barra
de men especial para el sitio Web. Esta
barra de men no solo usara el mismo
conjunto de componentes que Mozilla, si
no que tambin tendr el mismo aspecto
y contexto que el navegador. Esto puede
proporcionar el mismo efecto que una
barra de tareas especial como las de
Google o Yahoo sin necesidad de que el

Pgina web de la Figura 1


01 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/lo
ose.dtd">
02
03 <html>
04
<head>
05
<title>XUL::Web</title><link
rel="stylesheet"
href="http://localhost/temp/
stylesheet.css"
type="text/css">
06
<link rel="icon"
href="http://mozilla.org/image
s/mozilla-16.png"
type="image/png">
07
</head>
08
<body>
09
<div id="top">
10
XUL Is Cool
11
</div>
12
<div id="content">
13

XUL

usuario las instale especficamente,


puesto que se cargar al acceder a la
pgina Web.
Como hemos mencionado anteriormente, este artculo explora la tarea de
integrar XUL con contenidos Web aadiendo una barra de men XUL a una
pgina Web. Este uso de XUL se llama
Remote Application (Aplicacin Remota). Tericamente, el cdigo XUL puede
ejecutarse desde un equipo local
(donde cargamos la pgina desde nuestro disco duro directamente con Archivo->Abrir Archivo) o desde un servidor Web remoto en el que podemos
acceder a la pgina va una URL como
http://www.unsitio.com/.
La localizacin geogrfica de la pgina
no indica si la aplicacin es remota (si
estamos ejecutando Apache en nuestro
equipo local y accedemos a la pgina
XUL va URL la aplicacin es remota). La
diferencia clave es que una aplicacin

La Barra de Men
01 <xul:menubar
oncommand="loadPage(event);">
02
<xul:menu label="Features">
03
<xul:menupopup>
04
<xul:menuitem
label="Introduccin a XUL"
value="http://localhost/temp/i
ntro.html" />
05
<xul:menuitem
label="Por qu XUL?"
value="http://localhost/temp/p
orque.html" />
06
<xul:menuitem
label="Creacin de un Script"
value="http://localhost/temp/c
rearscript.html" />
07
</xul:menupopup>
08
</xul:menu>
09
<xul:menu label="Ayuda">
10
<xul:menupopup>
11
<xul:menuitem
label="Ayuda General"
value="http://localhost/temp/a
yudageneral.html" />
12
<xul:menuitem
label="Ayuda ndice"
value="http://localhost/temp/i
ndice.html" />
13
</xul:menupopup>
14
</xul:menu>
15 </xul:menubar>

remota se nos sirve mediante un servidor Web, mientras que la aplicacin


local se carga directamente en el navegador.
Las aplicaciones locales XUL tambin
se diferencian de las remotas por su
funcionalidad. El conjunto de funcionalidades de las aplicaciones remotas es ms limitado debido a los potenciales riegos de seguridad. Un ejemplo
es el hecho de que una aplicacin
remota no puede escribir en un archivo
del sistema en un servidor Web.
Podemos evitar estas limitaciones ajustando la configuracin que rige como
funciona Mozilla, pero a costa de
reducir nuestra seguridad y no es
recomendable en entornos productivos.
En su lugar nos vamos a centrar en
usos perfectamente aceptables de aplicaciones XUL remotas pulsar en un
men para acceder a otra parte de sitio
Web, por ejemplo.

Creacin del Cdigo


Para aadir una barra de men a una
pgina Web necesitaremos comenzar
con una pgina Web. Primero
deberamos sentarnos y relajarnos mientras disfrutamos tomando el sol observando la pgina Web mostrada en la
figura 1. El cdigo que aparece ms
abajo la crea y debe ser aadido a xulpage.html.
Este es el contenido principal de nuestra pgina Web. Si bien debera ser
interesante, en realidad es bastante
aburrido. Para hacer las cosas ms
interesante aadiremos esta lista:
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>

{
font: verdana, arial;
font-size: 40px;
font-weight: bold;
text-transform: uppercase;
letter-spacing: 0.3em;
padding: 20px;
background: #EACBCB;
}
#content
{
padding: 20px;
border: solid thick black;
}

Con nuestra simple pgina Web lista procederemos a aadir un poco de XUL y
veremos como funciona. El primer paso
es en realidad crear el XUL que queremos aadir a nuestra pgina Web.
Aadiremos esto a un archivo llamado
menu.xml. Si bien parte del cdigo
puede que nos parezca familiar, usaremos algunas funciones especiales del
Mozilla para coligar funcionalidad en
trozos de cdigo que pueden llamase
desde nuestro HTML. Repasaremos cada
lnea del cdigo para discutir como funciona.
Las primeras dos lneas indican que
estamos usando XML y especifican que
la hoja de estilo que estamos usando es
parte del registro Chrome de Mozilla.
Este registro especial trata con como
pueden ser creadas las interfaces y que
apariencia tienen:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome:U
//global/skin/"U
type="text/css"?>

Para hacer nuestra pgina incluso ms


interesante, tambin hemos creado una
hoja de estilo en el archivo stylesheet.css.
Aadiremos este cdigo al archivo:
01 body, html {
02
margin: 0;
03
background: #FFF;
04 color: #000;
05 }
06
07 #top

08
09
10
11
12
13
14
15
16
17
18
19
20
21
22

LINUX USER

Si bien XUL es la tecnologa principal


dentro de la suite Mozilla, en realidad
hay una serie de tecnologas adicionales
relacionadas que pueden utilizarse con
XUL para permitir el desarrollo de aplicaciones. Una de estas tecnologas es la llamada Lenguaje de Coligacin Extensible
(XBL).
El propsito de XBL es simplemente
permitirnos crear un paquete de funcionalidades y vincularlas a otras va
CSS o el DOM. Esto nos da la capacidad
de crear conjuntos definidos de funcionalidades que pueden ser llamados

www.linux-magazine.es

Nmero 04

77

LINUX USER

XUL

desde nuestro otro cdigo. Esto no es


distintos al concepto de funciones pero
dentro de la arquitectura XUL/XBL.
Debemos saber que esto no es lo mismo
que una funcin, pero su concepto es
muy similar.
Para crear algunos de estos vnculos
primero necesitaremos indicar que estamos usando vnculos dentro de este
archivo. Esto lo hacemos especificando
una etiqueta llamada <bindings> (vnculos) e indicando que estamos usando
un espacio de nombres XBL. Un espacio
de nombres nos permite definir que etiquetas son partes de una tecnologa particular. Si tenemos una etiqueta XUL llamada <menu> y tenemos otra XBL llamada <menu> no tendremos manera
de determinar que etiqueta <menu>
queremos usar.
Para resolver esto normalmente
incluimos un prefijo a la etiqueta de la tecnologa que estemos usando (como haremos ms adelante para nuestras etiquetas
XUL). El atributo xmlns en la etiqueta
<bindings> indica que la etiqueta dentro
de este archivo est bajo las especificaciones XBL. <bindings> por si solo no es
una etiqueta XUL, si no una etiqueta XBL
como muestra el siguiente ejemplo
<bindings id="ourmenu"
xmlns=U

"http://www.mozilla.org/xbl"
xmlns:html="http://www.w3.orgU
/1999/xhtml"
xmlns:xul=U
"http://www.mozilla.org/U
keymaster/gatekeeper/U
there.is.only.xul">

Ahora crearemos un vnculo especfico


que se refiere a un diagrama especfico
de XUL que podemos usar. Usaremos el
atributo id para crear un nombre para
nuestro diagrama XUL. Usaremos este
valor para referirnos a nuestro diagrama
XUL en el cdigo HTML ms tarde:
<binding id="ourmenu">
<content>

Ahora debemos empezar a crear realmente la barra del men. Para hacer esto
crearemos una barra bastante comn,
con estructura tipo mens emergentes y
objetos de mens que hemos cubierto en
nmeros anteriores.
En el cuadro La Barra de Men
vemos el cdigo para crear una barra de
men con dos mens y una serie de
opciones. Veremos que usamos prefijos
para cada una de las etiquetas con xul
para indicar que estas etiquetas no son
del espacio de nombres XBL, si no del
espacio de nombres XUL.

Usando PHP con XUL


Uno de los mayores problemas de XUL en la
actualidad es que hay poco soporte respecto
al acceso a servicios externos como a las
bases de datos MySQL/PostgreSQL para
obtener los datos e integrarlos en nuestras
interfaces. Una opcin es crear un objeto
XPCOM que haga este trabajo por nosotros,
siendo un poco laborioso realizar estos objetos. Si bien es una solucin, es un poco compleja y requiere aprender otra plataforma de
programacin y su API. Otra opcin es usar
PHP.
Una cuestin a tener en cuenta al usar PHP
con XUL es que PHP es, obviamente, una tecnologa tipo servidor, mientras que XUL es del
tipo cliente. Con esto en mente, debemos
intentar no machacar en exceso a nuestro
servidor con requerimientos dinmicos XUL.
Si creemos que haremos un uso adecuado de
PHP en nuestro cdigo podemos usarlo simplemente cambiando el tipo cabecera del
contenido. Tendremos que poner a XUL en el
archivo .php para que sea procesado por el

78

Nmero 04

subsistema PHP, y luego especificar en la


cabecera HTTPD que el contenido es del tipo
aplicacin/vnd.mozilla. xul+xml (lo que es
XUL). Para hacer esto, debemos aadir el
siguiente cdigo al principio del archivo XUL:
<?php
header( "Content-type:U
application/vnd.mozilla.U
xul+xml" );
?>
Ahora podemos usar PHP dentro de nuestro
cdigo XUL utilizando los bloques PHP
encerrados entre <?php y ?> normales. Un
ejemplo podra ser usar un bucle PHP while
loop para obtener los datos de la base de
datos e introducirlos en una cuadro de lista
XUL. Llegado a este punto, podemos utilizar
Javascript para tratar dinmicamente los
datos desde el punto de vista del cliente.
Aadir este soporte PHP realmente aade un
gran potencial a XUL, a Javascript y a XBL en
el cliente y en el servidor.

www.linux-magazine.es

Puede que hayis notado que cada


<xul:menuitem> tiene un atributo
value que contiene una direccin URL.
La razn de esto es que queremos que
cada opcin en el men nos lleve a una
pgina especfica del sitio Web. Solo
aadiendo la URL al atributo valor no
hace esto, si no que deberemos usar
una funcin especial llamada loadPage(event) referida en la primera lnea
(la etiqueta <xul:menubar>). Definiremos esta funcin ms adelante en el
archivo, pero todo lo que debemos
recordar es que cuando se seleccione
una opcin, utilizaremos la funcin
loadPage (event).
Finalmente cerraremos el resto de etiquetas:
</content>
</binding>
</bindings>

Si bien no hemos creado nuestra funcin


load-Page(event) an podemos probar
nuestra interfaz XUL. Antes de hacer la
prueba debemos hacer el importante trabajo de cargar el cdigo XUL o, ms
especficamente, nuestro vnculo XBL, el
que contiene el cdigo XUL, en nuestra
pgina HTML. Recordemos que podemos
usar vnculos XBL a travs de CSS y a
travs de DOM (usaremos CSS en este
caso).
Justo en la parte superior de nuestro
archivo xulpage.html debemos aadir el
siguiente cdigo despus de la etiqueta
<body> (y por tanto antes de la etiqueta top <div>):
<div style="-moz-binding:U
url('menu.xml#ourmenu');"></div>
</div>

Este cdigo crea el rea <div>y


usa el atributo HTML "style" (estilo)
para aplicar CSS a la etiqueta. Este
CSS usa el elemento mozbinding,
especfico de Mozilla, indicando
dnde est localizado el archivo vinculante XBL y qu vnculo queremos
usar. La sintaxis url() comn de CSS
se usa para especificar dnde est el
archivo y cmo se llama
(recordemos que si no especificamos
la ruta se supone que el archivo
est en el mismo directorio donde se
encuentra la hoja de estilo o, en

XUL

LINUX USER

var url = para.originalTargetU


.getAttribute('value');
document.location = url;

Finalmente necesitamos cerrar el resto


de las etiquetas restantes:
</body>
</method>
</implementation>

Si bien parece que nuestro trabajo ha


acabado, debemos aadir la parte final
del cdigo, un gestor que agrupar el
evento oncommand creado referido
como loadPage(event) en el cdigo XUL
con los eventos XBL. Tenemos que
aadir este cdigo inmediatamente tras
las ltimas implementaciones:
Figura 2: Nuestra barra de men XUL aadida a la pgina.

nuestro caso, debido a que estamos


usando un estilo en lnea, imbuido
en el mismo HTML).
Entonces usamos #ourmenu para
indicar que queremos usar el vnculo
ourmenu localizado dentro de ese
archivo. Esto muestra como podemos
tener una serie de vnculos dentro
del mismo archivo.
Ahora podemos acceder a
xulpage.htm en nuestro navegador
deberamos ver algo parecido a la
figura 2.

Creacin de Funcionalidad
Nuestro XUL tiene muy buena pinta
encima de nuestra pgina Web pero no
nos sirve de mucho si no podemos
hacer que haga nada interesante. Ahora
debemos definir la funcin loadPage,
comentada anteriormente y aadirle un
poco de Javascript para hacer que funcione. Para hacerlo podemos usar el
bloque <implementation> proporcionado por XBL a nuestro cdigo.
Primero debemos crear nuestro bloque,
lo que haremos antes de la etiqueta
</content> y despus de la etiqueta
</binding>:
<implementation>

Ahora tenemos que definir loadPage.


Para
esto
usamos
la
etiqueta
<method>. Funcin y mtodo son trminos diferentes que definen el mismo

concepto. Usamos el atributo name para


nombrar nuestro mtodo:
<method name="loadPage">

<handlers>
<handler event="command" actionU
="loadPage(event);"/>
</handlers>

Conclusin

Cuando nos referimos a loadPage antes


debemos prestar atencin a que haya un
simple parmetro llamado 'event' (loadPage(event)). Necesitamos definir cada
parmetro en este bloque de implementacin por separado:
<parameter name="para"/>

Ahora estamos listos para crear un poco


de cdigo para definir lo que realmente
hace loadPage. Lo primero que debemos
crear es el bloque <body> donde poner
el cdigo:

Este artculo nos ha enseado a usar XBL


como intermediario entre XUL y HTML.
Este ejemplo no slo muestra como usar
XUL de forma prctica, por ejemplo
generando una barra de men, si no que
tambin muestra como XBL puede ser
til para definir funcionalidades basadas
en XUL y su asociatividad con implementaciones Javascript. Con algunos trucos podemos enlazar HTML, XBL, XUL,
CSS y Javascript en nuevas e interesantes

formas.

RECURSOS

<body>

Ahora escribiremos un poco de cdigo


en Javascript que extraer los contenidos del atributo 'value' usando el
mtodo DOM getAttribute y poner el
valor resultante en la variable llamada
url. Ahora nos referimos al nombre del
parmetro (para) como al objeto del
que vamos a obtener el valor (sta es la
manera de obtener la URL correcta
desde cualquier elemento de men pulsado).
A
continuacin
utilizamos
document.location para hacer que el
navegador salte a esa pgina:

[1] La pgina Web de Mozilla: http://www.


mozilla.org/
[2] XUL Planet: http://www.xulplanet.com/
[3] La referencia de los programadores XUL:
http://www.mozilla.org/xpfe/xulref/
XUL_Reference.html
[4] La referencia XBL: http://www.mozilla.
org/ projects/xbl/xbl.html
[5] Informacin XPCOM: http://www.mozilla.
org/projects/xpcom/
[6] Navegador Mozilla Amazon: http://mab.
mozdev.org/
[7] Juegos basados en Mozilla XUL: http://
games.mozdev.org/

www.linux-magazine.es

Nmero 04

79

LINUX USER

Educacin

Elogio de la diversidad lingstica

Planos para disfrutar


de Babel

Con un poco de filosofa por compaera, expondremos el modo en que podemos satisfacer las necesidades de nuestros
compaeros profesores de otras lenguas, y de los alumnos inmigrantes, en materia de interfaz de usuario y de entrada
de caracteres. POR JUAN RAFAEL FERNNDEZ

l fenmeno de la multiplicidad
lingstica (la cuestin bablica:
no hablamos una lengua, ni media
docena ni veinte ni treinta; se piensa
que en la actualidad se practican de
cuatro a cinco mil) es un dato de la
evolucin humana que debe ser explica-

80

Nmero 04

do no como una desviacin sino como


esencial a nuestra especie, relacionada
con su forma de adaptarse a la realidad
(la inteligencia) y creatividad. Como
escriba Steiner[1], Cada lenguaje
humano traza un mapa del mundo de
manera diferente. Cuando un idioma

www.linux-magazine.es

muere, con l muere un mundo posible. Muchos suean con un nico


idioma universal, que simplificara los
problemas de comunicacin, eliminara
la necesidad de traductores, disolviera
en el vaco las interpretaciones. Ah est
la clave: es como reducir la riqueza de

Educacin

LINUX USER

Figura 1: Configurando localepurge.

Figura 2: Creacin
de locales.

las cocinas del mundo a la sutileza de


un burger.
Pero tranquilos, esta revista es de informtica y este es un artculo prctico. Pretende responder a un problema real, de
profesores y alumnos: vamos a aprender
a internacionalizar nuestro ordenador. La
solucin pasa por enfrentarse -justifica el
prrafo anterior- a la tentacin de uniformismo predominante. Se ha dado el
caso que algunos de los creadores de las
distribuciones regionales que utilizamos
olvidan que nuestras necesidades no son
monolticas ni raquticas; que aunque
parezca mentira el griego clsico es una

lengua muerta que sustenta nuestra


filosofa y nuestro lenguaje cientfico;
que tenemos cada vez ms alumnos
rabes, eslavos, chinos, que tienen derecho a leer sus propios alfabetos, y que los
profesores de idiomas queremos una
inmersin en el idioma que incluye -cmo no-- el entorno, los mensajes, los
menes. Veremos cmo se hace esto.
El proceso tiene tres partes independientes: indicarle al sistema operativo el
idioma que queremos para la interfaz, elegir un tipo de letra que tenga los caracteres adecuados para el idioma seleccionado y configurar un mapa de teclado que

los permita introducir los caracteres propios del idioma que pretendamos escribir.

Juegan los locales


En GNU Linux el sistema de internacionalizacin y localizacin se basa en el
modelo de los locales[2]. Cmo funciona esto? Cuando se instala un programa internacionalizado (preparado para
su traduccin a distintos idiomas; no es
necesario reescribir el programa en cada
uno de ellos) se instalan tambin los
mensajes en todos los idiomas a los que
se ha traducido; cuando se ejecuta, el
sistema operativo lee la variable de

Cuadro 1: Cdigos, cdigos, cdigos


En un principio todo era simple: en los ordenadores slo se escriba en ingls de Estados Unidos, para el que bastan muy pocos caracteres; se decidi que
con siete bits bastaba, lo que nos da 128 caracteres, incluidos cdigos de control. Cuando la informtica se internacionaliz surgieron dos problemas: por
un lado la necesidad de traducir los programas, pero tambin la obligacin de mostrar e introducir los caracteres de las otras lenguas. Fue necesario
estandarizar codificaciones y los programadores y autores de sistemas operativos debieron buscar soluciones. Se opt por utilizar un byte completo, lo
que permiti definir 256 caracteres. As haba una codificacin para Estados Unidos, otra para la Europa Occidental, para el griego, el ruso, el japons
Esto lo hemos vivido todos, recordemos los problemas de los caracteres extraos que padecimos cuando pasamos de guardar nuestros datos en DOS a
guardarlos en Windows 95: tcnicamente hablando pasamos de usar cp850 cp437 a usar windows-1252. En el mundo Unix se actu de forma similar:
los usuarios de todo el mundo tenan que utilizar distintas extensiones de ASCII especficas para cada idioma. Las ms usadas eran ISO-8859-1 (tambin
conocida como latin1; una modificacin fue ISO-8859-15 --latin9 latin0, creada para incorporar el smbolo del euro ?) y ISO-8859-2 en Europa, ISO
8859-7 en Grecia, KOI-8 / ISO 8859-5 / CP1251 en Rusia y pases de alfabeto cirlico, EUC y Shift-JIS en Japn, BIG5 en Taiwan, etc. Esto haca difcil el intercambio de ficheros y los programadores tenan que preocuparse de las pequeas diferencias entre cada una de las codificaciones; habitualmente la
internacionalizacin era incompleta o deficiente, porque era raro que los desarrolladores comprendieran o usaran estas escrituras.
Pronto se comprob que esta solucin es incorrecta: ata la codificacin que elige el usuario para su sistema a la de los textos que puede leer y escribir
(por qu un profesor espaol no puede escribir textos en griego?), rompe la internacionalizacin en pequeos fragmentos inconexos difcilmente compatibles, obliga a crear tipos de letra para cada codificacin Se hizo evidente que era necesario separar la localizacin de la codificacin, y a finales de
los aos 80 se impuso la idea de una codificacin universal, unicode. Unicode asigna (o asignar, es un esfuerzo no terminado) de forma unvoca una
posicin y un nombre a cada uno de los caracteres de las distintas escrituras del mundo. Los principales sistemas operativos han adoptado el estndar
unicode en alguna de sus concreciones: Apple estuvo en su gnesis,Windows XP ha generalizado el uso de UTF-16. La forma de escribir unicode en GNU
Linux se llama UTF-8, y los gurs juran que es superior y ms eficaz que UTF-16. Por qu unicode es superior? Porque independiza la cuestin de configurar el idioma del usuario del nmero de caracteres que puede escribir y leer en su configuracin. Antes, si elegamos un locale ruso difcilmente
podramos ver caracteres rabes; ahora podemos ver varios miles de caracteres, y podemos introducirlos con herramientas que nos permitan mapear el
teclado.
Descendamos a los ejemplos para no perdernos: el carcter n es el US-ASCII 110, en hex. 6e; nuestra sencillamente no existe en esa codificacin, no
puede representarse. En latin1 (iso-8859-1) la ocupa la posicin 241 (F1 en hexadecimal), pero no se puede representar el euro. En latin9 (iso-8859-15)
la ocupa la misma posicin y el euro la 164 (hex. A4). En unicode la n es la U+006E LATIN SMALL LETTER N (los primeros caracteres equivalen
exactamente a los ascii; es una de las ventajas que sealan los gurs de los que hablbamos: un texto ascii es un texto correcto en utf-8) , la es la
U+00F1 LATIN SMALL LETTER N WITH TILDE y el signo del euro es U+20A0 EURO-CURRENCY SIGN. Y tenemos adems todos los caracteres de las
principales lenguas, y smbolos matemticos, y notas musicales

www.linux-magazine.es

Nmero 04

81

LINUX USER

Educacin

Figura 3: La fecha en chino de Taiwan.

entorno (ms exactamente un conjunto


de variables) correspondiente al locale y
muestra los mensajes correspondientes.
Los locales permiten definir cosas como
el tamao de papel ms usado en un
pas, el smbolo de moneda, o el criterio
con el que se ordenan alfabticamente
las palabras.
Es muy probable que los autores de
la distribucin que usted utiliza hayan
predefinido un locale, seguramente
es_ES@euro
(abreviatura
de
es_ES.iso8859-15), para los usuarios
espaoles y textos en espaol. Estas
son dos decisiones independientes que
no debemos confundir: la primera se
refiere al idioma en que la mquina (los
programas, los mensajes de error, etc.)
se dirigir a nosotros (si existe la traduccin correspondiente al mensaje;
incluso se puede distinguir espaol de
Espaa, es_ES, de las restantes variedades
del
castellano:
es_AR,
es_CO; y al revs, ca_ES, ga_ES),
qu carcter mostrar en pantalla cuando pulsemos la tecla que tiene pintada
una y cuestiones similares (como
que el tipo de letra que sale por la pantalla contenga la y que el programa
de impresin pueda envirsela a la
impresora). La segunda se refiere a la
codificacin en que estn los textos si
no se indica lo contrario (ver el cuadro
1). Poner como locale es_ES@euro
equivale a pedir que los mensajes estn
en espaol, con criterio de ordenacin
alfabtica, signo de moneda, etc.
correspondiente a Espaa, y utilizando
determinada codificacin que incluye
el signo del euro.
Para el castellano de Espaa podran
utilizarse los locales es_ES (alias de
es_ES.iso8859-1),
es_ES@euro
o
es_ES.UTF-8. Cul es preferible? Como
casi siempre, depende; la mayor parte de
las distribuciones Linux estn abandonando las codificaciones antiguas en favor de
UTF-8 porque es manifiestamente superior. Pero se nos presentan varios problemas: en primer lugar no todos los programas estn adaptados para funcionar
correctamente con un locale UTF-8, por

82

Nmero 04

ejemplo es muy difcil trabajar en una


consola UTF-8, el til y conocido mc no va
bien por otro lado nuestros ficheros de
texto debern ser convertidos a la nueva
codificacin, y tambin los nombres de los
ficheros y directorios, si hemos cometido
el error de utilizar caracteres no ascii al
guardarlos, o recibido archivos de nuestros amigos usuarios de Windows; y qu
pasa en una mquina donde conviven
usuarios que han elegido utilizar codificaciones diferentes? En este sentido los
usuarios de Windows XP lo tienen ms
fcil: quien sea ha tomado la decisin por
ellos, slo existe UTF-16, problema resuelto.
En primer lugar averigemos el locale en
el que estamos trabajando. Basta con ejecutar la orden locale en una terminal:
[Mi_maquina]$ locale
LANG=es_ES.UTF-8@euro
LC_CTYPE=es_ES.UTF-8@euro
LC_NUMERIC=es_ES.UTF-8@euro
LC_TIME=es_ES.UTF-8@euro
LC_COLLATE=es_ES.UTF-8@euro
LC_MONETARY=es_ES.UTF-8@euro
LC_MESSAGES=es_ES.UTF-8@euro
LC_PAPER=es_ES.UTF-8@euro

Cuadro 2:
Internacionalizacin de un
programa
Un ejemplo de Santiago Vila servir, porque
adems no se refiere a un programa en c:
sino a un script de shell
01 #!/bin/sh
02 if [ -x /usr/bin/gettext ];
then
03
echo=/usr/bin/gettext
04 else
05
echo="echo -n"
06 fi
07 export TEXTDOMAIN=libc
08 $echo "cheese"
09 echo ""
Escribimos en la consola
[Mi_maquina]$ LANG=es_ES;
./test-script
queso
Los lectores pueden comprobar la instalacin de los mensajes de los distintos
idiomas en /usr/share/locale. Estos ficheros
.mo son los que generan los traductores, ya
se explicar en su momento.

www.linux-magazine.es

LC_NAME=es_ES.UTF-8@euro
LC_ADDRESS=es_ES.UTF-8@euro
LC_TELEPHONE=es_ES.UTF-8@euro
LC_MEASUREMENT=es_ES.UTF
8@euro
LC_IDENTIFICATION=es_ES.UTF
8@euro LC_ALL=es_ES.UTF-8@euro

Dnde se ha definido este locale? Hay


diferentes posibilidades: si el administrador de la mquina quiere fijar un
locale comn para todos los usuarios y
todos los entornos (lo que es frecuente en
nuestras distribuciones) puede hacerlo
en /etc/environment; basta lo siguiente,
puesto que LC_ALL es la orden que
engloba a las rdenes de detalle:
export LC_ALL=es_ES.UTF-8@euro
export LANG=es_ES.UTF-8@euro

Si se quiere independizar el trabajo en


consola del trabajo en X el lugar es
/etc/default/gdm. Si finalmente un
usuario quiere modificar su entorno
puede hacerlo de forma general en
~/.bash_profile o de forma granular en
el directorio ~/.xsession.d. O puede
hacerlo programa por programa, utilizando variables de entorno.
Un ejemplo sencillo vale ms que mil
explicaciones. date es un programa que
devuelve la fecha y la hora. Para un
usuario que no ha configurado sus
locales o que ha elegido el locale POSIX
(C) la salida sera igual a la de un programa no internacionalizado, con mensajes
probablemente en ingls:
[Mi_maquina]$ LC_ALL=C date
Wed May 8 20:46:09 CEST 2002

Para ver la salida en francs basta con


usar
[Mi_maquina]$ LC_ALL=fr_FR date
mer mai 8 20:46:31 CEST 2002

Por supuesto que no hay que estar repitiendo la variable de entorno cada vez
que se ejecuta un programa si el locale
est definido en el sistema o en los
ficheros de configuracin del usuario.
Como hemos elegido un locale espaol la
orden nos responder en espaol
[Mi_maquina]$ date
mi may 8 20:46:22 CEST 2002

Educacin

Figura 5:
Figura 4: El editor gedit en chino.

Glifos
griegos

Ahora estamos en situacin de comprender mi ataque anterior contra el monolitismo. Existe un programa, localepurge,
que se encarga de borrar sistemticamente los mensajes y ficheros de ayuda
de los idiomas que el administrador de la
mquina piensa que no va a utilizar. Y el
administrador de estas mquinas puede
pensar, l solito, que slo se va a necesitar el castellano. Borra tan feliz los mensajes en tagalo, de acuerdo, en chino de
HongKong, en rumano, pase, pero tambin en italiano, en francs antes de
continuar, antes de instalar el prximo
programa o hacer el siguiente apt-get
upgrade tenemos que comprobar si tenemos instalado localepurge y cmo est
configurado. Cmo? Con la orden
[Mi_maquina]# dpkg-reconfigureU
localepurge

En la figura 1 podemos ver cmo se


seleccionan los distintos locales vlidos
para el castellano. De acuerdo, pensamos, ya podemos ver los mensajes en
los idiomas que necesitan nuestros alumnos. Pues no: los mensajes estarn ah,
pero vamos a ver sus equivalentes en
ingls porque los locales tienen que estar
creados en el sistema. O sea que abrimos
la terminal que seguro que habamos
cerrado, volvemos a cambiar a root y
creamos los nuevos locales
[Mi_maquina]# dpkg-reconfigureU
locales

Para este artculo (figura 2) vamos a crear


en mi ordenador los locales necesarios
para mostrar mensajes y escribir en chino
de Taiwan, porque responde a una peticin real, de un compaero con dos
alumnas chinas. En la figura 3 podemos
al fin ver la salida de la orden date en
chino tradicional. Y a partir de ah

en gentium.ttf.

podemos lanzar cualquier programa y


obtendremos el men y los mensajes en
chino. No se me cree? Pues ahora abrimos este mismo editor con los menes
en chino (figura 4). Podemos crear una
cuenta para las alumnas, configurarla
con los locales apropiados, y tendrn la
interfaz en chino.
De verdad es tan sencillo? Depende de
la distribucin y del administrador. Por
un lado han debido instalarse los paquetes necesarios (las ayudas de OpenOffice,
la documentacin de KDE), pero tambin se nos olvida un detalle esencial: los
tipos de letra. Si los tipos disponibles no
incluyen el carcter que queremos
mostrar, ser imposible mostrarlo.

Tipos
Supongamos que queremos que la
mquina se siga dirigiendo a nosotros en
espaol (no vamos a tocar los locales
ahora) pero queremos leer y escribir en
otro idioma y otro alfabeto. Y luego
queremos poder imprimirlo. Vale, es
cuestin de tres cosas: tipos de letra, un
locale UTF-8 y configuracin de la entrada por teclado.
Deberemos utilizar tipos de letra que
contengan los caracteres de los idiomas
que queremos poder representar. Ms
concretamente y como explicamos
necesitamos tipos de letra unicode, iso10646-1.
Histricamente el tema de los tipos de
letra ha sido un problema complicado en
Linux: no haba una forma unificada de
instalar y configurar nuevos tipos, porque
los programas que conforman la distribucin tenan orgenes distintos y haban
implementado soluciones diferentes y
propias. La mayora de las aplicaciones,

LINUX USER

incluidas las X, utilizaban tipos bitmap;


tard bastante tiempo en aparecer un sistema de gestin coordinado de tipos de
letra y la posibilidad de utilizar los tipos
vectoriales. Afortunadamente esto ya no
es verdad, y la gran mayora de los programas que utilizamos (todos los programas de KDE3 y Gnome2, OpenOffice y
Mozilla) reconoce el esquema de configuracin fontconfig.
Cmo se aade un tipo? En primer
lugar, debemos copiar el fichero Type1 o
TrueType a alguno de los subdirectorios
recogidos en /etc/fonts/fonts.conf (o
aadir otro en /etc/fonts/local.conf).
Seguidamente reiniciaremos las cachs de
tipos ejecutando fc-cache:
[root@Mquina]# dpkg-reconfigureU
fontconfig

Abriendo el men desplegable de fuentes


en oowriter veremos que ya tenemos
disponible la nueva letra. Vale, pero
cuntos de los tipos instalados o
disponibles son unicode? Ya se sabe que
los linuxeros viejos tenemos querencia a
las terminales: xlsfonts | grep iso10646-1
nos las lista; xlsfonts | grep iso10646-1 |
wc -l los cuenta por nosotros; en mi
porttil devuelve 914.
No obstante no hemos avanzado
mucho. Cules son, de dnde los descargo?, se preguntar el lector interesado.
Antes de seguir debemos romper un
mito: un tipo unicode no es un tipo universal, sino un tipo ordenado de determinada manera, con ndices que siguen el
estndar unicode. Un tipo unicode puede
tener un slo glifo (representaciones
concretas de los caracteres, que son entes
abstractos); necesitamos tipos que tengan glifos para los caracteres de los
idiomas con los que trabajamos. Hay
tipos unicode muy completos, que intentan cubrir el mximo de escrituras; otros
tienen un objeto especfico, cubren el
griego clsico, las runas, el cheroqui o el
gujarati.
Hace tiempo que GNU Linux puede utilizar los tipos TrueType, y desde hace
ms tiempo admite los tipos Type1 de
Adobe. Si somos propietarios legtimos
de estos ficheros podemos reutilizarlos.
gfontview nos informa del nmero de glifos de cada tipo, y nos los muestra por
pginas (en la figura 5 tenemos un ejemplo). Existe un paquete de tipos

www.linux-magazine.es

Nmero 04

83

LINUX USER

Educacin

Figura 6: La pgina taiwanesa de Debian.

LECTURAS RELACIONADAS
Debian Euro HOWTO, del paquete Debian
euro-support.
http://www.unicode.org/
history/ http://www.cl.cam.ac.uk/~mgk25/
unicode.html, de Markus Kuhn
UTF-8 in Debian, de Jan Willem Stumpel
<jstumpel at planet.nl> http://www.
jw-stumpel.nl/stestu.html.
Unicode fonts, de Edward H. Trager
<ehtrager at umich.edu> http://eyegene.
ophthy.med.umich.edu/unicode/fontguide/,
http://dejavu.sf.net/

84

Nmero 04

distintas codificaciones; para ello visitaremos las distintas versiones de la


pgina inicial del proyecto Debian. Utilizaremos lsof. Supongamos que el
nmero de proceso de firefox cuando
tenemos abierta la pgina es 6554 (se
obtiene, claro, con ps); los ficheros ttf
que utiliza el proceso se filtran as

cionalizado? Pues no: falta la cuestin


ms delicada, cmo conseguir con las
tres filas de teclas de nuestro teclado
introducir los miles de caracteres necesarios para escribir los distintos lenguajes. Esa nueva magia es el tema del si
guiente artculo.

NOTAS

lsof +c 0 -p 6554 |grep ttf

La versin en espaol tiene la codificacin iso8859-1. La salida es (simplificada por cuestin de espacio) VeraSe.ttf,
Vera.ttf, VeraBd.ttf y VeraSeBd.ttf. Para
textos en latin1 (y latin9, aado yo) nos
basta el tipo ttf-bitstream-vera en sus distintas variantes negrita, serif
He buscado una pgina codificada en
utf-8; hay pocas, usaremos esperanto.
Nos devuelve Vera.ttf, VeraSe.ttf,
Arial_Bold.ttf, Arial.ttf, VeraSeBd.ttf y
Times_New_Roman.ttf. Vemos que para
el esperanto ya no es suficiente el tipo
vera y hace uso de los tipos proporcionados por el paquete msttcorefonts.
Qu ocurre si abro http://www.debian.
org/index.zh-tw.html, en chino tradicional
(Big5) (figura 6)? Se abren VeraSeBd.ttf,
Arial.ttf,
VeraSe.ttf,
Cyberbit.ttf,
Arial_Bold.ttf, Vera.ttf. Claro, los caracteres chinos no estn en los tipos anteriores y s en cyberbit (o en los arphic si se
busca una fuente enteramente libre).

Y en el prximo nmero
Hemos aprendido a jugar con las variables de entorno que modifican la interfaz
del usuario, y hemos aprendido a instalar los tipos de letra que necesitamos.
Tenemos ya un ordenador interna-

www.linux-magazine.es

[1] George Steiner, Despus de Babel. Fondo


de Cultura Econmica.
[2] El de LOCALE es un concepto bsico introducido en el estndar C ISO (ISO/IEC
9899:1990). Este estndar fue ampliado
en 1995 (ISO 9899:1990 Amendment
1:1995). En el modelo LOCALE, el comportamiento de algunas funciones C
depende del entorno del LOCALE. El
entorno del LOCALE est dividido en
varias categoras y cada una de estas categoras se puede fijar independientemente
usando setlocale().
POSIX tambin determina ciertos estndares
relacionados con la internacionalizacin. Casi
todos los estndares POSIX y C ISO se
incluyeron en el estndar XPG4 (X/Open
Portability Guide) y todos estn incluidos en
el estndar XPG5. Advirtase que XPG5 est
incluido en las especificaciones UNIX versin
2. Por tanto todas las versiones del sistema
operativo Unix cumplen XPG5.

EL AUTOR

propiedad de Microsoft que puede instalarse si no libre al menos gratuitamente:


msttcorefonts, que aporta las conocidas
Andale, Arial (1320 glifos), Comic, Verdana. El paquete ttf-freefont incluye entre
otras la Free Serif, con 3513 glifos. gentium aporta 1699. Titus, 9779. Los tipos
creados para las lenguas orientales son
necesariamente grandes: AR PL KaitiM
Big5 (paquete ttf-arphic-bkai00mp) y
AR PL Mingti2L Big5 (paquete ttfarphic-bsmi00lp) tienen ambas 14148 glifos, Kochi Gothic y Kochi Mincho
15365. Y faltan las gigantes: Code 2000,
62891; Bitstream Cyberbit, 29934.
Busque en su distribucin porque la
mayora estn empaquetadas. Y siga los
enlaces de http://eyegene.ophthy.med.
umich.edu/unicode/fontguide/ si tiene
necesidades especiales (escribe usted
textos en cretense o en devanagari?).
Por qu las alumnas no podan ver
pginas en chino? Porque faltaban los
tipos de letra. Un pequea investigacin
puede ser instructiva (mejor ensear a
pescar que regalar un pescado). Vamos a
averiguar los ficheros de tipo de letra que
abre firefox cuando muestra pginas con

Juan Rafael Fernndez Garca es profesor de educacin secundaria y


tiene una larga experiencia en la traduccin y documentacin del software libre. Ha sido coordinador de
uno de los Centros que participan en
la experiencia andaluza de integrar
las TIC en la educacin y actualmente trabaja como asesor de formacin del profesorado.

Lnea de Comandos

LINUX USER

diff y diff3

Busque, compare...
Los programas diff y diff3 del paquete diffutils nos ayudan a comparar ficheros
de texto, mostrando cualquier variacin entre ellos en la lnea de comandos e,
incluso, si es necesario, mezclar los ficheros automticamente.
POR HEIKE JURZIK

Realizas un montn de cambios en


los ficheros de configuracin y otros
ficheros de texto ASCII, pero prefieres guardar las versiones originales? Si
es as, ms tarde o ms temprano
acabars con una gran coleccin de
ficheros muy parecidos. En este caso,
apreciars utilidades que rpidamente
encuentren cambios en los textos, tal
como las herramientas incluidas en el
paquete diffutils:
*diff compara dos ficheros de texto
*diff3 muestra las diferencias entre
tres ficheros
*sdiff mezcla dos ficheros interactivamente
*cmp compara ficheros binarios
En este artculo vamos a ver y usar las
herramientas diff y diff3, o, para el caso,
tu editor favorito para descubrir las diferencias.

Diferentes
El programa diff compara dos ficheros de
texto y muestra el resultado en una ventana. Si simplemente estamos interesados en descubrir si dos ficheros son distintos, tecleamos diff -q fichero1.txt
fichero2.txt. El programa entonces
mostrar que Files fichero1.txt and

Cuadro 1:Vimdiff
Vimdiff le permite editar hasta cuatro
ficheros a la vez,mostrando las diferencias en
el texto. Este modo se ejecuta mediante vim
-d file1.txt file2.txt o vimdiff file1.txt file2.txt.
Vim muestra cada fichero en una ventana
separada, usando por omisin mosaicos verticales. El parmetro -o le permite especificar
mosaicos horizontales. El programa tiene
una excelente ayuda, que puede consultarse
escribiendo:help diff en vim.

fichero2.txt differ o no dir nada. Si no


pone la opcin, las diferencias se
mostrarn por pantalla:
hj@asteroid:~$ diff
fichero1.txtU
fichero2.txt
1c1
< Hen
--> Hens

Figura 1: El fichero diferencias.diffen el editor vim.

1c1 indica que la lnea 1 en estos


ficheros es distinta. La c en esta salida significa cambio. En otras palabras, necesita cambiar la lnea 1
para hacer que los ficheros coincidan.
A esto le sigue el contenido de la
lnea uno del primer fichero, un separador de lnea y la misma lnea del
segundo fichero.
diff tambin muestra nuevas secciones:
5a6,10
>
> the diffutils include the
> programs diff (for comparing
> text files), diff3 (outputs
> the differences between three
> files), sdiff
...

5a6,10 significa que el primer fichero


necesitara insertar desde la lnea 6 hasta
la 10 del segundo despus de la lnea 5
(a se refiere a append, concatenar) si
el fichero est marcado.
Por supuesto, la salida rpidamente
saldr de la pantalla, especialmente si se
est comparando dos ficheros muy
grandes. En este caso podemos usar un
paginador, como por ejemplo less o

more, para mostrar la salida pgina por


pgina (diff fichero1.txt fichero2.txt |
less), o redireccionar la salida a un
fichero (diff fichero1.txt fichero2.txt >
diferencias.diff). El editor vim tiene una
prctica caracterstica de resaltado de
sintaxis para los ficheros diff, usando
colores para mostrar las diferencias
(vase Figura 1). El paquete vim tambin
incluye la herramienta vimdiff (vase
Cuadro 1), que puede comparar y
manipular hasta cuatro ficheros distintos
a la vez. Si prefieres (X)emacs, chale un
vistazo al Cuadro 2 para unos consejos
sobre ediff.

Ms Contexto
La salida de diff es ms fcil de leer si se
especifica la opcin -c. La primera lnea
en la salida es el ltimo cambio de fecha
de ambos ficheros. El primer fichero
(indicado por un asterisco) aparece

Figura 2: Vimdiff muestra hasta cuatro ficheros.

www.linux-magazine.es

Nmero 04

85

LINUX USER

Lnea de Comandos

primero. Las lneas donde diff ha encontrado diferencias comienzan con una
marca de exclamacin. Las lneas que
son iguales no se marcan. Despus de la
salida del primer fichero de texto, diff
dibuja una lnea punteada y luego la salida del segundo. Este tipo de comparacin puede ser ms compleja dependiendo de la longitud del fichero. La opcin
de contexto le dice a diff que marque
nuevas secciones con el carcter de
suma. El carcter de resta indica que la
seccin ha sido eliminada del segundo
fichero.

Los Tres Cerditos


diff3 compara tres ficheros. La salida
no es la que se ha usado con diff. La
forma ms fcil de explicar esto es
mediante un ejemplo. El listado 1
muestra tres ficheros de texto, seguido
por la salida del comando diff3. diff3
indica las diferencias mostrando tres
signos =, seguido por 1, 2 o 3, dependiendo del fichero en el que vare el

Listado 1: Comparacin
de Ficheros
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

86

<I>fichero1.txt:<I>
Gallina
Gallo
Pollo
<I>fichero2.txt:<I>
Gallinas
Gallo
Pollo
<I>fichero3.txt:<I>
Gallinas
Gallo
Pollo
Capn
<I>Salida de diff3:<I>
01 hj@asteroid:~$ diff3
fichero1.txt
fichero2.txt fichero3.txt
02 ====2
03 1:1c
04 3:1c
05 Gallina
06 2:1c
07 Gallinas
08 ====3
09 1:3a
10 2:3a
11 3:4c
12 Capn

Nmero 04

texto. Tres signos de igualdad


sin un nmero indica que todo
en los tres ficheros es distinto.
En el Listado 1 puede observarse que el segundo fichero es
diferente (= = = = 2). La
primera lnea (1c) en el primero
(1:) y el tercer fichero (3:) son
diferentes. A esta salida le
sigue una cita de la primera
lnea en el fichero 2.
El tercer fichero = = = = 3
Figura 3: Ediff encuentra diferencias entre ficheros.
tiene una lnea adicional en
comparacin con los dos
primeros. Para hacer que coincidan los
quiere avisar a otro usuario sobre los
ficheros, debera aadir una lnea extra
cambios, supongamos que este usuario
del fichero tres (3:4c Frog) al primer y al
tiene el fichero original, puede simplesegundo fichero (1:3a, 2:3a).
mente almacenar las diferencias. El
comando patch puede usarse para apliRemiendo
carle los cambios al fichero original, o
Por supuesto que se pueden ver las vasea: lo actualiza.
riantes encontradas por diff en un pagiLos parches contienen los cambios
nador o un editor y usarlos para realizar
creados por diff en unified diff format
los cambios manualmente. Esto es muy
cuando se utiliza la opcin -u. Los camfastidioso con los ficheros grandes. Si
bios se muestran en secuencia y se marcan con los signos de suma o resta:

Cuadro 2: Ediff en (X)Emacs


La herramienta ediff viene integrada con el
editor (X)emacs. Ediff compara dos o tres
ficheros de texto. El editor muestra estos
ficheros en ventanas separadas (mosaicos
verticales u horizontales) o en marcos separados. Dependiendo de la versin (X)emacs,
se puede ejecutar ediff mediante el men
(Tools / Compare / ) o utilizar el atajo del
teclado [Alt-x], ediff(M-x ediff en la
notacin emacs).
A continuacin se teclea ? en la ventana de
ediff para mostrar una descripcin de los
comandos adecuados. Tambin estn
disponibles las pginas de informacin (info
ediff). Ediff por defecto no utiliza colores
para destacar texto, usando varias escalas de
grises para indicar las variantes. En cambio,
si se prefiere utilizar los colores, igual que
con vim, presionamos [Alt-x] y tecleamos
customize ediff-highlighting. Las entradas
Even Diff Face A, Even Diff Face B y Even Diff
Face C son las responsables del resaltado
entre otras cosas. Pulsamos en la flecha de la
derecha para modificar el color y el estilo
que prefiramos. No hay que olvidar pulsar en
Save para guardar los cambios cuando finalicemos. Luego seleccionamos Done para salir
del modo de configuracin. La nueva distribucin de colores se almacenar en los
ficheros de configuracin para el editor bajo
su propio directorio home, esto es ~/
.xemacs/custom.el para Xemacs.

www.linux-magazine.es

--- file1.txt Sun Jan 25U


16:12:59 2004
+++ file2.txt Sun Jan 25U
16:13:33 2004
@@ -1,5 +1,11 @@
-You can perform many
-tasks using KDE or GNOME
+Though you can perform many
+tasks using GNOME or KDE
...

Si se redirecciona la salida a un fichero,


llamado patch por ejemplo, puede
entonces usar este fichero para aplicarle
los cambios en el segundo fichero desde
el primer fichero. La siguiente seccin
muestra como hacer esto:
hj@asteroid:~$ diff -uU
file1.txt file2.txt > patch
hj@asteroid:~$ patch -b -p0U
< patch

Estas opciones le dicen a patch que cree


una copia de seguridad del fichero original (-b) y que realice la operacin de
parcheo en el directorio actual (p0).
patch tiene una pgina de ayuda muy
detallada, que definitivamente merece
ser leda si necesita ms informacin

sobre este comando.

LaTeX

LINUX USER

LaTeX en Linux (IV)

Tipografa Profesional
al Alcance de Todos
Con esta cuarta entrega llegamos al final
de este curso, donde nos hemos acercado al mundo de la tipografa
profesional de la mano de LaTeX. Hemos
considerado necesario llegar hasta esta
entrega para poder alcanzar un nivel que
nos permita construir nuestro primer
documento completo, un proyecto con
ndices, captulos y bibliografa, construido a partir de ficheros independientes, y
con el que os convertiris en autnticos
LaTeXpertos.
POR JOSE MANUEL
GONZLEZ VIDA

n nuestro paseo a lo largo de las


tres entregas anteriores hemos
aprendido la filosofa de la escritura con LaTeX, partiendo de la construccin de un documento bsico sobre el
que hemos ido incorporando muchas de
las funcionalidades de LaTeX: referencias
cruzadas, listas, grficos, tablas, escritura en modo texto y en modo matemtico,
etc. En esta entrega nos centramos inicialmente en la inclusin de bibliografa
en nuestro documento, bien directamente o bien usando una base de datos y

finalmente vamos a generar nuestro


primer proyecto completo.

Citas Bibliogrficas
Siempre que construimos cualquier tipo
de documento es conveniente incluir un
apartado dedicado a la bibliografa
donde hacemos referencia a las textos
que nos han servido de fuente o que
pueden servir al lector para profundizar
ms en alguna de las partes de nuestro
trabajo. El trabajo de inclusin de referencias bibliogrficas en un texto puede

llegar a ser tedioso si no se utiliza un


buen sistema de escritura como es
LaTeX. La bibliografa suele ir colocada
al final de nuestro documento y puede ir
ordenada bien por orden de aparicin de
las diferentes citas o bien alfabticamente segn los apellidos de los autores.
LaTeX es capaz de referenciar adecuadamente cada cita conforme vamos construyendo nuestro trabajo y, por ejemplo,
irlas colocando automticamente por
orden alfabtico en el apartado de bibliografa, de modo que cada cita bibliogrfi-

www.linux-magazine.es

Nmero 04

87

LaTeX

LINUX USER

Figura 1: Ejemplo de uso del entorno thebibliography.

ca se vaya referenciando segn dicho


orden de colocacin. Comprenderis as
el ahorro de trabajo que puede conllevar
el que nuestro sistema de escritura se
encargue de los detalles de ordenar la
bibliografa
El manejo de las referencias bibliogrficas con LaTeX no es difcil, de hecho es
similar al uso de etiquetas que hemos
visto ya anteriormente. En LaTeX las referencias bibliogrficas se pueden generar de dos maneras distintas: obteniendo
los datos de las citas bibliogrficas de
una lista incluida al final del documento
(para ello usaremos el comando \thebibliography) o bien leyendo los datos bibliogrficos a partir de una base de datos
externa usando el programa BIBTeX.

El entorno thebibliography
Si vamos a incluir la bibliografa
incluyendo la lista de referencias al final
de nuestro documento usaremos el
entorno thebibliography cuya sintaxis
describimos a continuacin:
\begin{thebibliography}U
{Longitud Mxima}
...
\bibitem[Leyenda]{Referencia}U
Ttulo, Autor, . . .

Figura 2: Otro ejemplo del entorno thebibliography.

...
\end{thebibliography}

Los argumentos del entorno thebibliography son:

Longitud Mxima: es una cadena de caracteres de anchura


mayor o igual a la mayor etiqueta que vaya a aparecer.

Leyenda: Se usa para modificar


la leyenda que aparece, en la
lista de referencias, a la izquierda de cada una de ellas. Por
defecto LaTeX numera las referencias.

Referencia: Es el identificador
de la referencia bibliogrfica.
Como siempre, lo mejor es ver el uso de
este entorno a travs de un ejemplo:
01 \begin{thebibliography}{10}
02 \bibitem{Cas03}
03 B.~Cascales Salina, P. Lucas
Saurn, J.M. Mira Res, A.J.
Pallars Ruz, S. Snchez.
04 {\em El libro de \LaTeX.}
05 Pearson-Prentice-Hall, 2003.
06 \bibitem{Lam94}
07 L.~Lamport.{\em \LaTeX: A
Document Preparation
System.}

08 Addison-Wesley, Reading,
Massachusetts, second edition,
1994, ISBN 0-201-52983-1.
09 \bibitem{Oetiker}
10 T.~Oetiker, H.~Partl, I.~Hyna
and E.~Schlegl.
11 {\em The Not So Short
Introduction to \LaTeX
$2\varepsilon$}.
12 \end{thebibliography}

Si introducimos el ejemplo anterior dentro del cuerpo de un documento LaTeX y


lo compilamos obtendremos como resultado algo similar a lo que mostramos en
la Figura 1. Observemos que cada tem
de la bibliografa posee una etiqueta
identificativa (nos va a servir para hacer
las citas) y que LaTeX ha asignado un
nmero a cada referencia bibliogrfica,
de modo que cuando incluyamos citas
en nuestro texto aparecern cosas como
por ejemplo Segn se puede ver en
[1], de modo que el lector tiene que
tener a mano la bibliografa para ver que
[1] se refiere a determinado libro. Si,
bien por ejemplo en el mundo de las
matemticas este mtodo suele ser habitual para realizar las citas, sin embargo
en otros mbitos las citas se suelen hacer
referenciando al autor o autores en un

Tabla 1. Estilos de bibliografa en LaTeX


Tipo

Descripcin

plain

Estilo estndar. Las entradas se numeran correlativamente por orden alfabtico de los autores.

unsrt

Parecido al estilo plain pero las entradas se numeran segn el orden de aparicin.

alpha

La diferencia con el estilo plain es que las entradas se forman por el nombre del autor y el ao de publicacin (en lugar de usar nmeros).

abbrv

Parecido al estilo plain pero las entradas son ms compactas,abreviando los nombres de los autores,las revistas,etc.

acm

Estilo usado en las revistas de la ACM (Association for Computing Machinery). Es distinto a los anteriores.

apalike

Es el estilo usado en las revistas de la American Psychology Association (necesita el paquete apalike).

88

Nmero 04

www.linux-magazine.es

LaTeX

modo similar a como lo hacemos en el


siguiente ejemplo (ver Figura 2):
01 \begin{thebibliography}
{10000000000000000000}
02 \bibitem[Cascales y otros,
2003]{Cas03}
03 B.~Cascales Salina, P.
Lucas Saurn, J.M. Mira Res,
A.J. Pallars
04 Ruz, S. Snchez. {\em El
libro de \LaTeX.} PearsonPrentice-Hall,
05 2003.
06 \bibitem[Lamport,
1994]{Lam94}
07 L.~Lamport.{\em \LaTeX: A
Document Preparation System.}
08 Addison-Wesley, Reading,
Massachusetts, second edition,
1994, ISBN
09 0-201-52983-1.
10 \bibitem[Oetiker]{Oetiker}
11 T.~Oetiker, H.~Partl, I.~Hyna
and E.~Schlegl. {\em The Not So
12 Short Introduction to \LaTeX
$2\varepsilon$}.
13 \end{thebibliography}

Observemos el cambio del argumento


Longitud Mxima en ambos ejemplos.
Mientras que en el primer ejemplo al
ancho para las citas lo dejbamos en dos
caracteres (lo simbolizbamos con 10
como valor para dicho argumento)
puesto que las citas se numeraban y slo
haba 3 citas, en el segundo ejemplo, al
no usar nmeros para las citas, se hace
necesario ampliar la Longitud Mxima
para que las referencias aparezcan alineadas en la bibliografa. Probad, como
ejercicio a cambiar el ejemplo anterior
donde cambiis el valor del argumento
Longitud Mxima por 10 y observad el
resultado.
Y, cmo se citan en el texto a los distintos autores? Pues muy fcil, para
hacer referencias a las citas bibliogrficas en el texto del documento se emplea
el comando:
\cite[Texto Opcional]U
{Etiqueta}

Vemos su uso introduciendo como


cuerpo de un documento el siguiente
texto y compilndolo dos veces (Figura
3):

01 Como podemos ver en \cite[pp


44-50]{Lam94} o en
\cite{Oetiker},
02 \LaTeX{} es un lenguaje de
escritura profesional fcil de
03 usar\dots
04 \begin{thebibliography}{10}
05 \bibitem{Lam94}
06 L.~Lamport.{\em \LaTeX: A
Document Preparation System.}
07 Addison-Wesley, Reading,
Massachusetts, second edition,
1994, ISBN 0-201-52983-1.
08 \bibitem{Oetiker}
09 T.~Oetiker, H.~Partl, I.~Hyna
and E.~Schlegl. {\em The Not So
10 Short Introduction to \LaTeX
$2\varepsilon$}.
11 \end{thebibliography}

Ya sabemos bsicamente introducir


bibliografa en nuestro documento, sin
embargo, an podemos perfeccionar
ms su uso mediante el uso de pequeas
bases de datos personales de referencias
bibliogrficas.

Qu es BIBTeX?
El programa BIBTeX se usa para automatizar la elaboracin de entornos para la
bibliografa. La idea es crear una base de
datos de referencias bibliogrficas a partir de la cual BIBTeX crea el entorno bibliogrfico para nuestro documento.
La base de datos consiste en un fichero
con extensin .bib con una determinada
estructura. En nuestro documento ya no
se usar el entorno thebibliography sino
los comandos:
\bibliography{fichero1,U
fichero2,... }
\bibliographystyle{tipo}

que se pueden colocar tanto en el prembulo del documento como en el cuerpo


del mismo.
El primero de los comandos anteriores
sirve para indicarle a LaTeX los ficheros
de los que va a extraer la bibliografa, y
el segundo indica a LaTeX el formato en
el que se va a presentar en nuestro documento final. Un ejemplo del formato que
han de tener las referencias en la base de
datos .bib puede ser el siguiente:
@BOOK{CLMPS,
title = {\LaTeX: una imprentaU

LINUX USER

Figura 3: Referencia a las citas bibliogrficas.

en sus manos},
publisher = {ADI},
year = {2000},
author = {B. Cascales and P.U
Lucas and J.M. Mira and A.U
Pallars and S.
Snchez-Pedreo},
}

El fichero de referencias .bib ser una


sucesin de registros de este tipo donde,
como podemos observar en el ejemplo
anterior, indicamos el tipo de documento
al que hacemos referencia, una etiqueta
para referenciarlo, el ttulo, la editorial, el
ao de publicacin y el o los autores. El
ejemplo anterior hace referencia a un libro
y por eso va encabezado por el smbolo
@BOOK. Hay smbolos para artculos,
proyectos, tesinas, tesis, etc. Pero lo mejor
es que no vamos a tener que estudiar el
formato de estos registros, sino que tenemos herramientas en Linux para manejarlos cmodamente. Por ejemplo podemos
mirar las dos siguientes aplicaciones:
Pybliographer y gBib. Pybliographer (ver
Figura 4) es una aplicacin que trabaja
directamente con ficheros .bib (no hace
falta importarlos). Posee herramientas de
edicin muy potentes, un mecanismo de
bsqueda jerrquica, e insercin directa de
referencias en LyX y Kile. Por otra parte,
gBib (ver Figura 5) es un editor de ficheros
.bib con una interfaz bastante agradable y
fcil de usar y adaptado para Gnome.
Cualquiera de ellas es buena y cmoda
para introducir nuestras referencias bibliogrficas y generar el fichero .bib que usaremos desde LaTeX.
En cuanto a los estilos de bibliografa
que podemos generar los hemos resumido en la Tabla 1, aunque los ms usuales
suelen ser el plain y el alpha.
Para referenciar las citas bibliogrficas
cuando se usa BIBTeX, se hace igual que
antes, es decir, usamos el comando \cite.

www.linux-magazine.es

Nmero 04

89

LINUX USER

LaTeX

Figura 5: El programa gBib.

Figura 4: El programa Pybliographer.

Sin embargo, en este caso tambin


podemos usar el comando \nocite, con la
misma sintaxis que cite cuando queramos que alguna referencia est presente
en la bibliografa de nuestro documento
aunque no la hayamos citado explcitamente en nuestro documento.
Finalmente, para compilar nuestro
documento cuando se usan ficheros .bib
para generar la bibliografa, se debe
seguir el siguiente orden:
1.Ejecutamos
latex
nombre_fichero.tex. Al ejecutar LaTeX
por primera vez se genera un listado de
referencias en el fichero auxiliar (con
extensin .aux).
2.- Ejecutar bibtex nombre_fichero.tex,
el cual leer el fichero auxiliar, las bases
de datos y el fichero de estilo (de extensin .bst) y escribir un fichero con
extensin .bbl que contiene un entorno
de bibliografa formateado segn el estilo
escogido. Los errores se almacenan en
un fichero con extensin .blg.
3.- Volver a compilar el fichero original
con LaTeX (ahora se lee el fichero con
extensin .bbl generado en el paso anterior).
4.- Volver a compilar otra vez con
LaTeX para resolver todas las referencias
cruzadas.

Tanto la portada como cada captulo se


colocan en ficheros separados que se
integran en el documento principal en el
proceso de compilacin. La estructura de
ficheros es la siguiente:

master.tex: Fichero principal.

proyecto.cls
y
anexo.sty:
Ficheros de estilo (definiciones
y caractersticas particulares
usadas.)

portada.tex: Fichero con la portada.

capx.tex: Ficheros con el contenido de los captulos donde x


es el nmero de captulo.

base.bib: Base de datos con la


bibliografa.
De todos los ficheros que os menciono
arriba solamente os sonarn un poco
raros los ficheros con extensiones .cls y
.sty. Son ficheros de estilo, es decir,
ficheros con configuraciones especficas
para este tipo de documento y que
podis retocar a vuestro gusto sin ms
que editarlos e ir probando a cambiar
algunas cosas (mrgenes, tamaos y
tipos de letra, etc).
El fichero que hay que compilar es el
de nombre master.tex, que es el que
enlaza a todos los dems. Si editis este
fichero encontrareis fcilmente las distintas cosas que hay que cambiar o
aadir para vuestro propio proyecto. La
portada, que encontris en el fichero portada.tex incluye el imagotipo de la
Universidad de Mlaga en mi caso. Cada
captulo del proyecto va en un fichero
independiente que lo hemos llamado
capx.tex, donde x es el nmero del captulo. Si editis los dos captulos que
ponemos de ejemplo, podis observar
que estos ficheros comienzan siempre
con \chapter{ttulo del captulo}. Por
ltimo, la base de datos de citas bi-

Un ejemplo de proyecto
Lo prometido es deuda, por eso a
continuacin os propongo un ejemplo de
proyecto siguiendo un modelo que yo
propongo a mis alumnos para sus proyectos de final de carrera, aunque es fcilmente adaptable a cualquier otro tipo de
proyecto: libro, tesina, tesis Todos los
ficheros que nos hacen falta los podis
encontrar en la web de la revista: http://
www.linux-magazine.es en el apartado de
descargas de este nmero.

90

Nmero 04

www.linux-magazine.es

Figura 6: Ejemplo de la portada del proyecto.

bliogrficas est contenida en el fichero


base.bib. Si antes de comenzar a editar
vuestros propios documentos compilis
el fichero master.tex el resultado que
obtendris ser muy parecido a lo que os
muestro en la Figura 6.
Por ltimo, deciros que ahora os toca a
vosotros. Creo que en estas cuatro entregas hemos dado un paseo por el mundo
de LaTeX en el que nos hemos acercado
a uno de los sistemas de escritura profesional ms potentes de hoy en da, basado en software libre y donde podemos
comprobar que la comunidad mundial
ha enriquecido muchsimo al TeX inicial.
Un ejemplo de ello puede ser el proyecto
de la Clase Beamer para LaTeX, que bsicamente es un sistema de producir transparencias basadas en LaTeX muy superior al archifamoso PowerPoint de
Microsoft. Podis ver ejemplos en la
pgina web del proyecto: http://latex
beamer.sourceforge.net.

RECURSOS
[1] El libro de LaTeX. B. Cascales y otros. Ed.
Prentice Hall. 2003.
[2] LaTeX, a document preparation system. L.
Lamport. 2 Ed. Ed. Addison-Wesley. 1994.
[3] Una Descripcin de LaTeX2e. Toms
Bautista.
http://www.iuma.ulpgc.es/
users/bautista/other/tex/ldesc2e/misc/
ldesc2e.pdf
[4] gBib: Gnome BIBTeX editor. http://gbib.
seul.org
[5] Pybliographer. http://www.pybliographer.
org
[6] The LaTeX Beamer Class Homepage.
http://latex-beamer.sourceforge.net

Ms del 30% de descuento respecto al precio de portada: Consigue 12 nmeros por 5490 Euros y todos los DVDs Gratis!

A diferencia de otras publicaciones, Linux Magazine no llenar tu buzn de recordatorios para que renueves tu subscripcin. sta se renovar
automticamente cada ao. Recibirs una confirmacin aproximadamente 30 das antes del final de tu periodo de subscripcin, pero no se
requiere que hagas nada para seguir suscrito.

No te pierdas Linux Magazine nunca ms! La subscripcin te asegura que recibas los conocimientos Linux de ms alta calidad en tu domicilio
cada mes.

Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripcin en cualquier momento. Te abonaremos el precio
de todos los nmeros que no hayas recibido. Sin preguntas, sin fechas de cancelacin, sin problemas.

Linux Magazine es algo ms que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre.
Suscribindote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre all donde haga falta.

Proyectos

COMUNIDAD

Software Libre y sus Creadores

Proyectos en Marcha
El software libre incluye un abanico tan amplio de aplicaciones que puede ser difcil encontrar la herramienta perfecta.
En esta seccin, escogemos lo mejor de la cosecha. Este mes echamos un vistazo a distintas opciones para crear presentaciones y a Code Browser, una aplicacin para la edicin y estudio de cdigo fuente. POR MARTIN LOSCHWITZ

s que que tenan de bueno los


buenos viejos tiempos? Hace
aos, si queras presentar
cualquier cosa ante un nutrido grupo de
personas, se necesitaba un retroproyector y algn sistema para poner un
mensaje en la pizarra tal vez un rotulador y una regla bastaran.

Empieza el Espectculo
Despus de unos aos, las impresoras
con capacidad para imprimir en diapositivas se convirtieron en
tiles armas en la batalla
para desterrar el retroproyector. Pero el sistema
segua sin ser perfecto. Por
un lado las diapositivas
eran caras y por otro, eran
de un solo uso. La solucin
de los ltimos aos es ntegramente
virtual:
un
videoproyector
proyecta
una imagen directamente
desde un porttil.
Powerpoint de Microsoft no es para
nada la nica herramienta para presentaciones disponible por ah y los usuarios
de Linux cuentan con varias alternativas,
incluyendo soluciones que utilizan tanto
la lnea de comandos como un GUI. Es
una mera cuestin de gustos.

Presentaciones Grficas
La herramienta de presentaciones de
OpenOffice es tal vez la alternativa ms
parecida a Powerpoint. Le da a los usuarios una serie de estilos para
presentaciones que pueden rellenar con
contenidos a su gusto. El editor wysiwyg
permite modificar el texto directamente
en el GUI. Y existe un cuadro de dilogo
tipo sealar y picar para animaciones que
pueden hacer ms atractivas la exposi-

cin. OpenOffice es tan fcil de utilizar


que incluso los novatos y conversos
recientes no encontrarn ningn problema en adquirir resultados profesionales.
Pero existe una desventaja al utilizar
OpenOffice: Necesitas OpenOffice en el
ordenador que va a mostrar las diapositivas. Lgico, piensas, pero esto puede ser
un problema, ya que OpenOffice
requiere mucho espacio y es lento en
hardware ms antiguo. Si uno ha de
instalar todo OpenOffice slo para

mostrar diez diapositivas, puede que sea


mejor pensar en una alternativa.

imagen de fondo) para cada seccin de


la presentacin. Si se desea, Magicpoint
incluso puede utilizar un tamao de
punto diferente para cada lnea.
Una presentacin Magicpoint tpica
suele pesar como mucho 10 Kbytes, ms
lo que ocupen los ficheros de imgenes
que utilice. Los usuarios de Magicpoint
destacan sobre todo la caracterstica que
permite generar una presentacin en un
formato abierto que toma la forma de
una galera HTML (ver Figura 2).
A pesar de que Magicpoint nos se hallar
instalado en muchas
mquinas,
requiere
mucho menos espacio
que OpenOffice y corre
alegremente en hardware
antiguo. Adems, las
diferentes versiones de
Magicpoint son en general compatibles entre s,
por tanto un CD Knoppix
puede proporcionarte todo lo que necesitas para ejecutar tu presentacin.

Funciones Basadas en Texto

En los Huesos

Si puedes vivir sin un GUI, existen varias


alternativas en lo que se refiere a herramientas de presentaciones. Por un lado
tenemos Magicpoint [1]. Magicpoint
genera una presentacin lista para correr
a partir de un fichero de texto. Se puede
utilizar cualquier editor de texto para
crear el fichero y el formato de Magicpoint recuerda al de LaTeX (ver Figura
1), sin embargo, aunque no se haya
tocado
LaTeX
con
anterioridad,
cualquiera debera poder aprender a
crear presentaciones vistosas en poco
tiempo.
Se necesitan varios comandos bsicos
y se pueden aadir detalles (como una

La tercera herramientas para presentaciones


es LaTeX. Que no se queje nadie, que
debido a que LaTeX naci como sistema de
procesamiento de texto universal, aporta
una marco ideal para presentaciones, permitiendo a sus usuarios disear formatos
muy atractivos. El problema es que requiere
bastante esfuerzo producir incluso el resultado ms sencillo. Incluso los fans ms
ardientes de LaTex tendrn que dedicarle
bastante trabajo, debido a que la distribucin estndar de LaTeX no dispone de
plantillas. Afortunadamente, existen unos
cuantos aadidos, tales como Prosper [2] y
Beamer [3], que pueden hacer que las cosas
sean bastante ms sencillas.

www.linux-magazine.es

Nmero 04

93

COMUNIDAD

Proyectos

Figura 3: Code-Browser compacta segmentos de


cdigo en carpetas.
Figura 2: Magicpoint genera previsualizaciones y
galeras HTML a partir de un fichero de presentacin.

es un contendiente serio en el campo de


las presentaciones, el software libre
ofrece ms alternativas.

En Busca del Cdigo Perdido


Figura 1: La sintaxis de Magicpoint es similar a la
de LaTeX.

Prosper y Beamer son clases LaTeX


con comandos especiales que permiten a
los usuarios modificar parmetros como
el color del fondo, tamao, apariencia
general y detalles para cada diapositiva.
Prosper viene con una serie de temas.
Despus de crear un archivo .tex, se
puede ejecutar el programa pdflatex para
producir material formateado como
PDFs. Esto significa que se puede ejecutar la presentacin en casi cualquier PC,
independientemente del sistema operativo que corra. Las diapositivas creadas
con Prosper necesitan un paso ms en su
procesado: primero se compilan con
LaTeX, Dvips y Ps2pdf.
Estas dos utilidades son muy similares
en lo que se refiere caractersticas y facilidad de manejo. Los programas de
presentaciones basados en LaTex tiene
una ventaja clara con respecto a Magicpoint y OpenOffice: LaTeX se halla
instalado en casi cualquier sistema
Linux, lo que significa que la mayora de
los PCs Linux podrn mostrar tus presentaciones Beamer o Prosper.
Sin embargo, si no se disponen de los
conocimientos necesarios de LaTeX, la
curva de aprendizaje puede resultar ser
un obstculo. Los novatos deben darse
un tiempo para aprender a utilizar el
programa.
Lo mejor de todo es que los cuatro programas que hemos visto se comportan
estupendamente y no dan ninguna sorpresa desagradable y aunque Powerpoint

94

Nmero 04

Si existe algo ms difcil que escribir tus


propios programas, eso es entender el de
los dems. Perl es un ejemplo clsico de
esto, y por ello muchos lo consideran un
lenguaje de solo escritura. Pero incluso
en entornos ms claros e inteligibles, los
desarrolladores siguen pudiendo conseguir
cdigo
crptico.
A
los
desarrolladores a menudo se les exige
trabajar en el cdigo de otros y, en este
caso, cualquier ayuda se agradece.
Muchos
editores
cuentan
con
resaltado de sintaxis para bucles, funciones y otros pedacitos de cdigo, pero
ni Emacs ni vi son una alternativa para
una estructura legible. Y cuando se mezclan trabajos de programadores con
diferentes estilos, a menudo los resultados son caticos.
Aqu es donde entra Code-Browser, una
aplicacin orientada hacia grandes proyectos. Adems del resaltado sintctico, esta
herramienta tambin utiliza carpetas. Es
decir: puede compactar secciones libremente seleccionables en una sola lnea. El
editor muestra a continuacin un nombre,
permitiendo al desarrollador hacer clic
sobre l y mostrar el cdigo fuente en la
carpeta. Otra cosa que hace Code-Browser
es aadir enlaces a otros ficheros y carpetas. Un enlace te lleva a una nueva
solapa con el recurso objeto.

GUI Incluido
Code-Browser est escrito en el lenguaje
de programacin Zinc. El GUI utiliza la
librera GTK y el cdigo fuente est
disponible en la pgina de inicio de
Code-Browser en [4].

www.linux-magazine.es

El espacio de trabajo de Code-Browser


est pensado para ser intuitivo en su
manejo, permitiendo abrir cada fichero
en una nueva solapa. Tambin se pueden
partir las ventanas vertical u horizontalmente, lo que permite a los
desarrolladores mantener controlados
varios ficheros o carpetas simultneamente (ver Figura 3).
Code-Browser no slo es til para estudiar cdigo fuente existente. El bfer
deshacer permite deshacer mltiples
cambios si algo se tuerce en el desarrollo
y la aplicacin cuenta con un amplio
abanico de opciones de configuracin,
aunque, la verdad sea dicha, algunos de
los dilogos pueden ser un tanto
enmaraados.
El resaltado de sintaxis soporta la
mayor parte de los lenguajes ms populares, incluyendo C, C++, C#, Python y
Ruby. Los webmasters agradecern el
soporte de CSS, XML y HTML. Y si echas
en falta tu lenguaje de programacin
favorito, el paquete Code-Browser
cuenta con ficheros de ejemplo que
pueden ser modificados con poco
esfuerzo para reflejar tus necesidades.
Code-Browser es una aplicacin que
brinda a los programadores la oportunidad de salirse de la guerra entre los
defensores de Emacs y los apstoles de
Vim. Y si buscas una alternativa por
otras razones, la visualizacin de la
estructuracin de cdigo es un buen
argumento para pasarse a Code
Browser.

RECURSOS
[1] Magicpoint: http://member.wide.ad.jp/
wg/mgp
[2] Prosper: http://prosper.sourceforge.net/
[3] Beamer: http://latex-beamer.sourceforge.
net/
[4] Sitio web de Code-Browser: http://
code-browser.sourceforge.net

Eventos

LINUX MAGAZINE

Eventos Seleccionados

LinuxPark CeBIT 2005

LinuxWorld Expo Canad

aKademy 2005

Fecha: 10-16 Marzo

Fecha: 18-20 Abril

Fecha: 27 Agosto - 4 Septiembre

Ciudad: Hannover, Alemania

Ciudad: Toronto, Canad

Ciudad: Mlaga, Espaa

Sitio Web:
www.cebit.de/
homepage_e

Sitio Web:
www.linuxworld
canada.com

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

Calendario de Eventos
Evento
Solutions Linux
Linux Park CeBIT 2005
OReilly Emerging Technology Conference
Novell BrainShare 2005
YAPC::Taipei 2005
Festival Latinoamericano de Instalacin de
Software Libre
LinuxWorld Conference & Expo, Canada
MySQL Users Conference & Expo 2005

Fecha
01-03 Marzo
10-16 Marzo
14-17 Marzo
20-25 Marzo
26-27 Marzo
2 de Abril
18-20 Abril
18-21 Abril

linux.conf.au
18-23 Abril
3rd International Linux Audio Conference 21-24 Abril
Xtech 2005
24-27 Mayo
GUADEC 2005
29-31 Mayo
LinuxTag 2005
22-25 Junio
I Congreso de Tecnologas del Software Libre 7-8 Julio
2005 Linux Symposium
20-23 Julio
Usenix Security Symposium
1-5 Agosto
aKademy 2005
27 Agosto - 4 Septiembre

Ciudad
Pars, Francia
Hannover, Alemania
San Diego, CA, EE.UU.
Salt Lake City, UT, EE.UU.
Taipei,Taiwan
Venezuela, Argentina
y Colombia
Toronto, Canad
Santa Clara, CA, EE.UU.
Canberra, Australia
Karlsruhe, Alemania
Amsterdam, Holanda
Stuttgart, Alemania
Karlsruhe, Alemania
A Corua
Ottawa, Canad
Baltimore, MD, EEUU
Mlaga

Sitio Web
www.solutionslinux.fr
www.cebit.de/homepage_e
conferences.oreillynet.com/etech
www.novell.com/brainshare
taipei.pm.org
http://ingenieria.ean.edu.co/~azul/
svnwiki.cgi/colibri/fisl
www.linuxworldcanada.com
www.mysql.com/news-and-events/usersconference
conf.linux.org.au/
www.zkm.de:81/lac
www.xtech-conference.org
http://2005.guadec.org
www.linuxtag.org
http://congreso.gpul.org
www.linuxsymposium.org
www.usenix.org
http://dot.kde.org

Informacin de Contacto
Director
Paul C. Brown
Coolaboradores
Paul C. Brown, Jose Manuel Gonzlez Vida, Juan
Rafael Fernndez, Pedro Orantes, Jos Mara Ruz
Traductores
Paqui Martn Vergara, Paul C. Brown, Jess Reyes
Delgado, Antonio Rueda.
Maquetacin
Sergio Hardasmal
Diseo de Portada
Paul C. Brown, Pinball
(info@pinball-werbeagentur.de)
Publicidad
www.linuxmagazine.com.es/pub/
Para Espaa
Paul C. Brown
pbrown@linuxmagazine.com.es
pbrown@linuxnewmedia.es
Tel.:
(+ 34) 951 010 556
Mvil.:
(+ 34) 655 036 836
Fax.:
(+ 34) 951 010 516
Sergio Hardasmal
anuncios@linuxmagazine.com.es
Tel.:
(+ 34) 951 010 556
Para Alemania, Austria y Suiza
Osmund Schmidt
anzeigen@linux-magazine.com
Tel.:
(+49) 6335 9110
Fax.:
(+49) 6335 7779

Para el Resto del Mundo


Brian Osborn
ads@linux-magazine.com
Tel.:
(+49) 6509 910 495
Fax.:
(+49) 6509 910 497
Director Editorial
Paul C. Brown
Director de Produccin
Sergio Hardasmal
anuncios@linux-magazine.com
Subscripciones: www.linuxmagazine.com.es/
magazine/subs
Precios Subscripcin
(12 nmeros + 1 DVD cada 3 nmeros)
Espaa:
49,50
Europa:
59,90
Resto del Mundo - Euros:
79,90
Resto del Mundo - Dlares U.S.A.: $94,90
Tel.:
(+34) 951 010 556
Fax.:
(+34) 951 010 516
subs@linuxmagazine.com.es
Linux Magazine
Linux New Media Spain, S.L.
Avda. Juan Lpez Pealver, 21
29590 - Campanillas Mlaga
ESPAA
info@linuxnewmedia.es
Tel.:
(+34) 951 010 556
Fax.:
(+34) 951 010 516

www.linuxmagazine.com.es - Espaa
www.linux-magazine.com - Mundo
www.linux-magazine.de - Alemania
Si bien se toman todas las medidas posibles para
garantizar la precisin del contenido de los artculos
publicados en Linux Magazine, la editorial no se
hace responsable de imprecisiones aparecidas en la
revista. Asimismo, Linux Magazine no comparte
necesariamente las opiniones vertidas por sus
colaboradores en sus artculos. El riesgo derivado
del uso del DVD y el material que contiene corren
por cuenta del lector. El DVD es estudiado escrupulosamente para confirmar que est libre de virus y
errores.
Copyright y Marcas Registradas 2004 Linux New
Media Spain, S.L. Linux New Media Spain S.L. prohbe
la reproduccin total o parcial de los contenidos de
Linux Magazine sin su permiso previo y por escrito.
Linux es una Marca Registrada de Linus Torvalds.
Impreso en Alemania
Impresin: Dierichs Druck + Media GmBH
Distribucin: SGEL
Depsito Legal: MA-116-2005

www.linux-magazine.es

Nmero 04

95

LINUX MAGAZINE

DVD Linux Magazine

En el DVD de Linux Magazine

Mandrake Linux 10.1


Con el nmero de Linux Magazine de este mes, traemos para todos los lectores el
DVD de Mandrakelinux 10.1 Oficial. Mandrakelinux 10.1 es el ms reciente
de una larga lista de productos innovadores creados por Mandrakesoft para la comunidad Linux. La versin 10.1 incluida en el DVD de
este mes es la referencia oficial de Mandrakelinux. Segn Mandrakesoft,un periodo de pruebas expandido garantiza una
alto nivel de estabilidad en la versin 10.1 Official.

a versin 10.1 de Mandrakelinux


viene con un kernel Linux 2.6.8 y
existe la posibilidad de elegir entre
KDE 3.2.3 o Gnome 2.6 para el escritorio
(ver Figura 1). Esta versin incluye
soporte Wi-Fi y tecnologa Intel Centrino
Mobile, as como soporte extendido para
porttiles y funcionalidades Bluetooth
adicionales. Tambin existen paquetes
nuevos para el escritorio, como la aplicacin de autoedicin Scribus y Kphone,

para llamadas telefnicas a travs de


Internet,
y
Rosegarden,
un
paquete para la composicin musical.

Instalacin Asistida
Mandrakelinux es clebre por
su instalacin automatizada y sencilla. Simplemente hay que enchufar el
DVD y responder a las preguntas. La
instalacin facilita la deteccin y configuracin automtica del hardware. El
instalador ofrece opciones de configuracin para usuarios avanzados, as
como un modo de rescate para salvar el
sistema en el caso de emergencia.
El instalador Mandrakelinux soporta
cincuenta idiomas y ofrece varias
opciones para sistemas de ficheros, entre
ellos, EXT3, ReiserFS y XFS. Tambin se
pueden montar discos RAID y redimensionar particiones NTFS a travs del
instalador. Una til herramienta de autoinstalacin permite duplicar instalaciones de manera sencilla.

Centro de Control

Figura 1: Mandrakelinux viene con los escritorios


KDE 3.2.3 y Gnome 2.6.

96

Nmero 04

El centro de control de Mandrakelinux


(Figura 2) aporta un interfaz de usuario
completo e intuitivo para la administracin de la configuracin del sistema.
El centro de control incluye ms de cincuenta asistentes y utilidades de configuracin. A travs del centro de control
se puede administrar particiones, puntos

www.linux-magazine.es

de montaje, software, seguridad y servicios.

Seguridad
Mandrakelinux ofrece varios niveles predefinidos de seguridad que permiten
ajustar los parmetros de seguridad del
sistema a los requisitos de cada cual. El
centro de control permite configurar un
sistema de cortafuegos completo utilizando Shorewall y tambin aporta una serie
de opciones de seguridad avanzadas.
Asimismo, Mandrakelinux suministra
varias herramientas de criptografa,
incluyendo OpenSSH, GnuPG, herramientas de certificaciones SSL, sistemas
de ficheros cifrados y Linux Kernel
Secure.

Redes
La distribucin Mandrakelinux incluye
lo mejor de las herramientas de servidores estndar y ofrece algunas caractersticas especialmente innovadoras. En
el DVD encontramos RPMs para BIND,

DVD Linux Magazine

Figura 2: El centro de control es de donde se


administra el sistema Mandrakelinux.

NFS, DHCP, MySQL y PostgreSQL,


Postfix (y Sendmail), Spam Assassin y
tambin Samba.
El Apache2 especialmente configurado
para Mandrakelinux, suministra docenas
de extensiones Apache listas para ser utilizadas. Otra herramienta exclusiva de
Mandrake, DrakGW, permite a mltiples
usuarios compartir una nica conexin a
Internet.

Desarrollo
La distribucin Mandrakelinux 10.1 tambin ofrece mltiples herramientas para
desarrolladores, incluyendo gcc 3.4.1,
Perl, Python y un buen surtido de herramientas
Java.
Se
incluye
con
Mandrakelinux las libreras GTK+ y Qt,
as como el entorno de desarrollo integrado, Kdevelop, el entorno de desarrollo HTML Quanta Plus y otras herramientas para componer y administrar cdigo
fuente.

Otras Herramientas
Mandrakelinux incluye literalmente centenares de otras aplicaciones tiles.

Requisitos del Sistema


Procesador: Tipo X586 i mejor. Esto incluye
los Pentium I/II/III/IV/Celeron, AMD K6/II/III,
AMD Duron y AMD Athlon/XP/IMP.
Memoria: 64 MBs mnimo; 128 MBs o ms
recomendado. 32 MBs para una instalacin
slo texto.
Disco Duro: 500 MB mnimo; 1 GB recomendado. Se soportan unidades de alta capacidad de hasta 250 GBs.
Ver la base de datos de hardware soportado
por Mandrakelinux para ms informacin:
http://www.mandrakelinux.com/es/
hardware.php3

Encontramos herramientas multimedia


como la aplicacin de teleconferencia
Gnome Meeting, Mplayer, el editor de
vdeo Kdenlive y varias otras utilidades
para la creacin y tostado de CDs. Los
juegos de Mandrakelinux incluyen
FrozenBubble, Chromium y Tux Racer.
Las herramientas de ofimtica abarcan
el cliente groupware Kontact y el servidor de groupware Kolab. El DVD tambin
incluye Gnumeric, la aplicacin de hoja
de clculo de Gnome y Karbon 14, la
aplicacin de diseo vectorial.
La distribucin Mandrakelinux aporta
un extensa coleccin de herramienta
para la administracin del sistema,
incluyendo un administrador de software, MandrakeUpdate, Webmin, la
herramienta DrakConnect para administrar conexiones a Internet, as como el
servicio de consultora y actualizacin
Mandrakeonline.

Prubalo
El formato en un solo DVD hace que sea
fcil
y
cmodo
configurar
e

LINUX MAGAZINE

Figura 3: Mandrakelinux 10.1 soporta caractersticas tales como mens transparentes para el
escritorio.

implementar
tu
sistema
Mandrakelinux. Arranca el DVD de
Linux Magazine y responde a las
preguntas. Pronto estars explorando
Mandrakelinux 10.1 Official por ti
mismo y podrs comprobar porque
Mandrakelinux se le conoce por su
sistema Linux seguro y de fcil uso,
adecuado tanto para el principiante,
pero con la suficiente potencia como
para satisfacer tambin al usuario

experto.

Instalacin con el DVD de Mandrake Linux


El DVD Mandrakelinux 10.1 de Linux
Magazine contiene la distribucin completa
Mandrakelinux 10.1 Official. Este nico DVD es
equivalente a tres o ms CDs incluidos con la
versin estndar de CDs de Mandrakelinux.
Para poder instalar Mandrakelinux utilizando el DVD, se debe disponer de.
una unidad de DVD. La mayora de los sistemas modernos disponen de una unidad
que puede leer tanto CDs como DVDs,
pero algunos sistemas antiguos slo
disponen de lectores de CDs. Necesita un
lector de DVDs para poder instalar el DVD
Mandrakelinux 10.1 Official de Linux
Magazine.
soporte para arrancar desde CD/DVD. Los
sistemas ms modernos en general no
tienen ningn problema para arrancar
desde un DVD, sin embargo, sistemas ms
antiguos pueden carecer de esta funcionalidad.
Para instalar Mandrakelinux.
Coloque el DVD de Mandrakelinux en el
lector de DVDs.
Re-arranque el ordenador.
Siga las instrucciones proporcionadas en
la instalacin.
La mayora de los ordenadores revisan una
lista de prioridades de dispositivos de

arranque al encenderse. El dispositivo de


arranque es el dispositivo donde su ordenador encuentra los ficheros necesarios para
su arranque. Si su sistema arranca normalmente y no empieza la instalacin de
Mandrakelinux cuando coloca el DVD en la
unidad y re-arranca, puede que se deba a que
su unidad de DVDs aparece despus de su
disco duro en la secuencia de bsqueda de
dispositivos de arranque. Si esto ocurre,
necesitar entrar en la configuracin de la
BIOS del sistema y cambiar la secuencia de
arranque.
Las instrucciones de cmo se entra en la
configuracin de la BIOS vara dependiendo
de la marca y modelo de cada ordenador. Un
mensaje que dice como entrar normalmente aparece brevemente en el momento
inicial del arranque. El mensaje puede decir
algo como Pulse Supr para entrar en configuracin. Otros sistemas le dirn que pulse
F2, la tecla Esc o una combinacin de teclas,
como Ctrl-Alt-Esc. Hay que introducir la combinacin de teclas en las primeras fases del
arranque del sistema.
Si no ve el mensaje que describe como
entrar en el men de configuracin, o si
necesita ms informacin sobre como cambiar la configuracin de la BIOS, consulte la
documentacin del proveedor de su ordenador.

www.linux-magazine.es

Nmero 04

97

PRXIMO NMERO

Nmero 4

Mayo 2005: Nmero 5

Prximo Nmero
Especial Correo Seguro
El correo electrnico es uno de los ms
antiguos y ms importantes servicios de
Internet. Sin embargo ya no es lo bastante seguro en el entorno hostil de la
red de redes de hoy en da. Ms del 60
por ciento del correo no es solicitado y
los administradores poco pueden hacer
en la constante lucha contra la plaga de
spam que asola las bandejas de entrada
de los usuarios.
En el tema de portada de Email Seguro
de nuestro prximo nmero, nos aliaremos con los usuarios en la batalla contra
el spam con un anlisis en profundidad
de la mentalidad del spammer y aprenderemos a explotar eficientemente uno
de las ms completas herramientas antispam
en
el
mercado
actual:
Spamassassin.
El siguiente paso ser explorar el filtrado spam con la ayuda de procmail, lo
que de paso nos servir para entender
esa misteriosa informacin encerrada en
las cabeceras de los mensajes de correo.

Tambin veremos formatos de bandejas de entrada de correo y estudiaremos


las ventajas y desventajas ofrecidas por
los formatos de buzones Linux. Por
ltimo veremos la encriptacin de correo
utilizando una combinacin de GnuPG y
los clientes de correo Kmail, Thunderbird y Evolution.

Desarrollo
En nuestra seccin dedicada a la programacin, acabaremos de ver el uso de la
librera SDL para la creacin de un juego
implementando sonido, crearemos un
vistoso interfaz con uno de los widgets
ms complejos de la librera Qt: QTCanvas.
Y
veremos
como
correr
instrucciones del shell desde dentro de
un script Perl.

SysAdmins

Prctico
Continuamos estudiando el complejo y
completo programa Scribus para la
autoedicin y enseamos como desarrollar scripts para GIMP. Tendremos un
tutorial sobre uno de los interfaces ms
verstiles para la creacin de interfaces a
base de datos, Knoda y veremos como
controlar un PC desde un telfono con
Bluetooth. Finalmente ensearemos
como hacer funcionar un sistema desde
dentro de un sistema con Qemu.

Boletn Linux Magazine


El Boletn de Linux Magazine te da la oportunidad de ver lo que se avecina en el
siguiente nmero de Linux Magazine e incluye enlaces a artculos que aparecen
en nuestro sitio web antes de que la versin impresa llegue a los quioscos.
Suscrbete en www.linuxmagazine.com.es/boletin.

Los administradores de sistemas


podrn seguir los siempre prcticos
consejos de Charly. Adems aprenderemos a administrar los recursos del
sistema manteniendo un estricto control sobre los demonios en ejecucin.
Tendremos la segunda parte dedicada a
la seguridad wireless donde vemos los
sencillo que es crackear un sistema con
encriptacin wep y enseamos a
blindar un servidor Apache que corre
PHP.

Linux User
En el apartado dedicado al usuario
final, tendremos una prctica aplicacin para escritores profesionales y
vocacionales:
Kdict.
Asimismo
enseamos a configurar un cliente de
una red wifi con Kwifi. Tambin veremos uno de las utilidades de la lnea de
comandos ms tiles y verstiles: sort,
a la vez que tendremos en nuestra seccin de educacin otro instructivo
artculo para todos los profesores (y
alumnos) que utilizan Linux en las
aulas.

A LA VENTA ABRIL 2005


98

Nmero 04

www.linux-magazine.es

También podría gustarte