Está en la página 1de 100

Twin TJ-Racer Python Konserve Edición en

Gestor de El Juego Definitivo Acceso a Ficheros Backups fáciles


Ventanas de Texto (según Paul C. Brown) Locales y Remotos desde KDE Castellano
LINUX MAGAZINE
NÚMERO 02

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

Impresoras, Cámaras, Grabadoras de DVD


Hardware

HARDWARE
Impresoras
PCs Silenciosos

Qué impresora comprar y cuál evitar p12


Un PC silencioso para el salón p18
Cómo hacer que tu cámara se hable con Linux p23
Cámaras Digitales

Desarrollo
Objetos cuánticos en Perl: Haz saltar
Grabadoras DVD

la banca jugando al Blackjack p61

TaskJuggler
Python

Programa las tareas para el


personal de tu empresa p96
Sleuthkit
Twin

Sleuthkit
Filtrado Web

p61

Análisis forenses
informáticos

WWW.LINUX- MAGAZINE.COM.ES
Linux va a CeBIT
Muestre sus productos y servicios en la sección
especial dedicada a Linux en CeBIT 2005:

Por cuarto año consecutivo, un gran número de


compañías y proyectos de código abierto van a
presentar sus soluciones de software, productos
y servicios en LinuxPark.
En CeBIT 2005, LinuxPark será de nuevo el punto
de visita obligatoria para lo directivos TI, espe-
cialmente aquellos provenientes de las PYMEs y
de la administración pública. Sólo hay un sitio en
CeBIT con toda la información sobre las tecnolo-
gías de código abierto más novedosas y como
explotarlas de manera efectiva: LinuxPark.
Su empresa también puede beneficiarse enor-
memente de esta plataforma, ideal para la pro-
moción de sus soluciones de código abierto.

La solución perfecta para su presencia


ferial:
• Comuníquese directamente con una gran
variedad de clientes potenciales
• Anúnciese en un campaña promocional ante-
rior a la feria de gran envergadura
• Realice su propia presentación en el
LinuxForum
• Aprenda de ponentes de primera categoría
• Consolide sus relaciones con la comunidad
Linux internacional
• Benefíciese del contacto con socios y patroci-
nadores de reconocido prestigio en el sector
• A su disposición: paquetes feriales todo inclui-
do desde 4 m2

Consiga más información en


+49 (0) 26 02 16 01374 ó
profair@abresch.de

Patrocinado por: Presentado por:


Escritorios EDITORIAL

Ser o no ser
Estimado Lector de Linux Magazine

E
l año del razones profesionales. Si solo pudiese
escrito- encontrar donde puedo abrir un termi-
rio, el nal de línea de comandos, tendría
año del escrito- donde agarrarme. Pero no. El maldito se
rio… Ni que me resiste. Claro que no ayuda para Nos sentimos orgullosos de nues-
tros orígenes como publicación, que
fuera un nuevo nada que esté todo en alemán (no pre-
se remonta a los primero días de la
signo en el guntéis). Por no saber, no sé ni como se revolución Linux. Nuestra revista
horóscopo abre el DVD-ROM. Pero, cuando fui a hermana, la publicación alemana
chino (“Sí, comprar un teclado para dicha Linux Magazin, fundada en 1994,
señora su hijo nació en el año del máquina, el vendedor se interesó por las fue la primera revista dedicada a
escritorio, lo que significa que la vida le características del artefacto en cuestión. Linux en Europa. Desde aquellas
tempranas fechas hasta hoy, nues-
deparará no pocos iconos”). Pero a mi Me pregunto por la RAM me retorcí en
tra red y experiencia han crecido y
entender, el tan cacareado “año” del mi asiento y murmuré un “No sé”. Me se han expandido a la par que la
escritorio Linux ya fue, o más bien, preguntó por la velocidad del proce- comunidad Linux a lo ancho y largo
sigue siendo y, a la vez, está por venir. sador. “¿750 Mhz?” aventuré. del mundo. Como lector de Linux
Me explico. Esto no va a ser (o no fue, o “Imposible” sentenció él. “No hay Magazine, te unes a una red de
no se-… bueno, ya paro) como el inven- ningún iMac a esa velocidad”. “Pues no información dedicada a la distribu-
ción del conocimiento y experiencia
to de la gramola, que un día concreto, sé” admití de nuevo, cabizbajo. Una vez
técnica. No nos limitamos a infor-
alguien tuvo la idea y fue y lo construyó le hube explicado el problema del mar sobre el movimiento Linux y de
(y patentó, todo hay que decirlo) y ya idioma me dijo: “Pulsa en la manzanita. Software Libre, sino que somos
está: aparece el producto terminado. El La primera opción te dará el perfil del parte integral de él.
“año” del escritorio Linux probable- ordenador”. Regresé a la oficina y probé
mente abarque décadas, tal vez inicián- lo que me había sugerido y… ¡Alejop!
dose el día que alguien con largas pati- Aparecieron todos lo entresijos de hard- teclear una instrucción, ver que no fun-
llas y una corbata de lana tejida (el uni- ware del cacharro. “¡Ajá!” pensé. Esto sí ciona, corregir permisos, segunda prue-
forme de los programadores de los años era agradable. No importa con que mo- ba, no funciona, establecer variables de
setenta y primeros ochenta) se le ocu- delo de máquina te las estés viendo, ni entorno, probar otra vez, maldita sea,
rrió que estaría bien dotar a Unix de una que sistema operativo estés corriendo, sigue sin funcionar… Que, no, que no
pantalla para gráficos. Tal vez ni si es un Mac, pulsas en la manzanita y veo a alguien que lo que necesita es un
siquiera estaba pensando en iconos y la primera opción es el perfil del sis- escritorio para ser inmediatamente pro-
ventanas, sino lo único que quería era tema. Y, aparentemente, todo es igual: ductivo, pasando por lo que yo he
plotear una función polinómica o algo Los menús son consistentes de versión a tenido que pasar para hacer que
por el estilo. Cosas de los ingenieros. Lo versión, siempre en el mismo lugar, OpenOffice se hablara con MySQL, por
que es servidor, llevo utilizando escrito- siempre con el mismo comportamiento. poner un ejemplo reciente. ¿Conclusión?
rios Linux desde el 96 y hoy en día Para un macignorante como yo, eso es Unificación de criterios y escritorios.
encuentro más “intuitivo” (concepto lo que yo llamo una ventaja. Pero entonces ¿dónde queda la flexibili-
traicionero como ninguno) que Acostumbrado a Mandrake desde hace dad y la libertad de elegir que tan atrac-
cualquier otro sistema de ventanas. Lo años, la nueva versión de Fedora que tivo hace los sistemas Linux? Amigo, he
he dicho antes y lo repito ahora: todo es regalamos con el número 1 de Linux ahí el dilema.
a lo que te acostumbras. Un escritorio Magazine, me ha dado incontables que-
Linux es igual de difícil o fácil que braderos de cabeza. Como con el Mac,
cualquier otro escritorio al cual te has no tengo ni idea de donde están las
habituado. Y si el escritorio con el que cosas y acabo siempre optando por abrir
te topas es radicalmente diferente a una consola y operando desde ahí. Al
aquel con el que te has criado, pues ten- menos eso sí es consistente. Sin embar-
drás problemas. Por ejemplo, última- go, habrá entre el respetable alguien
mente me ha sumido en la más igno- que vea esto como un obstáculo para
miniosas de las depresiones el no enten- que Linux se adopte como sistema ope-
der nada el escritorio de un iMac con el rativo de consumo entre lo población en Paul C. Brown
cual me he visto obligado a torear por general. Esto de abrir una consola, Director

www.linuxmagazine.com.es Número 02 3
LINUX MAGAZINE Contenido

NOTICIAS
12 Impresoras bajo Linux
La impresora que elijamos dependerá del uso que hagamos
Premios LNM ......................................................................................6 de ella. Los usuarios de Linux basan parte de su elección en
el tipo de
soporte que el
Inseguridades ....................................................................................8
sistema operati-
vo provee para
Negocios ..............................................................................................10 su modelo de
impresora. Este
artículo propor-
PORTADA ciona informa-
ción útil y una
Especial Hardware .........................................................................11 guía en la que
basar nuestra
Impresoras ..........................................................................................12 decisión.
No todas las impresoras funcionan bajo Linux. Vemos cual
nos conviene con este completo artículo.

Equipos Silenciosos ......................................................................18 18 Equipos Silenciosos


Vemos cómo diseñar un PC que no desentonará en el salón Un ordenador beige, con ventiladores ruidosos y des-
de tu casa. cuidadas ampliaciones difícilmente convencerán a un
usuario que
busca una
Cámaras Digitales .........................................................................23
estación multi-
Analizamos el software más adecuado para conectar una
media para su
cámara a un equipo Linux.
salón o un PC
bien diseñado
Grabadoras DVD ............................................................................29 para un elegante
La batalla de los formatos puede dar al traste con la compra despacho
de nuestra grabadora. Éste artículo explica qué comprar y domestico. Este
cómo no equivocarse. mes ayudamos al
lector a elegir los
componentes
DESARROLLO
adecuados para
construir un sis-
La librería SDL ..................................................................................32 tema elegante.
Aprendemos a utilizar SDL en este taller de programación de
juegos.

Interfaces ............................................................................................38
Con curses podemos desarrollar interfaces de texto rápidos y 23 Cámaras Digitales Bajo Linux
eficientes. Las cámaras digitales progresivamente van reemplazando a
las tradicionales en nuestras casas. La forma típica en Linux
de transferir imágenes
Blackjack .............................................................................................43
desde la cámara al
El juego del 21 sirve para ilustrar el uso del paquete cuántico
disco duro es con
de Perl.
gPhoto o mediante el
módulo basado en ker-
La API Pear .........................................................................................46 nel de memoria
PEAR proporciona una API que simplifica la creación y masivos USB. Los
gestión de formularios web. entornos gráficos como
digikam prometen un
Gestiónde de Ficheros Bajo Python ................................52 uso mejorado.
Todas las operaciones necesarias (y alguna más) para traba-
jar con ficheros se explican en este artículo.

4 Número 02 www.linuxmagazine.com.es
Contenido LINUX MAGAZINE

SYSADMIN
38 Botones en Curses
En nuestra nueva entrega de programación de interfaces bajo
C++, vemos lo que podemos hacer para crear botones en
La Columna de Charly ................................................................57
ventanas Los mejores trucos y consejos del SysAdmin.
curses que
respondan a Filtrado Web .....................................................................................58
entradas del Los banners ralentizan y dificultan la navegación web.
teclado y que Vemos como impredir su aparición.
devuelvan un
valor a la
Sleuthkit ..............................................................................................61
programa
Las utilidades Sleuthkit permiten realizar análisis forenses
principal
en equipos comprometidos.
para que ésta
actúe en con-
secuencia. Email Cluster ....................................................................................67
Cómo agilizar el tránsito de mensajes en una empresa.

LINUX USER
61 Análisis Forenses con Sleuthkit
Sleuthkit realiza análisis forenses en archivos del sistema de TaskJuggler .........................................................................................71
Microsoft y Unix aplicando sus habilidades como detective Planifica tareas en el seno de una organización.
desde la línea de
comandos para iden- DeskTOPia: Twin ............................................................................74
tificar evidencias, ¿Un gestor de ventanas en modo texto? Twin es justamente eso.
recuperar archivos
borrados o reconstru-
ir escenarios. Todo
Aplicaciones: Konserve .............................................................77
esto es esencial en el Utilidad para aligerar la tarea de las copias de seguridad.
arte del trabajo de los
forenses digitales. En Curso de Programación: XUL (II) ........................................79
este incipiente campo Un lenguaje sencillo para programar interfaces web.
es mejor prepararse y
practicar para los
Educación: WIMS (II) ...................................................................83
problemas que nos
creación de aulas virtuales con WIMS.
acecharán en el
futuro.
Tipografía con LaTeX (II) ...........................................................88
Documentos de aspecto profesional con LaTeX.

Comandos: Head, tail y cat .....................................................93


77 Backups con
Documentos de aspecto profesional con LaTeX.
Konserve
La “Konservación”
es una Buena cosa COMUNIDAD
y Konserve, una
herramienta KDE Proyectos ............................................................................................95
no es una excep-
ción. Sus sofistica-
dos mecanismos de Eventos ................................................................................................96
copia de seguridad
realmente pre- Contacto .............................................................................................96
vienen los dolores
de cabeza provoca-
dos por esta tarea.
Humor ...................................................................................................97

Próximo Número ..........................................................................98

www.linuxmagazine.com.es Número 02 5
NOTICIAS Premios Linux New Media

Galardones Linux New Media 2004

Elegidos para
la Gloria
El 2004 ha sido un año fascinante en los que se refiere a acontecimientos

interesantes. Linux New Media AG le pidió a los expertos de la comunidad Galardones Linux New
del código abierto y la industria TI que nombrase a los que llevan la voz can- Media 2004
Hardware1
tante en el mundo del Software Libre. El Linux World Expo fue el marco Mejor Proveedor de Portátiles
1. IBM 33.6 %
perfecto para los galardones de Linux New Media de este año. 2. Apple 23.2 %
3. HP 13.6 %
Mejor Proyecto Libre para Soporte de Hardware
1. X.Org 36.3 %

E
l peligro de las patentes de soft- contribuciones al año del código abierto. 2. ACPI4Linux 13.1 %
ware, los primeros pasos hacia la Los ganadores de este año representan 3. Linuxprinting.org 11.3 %
migración a escritorios Linux el bien las tendencias actuales. 3. growisofs/mkisofs for DVD Support 11.3 %
3. Ndiswrapper 11.3 %
esfuerzo de Novell por tomar el control
de Suse… todos fueron temas candentes Y el Ganador es... Proveedor de Impresión Más Amigable
1. HP 45.8 %
en la comunidad Linux y del código Los miembros del jurado otorgaron el 2. Canon 18.1 %
abierto a lo largo del 2004. Sin embargo, bien merecido galardón en la categoría 3. Kyocera 16.0 %
también hubieron muchos progresos en de Mejor Distribución Novel al proyecto Software
otras áreas. Linux New Media, el editor noruego Skole Linux (http://www. Mejor Distribución Novel
de contenidos Linux más grande del skolelinux.org). Skole Linux es una dis- 1. SkoleLinux 31.9 %
2. Ubuntu Linux 21.6 %
mundo, le pidió a célebres represen- tribución especialmente diseñada para
3. UserLinux 19.8 %
tantes del mundo del código abierto, a su uso en escuelas. En la misma cate-
Mejor Distribución para Principiantes
protagonistas Linux del mundo empre- goría, Ubuntu Linux (http://www. 1. Suse Personal/Professional 47.4 %
sarial y a miembros de nuestro propio ubuntulinux.org) mereció una mención 2. Fedora Core 18.1 %
equipo de editorial que votaran por honorífica. El jurado preve una cada vez 3. Mandrake Linux 17.2 %
proyectos y organizaciones que creyesen mayor popularidad de Ubuntu Linux, Mejor Infraestructura Multimedia
que merecían ser reconocidos por sus una distribución basada en Debian espe- 1. Jack 20.2 %
2. GStreamer 17.5 %
3. SDL 16.7 %
Mejor Reproductor de Medios
1. MPlayer 29.8 %
2. Xine/Kaffeine 25.8 %
3. XMMS 23.4 %
Mejor Cliente de Correo
1. Mutt 23.7 %
1. Kontact/KMail 23.7 %
2.Thunderbird/Mozilla Mail 22.9 %
3. Evolution 22.1 %
Mejor Sistema de Bases de Datos
1. PostgreSQL 8 48.7 %
2. MySQL 5.0 37.0 %
3. Oracle 10g 5.9 %
Galardón Especial para la Promoción Sobresaliente de
Linux y el Código Abierto
Institución/Organización
1. Eurolinux/FFII 23.1 %
2. Free Software Foundation 16.2 %
3. City of Munich 13.7 %
Figure 1: Ganadores y miembros del jurado en el escenario de los Galardones Linux New Media. 3. Groklaw 13.7 %

6 Número 02 www.linuxmagazine.com.es
Premios Linux New Media NOTICIAS

cialmente diseñada para ser amistosa proyecto como Mejor Proyecto Libre aspiran a suministrar un extenso soporte
con los nuevos usuarios. El proyecto lo para Soporte de Hardware. de hardware. Este año, también hubo
desarrolla un equipo liderado por el ex- una dura competencia en la categoría de
CEO de Thawte, el sudafricano Mark Bajo la Capota Mejor Proveedor de Portátiles. Apple fue
Shuttleworth. Casi la mitad de los Menos visible, pero igual de vital es el la ganadora la anterior edición por un
miembros del jurado votaron por Suse soporte ACPI. El proyecto ACPI4Linux, puñado de votos, pero este año, los dis-
Linux en la categoría de Mejor http://acpi.sourceforge.net, ha desembo- positivos móviles de IBM le ha ganado la
Distribución para Principiantes. La cado en mucho trabajo duro pero poco partida, siendo el segundo lugar para el
empresa Suse, basada en Nuremberg, renombre para los miembros del proyec- PowerPC portátil.
tiene una enorme aceptación, que no se to. El jurado premió a los esfuerzos del
ha visto afectada por su absorción por equipo con el segundo premio en el En Contra de las Patentes de
parte de la empresa especialista en apartado de Mejor Proyecto Libre para Software
redes, Novell. Esto explica el porqué Soporte de Hardware. El tercer lugar lo Eurolinux/FFIII (http://www.eurolinux.
Suse batió por goleada al segundo y ter- ocupan dos proyectos empatados: http:// org) recibió un galardón por su batalla en
cer contendientes, Fedora Core 2 y fy.chalmers.se/~appro/linux/DVD+RW/ contra de las patentes de software. Los
Mandrake, respectivamente. Las asom- y Growisofs para el soporte de DVD miembros de Eurolinux hicieron cam-
brosas capacidades de X.org (http:// http://ndiswrapper,sourceforge.net. Le paña a lo largo de todo el año, organizan-
www.x.org), el sucesor de XFree86, competencia feroz en esta categoría do eventos y recogiendo firmas en contra
resultaron obviamente prometedoras demuestra como el movimiento del soft- de la patentabilidad del software, proce-
para la mayoría del jurado que eligió el ware libre tiene muchos proyectos que sos comerciales y algoritmos. ■

Jurado Galardones 2004


Este año el jurado estaba compuesto de del Apache Software Foundation. Lars ha Frauke Oster es una miembro del equipo de
miembros de la comunidad,representantes escrito varios libros sobre el servidor web desarrollo de KDE, donde se concentra princi-
de la industria,el comité de programas de Apache y en la actualidad trabaja como palmente en Kivio y proyectos de mujeres en
Linux World Expo y expertos de la industria TI. Consultor TI Senior. KDE.
Claro que los galardones de Linux New Media Hong Feng es un impulsor de la propagación Rafael Peregrino da Silva se trasladó desde el
no merecerían tal nombre sin la participación del software libre en China. fabricante de hardware Cyclades a Linux
en el jurado del equipo editorial de Linux Magazine do Brasil, del que ahora es el direc-
Jutta Horstmann es administrador de sis-
Magazine y cinco de las revista en lengua no tor.
temas especialista en bases de datos que
inglesa publicadas por Linux New Media. Este
investiga la usabilidad de aplicaciones en Christian Perle es un desarrollador en
año,los votación se llevó a cabo en un proceso
Relevantive AG. Secunet AG.También mantiene la instalación
de dos fases orientado a seleccionar can-
Miguel de Icaza es el fundador del proyecto minimalista HAL91 y escribe de manera
didatos que habían demostrado una mayor
Gnome y de la empresa de código abierto habitual para LinuxUser.
actividad y originalidad en los pasados 12
meses. Más de cien personas participaron Ximian. Chris Schläger es el director de
como jurado. Entre ellos,destacamos: Klaus Knopper es el hombre tras el Knoppix desarrollo de Suse Linux y
Live CD, el cual ha dado a muchos usuarios desarrollador KDE de primera
Elisabeth Bauer, un miembro del equipo edi-
su primera experiencia con Linux y ha gen- generación.
torial de EasyLinux (EasyLinux es una publi-
cación en alemán orientada hacia usuarios erado una gran variedad de nuevos proyec- Franz Schmid es un autodidacta en el mundo
noveles de Linux). tos. de la programación y empezó el proyecto de

Zack Brown. Zack ha seguido las discusiones Marc Lehmann es un desarrollador senior de autoedición Scribus.
llevadas a cabo en las listas de discusión del GCC y un impulsor del software libre. Richard Seibt fue el director de marketing y
kernel durante años y a menudo informa a Jörg Luther es un periodista especializado en ventas del departamento de software de IBM
los lectores de Linux Magazine de lo que des- temas de tecnología que ha trabajado para Alemania, Austria y Suiza. En la actualidad, es
cubre. Internet World y Tecchannel.de. el responsable de Novell Europa.
Eva Brucherseifer,desarrolladora y vicepresi- Martin Michlmayer es el líder Marcelo Tosatti trabaja en la actualidad
denta de KDE e.V. del Proyecto Debian. En gen- para Cyclades. Marcelo se convirtió en el
Simon Budig,desarrollador senior de The eral se dedica a la divulgación mantenedor del Kernel 2.4 a la edad de 18
GIMP. del software libre y con- años.
tribuye en multitud de proyectos en su tiem- Andrew Tridgell proviene de Australia y es
Alan Cox es un desarrollador
po libre. fundador del proyecto Samba, el cual ha ayu-
del kernel Linux de primera
generación que ha vuelto a Arturo Fernández Montoro es un desarrol- dado a que se establezcan servidores Linux
dedicarse a la programación lador web y autor freelance para varias publi- en redes Windows.
del kernel después de un año dedicado a con- caciones de Linux. Oliver Zendel es el presidente de Linuxtag
centrarse en sus estudios. Christian Ney es un administrador Unix y de e.V., una organización sin ánimo de lucro que
Lars Eilebrecht es un evangelista del código cortafuegos que ha contribuido a muchos organiza el mayor evento Linux de toda
abierto y uno de los miembros fundadores proyectos de código abierto. Europa.

www.linuxmagazine.com.es Número 02 7
NOTICIAS Inseguridades

Inseguridades
cubierto diversos pequeños errores rela-
cionados con el sistema de bases de
datos MySQL, algunos de los cuales
plantean potenciales agujeros de seguri-
dad. El proyecto de Vulnerabilidades y
Exposiciones Comunes ha asignado los
■ MySQL mysql_real_connect. Para poder explotar nombres (Common Vulnerabilities and
MySQL es un servidor de bases de datos este problema, un atacante tendría que Exposures o CVE - http://cve.mitre.org)
multi-usuario y multi-hebra. Se han forzar el uso de un servidor DNS mali- CAN-2004-0381, CAN-2004-0388, CAN-
informado de varios problemas de cioso (CAN-2004-0836). Dean Ellis des- 2004-0457 a estos problemas de seguri-
seguridad que afectan al paquete mysql- cubrió que múltiples hebras que dad de MySQL. 6 ■
server. Oleksandr Byelkin descubrió que ALTERasen el mismo (o diferentes) Referencia Gentoo: GLSA 200410-22/
el “ALTER TABLE … RENAME” compro- tablas MERGE para cambiar la UNION, MySQL
baba los derechos CREATE/INSERT de la podrían provocar un cuelgue o parada Referencia Mandrake: MDKSA-2004:119
antigua tabla, en vez de los de la nueva. del servidor (CAN-2004-0837). Sergei Referencia Red Hat: RHSA-2004:569-1
El proyecto de Vulnerabilidades y Golubchik descubrió que si a un usuario
Exposiciones Comunes (Common se le otorgaban privilegios para un base ■ IPtables
Vulnerabilities and Exposures o CVE - de datos cuyo nombre contuviera un Fahem Mitha informa de que la instruc-
http://cve.mitre.org) ha asignado el guión bajo (“_”), también adquiría la ción iptables, una herramienta de
nombre CAN-2004-0835 a este problema. habilidad de ceder privilegios a otras administración para el filtrado de paque-
Lukas Wojtow descubrió una sobrescrit- bases de datos con nombres similares tes IPv4 y NAT, no siempre cargaba los
ura de búfer en la función (CAN-2004-0957). También se han des- módulos requeridos por sí mismo, tal y
como debería hacer. Esto podría conlle-
Políticas de seguridad de la Distribuciones Mayoritarias var a que las reglas de un cortafuegos no
Distribuidor Fuente Seguridad Comentario se cargasen en el arranque del sistema.
Debian Info:http://www.debian.org/security/ Los avisos de seguridad actuales se in- Esto provoca un fallo en la conexión con
Lista:http://www.debian.org/debian-security-announce/ cluyen en la página de inicio. Los avisos reglas suministradas al menos por
Referencia:DSA-…1) se proveen como páginas HTML con lokkit. Se recomienda a los usuarios que
enlaces a los parches. Los avisos también
incluyen una referencia a la lista de
actualicen su versión de iptables. ■
correo. Referencia Debian: DSA-580-1 iptables
Gentoo Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para Referencia Mandrake: MDKSA-2004:125
Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de Referencia Suse: SUSE-SA:2004:037
Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la
Referencia:GLSA:… 1) página principal. Los avisos se presentan
en HTML con códigos para fusionar las ■ Apache
versiones corregidas. El servidor HTTP Apache es uno de los
Mandrake Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web más populares servidores web en
Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionadas con
Internet. mod_include es un módulo
Referencia:MDKSA:… 1) la seguridad. Entre otras cosas,incluye
de avisos seguridad y referencias a las Apache que maneja inclusiones por el
listas de correo. Los avisos son páginas lado del servidor (SSI). Existe un posi-
HTML,pero no contienen enlaces a los ble desbordamiento de búfer en la fun-
parches.
ción get_tag() de mod_include.c. Si las
Red Hat Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad
Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A
inclusiones por el lado del servidor
Referencia:RHSA-… 1) continuación los problemas para cada están habilitados, un atacante local
versión de Red Hat se agrupan. Los avisos podría ser capaz de correr código arbi-
de seguridad se proveen como una trario con los derechos de un proceso
página HTML con enlaces a los parches.
Slackware Info:http://www.slackware.com/security La página de inicio contiene enlaces al
hijo httpd haciendo uso de un docu-
Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. mentos especialmente manipulado con
Referencia:[slackware-security]… 1) No existe información adicional sobre SSI malformado. También se ha descu-
seguridad en Slackware. bierto un desbordamiento de búfer
Suse Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de
basado en pila en mod_proxy. mod_ssl
security/index.html seguridad tras un remodelado en el sitio
Parches:http://www.suse.de/en/private/ web de SuSE. Existe información en la has sido actualizado de la versión
download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de mod_ssl2.8.19-1.3.31 a la versión
Referencia:SUSE-SA… 1) seguridad para versiones individuales de 2.8.21-1.3.32, lo que corrige un fallo
SuSE Linux se muestran de color rojo en el
que permitía a un cliente usar un cifra-
sitio de actualizaciones generales.
Contiene una corta descripción de la do que el servidor no considera lo sufi-
vulnerabilidad que el parche soluciona. cientemente seguro. También existe un
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
nuevo paquete PHP (php-4.3.9) para

8 Número 02 www.linuxmagazine.com.es
Inseguridades NOTICIAS

todas estas plataformas. Se pueden con- Referencia Slackware: SSA:2004-305-02 conectar con la compartición Samba se
sultar más detalles sobre estos proble- Referencia Suse: SUSE-SA:2004:038 escribe en el fichero de registro de
mas en la base de datos del proyecto de errores. Un usuario local que tenga per-
Vulnerabilidades y Exposiciones ■ Squid misos de lectura de este fichero de reg-
Comunes (Common Vulnerabilities and Squid es un cache de proxy web con istro de errores podría cosechar estos
Exposures o CVE - http:// muchas prestaciones. iDEFENSE nombres de usuario y contraseñas. El
cve.mitre.org). Véase CAN-2004-0492 y Security informa de un fallo en el módu- proyecto de Vulnerabilidades y
CAN-2004-0885. ■ lo de SNMP de squid. El proyecto de Exposiciones Comunes (Common
Referencia Gentoo: GLSA 200411-03/ Vulnerabilidades y Exposiciones Vulnerabilities and Exposures o CVE -
apache Comunes (Common Vulnerabilities and http://cve.mitre.org) ha asignado el
Referencia Mandrake: MDKSA-2004:122 Exposures o CVE - http://cve.mitre.org) nombre CAN-2004-0923 a este problema.
Referencia Slackware: SSA:2004-305-01 ha asignado el nombre CAN-2004-0918 a ■
este problema. ■ Referencia Debian: DSA-581-1 xpdf
■ ImageMagick Referencia Debian: DSA-576-1 squid Referencia Mandrake: MDKSA-2004:116
ImageMacgick(TM) es una herramienta Referencia Gentoo: GLSA 200410-15/ Referencia Red Hat: RHSA-2004:543-15
de manipulación de imágenes para el sis- squid Referencia Suse: SUSE-SA:2004:039
tema X Windows. Se ha descubierto un Referencia Mandrake: MDKSA-2004:112
fallo de desbordamiento de pila en el Referencia Red Hat: RHSA-2004:591-04 ■ webmin
manejador de imágenes de webmin es un kit de herramientas de
ImageMagick. El proyecto de ■ Gaim administración basadas en web. Ludwig
Vulnerabilidades y Exposiciones La aplicación gaim es un cliente de men- Nussel ha descubierto un problema
Comunes (Common Vulnerabilities and sajería instantánea multi-protocolo. Se cuando un directorio temporal se utiliza
Exposures o CVE - http://cve.mitre.org) ha descubierto un desbordamiento de pero no se comprueba el dueño previo.
ha asignado el nombre CAN-2004-0827 a búfer en el manejador del protocolo ■
este problema. ■ MSN. El proyecto de Vulnerabilidades y Referencia Debian: DSA-544-1
Referencia Gentoo: GLSA 200411-11/ Exposiciones Comunes (Common Referencia Mandrake: MDKSA-2004:101
imagemagick Vulnerabilities and Exposures o CVE -
Referencia Red Hat: RHSA-2004:466-12 http://cve.mitre.org) ha asignado el ■ KDE
nombre CAN-2004-0891 a este problema.
■ Libtiff Los paquetes actualizados gaim también KDE es un entorno de escritorio para sis-
libtiff es utilizado por visualizadores de arreglan errores en el interfaz de usuar- temas Unix y Linux.
imágenes y navegadores web para ios múltiples, de protocolos y de manejo La integridad de los enlaces simbólicos
mostrar imágenes “TIFF”. Chris Evans de errores, incluyendo un problema con utilizados por KDE no se pueden asegu-
descubrió varios fallos de seguridad la codificación de comunicación ICQ. ■ rar y. como resultado, pueden ser abus-
durante una auditoría de la librería de Referencia Gentoo: GLSA 200410-23/gaim daos por atacantes locales para crear o
manipulación de imágenes libtiff, Referencia Red Hat: RHSA-2004:604-05 truncar ficheros arbitrarios o evitar que
algunos relacionados con desbordamien- Referencia Slackware: SSA:2004-239-01 aplicaciones KDE funcionen correcta-
tos de búfers, otros relacionados con des- mente (CAN-2004-0689).
bordamientos de enteros y similares. ■ CUPS Konqueror permite a sitios web cargar
Este problema se sigue en CVE ID CAN- El Common UNIX Printing System páginas web en un marco de cualquier
2004-0803. Matthias Claasen encontró (Sistema de Impresión Común UNIX o otra página basada en web que el
una división por cero en libtiff. Este CUPS) es una cola de impresión. Durante usuario pudiera tener abierto. Konqueror
problema tiene su seguimiento en CVE una auditoría de código fuente, Chris también permite establecer cookies para
ID CAN-2004-0804. Otras auditorías lle- Evans descubrió una serie de errores de ciertos dominios nacionales de primer
vadas a cabo por Dmitry Levin expuso desbordamiento de entero que afectan a nivel. Todos aquellos dominios
varios otros desbordamientos de enteros, xpdf. El proyecto de Vulnerabilidades y nacionales de primer nivel que utilizan
el seguimiento de los cuales se lleva a Exposiciones Comunes (Common más de dos caracteres en la parte secun-
cabo en CVE ID CAN-2004-0886. Vulnerabilities and Exposures o CVE - daria del nombre de dominio se encuen-
iDEFENSE Security descubrió un desbor- http://cve.mitre.org) ha asignado el tran afectados, al igual que aquellos que
damiento de búfer en el manejo que nombre CAN-2004-0888 a este proble- utilizan una parte secundario que no sea
hace el paquete libtiff de OJPEG (old mas de seguridad. Cuando se configura uno de los siguientes: com, net, mil, org,
JPEG) bajo SUSE. Esto se arregló desha- para imprimir en una impresora compar- gove, edu o int (CAN-2004-0746 y CAN-
bilitando el soporte pare old JPEG y se tida a través de Samba CUPS se autentifi- 2004-0721) ■
realiza un seguimiento del problema en ca con esa impresora compartida uti- Referencia Debian: DSA-539-1 kdelibs
CVE ID CAN-2004-0929. ■ lizando un nombre y una contraseña. Referencia Mandrake: MDKSA-2004:086
Referencia Mandrake: MDKSA-2004:109 Por defecto, el nombre de usuario y la Referencia Slackware: DSA-539-1 kdelibs
Referencia Red Hat: RHSA-2004:577-16 contraseña utilizadas por CUPS para - directorio vulnerabilidades temporal

www.linuxmagazine.com.es Número 02 9
NOTICIAS Negocios

Negocios
■ IBM Vende Ordenadores
Personales
Pues valiente novedad. Sin embargo, no
es lo que parece: lo que de verdad ocurre
es que el Gran Azul vende su división de
ordenadores personales a un antiguo
■ Ballmer: Linux Infringe 228 este tipo de cifras reconocerá como de competidor, Lenovo, una empresa china,
patentes… o no aburridamente rutinarias las cantidades fabricante de informática de consumo.
Y es que este hombre da más juego que citadas para software de esta envergadu- ¿El precio? No te molestes en romper la
un tonto con una tiza (o que SCO, que ra. Además” añade Ravicher “de hucha para intentar mejorar la oferta:
para el caso, es lo mismo). En una con- momento no ha habido ni un sólo pro- 1,75 mil millones de dólares. Con la com-
ferencia pronunciada el pasado noviem- grama de código abierto que ha sido lle- pra de la división de PCs de IBM, Lenovo,
bre ante la cumbre de Líderes vado a juicio por infracción de patentes”. que controlaba del 2,2 % del mercado
Gubernamentales Asiáticos (evento Cosa que Ballmer no puede decir de sus mundial, pasa a poseer el 7,7 %, con-
patrocinado por Miscrosoft), Ballmer productos. Según Con Zymaris, CEO de solidándose como el tercer proveedor de
dijo: CyberSource, un empresa australiana ordenadores personales, por detrás sólo
“Hubo un informe este verano de especialista en soluciones Linux, de Dell y HP. La historia de Lenovo,
un grupo de código abierto que “Microsoft se enfrenta a entre 30 antiguamente Legend, parece calcada a
subrayaba el hecho de que y 35 acciones judiciales. Para las historias de éxito de la industria TI
Linux viola 228 patentes. mencionar unos pocos, se le americana: En vez de un humilde garaje
Algún día, […] alguien ven- ha condenado a Microsoft a en un campus de Berkeley, los fun-
drá en busca de dinero para pagar 521 millones de dólares
pagar los derechos de patentes a Eolas por infracciones
para toda esa propiedad intelec- encontradas en Internet
tual”. Explorer, 440 millones a InterTrust
La primera incorrección es que su Technologies Corp. por infracciones a
fuente (un informe del Open Source Risk patentes de administración de restri-
Managment) no cita 228, sino 283. cciones digitales y 1,6 mil millones como
Mucho peor ¿no? El problema es que el compensación a Sun en un pleito anti-
estudio no dice que Linux viola esas monopolio”. Saquen sus calculadoras: dadores de Lenovo empezaron su aventu-
patentes, sino que “podría potencial- más de 2 mil millones de dólares por ra en una pequeña caseta en el campus
mente violar” 283 patentes. Y precisa- sólo tres casos. Si además tenemos en de Beijing. Lenovo empezó como dis-
mente aquí está el quid de la cuestión. cuenta que los casos contra Microsoft se tribuidor de terceros, precisamente de los
Dan Ravicher, autor del estudio, alega incrementan a diario, como hace notar que ahora conforman uno de sus may-
que el propósito del informe era precisa- Zymaris, “hasta su depósito de efectivo ores competidores: Hewlett Packard. Y
mente el contrario para el que el CEO de [valorado en 50 mill millones de dólares] fue gracias a una temprana estruc-
Microsoft lo ha (mal)utilizado. No se empieza a parecer insuficiente”. ■ turación de una red de ventas como llegó
pretendía extender FUD (Fear, http://www.osriskmanagement.com/ a las cimas del éxito. ■
Uncertainty and Doubt) sino más bien pdf_articles/OSRMMSStatement.pdf http://www.lenovogrp.com/cgi-bin/main.
exorcizarla. Ravicher declara: http://asia.cnet.com/news/software/ cgi?section=press&sub_section=200412
“Cualquiera que esté familiarizado con 0,39037051,39202293,00.htm. 08_r1_content

■ Ballmer vs. Novell


Lo que va camino de convertirse en el dios independientes, pues digo que amientos que le han llevado a esta con-
segundo culebrón Linux y que Novell parece haber convertido la se- clusión con datos extraídos de estudios
podríamos titular “Pobre CEO”, “Los cción “anti-Get the Facts” en algo per- independientes y, en algunos casos,
Ricos También Flamean” o “Cristal” manente, o si no sírvanse visitar el incluso de los mismos informes en los
(por lo de las Ventanas) , tiene nuevo enlace al pie de esta pieza. Con el título que se basó Microsoft para su campaña
capítulo. Si bien el mes pasado, Novell “Toda la Verdad” y con el lema de “Get The Facts”. Todo ha de tomarse
“se limitó” a publicar una nota de pren- “Restore”, Novell revela en detalle todo con cierto escepticismo, por supuesto,
sa (bastante vitriólica, eso sí) negando lo que Microsoft decide ignorar, omitir o ya que al final de cuentas hablamos de
punto por punto las aseveraciones que directamente ocultar a los usuarios y una empresa que trata de vender su pro-
hacía Steve Ballmer, CEO de Microsoft, potenciales compradores. Novell plantea ducto estrella: SuSE Linux. Pero es
en un mensaje de correo electrónico a sin ninguna clase de titubeo la creencia refrescante de todas maneras. ■
clientes, reales y potenciales, y dis- de que Linux es superior en todos los http://www.novell.com/es-es/linux/
tribuidores y basadas en supuestos estu- sentidos a Windows y apoya sus razon- truth/

10 Número 02 www.linuxmagazine.com.es
Introducción

El ordenador doméstico ideal

Un Sistema Perfecto
Una caja de un ordenador estándar de color beige puede que esté muy bien para la sala de servidores, pero cuando llega

el momento de diseñar una equipo para casa, hay que pensar en la elegancia. Es muy probable que se pase muchas

noches agradables con el ordenador en casa y tal vez sea el momento de darle un poco de glamour a tu equipo

POR JOHN SOUTHERN

N
o vale la pena gastarse los ahor- informática no se puede permitir. Pero, ital para sacarle unas fotos. La próxima
ros de toda una vida en la lo que puede ser incluso más importante vez que tus amigos se dejen caer por tu
decoración del hogar ideal si no es el nivel de molestia proporcionada casa, esperando ver una caja beige en el
se piensa en un presupuesto para el que pronto nos confrontará debido a los salón, muéstrales tu nuevo equipo de
ordenador personal. Que nuestros ami- ruidosos ventiladores que se encuentran diseño y observa
gos admiren la decoración, pero que en la mayoría de los PCs.El ruido puede como se ponen
comentan lo feo que es nuestro orde- suponer la diferencia entre un sistema verdes de
nador es algo que cualquier usuario de con encanto a uno que da espanto.Nos envidia.■
pusimos manos a la obra para averiguar
como se puede producir un PC poco rui-
EN PORTADA doso, si no completamente silencioso,
La Impresora Perfecta ..............12 máxime si tenemos en cuenta que la
Todo lo que se necesita saber antes de com- polución sonora puede tener efectos
prar una impresora, ya sea para casa o para negativos en la salud. Probamos las
la oficina. Qué se necesita tener en cuenta,
mejores opciones en nuestros laborato-
qué es lo más adecuado y qué opciones exis-
rios Linux, para darles a nuestros
ten para asegurarnos de una perfecta
lectores la oportunidad de elegir las
compatibilidad con Linux.
mejores propuestas. También estudi-
PCs Sileciosos................................18 amos en profundidad los
Vemos los mejores componentes que se
complementos que se vayan a
pueden comprar para acallar el ruido que
añadir al equipo. El primer
arma un PC convencional, con la intención
periférico que habitual-
de crear un PC lo bastante silencioso como
para que vaya en el salón. Acalla ese venti- mente se compra es una
lador, silencia el disco duro. No quieres que impresora. No todas las
un ordenador turbe la paz de tus ratos de impresoras cuestan lo
ocio. mismo ni ofrecen las
Cámaras Digitales .....................23 mismas funciones.
A medida que las cámaras digitales con- Este mes presenta-
tinúan ganándole la batalla a las cámaras mos la guía
convencionales de antaño, existe una mayor definitiva para la
necesidad de integrarlas con nuestro sis- compra de un
tema operativo favorito. En este artículo impresora para un
vemos como se hace. equipo Linux. La guía
Tostadores de DVDs .................29 contempla desde las
Vale, así que tenemos un PC silencioso, grandes impresoras láser en
impresora para las fotos y cámara para color que se encuentran en
tomar instantáneas… Pero ¿que hacemos talleres de diseño gráfico, hasta
con las películas que grabamos de la tele? económicas impresoras de inyec-
Pues tostarlas a DVD, por supuesto. Sin ción de tinta y láser monocromo
embargo, como con todo, esto es más fácil diseñadas para adaptarse a cualquier
de decir que de hacer. En este artículo vemos
presupuesto. Y ahora que tenemos un
las tostadoras que mejor se adaptan a tu
equipo silencioso y una impresora a
superequipo.
juego, sólo necesitamos una cámara dig-

www.linuxmagazine.com.es Número 02 11
PORTADA Impresoras

En busca de la impresora adecuada para usuarios de Linux

Decisiones de
Impresión
La impresora que elijamos dependerá del uso que

hagamos de ella. Los usuarios de Linux basan parte

de su elección en el tipo de soporte que el sistema

operativo provee para su modelo de impresora. Este

artículo proporciona información útil y una guía en

la que basar nuestra decisión.

POR TILL KAMPPETER

L
os mostradores de las tiendas de mucho más alto, especialmente si uti- menos el mismo nivel de funcionalidad
electrónica está llenos de impreso- lizamos papel fotográfico. Si para modelos PostScript que en Win-
ras para diversas tareas. Desde necesitamos imprimir mucho texto y dows NT.
baratas impresoras de inyección de tinta ocasionalmente una copia a color puede El soporte PCL no está tan avanzado
por menos de 50 dólares hasta láser de que incluso debamos considerar com- pero al menos podemos garantizar que
alto nivel y plotters de gran tamaño que prar dos impresoras: una láser una impresora basada en PCL imprimirá
fácilmente pueden costar miles de monocromo y una de inyección con bajo Linux. También nos permitirá con-
dólares, las opciones parecen infinitas. color. Esto mitigará el impacto de los trolar la configuración básica de la
¿Cuál de esas impresoras es la opción costes de utilización de la impresora de misma, como la resolución o el tamaño
adecuada para los usuarios de Linux? inyección. del papel. Funciones especiales como las
La primera cuestión que nos debemos La parte más difícil respecto a comprar selección de la bandeja, el modo de
plantear no tiene nada que ver con el sis- una impresora es encontrar un modelo ahorro de toner o el suavizado de
tema operativo. Los criterios más con soporte Linux para todas las utili- fuentes puede que no estén disponibles
importantes deben ser lo que pre- dades de que disponga. Esto dependerá con controladores Linux estándar.
tendemos imprimir y los volúmenes de de dos cosas: en primer lugar, el lenguaje
impresión que esperamos. de las descripción de la página que la PostScript y PPDs
Las impresoras láser son rápidas y impresora utiliza, y en segundo lugar, Los fabricantes de impresoras PostScript
producen copias de alta calidad pero no que tipo de soporte Linux ofrece el fabri- proporcionan habitualmente un PPD con
imprimen con buena calidad las cante u otros proveedores (como un el controlador de MS Windows y Mac OS.
fotografías. Son bastante caras en espe- proyecto libre). El PPD incluye comandos PostScript o
cial si necesitamos color. En el otro lado PJL codificados para cada una de las util-
de la balanza el precio de manten- Postscript y PCL idades especiales del dispositivo, como
imiento y el del precio por copia es Una cosa esta clara desde el principio: la impresión a dos caras, selección de
razonablemente bajo. Por otro lado, las Linux siempre ofrecerá soporte completo bandeja o incluso el grapado y agu-
impresoras de inyección de tinta son para dispositivos PostScript. Por jereado. Estos códigos necesitan estar
mucho más baratas en términos de supuesto esto supone que el fabricante integrados en el archivo de la impresora
inversión inicial, siendo muchas de no ha escondido los comandos para para permitir el acceso a las opciones de
ellas capaces de producir fotografías acceder a las utilidades bajo un contro- la tarea cuando estas sean analizadas
con calidad similar a la de los laborato- lador DLL de Windows sino en un gramaticalmente por el intérprete. Antes
rios. archivo ASCII PPD (PostScript de del sistema de impresión común de Unix
Desafortunadamente son mucho más descripción de impresión) [1] como (CUPS) se estableció como el estándar
lentas y el coste por copia impresa es requiere el estándar. Esto garantiza al para Linux, los archivos PPD eran igno-

12 Número 02 www.linuxmagazine.com.es
Impresoras PORTADA

rados habitualmente. Los archivos CUPS


pueden gestionar los archivos nativos de
descripción de impresoras, mientras que
otros sistemas de impresión mediante
almacenamiento temporal (spooling)
usan el filtro Foomatic RIP para analizar
la información en el PPD. Esto significa
que existe un soporte completo para
impresoras PostScript en Linux.
No obstante nos debemos asegurar de
que el intérprete PostScript está real-
mente integrado en el hardware del
dispositivo en lugar de en una he-
rramienta de emulación basada en
Windows.

PCL y PJL
Los comandos específicos PCL para
impresoras se implementan principal-
mente como comandos PJL (lenguaje de
tarea de impresión). PJL es un estándar Figura 1: Linuxprinting.org es el sitio ideal para ir si estamos teniendo dificultades imprimiendo bajo
de facto. No siempre es posible hacer Linux.
que nuestra impresora hable PJL. Las
impresoras habitualmente se ciñen Podemos comprobar la base de datos La mayoría de las impresoras sin Post-
estrictamente a las secuencias de escape Foomatic en [3] para encontrar si una Script de HP usan el controlador propio
y comandos de PCL. En este caso solo impresora tiene soporte en Linux. La libre de HP HPIJS [5]. Este controlador
podemos esperar que el fabricante pro- base de datos tiene una lista con todas soporta la mayoría de las características
porcione documentación útil o que un las impresoras conocidas e indica como de los dispositivos HP, como la impre-
desarrollador curioso haya analizado la se comportan con Linux. Este artículo sión duplex, selección de bandeja y la
alida del controlador Windows y haya incluye una pocas de recomendaciones impresión a seis tintas. La calidad de
encontrado como controlar la impresora. para varios tipos de impresoras y cate- fotografías y textos es impresionante,
No obstante hay algunos modelos que gorías de precios. especialmente en modelos más nuevos.
implementan soporte PCL sólo por No obstante el controlador no dispone
razones de compatibilidad con programas Inyección de Tinta a Color de opciones para un control más deta-
DOS usando el controlador Windows para Al margen del gran número de fabri- llado.
hacerlo. El programa DOS envía PCL al cantes de impresoras de inyección de Las impresoras de otros fabricantes
controlador y el controlador convierte tinta, solo hay dos cuyas impresoras deben ser evitadas. Puede que seamos
este código a un mapa de bits propietario. soporten el software Open Source real- capaces de soportar una impresora
En este caso no tiene ningún sentido mente bien: Epson y HP. Las impresoras Canon con la licencia comercial Turbo-
enviar datos PCL a la impresora en Linux. Epson Stylus son una elección particu- print [6] o con una licencia gratuita pero
larmente buena para Linux. propietaria de Canon Japón [7]. La
Protocolos de Alto Secreto Epson desveló información sobre sus página está en Japonés. Simplemente
Hay muchas impresoras que usan protocolos a los desarrolladores Gimp descargamos los RPMs y los instalamos.
lenguajes propietarios o protocolos que Print [4] hace bastante tiempo. Esto per- Algunos modelos tienen nombres dife-
sus fabricantes mantienen en el más alto mite a Gimp Print dar soporte a las rentes en Japón, Europa y Estados
secreto. La mayoría son dispositivos de nuevas impresoras Epson tan pronto unidos. No todos los modelos están
bajo coste, pero hay algunos que en rea- como son lanzadas al mercado. Gimp soportados.
lidad son bastante caros. Print es software gratuito y proporciona
Si el fabricante no proporciona un con- resultados en color de alta calidad. La Lexmark y Canon
trolador, las impresoras que pertenecen a herramienta dispone de un amplio aba- Lexmark introdujo los primeros contro-
esta categoría son completamente nico de posibilidades de configuración ladores propietarios para algunos modelos
inútiles bajo Linux hasta que un desa- que proporcionan al usuario un amplio hace algunos años. Es difícil hacer que
rrollador independiente encuentre margen desde un buen compromiso esta generación de impresoras funcionen
tiempo para examinar los resultados del entre calidad y velocidad hasta reproduc- con los sistemas modernos. Lexmark ha
controlador Windows y adivine el proto- ciones con calidad fotográfica realista. introducido ahora un nuevo concepto de
colo. Incluso entonces la calidad de los Esto hace de las impresoras Epson una controlador el cual, desafortunadamente,
resultados no suelen llegar al nivel opcón interesante para los fotógrafos afi- también es propietario. Los controladores
alcanzado en Windows. cionados en Linux. son supuestamente capaces de funcionar

www.linuxmagazine.com.es Número 02 13
PORTADA Impresoras

duplex usa la mitad de papel y si


disponemos de cartuchos especiales de
fotografía podemos usar el modo seis
colores para impresión de fotografías.
Podemos añadir una bandeja secundaria
para extender la capacidad de papel
hasta las 400 páginas. HPIJS habilita
todas las características de estas impre-
soras excepto la impresión sin bordes.
Según HP, se está trabajando en la habi-
litación de esta característica.
La mejor impresora portátil del
momento es la HP Deskjet 450 (ver
figura 2). Ofrece a los usuarios móviles
la misma calidad en copias que sus her-
manas de sobremesa e incluso impresión
con seis tintas en modo de ahorro de
batería y todo viene en un formato atrac-
Figura 2:La HP Deskjet 450 es una buena opción para usuarios móviles. Soporte Linux, buena calidad de tivo y compacto.
impresión, impresión en seis colores y sin requerimientos de fuentes de alimentación. Los modelos de la gama HP Business
Inkjet se recomiendan para amplios
con las distribuciones más modernas [8] si gama de precios o los costes de mante- volúmenes de impresión. Estos modelos
bien no hemos sido capaces de confir- nimiento son extremadamente altos son más rápidos y tienen mejores capaci-
marlo hasta ahora. Al margen de un pobre debido al precio de los consumibles. dades de papel y tintas.
soporte de los controladores, Lexmark La mayoría de las nuevas impresoras
también pierde puntos debido al alto pre- Barata pero funciona de inyección de HP nos permiten reem-
cio de sus consumibles. Los modelos básicos de Epson son el C42 plazar el cartucho de tinta negra por un
Solo hay dos o tres proyectos de con- y el C44. Ambos están soportados por cartucho de tinta fotográfica con depósi-
troladores gratuitos para Lexmark y Gimp Print desde su versión 4.2.6. Los tos de tinta negra, cián claro y magenta
canon, pero la funcionalidad que propor- precios de los cartuchos de están en lo claro. Esto permite una calidad de impre-
cionan es restringida por que los más alto de la escala. El modelo C64 es sión de fotografía perfecta. No hay
desarrolladores típicamente no tienen barato pero requiere la versión 4.2.7 o necesidad de modificar el controlador
más alternativa que hacerle ingeniería superior de Gimp Printer. para permitir el modo de impresión de
inversa con la salida del driver propie- Los modelos básicos de HP son las seis tintas. La impresora gestiona el color
tario. Si estas interesado comprueba la Deskjet 33xx, 34xx y 36xx. Estos disposi- internamente.
base de datos de controladores en Linux- tivos usan LIDIL (lenguajes de
printing.org en busca de la información dispositivos de interfaces de imágenes Impresoras Fotográficas
más reciente [9]. Ver figura 1. ligeras). Como HPIJS no soporta comple- La gama Photosmart de HP está especial-
Los controladores para impresoras de tamente LIDIL, estos modelos no pueden mente diseñada para imprimir copias de
otros fabricantes son desconocidos. ser recomendados. Las impresoras PCL imágenes digitales. Casi todos estos
Todos esto no lleva a que debemos optar baratas con soporte HPIJS son las series modelos disponen de un lector de tarje-
por Epson y HP si estamos buscando una 38xx y la Deskjet 5150. tas que permite la impresión directa sin
impresora de inyección de tinta con PC. Las series 100 y 200 son modelos
soporte Linux. HP diseña con el cabezal Impresoras de Sobremesa portátiles que admiten tamaños máxi-
de impresión integrado en el cartucho Robustas mos de papel de 10 x 15 cm. La serie
desechable de tinta y esto es preferible Las mejoras impresoras Epson para 7000 soporta A4 y la 7600 incluso ofrece
en ambientes donde las boquillas tien- cualquier trabajo en papel A4 estándar impresión de ocho colores (negro, gris
den a obstruirse. Por otro lado, Epson son las Stylus C82 y C84 (ver figura 4). medio y claro, cián, magenta, amarillo,
utiliza cabezales piezoeléctricos perma- Disponen de cuatro cartuchos separados cián claro y magenta claro).
nentes: los cartuchos son simplemente para los cuatro colores y proporcionan El controlador de dispositivos multi-
reservas de tinta. Epson también provee copias de alta calidad de texto y funciones propio de HP, HPOJ [10],
tintas especiales para conseguir determi- fotografías. Estos modelos usan tintas permite el acceso al lector de tarjetas en
nados objetivos, tintas en escala de con pigmentos no menguantes. El mo- Linux. Los últimos modelos (14x, 24x,
grises y sistemas de tinta continua. delo C84 necesita la versión 4.2.7 o 72xx, 77xx, 79xx) en realidad usan el
Los usuarios deben ser prudentes con superior de Gimp Print. lector de tarjetas como un dispositivo de
ofertas de bajo coste al comprar impreso- El modelo Deskjet 5625 es nuestra almacenamiento masivo USB.
ras. El soporte es típicamente malo o elección de HP como impresora de inyec- La serie Epson Stylus Photo soporta la
inexistente para las impresoras de esta ción en formato A4. Gracias a su unidad impresión de fotografía. Las impresoras

14 Número 02 www.linuxmagazine.com.es
Impresoras PORTADA

clásicas de seis colores producen copias


excelentes usando Gimp Print. Los mode-
los más nuevos (R200, R300 y R800) no
están soportados todavía, por tanto los
modelos recomendados son el 830U, el
925 o el 950. El 925 dispone de un lector
de tarjetas que puede ser accesible como
un dispositivo de almacenamiento masivo
USB (kernel 2.4.21 o superior) y el 950
tiene seis cartuchos de tinta separados.

Dispositivos Multifunción
Estos incluyen dispositivos que propor-
cionan impresión, escaneado y otras
funciones como fax o lectura de tarjetas,
todo en un único dispositivo. Desafortu-
nadamente ninguno de estos dispositivos
ofrece soporte de fax basado en PC con
software gratuito. La impresión, el
escaneado y la lectura de tarjetas fun-
cionará en todos los dispositivos Epson y
HP con la excepción del Epson Stylus
Photo RX500, si bien se está trabajando
en un controlador de Gimp Print. Los
dispositivos de otros fabricantes impri-
mirán en algunos casos y en otros no Figura 3:La Epson C84 es útil para usos generales de impresión de inyección. Se requiere la versión 4.2.7
harán nada. de Gimp Print para proveer soporte perfecto para Linux.
Los dispositivos HP necesitan un con-
trolador de bajo nivel para acceder a fotográfica disponibles para la serie estándar PCL y/o PostScript por lo que la
todos sus componentes. HPOJ propor- Deskjet 96xx. mayoría de las impresoras funcionarán
ciona un interfaz que acepta tareas de La Epson Stylus Pro puede imprimir perfectamente bien sin necesidad del
impresión, un controlador Sane para el formato DIN A3 sobredimensionado. soporte del controlador nativo.
escáner y acceso al lector de la tarjeta vía Gimp Print gestiona esto sin ningún No obstante hay un gran número de
Mtools [11]. HPIJS se usa como el filtro problema. No obstante los desarro- impresoras (especialmente las de bajo
de la impresora. lladores no fueron capaces de calibrar presupuesto) que usan protocolos propi-
Los dispositivos Epson funcionan correctamente la gestión y optimización etarios y no proporcionan soporte de
como si fueran dispositivos separados de del color para estas series debido a la controladores. Muchos de ellos tienen un
impresión, escaneado y lectura de tarje- falta de máquinas para pruebas. Las sufijo, como “L” para “ligero” al final de
tas. El Sane epson soporta el escaneado y impresoras A1 Stylus Pro 7000 y 7500 sus nombres y la mayoría tienen her-
la lectura de la tarjeta vía almacenaje han sido probadas y proporcionan cali- manas mayores que hablan PCL o
masivo USB. dades similares a sus hermanas PostScript. Debemos asegurarnos de que
Con la excepción de las impresoras pequeñas Stylus Photo. elegimos el modelo de alta gama al com-
“LIDIL”, los modelos PSC 1xxx y los Las Stylus Pro 900 y 9500 son las ver- prar una impresora.
Officejet 4xxx, podemos recomendar siones A0 de la 7000 y deben producir Muchas de las impresoras de bajo
cualquier modelo HP. Los dispositivos también copias de alta calidad. Gimp coste no soportan software libre. De
LIDIL multifunción están parcialmente Print incluso soporta los modelos nuevo, afortunadamente hay una pocas
soportados por HPOJ. Hay que evitar el actuales de las Stylus Pro 7600 y 9600. impresoras PCL y PostScript e incluso
Epson RX800 puesto que Gimp Print no Si decidimos optar por un producto de unos pocos controladores para protoco-
proporciona un controlador para este HP o de cualquier otro fabricante debe- los propietarios. En general debemos
modelo. mos asegurarnos de que sea un modelo comprar una impresora PCL o PostScript.
Si necesitamos imprimir en formato de alta gama con un intérprete de Post- Debemos recordar que muchas impreso-
A3 debemos ver los modelos de cuatro Script basado en hardware. ras láser de bajo coste pierden esta
colores Epson Stylus Color 1160, 1520 y ventaja debido a consumibles caros.
3000 o los modelos de seis colores Epson Láser Monocromo
Stylus Photo 1290(s) y 2100. De HP, La mayoría de los fabricantes de impre- Láser de bajo coste
podemos probar las impresoras CP1700 y soras láser no proporcionan soporte Las impresoras láser Kyocera, con la
las Deskjet 93xx para impresión en cua- nativo para Linux. Afortunadamente la excepción de los dispositivos multifun-
tro colores. Hay cartuchos de de tinta mayoría de modelos usan lenguajes ciones, hablan normalmente PostScript o

www.linuxmagazine.com.es Número 02 15
PORTADA Impresoras

E220 y E321 son buenas opciones de


bajo coste.
Brother principalmente tiene láser PCL
y PostScript y proporcionan soporte
nativo Linux con su propia página de
controladores [13]. Muchas impresoras
Brother que usan protocolos propietarios
Brother funcionan bien, debido a que el
filtro Ghostscript hl7x0 ayuda a producir
buenos resultados. Los módulos de toner
y tambor separado permiten costes de
operación bajos. Los modelos de bajo
coste HL 1430 y HL 5130 son ambas
impresoras PCL5e.
Las impresoras más baratas de Epson
son los modelos del rango EPL “L” (por
ejemplo la EPL 6200L), sin embargo
usan protocolos propietarios. Ver figura
4. Epson no proporciona controladores
Linux y no proporciona ninguna otra
Figura 4: El soporte Linux es cuestionable en impresoras láser de bajo coste de Epson. La Epson información sobre el protocolo. A pesar
EPL6200L solo dispone de soporte parcial puesto que usa protocolos propietarios. de que un proyecto independiente está
trabajando en el desarrollo de un contro-
al menos PCL. Adicionalmente disponen tinta. La mayoría de sus modelos en el lador [14], este rango de impresoras no
de un tambor permanente que tiene el rango Optra hablan o PCL o PostScript. puede ser recomendado.
efecto agradable de ofrecer bajos costes Lexmark dispone de su propio intérprete Siendo el mayor fabricante del mundo
de impresión por página. Los modelos de y esto permite incluso a las Optras de de impresoras láser, HP dispone de un
Kyocera FS-1010 y FS-1020D hablan Post- bajo coste hablar PostScript. amplio abanico de impresoras PCL y
Script, y la FS-1020D dispone además de La página Web de Lexmark indica la PostScript. HP usa el controlador HPIJS
unidad duplex. compatibilidad Linux de sus modelos y para soportar PCL y proporciona PPDs
Las impresoras láser Lexmark son existe la posibilidad de descargar contro- bajo la licencia gratuita MIY de Post-
mucho más amigables con el software ladores. Los modelos de comienzo Script (e incluso permite su distribución
libre que sus impresoras de inyección de PCL5e (compatible con HP Laserjet 4) a través de Linuxprinting.org[15].
Las impresoras láser más baratas que
proporcionan soporte completo para
software libre son las láser PostScript
LJ1200 y 1300. Los modelos LJ1010, 1012
y 1015 tienden a colgarse debido a pro-
blemas de compatibilidad PCL. Tanto la
HP LasérJet 1000 como la 1005 funcio-
nan con el controlador foo2zjs [16], pero
necesitan cargar un soporte lógico incor-
porado al reiniciarlas. Nuevamente
probablemente es mejor evitar estos
modelos.

Gama Media
El llamado grupo de impresoras de gama
media disponen de motores más rápidos,
puertos de red y son extensibles. Todas
estas impresoras soportan o PCL o Post-
Script y la mayoría de ellas también
soportan PJL. Esto más o menos solu-
ciona los problemas con software libre.
Tanto HP, Kyocera como OCE proporcio-
nan archivos PPD para sus modelos
Figura 5: La Officejet 7130 de HP es un dispositivo multifunción con buen soporte Linux. Incluso PostScript como software libre bajo
podemos utilizar su alimentador de corte de papel.≠ licencia MIT [17]. Epson proporciona

16 Número 02 www.linuxmagazine.com.es
Impresoras PORTADA

controladores gratuitos para sus impre- de cómo una emulación. Los modelos gama alta. Muchas impresoras de gama
soras PCL (las serie EPL sin la “L” al que proporcionan esto son las Kyocera alta comenzaron su vida como foto-
final del identificador del modelo). FS-8000C y la HP Color LaserJet 2500, copiadoras digitales con módulos
Tanto Brother como Lexmark ofrecen 3700 y 4600. Algunos fabricantes dan a adicionales de impresión y escaneado.
descarga de controladores. los usuarios acceso a los controladores Si el escáner ofrece un interfaz Web y
libres como para las Epson Aculaser saca los datos de las imágenes como
Pros y Contras 1900, 200, 400, 8500 y 8600. correos electrónicos, HTTP o FTP
Todos los fabricantes de impresoras trata- podemos escanear con cualquier sis-
dos en este artículo tienen sus pros y sus Impresoras Gama Alta tema operativo. Si no es así la
contras. Lexmark tiene impresoras más La impresión en grandes volúmenes, capacidad de escaneo proporcionada
rápidas y mejores microcódigos que HP al grandes departamentos de empresas o por el dipositivo multifunción no
mismo precio. Los cartuchos de tinta y los que requieren tareas especiales como ta- estará disponible en Linux. ■
tambores de HP se venden normalmente ladrar, grapar o doblar son del dominio
como unidades completas y esto puede típico de impresoras láser de alta gama
suponer costes de operación más altos. con velocidades de hasta 100 páginas por INFO
Los tambores permanentes de Kyocera y minuto o más. Las bandejas de papel
los consumibles separados de Epson y tienen capacidad para más de 2000 pági- [1] Especificaciones en Formato PPD: http://
Brother son más eficientes en costes. Por nas. Vienen con dispositivos adicionales partners.adobe.com/asn/tech/ps/index.
otro lado el hardware de HP tiene la re- que ofrecen encuadernadores con mar- jsp
putación de durar más. cas de encuadernado o capacidades de [2] Tutorial Foomatic: http://tinyurl.com/
Muchas impresoras láser a color de baja doblar, bandeja de correo y preparación 3gf2g
gama o no proporcionan soporte de soft- y acabado de páginas impresas sobre la [3] Base de datos de Foomatic en Linuxprint-
ware libre en ningún caso o este soporte marcha. ing.org: http://www.linuxprinting.org/
está sujeto a limitaciones. Este tipo de Los dispositivos de este tipo normal- database.html
impresoras no está recomendado. La HP mente tienen un intérprete interno de [4] Página Web del proyecto Gimp Print:
Color LaserJet 1500 (el trabajo de desa- PostScript. Funcionan perfectamente con http://gimp-print.sourceforge.net/
rrollar un controlador ha empezado [18]), software libre. Si usamos un archivo PPD [5] Proyecto del controlador HPIJ: http://
la HP LaserJet 3500 y la Epson Aculaser podemos acceder a las mismas opciones hpinkjet.sourceforge.net/
1000 son ejemplos de esto. La Minolta que los usuarios de sistemas Windows y [6] Turboprint, controlador comercial par
Magicolor 2200 DL y 2300 Dl usan ambas Mac. impresoras de inyección: http://www.
protocolos propietarios pero funcionan turboprint.de/english.html
muy bien con el controlador foo2zjs. Comunicaciones vía [7] Controlador para impresoras Canon:
Al margen de esto debemos estar protocolos de Internet http://cweb.canon.jp/drv-upd/bj/
seguros de que PCL o PostScript está Hay una tendencia notable a disposi- bjlinux220.html
implementado en el hardware en lugar tivos multifunciones en modelos de [8] Nuevos controladores Lexmark: http://
support.lexmark.com/en/ldk/index.htm
[9] Base de datos de controladores: http://
www.linuxprinting.org/driver_list.cgi
[10]Controlador HP para lectores de chips de
tarjetas: http://hpoj.sourceforge.net/
[11] MTools:http: //www.tux.org/pub/tux/
knaff/mtools/index.html
[12] Projecto Sane escaner: http://www.
sane-project.org/
[13] Controladores Brother: http://solutions.
brother.com/linux/
[14] Desarrollo del controlador EPL: http://
epsonepl.sourceforge.net/
[15] PPDs para láser de HP: http://www.
linuxprinting.org/download/PPD/HP/
[16]Foo2zjs: http://foo2zjs.rkkda.com/
[17] Descargas PPD: http://www.linuxprinting.
org/download/PPD/
[18] Proyecto para láser de color de HP: http://
www.epkowa.co.jp/english/linux_e/
dl_laser.html
Figura 6: Para altos volúmenes de impresión: Digimaster de Heidelberger. Estos monstruos no tienen
ninguna objeción a ser controlados por ordenadores Linux

www.linuxmagazine.com.es Número 02 17
PORTADA PCs Silenciosos

Diseño y construcción de un PC para el salón.

Ejecución silenciosa
Un ordenador beige, con venti-

ladores ruidosos y descuidadas

ampliaciones difícilmente con-

vencerán a un usuario que busca

una estación multimedia para su

salón o un PC bien diseñado para

un elegante despacho domestico.

Este mes ayudamos al lector a ele-

gir los componentes adecuados

para construir un sistema elegante.


POR MIRKO DOLLEY JOHN

SOUTHERN

L
a mayoría de los ordenadores per-
sonales están en oficinas. No hay
duda sobre esto, las cajas grises,
vulgares y corrientes con sus venti-
ladores ruidosos, suministradas por la
tienda de la esquina, sencillamente no
tienen sitio en el salón. Desde luego, si el
precio es el factor determinante, no
habrá mucho margen para aislar el
ruido, componentes que ahorren electri-
cidad o cajas elaboradas. Dicho esto, hay
una notable tendencia hacia máquinas las que cuente determinaran el grado en este cometido bastante bien, como por
que sean de uso simple y que no hagan que podrá ampliar su máquina en una ejemplo la gama de Shuttle o la EX5-300S
mucho ruido mientras funcionan. Es etapa posterior. Las cajas compactas a de Elito Epox (veasé la Figura 1). Esta
decir, nada que se parezca a un orde- menudo carecen de espacio incluso para ultima se suministra con una placa base
nador corriente. añadir un segundo disco duro. para Pentium 4 realmente adecuada (EP-
Normalmente la elección de los com- 4PGF con chipset Intel i865G), un lector
ponentes estará determinada por el Consolas de Juego de tarjetas de memoria flash, y una pan-
papel que le asigne al ordenador, una Una consola de juegos basada en Linux talla LCD con pulsadores. La pantalla nos
consola de juegos, una estación multi- necesitara un procesador de gran permite reproducir MP3s o CDs incluso
media o una máquina para una oficina rendimiento, un adaptador gráfico 3D con el ordenador apagado. El software
domestica. Elegir la caja correcta es deli- medianamente potente y una tarjeta de está almacenado en un área especial de
cado, especialmente porque su tamaño y sonido de un cierto nivel. Existe un la BIOS y puede ejecutarse pulsando un
el número de bahías de dispositivos con número de sistemas básicos que cumplen botón.

18 Número 02 www.linuxmagazine.com.es
PCs Silenciosos PORTADA

La placa base tiene un chip gráfico


integrado, pero se puede usar el slot AGP
8x para añadir fácilmente otro adaptador
distinto si fuese necesario. El equipo
también dispone de un slot Firewire y un
puerto de red Ethernet. Completa el con-
junto un sistema especial de
refrigeración de 3G-Tek, que es famoso
por ser extremadamente silencioso. El
sistema básico cuesta alrededor de 250€
en su tienda favorita y está a la venta en
[1] entre otros.

Grabadora de vídeo
Los requerimientos de una grabadora de
vídeo son completamente diferentes. El
adaptador gráfico y la velocidad del
disco duro no son demasiado impor-
tantes y es improbable que la CPU tenga
mucho trabajo que hacer. Por otra parte
el estilo de la caja, la capacidad del disco
duro y el nivel de ruido serán factores
decisivos para este equipo. La Travla
c137 (149€) [2], como la mostrada en la
Figura 2, es una solución interesante. La
alimentación es similar a las fuentes de
alimentación de los portátiles y su tarjeta Figura 1:El sistema compacto EX5-300S de Elito-Epox es ampliable con una tarjeta AGP y una tarjeta PCI.
de potencia interna es inaudible en cir- Se puede usar el sistema como un reproductor de discos CD y MP3 aunque el PC este apagado.
cunstancias normales. La placa base
mini ITX Epia ME-6000 de VIA es una producido por el disco duro y otros com- perfectamente adecuado para ejecutar
buena elección ya que el radiador para la ponentes. software de videograbación, aunque la
CPU de 600 MHz queda bajo los agujeros CPU Eden se atraganta con DivX y otros
de ventilación de la caja. Las unidades ¡Levantate! formatos de vídeo. Precisamente por eso
están localizadas en un caballete sobre El hecho de que el equipo utilice refri- Via ha lanzado una versión a 1 GHz con
los slots PCI. Las bahías pueden aco- geración pasiva, proporciona un valor refrigeración pasiva, que permite a los
modar una unidad de perfil estrecho y añadido. Un equipo de escritorio están- usuarios reproducir formatos DivX y
un disco duro de 3,5 pulgadas. El disco dar consume entre 100 y 120 vatios y Quicktime sin ninguna molestia. Hay
duro está montado sobre pasadores de esto puede significar unos costes de que indicar que la caja Travla c137 per-
goma para impedir la transmisión de gasto eléctrico de 150€ al año. Durante mite la utilización de una tarjeta “Riser”
ruido a la caja. Sin embargo, el disco el funcionamiento normal con dos tarje- de Via con 2 slots PCI.
duro seguirá siendo el componente más tas DVB, un disco duro y un lector de
ruidoso del equipo. Aparentemente no DVD de perfil estrecho, el consumo Frontal de Aluminio
habrá problemas de temperatura. La caja eléctrico de el Travla c137 fue alrededor Tenemos un frontal de aluminio solido,
tiene rendijas que, sin la ayuda de venti- de 50 vatios, lo que supone un coste de sujeto en su sitio con cuatro tornillos
ladores, facilitan la disipación del calor menos de 70€ si deja la máquina fun- tipo “allen”, un slot para un lector de
cionando durante todo un año ¡aunque Compact Flash y también el hueco habi-
no hay una verdadera razón para ha- tual para el lector óptico de perfil
cerlo así! estrecho. También hay un pequeño agu-
El kernel 2.4.2x acepta ACPI sobre Via jero para un receptor infrarrojo,
Epia ME-6000 realmente bien, tecleando preferentemente del tamaño de un tran-
echo 2004-01-01 20:15:00 > sistor tipo TSOP 1838. El receptor
/proc/acpi/alarm se le dice al equipo que simplemente se pega a la parte posterior
le levante a las 08:16 pm; sin embargo del panel frontal con un poco de resina
(cuando se escribió esto) el equipo epoxy, o adhesivo térmico. Éste ultimo
Figura 2:La caja Casetronics Travla c137 planta parecía ignorar la fecha, impidiendo a tiene la ventaja de ser más fácil de elimi-
cara fácilmente a los procesadores más ardientes. los usuarios de este método despertar el nar posteriormente, si fuera necesario.
Las rejillas de la tapa favorecen la fácil disipación equipo más de una vez al día. La poten- No es recomendable utilizar cola de con-
del calor. cia del Via Epia ME-6000 es tacto. Entonces conectamos el receptor

www.linuxmagazine.com.es Número 02 19
PORTADA PCs Silenciosos

infrarrojo al segundo puerto serie de la muy bien, pero no con en el ventilador de


placa Epia usando un circuito adaptador la CPU. Los ventiladores pequeños y de
[3,4]. Como alternativa, puede usar el alta velocidad, igual que los de las adap-
conjunto vdronf desde [5], que le permi- tadoras gráficas, son los más molestos de
tirá encender y apagar el ordenador. todos. El Heatlane Zen P4, que también
está disponible en http://www.
Su Propio Equipo Silencioso overclockers.co.uk/ o http://www.
Tampoco hay necesidad de tener un coolerguys.com/ por 80€ usa tuberías de
ordenador ruidoso en su salón, aunque calor y se refrigera pasivamente por el
la solución de auto-construcción es ventilador de 12 cm de la caja. Los irra-
decidídamente más cara que comprar Figura 3: Las tarjetas adaptadoras gráficas 3D con diadores de cobre con grandes
un equipo listo para usar al vendedor de el chipset ATI’s Radeon 7000 pueden ser refriger- ventiladores y control de temperatura
clónicos de la esquina. Una caja com- adas pasivamente, están bien reconocidas bajo están en el mismo rango de precios.
pacta no es lo más indicado para una Linux y ofrecen variedad de conexiones,
máquina con mucho uso y más pronto o incluyendo VGA,DVI, y salida de TV. Tuberías de Calor
más tarde necesitará ampliar el equipo. Las tuberías de calor disipan muy efi-
La caja ST11 de tamaño mini-torre de se incrementa de manera proporcional cientemente y sin ventiladores ni
Silentmaxx [6] es una de las soluciones con la velocidad de reloj. bombas, pero es necesario hacerlas a
posibles. Está disponible en color Ralentizar la CPU, permite ralentizar el medida. No puede doblar o cortar un
blanco, negro y plateado y cuesta ventilador y así se conseguirá un equipo canalizador de calor ya terminado. Por
alrededor de 135€ Las cajas Silentmaxx más silencioso. Dicho esto, no hay una esta razón algunos fabricantes propor-
están acondicionadas con espuma respuesta general a la pregunta de cual es cionan dos o incluso tres canalizadores
acolchada aislante. Un ventilador lento la velocidad de reloj que realmente se de calor conectados a un irradiador de
de 12 cm de diámetro, con control de necesita. 2 GHz es excesivo para el uso cobre. Desgraciadamente, aumentar los
temperatura, está situado al fondo de la de aplicaciones de oficina e Internet, pero acoplamientos reduce el rendimiento de
caja y suministra un flujo constante de si se quiere ver películas en HDTV o jugar la disipación del calor, haciendo difícil
aire. La silenciosa fuente de ali- juegos, simplemente no tendrá suficiente diseñar un sistema en el que pueda con-
mentación, con refrigeración pasiva, potencia. El problema es que los fabri- fiar ¡y que la masilla termoconductora
Fanless 350PCS del mismo fabricante cantes tienden a dejar de suministrar las no pueda mejorar!
cuesta 199,95€ y puede adaptarse para CPU más lentas y antiguas, debiendo El Poweroid 1200 [7] es un ordenador
otras cajas de PC. La fuente de ali- recurrir a un chip usado. Algunas tarjetas completamente silencioso. Posee una
mentación está refrigerada por un le permiten ajustar el reloj manualmente CPU P4 a 3.2GHz y está montado en una
irradiador externo. y así se tiene la posibilidad de hacer fun- caja Zalman Totally No Noise. La tarjeta
Elegir la CPU adecuada es una decisión cionar a 1,6 GHz, o menos, un CPU de gráfica es una GeForce FX5700 de 128
difícil. Las CPUs Pentium de Intel son 2GHz. También hay que resaltar que el MBytes y la placa base es una Asus
apenas más rápidas que los chips Athlon consumo de potencia se incrementará P4C800 Deluxe. Desgraciadamente el
funcionando a la misma velocidad, pero proporcionalmente al cuadrado de la precio de 3650€ quizá sea algo excesiva.
no generan tanto calor. Además, el calor velocidad de reloj. Recortar costes está Solo la caja vale 1200 US$ en los EE.UU

Cómo Montar un PC en la Sala de Estar

Nombre Elito-Epox Casetronic Via Epia Ready made Silentmaxx Silentmaxx


Modelo EX5-300S Travla c137 ME-6000 Receptor IrDA ST11 Fanless 350 PSU
Descripción Sistema básico con Caja Mini ITX con Placa base Mini ITX Receptor InfraRojo Caja minitorre que Fuente de
una placa base para P4 ranuras para disipar con múltiples interfaces con conexión serie. antenúa el ruido. alimentación,
El Panel LCD frontal el calor. y tarjeta riser PCI. Contiene un ventilador sin ventilador,
permite reproducir discos regulado por para PC de 350 W
CD y MP3 cuando la temperatura de 12 cm. de potencia.
máquina está pagada.
URL www.komplett.co.uk. www.mini-itx.com www.mini-itx.com www.intolect.com www.kustompcs.co.uk www.kustompcs.co.uk
www.epox.com http://shop.store. www.axiontech.com www.evation.com www.silentmaxx.net www.silentmaxx.net
www.directron.com yahoo.com/kmexpress www.myelectronics.nl www.zapway.de www.silentmaxx.de www.silentmaxx.de
www.myelectronics.nl
Precio EUR 250 EUR 149 EUR 103 EUR 17.40 EUR 135 EUR 199.95

20 Número 02 www.linuxmagazine.com.es
PCs Silenciosos PORTADA

en http://www.directron.com y 1200€ en también implica un mayor consumo no son demasiado potentes, pero puede
Europa. energético y de este modo mayor disi- ejecutarlos como dispositivo framebuffer
pación de calor. Las adaptadoras gráficas bajo Linux, lo cual es suficientemente
Refrigeración liquida actuales a menudo necesitan tener bueno para procesar textos y navegar por
Lo peor de la refrigeración liquida es acoplada un pequeño ventilador de alta Internet.
tener que preocuparse de que las fugas velocidad para disipar el calor del chip
en el sistema de refrigeración inunden su gráfico. Estos ventiladores muchas veces Discos ruidosos
ordenador. A la luz de los actuales sis- son los ventiladores más ruidosos del Los discos duros con un velocidad de
temas de presilla, con sellado doble, esas ordenador. Si no necesita el rendimiento rotación alta, como 7200 o incluso 10000
preocupaciones son infundadas. Es fácil de una nVidia Geforce 4 o una ATI rpm, no conviene usarlos en los PCs
hacer un corte recto en los tubos e inser- Radeon 9600, puede ahorrarse un venti- para el salón. Estos discos duros se oyen
tarlos en los conectores de la bomba o lador y un montón de dinero. Las con facilidad por encima del ruido de
del bloque de refrigeración. No olvide tarjetas adaptadoras gráficas con el, li- fondo de un PC normal con ventiladores
purgar el sistema, ya sabe eliminar las geramente obsoleto, chip gráfico ATI ruidosos. Hay dos discos de Samsung, el
burbujas de aire del interior del circuito Radeon 7000, pueden funcionar sin SV1604N de 160 GBytes y el SV0802N de
después de rellenarlo. refrigeración activa y tienen potencia 80 GBytes, que son baratos y silenciosos.
El sistema de refrigeración es más o sobrada para Parsec, Quake, y Tuxracer Ambos funcionan a 5400 rpm y cuestan
menos inaudible durante su fun- con una resolución de 1024x768 pixels. 150€ y 60€, respectivamente. Su tem-
cionamiento. Normalmente un cierto La versión de 32 MBytes mostrada en la peratura no tiende a sobrepasar el calor
numero de aletas refrigeradoras con una figura 3 (y disponible en [9]) cuesta del cuerpo, incluso cuando fueron
gran superficie que esta sujeta a la parte alrededor de 35€, una fracción del pre- sometidos al test Bonnie de resistencia,
trasera del PC, elimina la necesidad de cio de una adaptadora moderna de alto de esta manera eliminamos la necesidad
ventiladores. La única cosa que rendimiento, pero manteniendo carac- de sistemas de refrigeración o venti-
escuchará es el silencioso zumbido de la terísticas tales como salidas DVI o de TV. ladores adicionales para el disco duro.
bomba y el ventilador de la fuente de ali- Aemás de esto, la totalidad de los Un disco duro IDE normal se conecta
mentación. El kit de refrigeración liquida actuales distribuciones soportan el con un cable plano de 80 pines que suele
Thermaltake Aquarius II disponible en chipset ATI Radeon 7000 por defecto. estorbar la ventilación de los PCs, incluso
[8] solo enfría la CPU y cuesta 109€; un Desde luego, una adaptadora gráfica en sistemas que funcionan con venti-
bloque disipador adicional para la adap- con aceleración hardware para 3D solo ladores de bajo régimen de revoluciones.
tadora gráfica puede costar alrededor de tiene sentido si va a usar el ordenador Los cables bloquean el flujo de aire, que
45€. para jugar. Si no, una placa base con el ya es bastante escaso de por si. Serial
chipset de la adaptadora gráfica ATA podría ser una solución, si tan solo
Las ruidosas adaptadoras integrada debería ser suficiente, como puede encontrar un disco duro silencioso
gráficas. los i845G o i865G de Intel o incluso la que se ajuste a las especificaciones. El
El rendimiento 3D no solo significa for- gama de placas base Epia de Via. La único en la actualidad que se aproxima
mar imágenes más rápidamente, mayoría de los chips gráficos integrados es un adaptador SATAPATA para el disco

Cómo Montar un PC en la Sala de Estar

Poweroid Thermaltake ATI Samsung LG Electronics Toshiba Matrix


1200 Aquarius II Water Radeon 7000 SV-1604N GSA-4081B SD-C2612 Orbital MX212
Cooling kit
PC completamente Completo kit de Tarjeta gráfica con Disco duro de Grabadora DVD Unidad DVD Panel digital .
silencioso con refrigeración liquida, aceleración 3D por 160GBytes de . capaz de reconocer de perfil estrecho. frontal para
refrigeración pasiva, con bomba,bloque hardware y bajo nivel de DVD-RAM además bahía de 5,25”
CPU P4 3.2GHz y refrigerador para la refrigeración pasiva. ruido ya que de DVD-R,DVD+R y para controlar los
montado sobre una CPU y radiador. funciona a DVD+RW. ventiladores y
caja Zalman Totally 5400rpm mostrar
No Noise. información en el
diplay
www.poweroid.com www.overclock.co.uk, www.overclockers.co.uk, www.savastore.com, www.microdirect.co.uk, www.wstore.co.uk, www.kustompcs.co.uk/,
www.crazypc.com, www.tigerdirect.com, www.computerhq.com, www.eebuy.com, www.computerhq.com, www.matrixorbital.com,
www.new-generation.nl www.computer-land.nl www.crazypc.nl www.alternate.de www.bauers.com www.myelectronicx.nl
£3,100 EUR 109 EUR 35 EUR 115 EUR 120 EUR 65 EUR 120

www.linuxmagazine.com.es Número 02 21
PORTADA PCs Silenciosos

duro de Samsung, suponiendo que se ha IDE conectado a un mismo cable puede


elegido una placa base que incluya los transferir datos en un momento dado.
INFO
conectores Serial ATA. Desde un punto de vista práctico, esto en [1] Sistema básicos Elito Epox EX5-300S:
modo alguno creará ninguna diferencia a http://www.komplett.co.uk/ http://www.
Unidades DVD silenciosas su ordenador para el cuarto de estar. epox.com/ http://www.directron.com/
A pesar de que las aberturas para Después de todo, no se diseño para susti- [2] Caja Travla Casetronic C137: http://www.
unidades facilitan un manejo perfecto, a tuir al servidor de ficheros y la unidad de mini-itx.com/ http://shop.store.yahoo.
duras penas son idóneas para disposi- DVD casi no será usada a la vez que use com/kmexpress/ http://www.
tivos de pequeño tamaño en ambientes el disco duro. Un segundo cable IDE myelectronics.nl/
sensibles al ruido. Por ejemplo, la Pio- solamente impedirá, de forma innece- [3] Guía para construir un receptor IR serie:
neer Slot Load (DVD-120SZ) esta saria, la disipación del calor. http://www.lirc.org/receivers.html
alrededor de las 40€ y es más ruidosa Las unidades DVD de perfil estrecho [4] Receptor IR montado: http://www.
que la mayoría de las unidades con ban- como la Toshiba SDC2612 pueden causar zapway.de/e_index1.htm
deja. Son preferibles las unidades de reparos aquí. Están codificadas en hard- [5] Kit de software wake on lan VDRonf:
carga por bandeja de perfil bajo, como ware para funcionar como Seleccionado http://home.pages.at/linux/dvb.html
las utilizadas en los ordenadores por cable, y no se pueden cambiar para [6] Cajas aisladas acusticamente y fuentes
portátiles. En el caso de las unidades de funcionar como Maestro o Esclavo. Para de alimentación sin ventiladores Silent-
perfil bajo el disco está directamente que esta unidad funcione como esclava, maxx: http://www.kustompcs.co.uk/
sujeto al eje rotor de la unidad. Los dis- necesitara conectarla al conector central http://www.silentmaxx.net/ http://www.
positivos normales de bandeja o slot del cable IDE, y eso puede ser laborioso - silentmaxx.de/
usan muelles para sujetar el DVD entre el y en algunas circunstancias - incluso [7] Poweroid 1200: http://www.poweroid.
eje rotor y el cojinete y esto puede pro- imposible, dependiendo de la caja que com/
ducir vibraciones, especialmente si el haya elegido. La mayoría de las BIOS de [8] Kit de refrigeración liquida Thermaltake
disco está desequilibrado. Vale la pena los ordenadores le permiten iniciar desde Aquarius II Water: http://www.overclock.
incluir una unidad de DVD ROM, incluso un dispositivo conectado como esclavo, co.uk/ http://www.crazypc.com/ http://
si no desea reproducir DVD. Las por lo que podrá dejar la unidad de DVD www.new-generation.nl/
unidades de DVD son más lentas que las como unidad maestra y al disco duro [9] Tarjeta gráfica ATI Radeon 7000: http://
unidades de CDROM de 52X y eso las como esclavo, si es necesario. Esto es www.overclockers.co.uk/ http://www.
convierte en más silenciosas. También se preferible, sin duda alguna, a tener que tigerdirect.com/ http://www.
puede intentar hdparm -E speed device usar cables extra largos que no se adaptan computer-land.nl/
para restringir la velocidad de la unidad a las especificaciones UDMA 100, solo por [10]Programa de prueba para el panel LCD:
a la deseada, sin embargo algunas conectar el lector DVD como esclavo. http://www.matrixorbital.com/
unidades no responderán a esta orden. Si [11] Matrix Orbital MX2: http://www.
se pretende quemar CDs, o incluso Sin Teclado, Sin Monitor kustompcs.co.uk/ http://www.
DVDs, nuestra recomendaciones son las El panel MX2 de Matrix Orbital es una matrixorbital.com/ http://www.
grabadoras GSA-4081B o GSA-4082B interesante manera de controlar un dis- myelectronicx.nl/
DVD de LG. Ambas unidades pueden positivo aislado usado como grabadora
manejar todos los estándar actuales de de vídeo o como enrutador. El panel
DVD, desde DVD RAM hasta DVD+RW, encaja en una bahía de 5,25 pulgadas y Presupuesto
y alcanzar una velocidad de grabación tiene un display LCD azul de dos lineas Los PCs no tienen por que ser ruidosas
en DVD de 8x, dependiendo de la calidad con 20 caracteres por linea y siete pul- cajas de color beige. Los diseños de caja
del disco. La GSA-4081B es una unidad sadores, más de los que se necesitan atractivos y el aislamiento acústico con-
asequible, con un precio de venta de para apagar o cambiar la dirección IP. vierten el PC en un suplemento
aproximadamente 120€. Este modelo El panel utiliza USB para conectarse al agradable en cualquier sala de estar. Sin
está siendo sustituido por el GSA-4082B. ordenador; no hemos tenido problemas embargo, al igual que el silencio, la
con los controladores. El modulo ftdi_sio belleza es dorada. Un sistema hecho a
Maestro y Esclavo reconoce el panel perfectamente. Un medida puede fácilmente costar dos
La elección de la caja puede imponer conjunto de pruebas en Java, está veces más caro que un equipo listo para
restricciones al cableado interno. Si opta disponible desde la página de Matrix usar del vendedor de clónicos de la
por una Travla c137, se vera forzado a Orbital [10]. El CD que acompaña al esquina. Hacéselo uno mismo nos ahor-
conectar el disco duro y la unidad de panel tiene un código de registro para un rará dinero, pero esto hará que se tenga
DVD al mismo cable IDE, como unidades software de control LCDC repleto de car- que pasar un montón de tiempo reflexio-
maestra y esclava. Por motivos de acterísticas. Se puede usar esta nando en la configuración del sistema.
rendimiento es más sensato conectar herramienta, para controlar medidas y Nada es más molesto que descubrir,
cada unidad a un controlador IDE sepa- extensiones de hardware como consultar cuando es demasiado tarde, que la
rado, así subirá la velocidad a la cual se los sensores de temperatura, o controlar máquina de sus sueños no es lo bastante
intercambiara la información entre los los LED de estado. El Matrix Orbital potente como para reproducir DivX, o
dispositivos, ya que solo un dispositivo MX212 cuesta alrededor de 120€ en [11]. jugar a Parsec como una seda. ■

22 Número 02 www.linuxmagazine.com.es
Cámaras Digitales PORTADA

Cámaras digitales bajo Linux

La Caja de Fotos
Las cámaras digitales progresiva-

mente van reemplazando a las

tradicionales en nuestras

casas. La forma típica en

Linux de transferir imá-

genes desde la cámara al

disco duro es con

gPhoto o mediante el

módulo basado en

kernel de memoria

masivos USB. Los entornos

gráficos como digikam

prometen un uso mejorado.

POR ANDREA MÜLLER

C
omprar carretes, revelarlos, con el PC y es un modelo reciente, Puede sda: Write Protect is off
ordenar y almacenar las copias, que podamos utilizar el software pro- Feb 1 19:27:18 aries kernel:U
comprar marcos y montar las ducido por el proyecto gPhoto [1]. Este sda: sda1
copias en álbumes. Todas estas tareas artículo describe ambos procedimientos
que nos ocupan tanto tiempo son ahora y nos introduce a software diseñado El siguiente comando ejecutado desde la
cosas del pasado para fotógrafos afi- específicamente para interactuar con raíz monta la cámara detectada que ha
cionados que han pasado de un equipo cámaras digitales. detectado como un sda 1:
de fotografía tradicional a uno digital.
Aquellos que han hecho el cambio se Montando la Cámara mount -t vfat /dev/sda1U
encuentran con diferentes aspectos Algunas cámaras, como las series Exilim /mnt/usb -o umask=0
como encontrar el mejor software para de Casio o Aito, se comunican con el sis-
su ordenador y transferir las imágenes tema como un disco duro SCSI de la en /mnt/usb. Los dispositivos son for-
digitales desde la cámara hasta el PC de misma forma que un dispositivo de mateados con el sistema de archivos
su casa. La respuesta para usuarios de memoria USB se conecta al equipo. VFAT típicamente usado en Windows 9x.
Linux depende de la marca y modelo de Podemos usar el comando mount para Como este sistema de archivos no tiene
la cámara digital. montar la cámara, comprobando el ningún permiso, el administrador puede
Los dispositivos que se conectan por sí archivo /var/log/messages para descubrir asignarlos usando la opción umask. 0 es
mismo al sistema como si fueran discos el dispositivo adecuado: el valor más permisivo y asigna acceso
duros son los más sencillos, permitiendo de lectura y escritura a cualquier directo-
al usuario la simple introducción del Feb 1 19:27:18 aries kernel:U rio de la cámara a cualquier usuario.
comando mount para tener acceso al dis- SCSI device sdb: 20208U Una entrada en /etc/fstab permitirá a
positivo. Si tenemos una cámara que usa 512-byte hdwr sectors (10 MB) usuarios sin privilegios el montaje de la
un protocolo especial para comunicarse Feb 1 19:27:18 aries kernel:U cámara. Las opciones de montaje per-

www.linuxmagazine.com.es Número 02 23
PORTADA Cámaras Digitales

tivos se soportan en la versión suminis-


trada con nuestra distribución. Si no
encontramos nuestro modelo debemos
navegar hasta [3] para verificar el listado
de compatibilidades de la versión actual
de gphoto2.
Últimamente, gPhoto 2 ha mejorado el
soporte a modelos nuevos. Muchas de
las cámaras actuales usan el Protocolo
de Transferencia de Fotografías (Picture
Transfer Protocol -PTP) [4] que asegura
una transmisión simple de archivos entre
dispositivos PTP. Esto elimina la necesi-
Figura 1: La opción de montaje “showexec” copia los permisos de archivos de Windows bajo Linux. dad de controladores especiales y
permite a cualquier ordenador el inter-
miten métodos para los permisos como Podemos usar casi cualquier gestor de cambio de datos con cualquier otro
asignar a un grupo usbusers permisos archivos para transferir archivos de imá- dispositivo PTP sin la necesidad de insta-
para borrar los archivos de la cámara. genes desde nuestra cámara al disco lar ningún software adicional.
Tras crear el grupo y definir el punto de duro. Si preferimos un programa espe- De hecho este tipo de dispositivo no
montaje, la entrada puede ser algo como: cializado debemos probar Digikam [2]. tiene porque estar limitado a cámaras y
Es el único que funciona con gPhoto 2 y ordenadores. El intercambio de datos
/dev/sda1 /mnt/usb auto users,U también soporte dispositivos de almace- con teléfonos móviles o impresoras es
noauto,gid=333,umask=002,U namiento masivo de memoria USB. igual de fácil. Las cámaras PTP son
showexec 0 0 “plug and play” en Windows XP y
El proyecto gPhoto. MacOS X.
La entrada gid es seguida por una ID gPhoto 2, que alcanzó la versión 2.1.4 en
numérica como la almacenada en el enero del 2004 consiste en dos compo- Soporte Mejorado PTP
archivo /etc/group. Todos los miembros nentes: la librería libgphoto2, que Si bien el estándar fue publicado en el
del grupo tienen acceso de lectura y soporta más de 400 tipos de cámaras, y año 2000, muy pocos fabricantes estaban
escritura a la cámara. La entrada users, el programa línea de comandos gphoto2 preparados para adoptarlo desde el prin-
al contrario que user, permite a usuarios que permite a los usuarios el acceso a las cipio, siendo Kodak y Sony unos de los
no privilegiados desmontar la cámara cámaras soportadas. pioneros. Afortunadamente, otros fabri-
aún si ellos mismos no la han montado. El proyecto tienen sus raíces en cantes comenzaron a apreciar las
showexec le resuelve el problema resul- gphoto0.4.x. La versión antigua tenía un ventajas, por ejemplo, el del ahorro de
tante de que VFAT no disponga de interfaz gráfico integrado y una arquitec- costes, puesto que ya no necesitaban
privilegios de sistema. Se debe asignar tura monolítica. gphoto2 tienen una producir sus propios controladores.
permisos de ejecución a los usuarios en estructura modular y fue completamente gPhoto 2 introdujo el soporte de cámaras
umask para permitirles el acceso a la reescrito por sus desarrolladores. La PTP en junio del 2002. Al principio era
estructura del directorio. Un efecto secun- primera versión estable se comenzó a bastante espartano, siendo solo capaz de
dario es que los archivos normales son poder descargase en febrero del 2002. Las transferir archivos de imágenes a disco.
etiquetados como ejecutables. Algunos nuevas versiones de este software están Otros comandos como sacar el listado de
programa de Linux como las versiones disponibles cada pocos meses con ver- los archivos de imágenes, pistas desti-
más antiguas del gestor de archivos Rox siones beta y preestrenos para acortar el nadas a la reproducción de errores I/O o
rehusan mostrar una previsualización de espacio entre versiones estables y permi- interfaces basados en GUI solo funciona-
imágenes ejecutables. Podemos usar tir a los usuarios probar cámaras nuevas. ban a ratos. La estabilidad se incrementó
showexec para solucionar este problema A medida que las versiones incluidas dramáticamente con la versión 2.1.3. No
puesto que emula el comportamiento de por los distribuidores tienden a quedarse obstante, una cámara explícitamente lis-
Windows. Los archivos con extensiones atrás respecto al actual estado de desar- tada en la lista de dispositivos
como .exe, .bat, y .com son etiquetadas rollo, los usuarios con nuevos modelos soportados estaba mejor soportada que
como ejecutables pero no otras (ver figura necesitan recopilar nuevos recursos. No una cámara de clase genérica USB USB
1). La entrada fstab permite a usuarios obstante, esto también nos obliga a recom- PTP Class Camera. Esta característica
normales montar la cámara en /mnt/usb pilar nuevas interfaces gráficas y gtkam, sigue en fase de pruebas.
usando mount/dev/sda1. puesto que esta herramienta no funcionará
Los usuarios de Suse Linux pueden evi- habitualmente con la última versión si esta Permisos
tar este trabajo manual. El demonio conectada a una librería antigua. Si nuestra cámara está soportada, aún
hotplug crea automáticamente la fstab Antes de probar todas estas cosas tenemos que lidiar con el problema de
apropiada tan pronto se detecta la conexión debemos introducir el comando gphoto2 los permisos a no ser que nuestro dis-
de un dispositivo de memoria masiva USB. --list-cameras para buscar que disposi- tribuidor se haya preocupado de permitir

24 Número 02 www.linuxmagazine.com.es
Cámaras Digitales PORTADA

a otros usuarios al margen de root archivo que comience con usbcam y


el acceso a la cámara. Las cámaras luego añadir el ID de la cámara al
USB se detectan por el sistema final del archivo:
como entradas debajo del punto de
montaje /proc/bus/usb. Aquí es /usr/local/lib/libgphoto2/U
donde está localizado el sistema de Figura 2: gPhoto 2 reconoce nuevas cámaras conectadas print-usb-usermap >>U
archivos USB. El kernel genera el automáticamente por conexión USB. /etc/hotplug/usb.usermap
sistema de archivos de forma
genérica de forma similar al pseudo sis- /etc/hotplug/usb/usbcam.usermap para La configuración de las cámaras de esta
tema de archivos /proc [5]. Los cambios la cámara. forma garantiza el acceso a usuarios nor-
en permisos se pierden cada vez que se males. Un interfaz gráfico no es
reinicia el sistema. Scripts absolutamente necesario. La he-
Hay dos formas de permitir acceso a la Cuando el demonio conecta con un dis- rramienta de la línea de comandos de
cámara a otros usuarios: positivo llama al código gPhoto 2 proporciona un amplio abanico
• Cambiando los opciones de /etc/hotplug/usb/usbcam, que ajusta los de funciones. La siguiente sintaxis:
montaje para el sistema de permisos para la cámara conectada. libg-
archivos USB. photo2 proporciona cuatro códigos de gphoto2 --auto-detect
• Ajustando dinámicamente los ejemplo. Si construimos el código
permisos usando el demonio nosotros mismos, los encontraremos en el Muestra nuestra cámara tal y como es
hotplug. directorio de código fuente bajo packa- detectada por el programa (ver figura 2).
El primer método es el más simple de los ging/linux-hotplug. La mayoría de las
dos. La siguiente entrada en /etc/fstab distribuciones los almacenan bajo Cámara en la Línea de
/usr/share/doc/libgphoto2-versionnumber. Comandos
none /proc/bus/usb usbfsU Los cuatro scripts de ejemplo suminis- Solo se requieren unos pocos parámetros
devmode=0664,devgid=333 0 0 trados consisten en: usbcam.group, donde para el acceso básico. -l lista los directo-
el administrador introduce el grupo al que rios, -L añade los nombres de los
monta en /proc/bus/usbv con permisos asignar los permisos correctos, archivos. Los usuarios pueden hacer re-
de lectura y escritura para usuarios y usbcam.user, el cual espera el nombre del ferencia a los números de serie en estos
grupos con la identidad (ID) de 333 usuario al que asignar permisos, usb- resultado (ver figura 3) usando la sin-
(estos son los usuarios USB en nuestro cam.x11-app, el cual lanzará taxis -p number(n) para filtrar archivos
sistema). Los usuarios que no sean parte inmediatamente gPhoto y usbcam.console. específicos. -P hace referencia a todas las
de este grupo solo tienen acceso de lec- El código requiere PAM [6], instalado imágenes encontradas en el directorio
tura. por defecto en Red Hat o Mandrake actual de trabajo.
Estas opciones de montaje son válidas Linux. Éste asigna todos los permisos de Si solo queremos transferir archivos de
para cualquier dispositivo USB y no sólo la cámara al usuario conectado a la con- imagen específicos al disco duro
para cámaras. sola. Si construimos nuestra propia podemos indicar gphoto2 -p 2,4,5 para
El demonio hotplug proporciona una versión de gPhoto, necesitaremos actua- descargar las imágenes 2, 4 y 5 o especi-
forma más elegante de resolver este lizar usbcam.usermap usando el ficar un rango, por ejemplo gphoto2 -p
problema. Monitoriza los puertos USB siguiente comando: 2-4, es bastante fácil excluir archivos de
del sistema y reconoce cualquier disposi- un rango. Por ejemplo gphoto -p 2-6,4
tivo USB conectado por sus respectivos /usr/local/lib/libgphoto2/U descarga las imágenes 2, 3, 5 y 6, pero
Ids, los cuales se almacenan en archivos print-usb-usermap >U no la número 4.
/etc/hotplug. Dependiendo de nuestra /etc/hotplug/usb/usbcam.usermap
distribución, el demonio analiza el Nombres Intuitivos
archivo /etc/hotplug/usb.usermap o el Si nuestra distribución analiza El programa puede hacer muchas más
archivo usb.usermap deberemos borrar cualquier cosas. Las cámaras digitales asignan

Figura 4: El parámetro -a lista las capacidades de la cámara, indicando si la


Figura 3: gPhoto 2 muestra una lista de las imágenes en la cámara. cámara soporta miniaturas, por ejemplo.mentación.

www.linuxmagazine.com.es Número 02 25
PORTADA Cámaras Digitales

nombres de archivo a las imá- La vista miniaturizada pro-


genes que son francamente porciona una vista general
poco intuitivos, pero gphoto2 inicial. El menú File nos per-
puede cambiar el nombre mite descargar todas las
cuando descarga los archivos. imágenes o solo las selec-
Para hacer esto debemos cionadas y borrar de la
indicar el parámetro --filename cámara cualquier imagen que
seguido por un nombre. --file- hemos transferido correcta-
name acepta formatos típicos mente a nuestro disco duro.
de fechas (date) como %y, digikam proporciona
%m, y %d para años, meses y muchas más ventajas para el
días. Adicionalmente, %n usuario. En lugar de aban-
especifica un número, %C el donar al usuario tras la
sufijo de un archivo y final- Figura 5: Claro y funcional: el GUI de GTKam. descarga, la herramienta tam-
mente %f especifica un bién gestiona imágenes en el
nombre de archivo sin sufijo. gphoto2 -P la línea de comandos interna del pro- disco duro. Las imágenes se organizan
--filename cumpleaños_juanito_%n.%C grama. Si alguna vez hemos usado un en álbumes, los cuales con en realidad
descarga las fotografías de la cámara y cliente basado en texto FTP, no debemos simples directorios. El programa
construye el nombre del archivo con la tener problemas en encontrar el camino. mostrará los álbumes en lugar de simple-
ristra cumpleaños_juanito_, el número mente ofrecer una vista general del
de la imagen, un punto y el sufijo del Funciones Adicionales sistema de archivos. Las vistas miniatur-
archivo. help muetstra lista de los comandos izadas se muestran en la zona derecha
Los parámetros -T y -t número(s) disponibles para gPhoto2, help nombre- del panel (ver figura 6). Podemos arras-
descargan cualquier o una selección de comando muestra la sintaxis de trar y soltar una imagen para copiarla o
miniaturas de nuestra colección de fotos. comandos individuales. ls lista los moverla a otro álbum en la vista árbol.
Si disponemos de una cámara que puede archivos. cd cambia a otro directorio de
almacenar clips de vídeo, al margen de la cámara. delete file borra un archivo. Digikam, la estrella
imágenes, podemos especificar get file inicia la descarga de una emergente
--get-audio-data número(s) o --get-allau- fotografía al directorio actual, y Digikam muestra utiliza una método
dio-data para acceder a estos archivos. get-thumbnail hace lo mismo con la abierto a la hora de montar una cámara.
Para hacer sitio a nuevos archivos intro- miniatura de la imagen actual. Si abri- Al margen de los modelos soportados
ducimos --delete-files número(s) y mos el shell de gPhoto en un directorio por gPhoto 2, ofrece además acceso a
--delete-all-files. para el que no tenemos privilegios de dispositivos de almacenamiento masivo
Las funciones que gPhoto 2 ofrece escritura, podemos escribir lcd directory USB. Podemos seleccionar USB Mass
dependen en parte de la cámara que para cambiar a otro directorio local. El Storage e introducir un pinto de montaje
conectemos. gphoto2 -a nos mostrará las comando show-exif fichero está diseñado (ver figura 7) para ajustar este tipo de
funciones de la dispositivo conectados para mostrar los meta-datos del archivo dispositivos. Seleccionando Camera |
(ver figura 4). de una imagen, pero no funcionó en Connect montamos el dispositivo en el
Algunas cámaras permiten que les nuestro laboratorio. q, quit o exit finaliza archivo del sistema.
subamos archivos de imágenes. El el programa de la línea de comandos. Además de las funciones de descarga y
parámetro -m seguida de un nombre crea borrado de imágenes, Digikam también
un directorio en la cámara y gphoto2 -u Entornos gráficos tiene la función de subir imágenes. Para
nombrefichero sube archivos. Los resul- Si no estamos contentos con la línea de ver imágenes a escala completa podemos
tados de gphoto2 -a no son comandos, podemos probar uno de los abrirlas opcionalmente en un visor
completamente fiables. Si bien se supone entornos gráficos de gphoto. Hay externo en lugar de en el visor interno.
que el controlador para nuestra cámara muchos compitiendo actualmente por la Los programas KDE como kuickshow y
de ensayo no soporta capture según el posición de mejor amigo del fotógrafo kview son algunos ejemplos de visores
programa, es posible controlar la cámara amateur. externos. Una función de presentación
remotamente y gphoto2 --capture-image El competidor más antiguo es gtkam de diapositivas que opcionalmente
capturará una imagen. Desafortunada- [7], competidor fuerte (ver figura 5) que soporta etiquetas con nombres de
mente, la opción -- capture-sound nos solo provee funcionalidades básicas. archivos redondea el programa.
llevó a errores entrada / salida en nu- Seleccionando Camera | Add | Camera | La nueva versión 0.7 acaba de salir.
estro laboratorio Linux. Detect indica al programa que acceda a la Esta versión tendrá funcionalidades adi-
El parámetro --shell permite al usuario función de auto reconocimiento de cionales. Digikam usa una arquitectura
navegar por los directorios de la cámara gPhoto 2. Podemos usar una vista tipo plug-in en la nueva versión, permitiendo
igual que haría por los sistemas de árbol del gestor de archivos en una a los desarrolladores extender la fun-
archivos locales. Los usuarios pueden cámara que lo soporte. GTKam muestra cionalidad del programa. Los candidatos
introducir gphoto2 --shell para desplegar imágenes en la parte derecha del panel. de versión 1 y 2 ya disponían de una

26 Número 02 www.linuxmagazine.com.es
Cámaras Digitales PORTADA

colección de funciones plug-in que la típica vista en forma de


que proporcionaban las siguien- árbol, puesto que deja más
tes ampliaciones entre otras: espacio para la imágenes en el
• Presentaciones de dia- escritorio (ver figura 9).
positivas con efectos. Si preferimos usar el mismo
• Codificador MPEG que programa para todas las opera-
puede usar la he- ciones con nuestros archivos,
rramientas mjpeg- o puede que lo preferible sea
Imagemagick para optar por usar el gestor de
crear vídeos para archivos KDE Konqueror para
VCDs, SVCDs o DVDs. transferir imágenes desde
• Galería HTML, una nuestra cámara al disco.
extensión de los plug- Gracias a la Kioslave camera
ins de Konqueror , la herramienta de gestión de
Gallery archivos de KDE puede usar la
• Editor de comentarios. librería libgphoto2 para acceder
• Ayudante de impresión Figura 6: Vista de árbol, vista cámara y previsualización en Digikam. a cualquier cámara digital
de fotografía para soportada como si estuvieran
ordenar múltiples imá- localmente conectada al sis-
genes en la misma tema. Escribiendo camera:/ en
hoja. la línea de direcciones URL, el
• Archivo de CD (nece- proceso de auto detección le
sita K3b). indica a Konqueror que debe
• Funciones de correo mostrar el directorio raíz de la
electrónico con cámara.
opciones para cambiar
el tamaño y ratio de Información Exif
compresión de los Las imágenes de algunas
archivos. Funciona cámaras digitales incluyen el
con KMail, Sylpheed y llamado Exif (Formato de inter-
Mozilla. cambio de archivos de
En lo que se refiere a la gestión imágenes.- Exchangeable
y archivo de imágenes digitales, Image File Format) [9], que
Digikam ha desarrollado fun- almacena información como la
ciones que atienden a todas las fecha y hora, la distancia focal,
necesidades de los usuarios. el modo del flash o el tipo de
flphoto [8] usa un método dis- cámara. Los usuarios que
tinto. El programa es realmente Figura 7: Digikam también soporta cámaras que el sistema detecta deseen mantener esta meta-
una herramienta de gestión de como sistemas de almacenamiento masivo USB. información mientras procesan
imágenes que ofrece acceso a la las imágenes, no pueden usar
cámara como un añadido. La herramientas de manipulación
herramienta carece de la opción de imágenes tradicionales,
de borrar imágenes de la puesto que la meta-informa-
cámara. El diálogo Album | ción se pierde al guardar las
Import | Camera proporciona imágenes de la cámara al disco
una solución fácil no obstante. duro.
Cuando arrancamos este pro- Se está buscando una solu-
grama, FLPhoto detecta ción a este problema en la
automáticamente la cámara y próxima versión de Gimp,
muestra previsualizaciónes en puesto que es capaz de guardar
miniatura de las imágenes en la Figura 8: Importación de imágenes desde una cámara digital en la información Exif. Mientras
ventana de transferencia (ver FLPhoto. tanto debemos optar por el
imagen 8). comando llamado jhead [10].
Las funciones de gestión de imágenes seleccionamos Image | Remove para bo- jhead analiza la cabecera de Exif, la
son muy avanzadas. El programa trabaja rrar una imagen del álbum, no borramos almacena y luego manda la imagen a
con álbumes, que en realidad son la imagen físicamente de nuestro disco. otro programa donde pueda ser editada.
archivos de texto que contienen los nom- La barra de previsualización en la parte La siguiente sintaxis ejecutará exacta-
bres de las imágenes del álbum. Si inferior de la ventana es más práctica mente esta tarea:

www.linuxmagazine.com.es Número 02 27
PORTADA Cámaras Digitales

jhead -cmd "jpegtran -rot 270U página Web del proyecto libexif [11].
&i > &o" foto_retrato.jpg Usa pestañas para mostrar los campos
INFO
individualmente e incluso muestra ≠[1]gphoto2: http://www.gphoto.org/
jpegtran rota la imagen 90 grados a la explicaciones de algunos tipos de con- [2] Digikam: http://digikam.sourceforge.net/
izquierda (-rot 90 rotará el mismo tenidos (ver figura 10). La última
[3] lista de las cámaras compatibles con
ángulo pero hacia la derecha). Esto es versión de Digikam, a partir de la 0.6, gPhoto2: http://www.gphoto.org/proj/
algo que los fotógrafos aficionados nece- dispone de la misma función. libgphoto2/support.php
sitan habitualmente cuando hacen exiftags [12] es útil para mostrar infor-
[4] Software gratuito con soporte PTP: http://
fotografías con la cámara en posición mación de Exif en la línea de comandos. ptp.sourceforge.net
vertical. jhead &i con el nombre del Separa el resultado en la cámara y las
[5] Sistemas de archivos de dispositivos USB:
archivo original. &o se refiere a un partes específicas de la imagen. El http://www.linux-usb.org/USB-guide/
archivo temporal donde los resultados mismo paquete incluye adicionalmente x173.html
serán almacenados. jhead inserta la exifcom, que puede ser utilizarse para
[6] PAM: http://www.kernel.org/pub/linux/
cabecera Exif en este archivo y reem- rellenar el campo de comentarios del libs/pam/
plaza la imagen original con la rotada. usuario (UserComment) de la cabecera
[7] Gtkam: http://www.gphoto.org/proj/
Como el programa automáticamente de Exif (se supone que la propia cámara
gtkam/
asigna el nombre del archivo correcto fija este campo). Llamar a la herramienta
[8] flphoto: http://www.easysw.com/~mike/
podemos usar comodines como *.jpg sin ningún tipo de indicador o parámetro
flphoto/
para procesar múltiples imágenes en un mostrará un comentario, si está
[9] Exif: http://www.exif.org/
mismo lote. disponible.
[10]jhead: http://www.sentex.net/
JPegtran: Mejor que exifcom -w "myU ~mwandel/jhead/
Imagemagick comment"U [11] gexif: http://sourceforge.net/projects/
Comparado con convert del paquete imagefile.jpg libexif/
Imagemagick, el programa JPegtran [12] exiftags: http://johnst.org/sw/exiftags/
usado en nuestro ejemplo tiene la ventaja fijará o sobrescribirá el comentario. Si
de crear archivos jpeg sin pérdidas. Si deseamos prevenir que exifcom nos progresos tremendos en esta área a lo
usamos convert, el almacenaje de imá- solicite permiso antes de sobrescribir, largo de los últimos meses.
genes recomprimirá la imagen y perderá simplemente debemos añadir el El proyecto KDE, Digikam,es un buen
datos de la misma. JPegtran es parte de parámetro -f. ejemplo esta afirmación: es un paquete
libjpeg y debe estar disponible con la potente y cómodo de utilizar, que hace
mayoría de las distribuciones. Con Buena Voluntad… que el procesado de imágenes en Linux
La solución más directa para visu- Algunas personas aún mantienen que sea un verdadero placer. Incluso si no
alizar cabeceras Exif actualmente en Linux no implementa multimedia como tenemos suerte y Digikam no soporta
GTK es un programa llamado gexif, otros sistemas. Obviamente hace tiempo nuestra cámara, aún podemos utilizar
disponible para su descarga desde la que no prestan atención al mundo de las como último recurso un lector de tarjetas
cámaras digitales, basado en USB que nos garantizará ser
puesto que se han capaz de transferir nuestra fotografías a
producido unos nuestro disco duro ■

Figura 9: Ventana de previsualización y visualizador de imágenes de Figura 10: Gexif muestra toda la gama de información Exif, desde la configu-
FLPhoto. ración de la cámara, hasta miniaturas.

28 Número 02 www.linuxmagazine.com.es
Grabadoras DVD PORTADA

Prueba de seis grabadoras de DVD

La Tostadora
¿Cuándo un DVD no es un DVD? Actualmente hay al menos cinco estándares

de DVD en el mercado y nadie puede predecir cual prevalecerá. Linux Magazine

ha probado seis grabadoras de DVD que soportan todos estos estándares. Con-

tinua leyendo para evitar cometer un caro error.

POR MIRKO DÖLLE

¿
Una grabadora de DVD por navi- para almacenar datos como un disco reproductor de DVD. Como es habitual
dades? Bueno, ¿por qué no? duro. Por este motivo puede ser reescrito esta teoría tiene poco que ver con las
Desafortunadamente, si esta es la hasta 100.000 veces. El medio DVD-RAM aplicaciones en la vida real. El único
única información de la que disponemos puede ser reconocido por las marcas formato que es más o menos fiable en el
para hacer la compra, pronto nos encon- doradas que encontramos en la parte DVD-R, puesto que al menos los dispo-
traremos perdidos en un laberinto de inferior a modo de sectorización. Los sitivos de DVD-ROM más antiguos y los
estándares compitiendo. Todos son DVD-RAMs pueden ser leídos en prácti- reproductores de DVD pueden usarlo.
DVDs, pero todos los estándares como camente cualquier DVD. Los otros dos Esto es debido al hecho de que el DVD-
RAM, Minus, Plus, R o RW requieren formatos de escritura aprobados por el R existía, al menos en en teoría, cuando
medios específicos. Otro asunto es el foro DVD son el DVD-R y el DVD-RW. los reproductores de DVD empezaron a
disco que puede ser reproducido en nu- Estos formatos, llamados “DVDMinus” ser producidos. Otra razón es que el
estro reproductor de vídeo DVD o en son muy similares al CD-R y al CD-RW y DVD-R está más cercano a las normas
nuestro ordenador. es especial respecto a su manejo. de las características ópticas del DVD-
Los programas de grabación escriben ROM. El nivel de reflexión en superficie
La jungla de los estándares datos al disco DVD, y los medios está entre el 45 por ciento y el 85 por
Al principio solo estaba el DVDROM, regrabables DVD-RWs pueden ser borra- ciento (justo como el DVD+R) en com-
difícil de distinguir del CD-ROM a dos completamente si esto es necesario paración con el DVD-ROM. Además, los
primera vista. Para permitir que ambas por el software de grabación. datos están organizados en espiral,
caras del disco se pudiesen usar, la capa mientras que en el DVD+R utiliza sec-
de datos no se creaba mediante la Formatos competitivos tores y pistas.
deposición por vacío, si no que era Los formatos “DVD-Plus” fueron creados Algunos reproductores de DVD son
puesta entre la superficie inferior y la para competir con los formatos “minus” también capaces de reproducir DVD-
superior. Esto hace que casi todos los y no son formatos DVD oficiales. En RAMs, si bien este medio fue diseñado
DVDs laminados estén compuestos de lugar de usar largas espirales como los para almacenar datos y usa la sectori-
dos discos pegados con un espesor de formatos DVD-R o CD-R, los DVD+RW zación de forma similar a los medios
0.6 milímetros (ver figura 1). Al margen disponen de pistas reales organizadas en DVD-Plus. Los sectores forman un
de esto, el DVD-ROM es muy similar al círculos concéntricos como los discos patrón fácilmente reconocible en la parte
CD excepto por el hecho de que las pis- duros. El estándar DVD-Plus está sopor- inferior (ver figura 2), siendo esta una
tas de la estructura de datos son más tado por los reproductores más característica inequívoca del DVDRAM.
pequeñas y la espiral es más cerrada. importantes, como Philips, Ricoh, Por cierto, no se requieren controladores
Por supuesto que los DVD-ROMs no Hewlett Packard, Sony, Mitsubishi, o programas de grabación especiales
son grabables, pero al menos han sido Yamaha y Verbatim. para escribir DVD-RAMs. El dispositivo
normalizados y aprobados por el foro El primer medio “plus” fue el de grabación funciona exactamente
DVD [1], mostrando el familiar logotipo DVD+RW, no apareciendo el que per- como un disco duro cuando un DVD-
de DVD como prueba. Los medios mitía la escritura (DVD+R) hasta 18 RAM es insertado, pudiendo ser
regrabables deben preferiblemente usar meses más tarde. particionado, formateado y escrito según
este formato para permitir que funcionen se requiera. Para formatear un nuevo
en dispositivos y reproductores antiguos. Similitudes y diferencias DVD-RAM con Ext3 simplemente
El primer medio DVD regrabable fue el En teoría, cualquier disco DVD puede podemos escribir mke2fs -j /dev/scd0
DVD-RAM. Originalmente fue ideado ser reproducido o leído por cualquier antes de ir a mount /dev/scd0 /mnt para

www.linuxmagazine.com.es Número 02 29
PORTADA Grabadoras DVD

Se requiere que el láser enfoque de


forma distinta para medios de capa
doble y para medios de capa simple. Es
bastante común que el firmware use el
nivel de reflexión como un indicador.
Esto normalmente provoca que los
reproductores más antiguos confundan
DVD-RW y DVD+RW con DVDROMs de
doble capa, y, puesto que el láser no
puede enfocar la segunda capa, no se
pueda reproducir el disco.

Omnívoros y Huelgas de
Hambre
La batalla entre el formato “Plus” según
Figura 1: DVDs compuestos de dos discos pegados conjuntamente de 0.6 milímetros de espesor. La capa está soportado por los fabricantes y el
de reflexión, que se daña muy fácilmente, está protegida en el centro entre los dos discos. formato “Minus” aprobado por el foro
DVD continúa siendo frenética. Por este
usar el medio de la misma forma que un soportar DVD+Rs. Y los medios DVD motivo hemos restringido nuestras prue-
disquete. reescribibles son una fuente constante de bas a dispositivos de grabado de
problemas. Estos reflejan solo entre el 18 formatos múltiples que anuncian soporte
Problemas “Plus” y el 30 por ciento de la luz del láser (ver para ambos formatos, lo que nos dejá,
Uno de los mayores factores que evitan figura 2) en comparación con un DVD- como usuarios, en el lado seguro de la
que el DVD+R tenga mayor difusión es ROM de capa simple, consiguiendo por guerra. Hemos probados un total de seis
el hecho de que fue introducido con pos- tanto reflexiones típicas de DVD-ROMs de dispositivos SCSI con controladores
terioridad. Es habitual que el firmware de doble capa donde los datos están almace- ATAPI que actualmente solo se utilizan
un reproductor DVD sea incapaz de nados en capas superpuestas. en estudios profesionales.

Tabla resumen de las grabadoras del ensayo


Posición: 1 2 3 4 5 6

Imagen:
Fabricante: LG Iomega NEC Teac Plextor BTC
Modelo: GSA 4040B Super DVD DV-1300A DV-W50DK PX-708A DRW-1004
Internet: http://www.lgelectronics. http://www.iomega.com http://www.nec.co.uk/ http://www.teac.co.uk http://www.plextor.be http://www.
.co.uk btceurope.nl
Cache: 2 MByte 2 MByte 2 MByte 2 MByte 2 MByte 2 MByte
Interfaz: ATAPI,UDMA-2 ATAPI,UDMA-2 ATAPI,UDMA-2 ATAPI,UDMA-2 ATAPI,UDMA-2 ATAPI,UDMA-2
Formatos y velocidades de grabación:
DVD-R/DVD-RW 4x/2x 4x/2x 4x/2x 4x/2x 4x/2x 4x/2x
DVD+R/DVD+RW 4x/2.4x 4x/2.4x 4x/2.4x 4x/2.4x 8x/4x 4x/2.4x
DVD-RAM/DVD-ROM 3x/12x 3x/12x -/12x -/12x -/12x -/12x
CD-R/CD-RW/CD-ROM 24x/16x/32x 24x/16x/32x 16x/10x/40x 16x/10x/32x 40x/24x/40x 40x/24x/40x
Programa de grabación en Linux: Discos soportados
cdrecord-ProDVD 2.0.1 DVD-R,DVD-RW, DVD-R,DVD-RW, DVD-R,DVD-RW, DVD-R,DVD-RW, DVD-R,DVD-RW, DVD-R1
DVD+R,DVD+RW DVD+R,DVD+RW DVD+R,DVD+RW DVD+R,DVD+RW DVD+R,DVD+RW
growisofs 5.13.4.7.4 DVD-R,DVD-RW, DVD-R,DVD-RW, DVD-R1,DVD-RW, DVD-R1,DVD-RW, DVD-R,DVD-RW, -
DVD+R,DVD+RW DVD+R,DVD+RW DVD+R,DVD+RW DVD+R,DVD+RW DVD+R,DVD+RW
dvdrecord 0.1.5 DVD-R1,DVD-RW DVD-R1,DVD-RW DVD-R1,DVD-RW DVD-R1,DVD-RW - -
Incluye (Kit de compra) cable IDE,cable audio, mini-guía,software mini-guía,software cable IDE,cable audio, cable IDE,tornillos, cable audio,
DVD-RAM,manual, Windows Windows tornillos,DVD-R,CD-R, jumpers,herramienta tornillos,
software Windows Manual,software extracción,DVD+R, DVD+RW,software
Windows miniguía,software Windows
Windows
Precio: 150 US$ 210 US$ 150 US$ 200 US$ 280 US$ 150 US$
1:No se pudo escribir en Prodisk DVD-R

30 Número 02 www.linuxmagazine.com.es
Grabadoras DVD PORTADA

La grabadora Teac DV-W50DK fue


ocupa una modesta cuarta plaza. Es sólo
un poco más barata que la omega Super
DVD pero no soporta discos DVD-RAM.
En el penúltimo lugar encontramos la
Plextor PX-708A con un precio de 280
dólares, siendo la única grabadora de la
comparativa capaz de grabar DVD+Rs a
una velocidad de 8, lo que explica la
diferencia en precios. No obstante, la
Plextor no puede grabar DVD-RAMs.
Hubo una cosa que nos ocurrió con un
disco defectuoso de DVD+RW. Cuando
growisofs canceló el proceso de grabación
debido al error del disco tuvimos que
abrir y cerrar manualmente la bandeja
del dispositivo para convencerlo de que
aceptara el disco. El intentar montar el
disco sin abrir la bandeja primero provo-
caba que nuestro ordenador se colgara
una y otra vez. En otros casos, el sistema
y el comando montar se colgaban juntos
durante casi media hora.
Figura 2: vista de los 5 discos grabables de DVD: DVD-RW arriba a la izquiera, DVD+RW arriba a la La grabadora BTC DRW-1004 se clasi-
derecha, DVD-R abajo a la izquierda, DVD+R abajo a la derecha y DVD-RAM abajo. Las diferencias en las ficó la última en el ensayo. Al igual que
características de reflexión son fácilmente reconocibles. la ganadora, cuesta en torno a 150
dólares, pero tuvo muchos problemas
Para las pruebas, escogimos delibera- euros (140 para mayoristas), lo que sig- con los discos DVD-R de Prodisk, Princo,
damente discos sin marca de gama baja, nifica en torno a un 25 por ciento menos TDK, y Teac independientemente del
de precio por debajo de 2 euros. Los pro- que la Iomaga Super DVD. Ninguno de programa de grabación que usásemos.
ductos de marca pueden ser muy caros estos dispositivos nos dieron el más mín- O el dispositivo rehusaba escribir el
en comparación, costando habitual- imo problema a lo largo de nuestras disco o el disco no funcionaba en un
mente de 3 a 5 veces más que los de pruebas, funcionando las dos perfecta- reproductor de DVD posteriormente. Los
marca blanca, siendo este el motivo de mente con un amplio abanico de discos discos Xcitek DVD+RW tampoco fun-
que discos como Prodisk, Princo o Xcitek y programas de grabación. cionaban correctamente, siendo de hecho
sean tan populares. Por otro lado, solo los dispositivos LG la grabadora BTC muy selectiva con los
Los resultados fueron ambivalentes, e Iomega son capaces de escribir DVD- discos que usa. Nuestra recomendación
no pudiendo todos los dispositivos RAMs. Estos discos (ver la parte inferior es la grabadora LG GSA-4040B.
manejar todos los discos que utilizamos de la figura 2) son bastante caros (de 8 a
con ellos. En el caso de la grabadora BTC 12 dólares cada uno), pero pueden ser Conclusión
DRW-1004, incluso disco DVD-R de reescritos hasta 100.000 veces, lo que Los dispositivos de grabación de DVD
marca como TDK o Teac no funcionaron. significa una 100 veces más que los funcionan en Linux, si bien deberíamos
Solo las grabadoras LG GSA-4040B y la DVD-RWs o los DVD+RWs en teoría. matizar esta declaración. Un conjunto
Iomega Super DVD aceptaron todos los Estos lo convierte en una alternativa compuesto por una grabadora, disco y
discos sin protestar. interesante a las cintas o los discos mag- software de grabación puede no fun-
Lamentablemente no solo fue el pro- netoçópticos (MODs) en aplicaciones cionar, como prueba el caso del
blema de compaginar los discos y las donde gran cantidad de datos necesitan dvdrecord. Nuestra recomendación es
grabadoras. El programa de grabación ser transportados frecuentemente. Por elegir o la versión actual de growisofs o
dvdrecord simplemente no pudo soportar supuesto que el DVD-RAM no ofrece la la comercial de cdrecord-ProDVD (que es
algunos discos, por ejemplo los discos misma velocidad que un disco duro gratuita para usuarios privados) puesto
Prodisk en ninguna grabadora. La tabla Firewire o USB 2.0. que ninguno de estos programas nos ha
proporciona una vista general de la com- El tercer lugar ha sido para la popular dado ningún problema. ■
paración de discos, grabadoras y NEC DV-1300ª. Es tan cara como el dis-
programas de grabación. positivo ganador pero no puede grabar
DVD-RAMs. Tuvo problemas con los
RECURSOS
Los ganadores DVD-Rs de Prodisk usando los programas [1] Foro DVD, la organización de la
estandarización del DVD:http://www.
El ganador de nuestro ensayo es LG. La dvdrecord y growisofs pero sí los pudo
dvdforum.org
grabadora GSA-4040B cuesta unos 150 usar con el programa cdrecord-ProDVD.

www.linuxmagazine.com.es Número 02 31
DESARROLLO SDL

Moviendo “Sprites” por la pantalla

Cash and Carry


En la primera parte de este tutorial vimos como cargar una imagen en una superficie, y como transferir un bloque (blit)

sobre la pantalla. Este mes, mostraremos cómo esas operaciones básicas de carga y transferencia de bloque se pueden

utilizar para componer la pantalla completa del juego.

POR STEVEN GOODWIN

N
uestra pantalla de titulo en el menos memoria que en la pantalla de cada línea. Esta es una decisión arbi-
número 1 de Linux Magazine, bienvenida, aunque cubriremos la traria para hacer el trabajo del artista
publicada en la página 28, con- misma área. La mayoría de las platafor- más uniforme: mientras más opciones
sistió en una superficie y una mas de juegos usan este método. Incluso proponga, ¡mas sitio habrá para el error!
transferencia de bloque (blit). Pero con en los juegos de estrategia en tiempo real El código para dibujar un solo ladrillo en
una superficie y varias transferencias de (como Command & Conquer y Warcraft) la pantalla será entonces como el
bloque, podemos hacer mucho más usan este sistema, aunque sus gráficos mostrado en el Listado 1.
¿Cómo? Bien, pues si tomamos una sola sean isométricos en apariencia. Aunque cada ladrillo será alineado
superficie y señalamos un área de 32 por Al hacer el tamaño del ladrillo uni- sobre un espacio limitado de 32x32,
32 pixeles. A cada área la llamaremos forme a través de todo el juego, nuestros
ladrillo, o región. Podemos entonces gráficos pueden presentarse en lugares
transferir un bloque desde cada ladrillo a predecibles de la superficie de la imagen
lugares específicos en la superficie de la haciendo que el código de control sea
pantalla para construir una imagen com- entonces mucho más fácil de escribir.
pleta. Como podemos transferir en También estipularemos que cada superfi-
bloque varias veces desde un ladrillo (y cie deba ser 640 pixeles de ancho, dando
a varios lugares diferentes), utilizaremos un número constante de ladrillos (20) en Figura 1: Un grupo de bloques de muestra.

32 Número 02 www.linuxmagazine.com.es
SDL DESARROLLO

parencia especificamos un color simple


que, en lugar de ser transferido en Perdiendo el Juego
bloque, sera ignorado. No existe un color Para ahorrar espacio en la revista, las vari-
especifico que tenga que usarse para este ables usadas en los recortes del código
Figura 2: A la izquierda, Explorer Dug desprovisto propósito. Tampoco debería haberlo. normalmente son abreviaturas del código
de un alpha. A la derecha, con un alpha de 128. Puesto que todos los juegos son dife- fuente actual. Por ejemplo, notará que la
rentes y cada gráfico en el juego utilizará variable global theGame no está presente
nuestra función exDrawTile ha de ser un sistema de colores distinto, debemos en la mayoría de los listados que ofrecemos.
escrita para dibujar ladrillos en cualquier elegir un color clave especifico. Sin
posición arbitraria, permitiendo que sea embargo, un color cuidadosamente SDL_SetColorKey(pGeneralTileGfxU
reutilizada por el código renderizador elegido será, normalmente, suficiente , 0, 0);
para el jugador y su enemigo. Determi- para todos los gráficos del juego.
nar que ladrillo se dibuja y en que lugar Las mejores opciones son los colores Esto posibilita reemplazar la clave de
se colocará, es la responsabilidad de un muy brillantes, extremos, los que, por lo color para gráficos concretos (o incluso
bucle y una simple matriz de índice de general, nadie usaría. En Explorer Dug para regiones de ladrillos especificas) en
ladrillos. Podemos hacerlo con una breve usaremos el verde brillante ¡Incluso el el juego sin tener que crear una superfi-
función como la del Listado 2. verde fluorescente! Con unos compo- cie separada. Desafortunadamente, SDL
Puesto que no tenemos ningún medio nentes RGB de 0, 255, 0 es muy no facilita una forma fácil de retomar la
de estirar nuestros ladrillos, cualquiera improbable que alguien pueda ‘acciden- clave de color actual, pero puede alcan-
de las cosas grandes en nuestros niveles talmente’ usarlo como parte de un zarla directamente en la estructura de la
(como la puerta de salida) tendrá que ser gráfico autentico, incluso para la hierba. superficie para conseguirla como en el
construida combinando varias ladrillos Si los artistas quieren un verde brillante Listado 3.
más pequeños. Por el contrario, seguro que 0,254,0 es suficientemente El valor old_colour_key mantiene el
cualquier imagen que sea más pequeña bueno, con tal de que tengamos bastante color en un formato que la superficie
que 32x32 solo ocupara una porción del resolución con la profundidad de color pueda entender y así no necesita la fun-
ladrillo y tendremos que utilizar pixeles elegida (Véase el cuadro “Claridad de ción SDL_MapRGB cuando
transparentes para ocultar el resto. Color”). He utilizado siempre una clave re-apliquemos la clave a la superficie.
de color verde intenso en mis juegos, y
Abriendo puertas sin embargo nunca he tenido un pro- Made in Japan
La transparencia se maneja con una téc- blema. Además de hacer un solo color transpa-
nica conocida como afinado del color. Hemos elegido un color, ahora te- rente, a veces queremos hacer
Por cada superficie que requiera trans- nemos que decirle a la superficie cual es transparente la superficie completa. No
totalmente, pero si parcialmente. Esto
Listado 1: Dibujando un SDL_SetColorKey(pGeneralTileGfxU dará a la imagen una apariencia fantas-
ladrillo , SDL_SRCCOLORKEY, SDL_MapRGB(U magórica, de tal manera que podamos
01 void exDrawTile(SDL_Surface pGeneralTileGfx->format,U ver al personaje y al escenario detrás de
*pTile, int iRegion, int x, 0, 255, 0)); él. Para hacer esto necesitamos aplicar
int y) un canal alpha. Los efectos especiales
02 { Esta función toma la superficie y le hacen un uso exhaustivo de canales
03 SDL_Rect src, dest; aplica una clave de color verde brillante. alpha; explosiones, humo y lluvia usan
04 src.x = (iRegion % La clave de color tiene que ser dada en el
iNumTileWidth) * iTileWidth; mismo formato que la superficie y por Listado 2: Bucle
05 src.y = (iRegion / tanto necesitamos usar la función
iNumTileWidth) * iTileHeight; SDL_MapRGB (la cuál pasa el formato de 01 int iNumTileHeight = 20,
06 src.w = iTileWidth; la superficie), para convertir los compo- iNumTileHeight = 15;
07 src.h = iTileHeight; nentes de color RGB. Si estamos usando 02 /* rellenar una pantalla de
08 dest.x = x; color de 8 bits (p.e. una superficie paleti- 640x480 */
09 dest.y = y; zada), entonces esta función buscará el 03 int iTileWidth = 32,
10 dest.w = iTileWidth; /* No son resultado más cercano a los valores iTileHeight = 32;
necesarios actualmente, ya que dados de RGB en su tabla. Especificando 04 for(ty=0; ty<iNumTileHeight;
son ignorados */ después la clave de color para la superfi- ty++)
11 dest.h = iTileHeight; cie, cada transferencia de bloque para 05 for(tx=0; tx<iNumTileWidth;
12 if (SDL_BlitSurface(pTile, esta superficie ignorará todos los pixels tx++)
&src, pScreen, &dest) < 0) de ese color, tratándolos como transpa- 06 exDrawTile(pTileSurface,
13 fprintf(stderr, "Blit error! rentes. Desde luego que puede cambiar map_data[tx + ty *
%s", SDL_GetError()); la clave de color en cualquier punto iNumTileWidth],U
14 } durante su aplicación o desviarla com- 07 tx*iTileWidth ty*iTileHeight);
pletamente con:

www.linuxmagazine.com.es Número 02 33
DESARROLLO SDL

embargo, excede nuestro propósito


actual.

Ahora Todos Juntos


Ahora estamos listos para combinar las
tres partes de nuestra pantalla de juego
(telón de fondo, nivel de ladrillos y obje-
tos dinámicos). Esto se puede hacer de
un par de maneras. La más obvia,
podemos dibujar cada una de las partes
por turnos, como en el listado 5. No
obstante, para mejorar la velocidad del
juego, pondremos una condición adi-
cional: El primer ladrillo (región 0)
nunca será renderizado en el área de
juego. Nunca. Esto es porque la mayor
parte de este área está, de hecho, vacía.
Se perdería un montón de tiempo de pro-
ceso de la CPU si la mayor parte del
código de renderizado involucrado dibu-
jara bloques completamente

Listado 3: Rescate de la
Figura 3: Apilado de las superficies. clave de color
01 Uint32 old_colour_key;
varias texturas sobrepuestas, cada una como un simple valor de 8 bits, que el
02 old_colour_key =
con su propio componente alpha. rango de SDL_ALPHA_TRANSPARENT
pGeneralTileGfx->format->color
Usaremos alpha para un propósito (0) a SDL_ALPHA_OPAQUE (255). Por
key;
mucho más simple: desdibujar al tanto cualquier valor entre estos dos es
03
jugador al comienzo del juego, para valido, aunque internamente 128 se
SDL_SetColorKey(pGeneralTileGf
indicar que es imbatible. El componente trata como un caso especial y por eso se
x,
alpha de una superficie se mantiene procesa más rápidamente. Es posible
04 SDL_SRCCOLORKEY,
utilizar las claves de color y las superfi-
05
cies alpha al mismo tiempo.
SDL_MapRGB(pGeneralTileGfx->fo
Claridad de Color Como con la clave de color, SDL no
rmat, 0, 255, 0));
proporciona una forma de recuperar el
Si la superficie a la que se ha aplicado la 06 exDrawTile(pGeneralTileGfx,
valor alfa de una superficie sin referirse a
clave de color ha sido creada con 12, xpos, ypos);
la variable directamente, como en el Lis-
SDL_LoadBMP, usará color de 24 bits. Esto 07
tado 4.
significa que el componente verde tiene 8 SDL_SetColorKey(pGeneralTileGf
También es posible especificar una
bits de resolución, 254 y 255 deben ser col- x,
ores diferentes y no hay problema. Por otra cantidad distinta de alpha para cada
08 SDL_SRCCOLORKEY,
parte si la superficie solo tiene color de 16 pixel individual, lo cual nos permitirá
09 old_colour_key);
bits, entonces es probable que el verde solo crear un borde mucho mas brumoso
ocupe 5 o 6 bits. Esta perdida de precisión alrededor del personaje. De todos
significa que 254 y 255 son el mismo color modos, esto es muy lioso, ya que la Listado 4: Rescate del valor
puesto que ambos se representan interna- mayoría de los formatos de fichero no alpha
mente como 31 (255>>3 == 254>>3). Para incluyen esta información. El formato
estar absolutamente seguro hemos de veri- XCF de GIMP lo hace, pero actualmente 01 Uint8 old_alpha;
ficar el formato de la superficie
no hay muchas librerías que apoyen 02 old_alpha =
manualmente. Lamentablemente esta
este formato. En vez de eso, tenemos pPlayerGfx->format->alpha;
prueba sucede durante el juego, pero nue-
que cargar dos imágenes, una contiene 03 SDL_SetAlpha(pPlayerGfx,
stros gráficos son creados fuera del juego
donde esta información no está disponible. la información alpha y otra contiene la SDL_SRCALPHA, iAmountOfAlpha);
En realidad, no importa, siempre y cuando el información gráfica (intensidad) y unifi- 04 exDrawTile(pPlayerGfx, iFrame,
componente verde de los colores reales no carlas manualmente mediante la lectura xpos, ypos);
exceda 247 (suponiendo una precisión de 5 de los pixeles específicos de la superfi- 05 SDL_SetAlpha(pPlayerGfx,
bits) estaremos sobre terreno seguro. cie alpha y combinándolos con la SDL_SRCALPHA, old_alpha);
superficie de intensidad. Esto, sin

34 Número 02 www.linuxmagazine.com.es
SDL DESARROLLO

Si hay ladrillos que • Objetos que se mueven


impliquen transpa- • Objetos que permanecen quie-
rencias también tos, pero animados
necesitaremos copiar Componer la pantalla implica eliminar
el telón de fondo cada objeto dinámico de ella, así que nos
antes de dibujarlos. hemos quedado con el fondo estático
Determinar que otra vez. Esto se puede hacer de una
ladrillos específicos cuantas formas distintas.
tienen pixeles Primeramente, podríamos interrogar a
transparentes no es cada objeto dinámico para recordar a
difícil, pero es lento. que se parecía la pantalla antes de
Así que podemos haberla dibujado y entonces redibujar
comprobar ese bloque cuando solicitemos una
cualquiera de ellos reposición. A pesar de ser aceptable, esto
cuando comienza el implica un montón de trabajo en la parte
Figura 4: Completando la imagen del juego. juego, o indicarle al de cada objeto y no estamos con-
artista que solo los siderando que dos (o más) objetos
transparentes en la pantalla y, en los jue- ladrillos con 8 o superior (por ejemplo) puedan superponerse. Aun así, éste
gos, siempre nos alegramos de descubrir pueden tener transparencias. Elegiremos puede ser seguramente el método más
optimizaciones de velocidad. La manera la segunda opción. eficiente de reposición.
mas rápida para dibujar algo es no dibu- Además podríamos llamar a exDraw-
jarlo en absoluto, así que sacrificaremos Borrando y rebobinando Static otra vez. Esto podría funcionar,
esta minúscula cantidad de memoria al Ahora somos capaces de dibujar la pan- pero será muy lento. Sin embargo, si la
gran dios de la velocidad. talla una vez; necesitamos ser capaces imagen del telón de fondo alguna vez
Podemos mejorar la velocidad más de dibujarla varias veces. Lo cual nos estuvo animada necesitaríamos imple-
aun mediante la combinación del telón permitirá animar algunos enemigos mentar esta solución.
de fondo y los ladrillos en una única moviéndose en la parte superior. El
función de renderizado. Esto se puede código para esto es muy fácil, pero ha de
hacer muy fácilmente diciendo que si estar hecho correctamente o tendremos Listado 5: Dibujando la
queremos dibujar el primer ladrillo (el desagradables chismes en la pantalla, o pantalla del juego
único completamente transparente), una carga innecesaria para la CPU 01 void exDrawStatic(void)
copiamos realmente (p. e.: transferir un (Véase el Listado 7). 02 {
bloque) una porción del telón de fondo Por “dinámica” realmente queremos 03 int tx, ty;
sobre la pantalla. Por otra parte, dibu- decir dos cosas: 04 int obj;
jaremos un ladrillo en vez del telón de 05 /* Telon de fondo */
fondo. De este modo, en una pantalla
con 300 ladrillos (20x15) dibujaremos
Listado 6: Dibujado de un 06 SDL_BlitSurface(pBackdrop,
ladrillo plano NULL, pScreen, NULL);
300 ladrillos con datos validos. Mien- 07 /* Ladrillos */
tras que, en la propuesta original, 01 void exDrawLevelTile(int tx, 08
habríamos dibujado 600. La cuestión de int ty) for(ty=0;ty<iNumTileHeight;ty+
“es más rápido dibujar un ladrillo 02 { +)
grande (el telón de fondo) qué varios 03 SDL_Rect src; 09
pequeños” se la dejaré a las pruebas de 04 int iRegion; for(tx=0;tx<iNumTileWidth;tx++
rendimiento. Hay muchas variables a 05 iRegion = exGetTileRegion(tx, )
considerar en este tipo de optimización ty); 10 exDrawTile(pGeneralTileGfx,
y la única forma de saber que método 06 src.x = tx * iTileWidth; map_data[tx + ty *
se ejecutará más rápido es probar 07 src.y = ty * iTileHeight; 11 iNumTileWidth], tx, ty);
ambos. Durante el desarrollo encontré 08 src.w = iTileWidth; 12 /* Objetos dinámicos- por
que la solución “varios pequeños” 09 src.h = iTileHeight; ejemplo, enemigos */
usaba menos tiempo de proceso 10 if (iRegion == 0 && pBackdrop) 13
(alrededor del 8% , según top) y por 11 SDL_BlitSurface(pBackdrop, for(obj=0;obj<iNumEnemies;obj+
eso la adopte. &src, pScreen, &src); +)
Usando esta idea, ahora podremos 12 if (iRegion) 14 exDrawTile(pEnemyTileGfx,
escribir una rutina especial para dibujar 13 exDrawTile(pGeneralTileGfx, Enemy[obj].Graphic,
un ladrillo plano, que debería (o no iRegion, src.x,U 15 Enemy[obj].xpos,
debería) copiar la superficie del telón de 14 src.y); Enemy[obj].ypos);
fondo en lugar de un ladrillo (Véase el 15 } 16 }
Listado 6).

www.linuxmagazine.com.es Número 02 35
DESARROLLO SDL

tiene el mismo tamaño: 32x32. Así que si la


Doble Búfer posición del enemigo no está en el límite de Listado 7: Dibujado de la
los 32 pixels (p.e. 0, 32, 64, 96, 128, etc), pantalla
Bajo X11, podemos conseguir gráficos suaves
debe superponerse por lo menos a más de 01 exDrawStatic();
porque nunca escribimos directamente en
un ladrillo. Podemos ampliar el código 02 while(TheGame.bIsRunning)
la pantalla: escribimos en un búfer separado
anterior para incluirlo en el Listado 8. 03 {
y SDL transfiere los bloques a la pantalla. Sin
embargo algunos controladores escriben Para eso necesitamos un reciclador C, 04 exRepairScreen(); /* Quitar
directamente en la pantalla. Si estamos el símbolo de porcentaje (%) es el ope- todos los objetos dinámicos */
usando uno de estos controladores y no rador del modulo y devuelve el resto del 05 exUpdateLevel(); /* Actualizar
puede dibujarlo todo lo bastante rápido, lo calculo (en nuestro caso xpos/Ancho). los objetos dinámicos */
vera “deshilachado”. Así que si aparece un resto es que esta- 06 exDrawDynamic(); /* Dibujar
Esto ocurre porque se puede ver la mitad del mos solapando el ladrillo vecino. los objetos dinámicos que
ultimo cuadro y la mitad del cuadro actual, Desde aquí podemos dibujar y actua- regresan a la pantalla */
al mismo tiempo. En esas situaciones puede lizar la pantalla completa. También 07 SDL_Update(pScreen, 0,0,0,0);
emplear un doble búfer. Esta técnica conll- podemos llamarla repetidamente en un 08 }
eva dos búferes de pantalla , uno que dibuja bucle para mover los enemigos alrededor
sobre el monitor y otro que dibuja nuestro de la pantalla.
juego internamente. Esto significa que
bucle. Preguntando de nuevo “hay
nunca se escribirá el mismo cuadro que está Capta el mensaje alguna entrada, hay alguna entrada”.
siendo mostrado.
SDL utiliza un paradigma conocido como Este proceso también es conocido como
Emplear doble búfer en SDL es muy fácil.
programación orientada a eventos. Esto encuesta (polling). Fijémonos que se
Primero necesitamos ajustar el modo de
funciona de la misma manera que lo hace llama “orientada a eventos” y no “orien-
vídeo:
X Window, Microsoft Windows y la ma- tada a entrada” porque Linux puede
pScreen = SDL_SetVideoMode(U yoría de la programación para entornos decirnos varias cosas (como que la ven-
iWidth, iHeight, 16, U gráficos de usuario (GUI para los amigos). tana se ha redimensionado o se ha
SDL_HWSURFACE | SDL_DOUBLEBUF); También está algo relacionado con la pro- cerrado) y no solamente que el teclado o
Esto añade dos búferes a la superficie de la
gramación de redes. En una aplicación el ratón envían una entrada de datos.
pantalla, un búfer frontal y un búfer trasero.
“tradicional” para consolas, el programa Bajo SDL nos da eventos cuando:
Podemos escribir en esta superficie como
normal con la función SDL_BlitSurface y SDL
comienza, hace algo y termina. Un soft- • Hay señal de entrada desde el
solo escribirá dentro de un búfer: en el ware altamente interactivo no pueden teclado, el ratón o la palanca de
trasero. Entonces, en lugar de actualizar la trabajar de este modo, por culpa de la juegos
pantalla con UpdateRect, intercambiamos etapa “esperar una entrada(input)”. Mien- • Nuestra ventana se activa o se
los búferes de pantalla usando: tras esperamos una entrada, no puede desactiva
SDL_Flip(pScreen); suceder nada y si ocurre algún tipo de • Nuestra ventana se redimen-
Esto realizará una copia de la nueva imagen entrada que no es la que esperamos siona (solo ocurre si se llama a
desde el búfer trasero al búfer delantero y (como una entrada de ratón, mientras SetVideoMode desde
estaremos listos para escribir el siguiente esperamos una pulsación del teclado) se- SDL_VIDEORESIZE)
cuadro. Es el búfer delantero el que entonces remos incapaces de procesarla. Además, • Nuestra ventana se cierra, en
se muestra en la pantalla. la rutina de entrada está diciendo que
está “bloqueada”, lo cual impide que el
Listado 8: Detectado de los
La tercera opción es hacer uso de la resto de la acción (como las actualiza-
función exDrawLevelTile y redibujar el ciones de pantalla o las animaciones)
límites del ladrillo
ladrillo por debajo de cada objeto ocurra hasta que se reciba la entrada
dinámico usando código existente. Esto esperada. Los juegos basados en turno, 01 if (Enemy[obj].xpos %
es un punto intermedio entre ambas como el ajedrez, funcionan bien con el iTileWidth)
opciones razonable. bloqueo de entrada, pero los juegos de 02 exDrawLevelTile(tile_x+1,
acción como el nuestro no lo hacen, así tile_y);
tile_x = Enemy[obj].xpos /U que tendremos que usar el paradigma de 03 if (Enemy[obj].ypos %
iTileWidth; programación orientado a eventos. iTileHeight)
tile_y = Enemy[obj].ypos /U Con la programación orientada a even- 04 exDrawLevelTile(tile_x,
iTileHeight; tos, en lugar de preguntar, cuando tile_y+1);
exDrawLevelTile(tile_x, tile_y); queremos, a Linux por una entrada 05 if ((Enemy[obj].xpos %
específica, nuestro programa se pone en iTileWidth) &&
Si los enemigos se extienden sobre dos a un bucle y continuamente pregunta “hay (Enemy[obj].ypos %
más ladrillos, entonces cada uno de esos alguna entrada, hay alguna entrada”. iTileHeight))
ladrillo necesitará ser redibujado. Detectar Entonces, cuando llega la entrada (que 06 exDrawLevelTile(tile_x+1,
esto es bastante fácil puesto que nos hemos puede ser de cualquier tipo), la proce- tile_y+1);
cerciorado de que cada ladrillo del juego saremos y continuaremos con nuestro

36 Número 02 www.linuxmagazine.com.es
SDL DESARROLLO

genes. Este es un limite natural provo-


Listado 9: Un manejador cado porque la función SDL_UpdateRect
Listado 10: Un manejador
de eventos bastante espera hasta el siguiente ciclo de red- de eventos aun más
simpático para Explorer ibujado del monitor antes de permitir simpático para Explorer
Dug que nuestro juego continúe. Dug
Para hacer esta temporización uniforme
01 SDL_Event ev; 01 SDL_Event ev;
tenemos que manejarla nosotros mismos
02 while(SDL_PollEvent(&ev) >= 0) 02 Uint32 prev_time, curr_time;
introduciendo bloqueos de cuadro, donde
03 { 03 Uint32 period, delta_time;
el ritmo de presentación de cuadros se
04 /* ev.type representa el tipo 04 period = 1000/60; /* 16
tapona hasta pararlo si exceder un valor
de mensaje que recibimos */ millisegudos entre cuadros */
específico. Los juegos comerciales de 3D
05 /* Maneja el mensaje y 05 TheGame.bIsRunning = TRUE;
(como Unreal) siempre marcan 60 marcos
continua la encuesta para más 06 prev_time = SDL_GetTicks();
por segundo, ya que esto está bastante
eventos */ 07 while(SDL_PollEvent(&ev) >= 0
cerca del índice de refresco de una tele-
06 if (ev.type == SDL_QUIT) /* && TheGame.bIsRunning)
visión o de un monitor y hace que el
Debemos manejar esto */ 08 {
juego parezca que va fino.
07 break; 09 exUpdateInterface(&ev); /*
60 cuadros por segundo (fps) significa
08 /* Otros manejadores de procesado de eventos del
que debemos terminar el proceso de
mensajes van aquí */ teclado/palanca etc */
cada cuadro en menos de 16,666 milise-
09 } 10 do {
gundos. Desde luego que se puede
conseguir, si bloqueamos nuestro juego a 11 curr_time = SDL_GetTicks();
cuyo caso debemos salir del 60 fps. 12 /* Comprobar si han pasado 49
bucle de eventos y cerrar el pro- Si conseguimos producir el cuadro días */
grama actual más aprisa que esto, esperaremos 13 if (curr_time > prev_time)
• Nuestra ventana necesita redi- un rato (otra vez, con la función de 14 delta_time =
bujarse (en ese caso debemos SDL_Delay) hasta que han expirado nu- curr_time-prev_time;
llamar a SDL_UpdateRect) estros 16,666 milisegundos, si no 15 else
Estos eventos son puestos en una cola continuaremos con el cuadro siguiente. 16 delta_time = 0xffffffff -
internamente y nos los dan cuando pre- Sin embargo, cada vez que completemos (prev_time-curr_time) + 1;
guntamos por ellos, uno por uno con la un ciclo de nuestro bucle esperaremos 17 SDL_Delay(1);
función SDL_PollEvent. siempre 1 ms, lo mínimo para cercio- 18 }
Este bucle funciona muy mal ¿Por rarnos de que el procesador, y otros 19 while(SDL_PollEvent(&ev) >= 0
qué? Porque no hay noción del tiempo. aplicaciones (tales como los demonios && delta_time < period);
Primero, con un lazo tan apretujado, del servidor) consiguen un momento de 20 prev_time = curr_time;
Linux tiene muy poco tiempo para respiro. 21 if (ev.type == SDL_QUIT)
procesar algo. Es el equivalente moder- Podemos medir tiempo con la función 22 break;
no del ¡10 GOTO 10! Este problema se SDL_GetTicks. Ésta devuelve el número 23 exRepairScreen();
puede resolver fácilmente introduciendo de milisegundos desde que el programa 24 exUpdateLevel();
un corto retraso con la función fue iniciado y puede ser colocada en 25 exDrawDynamic();
SDL_Delay que vimos el mes anterior. cualquier parte del código de actua- 26
Esperando un milisegundo cada vez que lización del dibujo para averiguar SDL_UpdateRect(TheGame.pScreen
ejecutamos el bucle no significa mucho cuánto tiempo tomó el cuadro anterior. , 0,0,0,0);
para nuestro juego (seguimos sintiendo Esto debe estar en torno a algunos 27 }
que el teclado y el ratón responden), milisegundos.
pero para el Sistema Operativo será la El resultado de SDL_GetTicks se alma- esta función ya está advertido sobre el
diferencia entre trabajar bien y dete- cena en un Uint32 lo que significa que el tema y de los pasos convenientes para
nerse completamente. contador de tiempo se reiniciará después evitar el problema, como hacemos en el
El segundo problema con el tiempo es de alrededor de 4 mil millones de milise- Listado 10.
que el juego se ejecutara tan rápido gundos o, en otras palabras, 49 días. En Ahora tenemos un lazo de evento en
como pueda. De una forma bastante nuestro juego, esto solamente sucederá su sitio, y estamos listos para procesar
divertida, pero eso no es lo que quere- si usted juega 49 días seguidos. cualquier evento que recibamos, sea del
mos. Los juegos deben funcionar tan Esto es inverosímil, y los efectos ratón, el teclado o, incluso, de una
rápido como sea posible, pero no al secundarios (negativos) serán probable- palanca de juegos. Pero por lo que se
máximo. Si nuestro monitor refresca su mente mínimos. Pero en los juegos en refiere a abarcar completamente esos
pantalla 70 veces en un segundo, línea con acceso masivo de multi- acontecimientos, y lo más importante,
entonces tendremos 70 imágenes dife- jugadores tales como Ultima Online, cómo los utilizaremos para controlar
rentes cada segundo. Si nuestro monitor esta acontecimiento es la norma, no la nuestro juego, tendremos que esperar
refresca a 85 Hz tendremos 85 imá- excepción. Así que si está utilizando hasta el mes próximo… ■

www.linuxmagazine.com.es Número 02 37
DESARROLLO Curses

Interfaces de Texto con curses

Dialogando se Entiende
la Gente
El otro día estuve en un taller

mecánico de esos que tanto me gusta

poner como ejemplo (sí, los frenos de

mi coche ya funcionan de nuevo, gra-

cias por preguntar) y tuve ocasión de

comprobar por enésima vez lo que ya

mencioné en esta misma sección

hace un mes: ahí los tenías, dos orde-

nadores Pentium de trigésima

generación, corriendo Ventanuflas

eXPlosión, chupando miles de megas

de RAM, requiriendo tarjetas gráficas

de última generación y discos duros

del tamaño del desierto de los Mone-

gros y todo ¿para qué? Para que el

personal de administración corriese

un programa de facturación en modo


utilizaron para poner a los primeros diálogo con tres botones: “Aceptar”,
texto. POR PAUL C. BROWN
hombres en la Luna, y pagarle una “Cancelar”, “Abortar”. El usuario ha de
licencia a Microsoft para eso, es una ser capaz de navegar por los botones
burrada. Ya puestos, sirve una insta- (utilizando, por ejemplo, las teclas cur-
lación de Linux (o BSD) en modo texto, sor derecha y cursor izquierda) y

¡ Que desperdicio! O tal vez no. Creo


que cada vez hay más gente aparte
de mi que piensan que para lo único
sobre cualquier trasto viejo rescatado
del desván y un buen programa en
curses, que con un poco de trabajo, se
puede hacer de todo. Precisamente, el
seleccionar uno de los botones con, por
ejemplo, Enter. Al pulsar esta última
tecla, el diálogo se ha de cerrar y la apli-
cación ha de poder recuperar el valor del
que sirve un Windons es para jugar, ver ejercicio de este mes consiste en botón pulsado para así actuar en conse-
DVDs y correr programas en modo texto. demostrar lo sencillo que es crear cuencia. Si os descargáis el fichero
Es la única manera de estar seguros de botones en una aplicación de consola. curses.tar.gz que encontraréis en http://
que no se cuelgue o se comprometa el Envolveremos todo en clases C++ y www.linuxmagazine.com.es/Magazine/
sistema con algún fallo de seguridad. A nos basaremos en la aplicación que ya Downloads/02 y lo compiláis (se incluye
mi entender, comprar un superorde- iniciamos el mes pasado. El ejemplo que un Makefile para simplificar este paso),
nador, más potente que los que se implementaremos es una ventana de descubriréis que el programa de ejemplo

38 Número 02 www.linuxmagazine.com.es
Curses DESARROLLO

funciona como se ha descrito en el pá- diálogo son dos, Aceptar y Cancelar ejemplo, el método dialWin() se limita a
rrafo anterior. Una vez con la aplicación (aunque nuestro ejemplo contenga tres), imprimir la etiqueta del botón para efec-
corriendo, si pulsamos en F1 se abre una en aras de la simplicidad y para man- tos de depurado.
ventana de diálogo con los tres botones tener el código simple, no
descritos. Podemos movernos de implementamos ningún método en la Ventana
izquierda a derecha o de derecha a clase application (ver Listado 2) que Pasemos ahora a los métodos de la clase
izquierda con las teclas de cursor, y se sirva para personalizar los botones (esto window, que son los que hacen la mayor
irán iluminando cada uno de los veremos como se hace en futuras entre- parte del trabajo sucio. Podemos ver un
botones (ver Figura 1). Cuando pul- gas de esta serie). Y ya que hablamos de fragmento del archivo window.cpp en el
samos Enter el diálogo se cierra y la application, veamos como ha cambiado Listado 3. Lo primero que destaca es el
aplicación recoge el valor e imprime el desde el mes pasado. Como podemos ver constructor que implementa las ven-
nombre del botón pulsado (ver Figura en el Listado 2, es igualmente muy sen- tanas de diálogo. Tenemos un atributo,
2). Para salir de la aplicación y volver a cillo y minimal. Primero tenemos un
la línea de comandos, pulsaremos Esc. nuevo tipo de dato, el tipo button, del
que después hablaremos, y con él Listado 1: El método
Aplicación creamos un vector que almacena los dialwin() en
Lo primero es echarle un vistazo a la datos de los tres botones, Aceptar, Can-
application.cpp
función main(). Como podemos obser- celar y Abortar, que vamos a mostrar.
var en el Listado 1, sigue siendo Para aquellos no familiarizados con la 01 void application::dialWin(int
minimal. Aunque hacemos una llamada clase vector, os diré que es una adición dial_Width, int dial_Height,
a un nuevo método (dialwin()) en el muy útil al arsenal de clases de C++. string dial_Text, string
bucle principal de la función, que es pre- Para utilizarlo, hay que incluir el fichero dial_Title="Untitled",...)
cisamente la que se encargará de poner de cabecera vector (con #include <vec- 02 {
un cuadro de diálogo en la pantalla. tor>). Básicamente, un vector en C++ 03 button
Como en la vasta mayoría de los casos, es un array que puede admitir cualquier the_Button(1,dial_Height-4,"Ac
el número de botones que contiene un tipo de dato, primitivo o no, e imple- eptar");
menta una serie de útiles métodos para 04 vector<button> dial_Buttons;
añadir nuevos elementos, devolver ele- 05
Listado 1: principal.cpp mentos de una posición determinada dial_Buttons.push_back(the_But
01 #include "application.h" (con el método at(índice), del que ton);
02 después veremos un ejemplo) o para cal- 06
03 int main() cular su tamaño tanto en bytes, como en the_Button=button(11,dial_Heig
04 { número de elementos. Para llenar el vec- ht-4,"Cancelar");
05 int ch, cDialogos=1; tor utilizamos el método push_back() 07
06 int counter=0; asociado a la clase vector que lo que hace dial_Buttons.push_back(the_But
07 application my_App(TRUE,"Mi es añadir un elemento a la cola del vec- ton);
Aplicación número %i",1); tor. El siguiente paso consiste en crear 08
08 un objeto window (en este caso lo lla- the_Button=button(22,dial_Heig
09 mamos dial_box) y, como tenemos ht-4,"Abortar");
while((ch=my_App.wGetch())!=27 sobrecargado el constructor de la clase 09
) window (después lo veremos), al pasarle dial_Buttons.push_back(the_But
10 { como parámetro el vector de botones, ton);
11 my_App.wWrite(1,2,"Vuelta entre otros, se invoca al constructor que 10
nº: %i",counter++); crea una ventana de diálogo. Básica- 11 makeString(dial_Title);
12 if(ch==KEY_F(1)) mente eso es todo, puesto que, una vez 12 window dial_Box(dial_Width,
13 { llamada, el control se pasa a la ventana dial_Height, dial_Text,
14 de diálogo, que implementa su propio dial_Buttons, 0, dial_Title);
my_App.dialWin(50,10,"Esto se bucle y que no cede el control de vuelta 13
supone un Diálogo.","Diálogo a application hasta que se seleccione 14 int
%i",cDialogos++); uno de los botones y se pulse Enter. button_Pressed=dial_Box.closeW
15 } Cuando esto sucede, application puede indow();
16 consultar el botón activo en el momento 15
17 } de cerrar la ventana de diálogo reco- 16
18 giendo el valor devuelto por el método app_Window.wWrite(2,2,dial_But
19 my_App.~application(); closeWindow(). El valor devuelto por tons.at(button_Pressed).getTag
20 exit(0); closeWindow() es un número, que en ());
21 } esto caso puede ser o 0 (Aceptar), o 1 17 }
(Cancelar), o 2 (Abortar). En nuestro

www.linuxmagazine.com.es Número 02 39
DESARROLLO Curses

Listado 2: Los métodos relevantes de window en window.cpp


001 #include "window.h" 044 .
002 045 .
003 . 046
004 . 047 void window::makeDialogue(int wide,int
005 . high,string content,string win_Name)
006 048 {
007 window::window(int wide,int high,string 049 int posX=(COLS/2)-(wide/2);
content,vector<button> buttons,int button_Num=0, 050 int posY=(LINES/2)-(high/2);
string win_Name="Untitled"...) 051
008 { 052 w_Handle=newwin(high,wide,posY,posX);
009 w_Buttons=buttons; 053
010 borders_Inactive.push_back(ACS_ULCORNER); 054 title=win_Name;
011 borders_Inactive.push_back(ACS_URCORNER); 055 has_Frame=TRUE;
012 borders_Inactive.push_back(ACS_LLCORNER); 056
013 borders_Inactive.push_back(ACS_LRCORNER); 057 p_Handle=new_panel(w_Handle);
014 borders_Inactive.push_back(ACS_HLINE); 058
015 borders_Inactive.push_back(ACS_VLINE); 059 putTitle();
016 060 wWrite(0,0,content);
017 061
borders_Active.push_back(ACS_ULCORNER|A_STANDOUT 062 activeButton();
); 063
018 064 showPanels();
borders_Active.push_back(ACS_URCORNER|A_STANDOUT 065 dialLoop();
); 066 }
019 067
borders_Active.push_back(ACS_LLCORNER|A_STANDOUT 068 void window::dialLoop()
); 069 {
020 070 int ch;
borders_Active.push_back(ACS_LRCORNER|A_STANDOUT 071
); 072 while((ch=getch())!=13)
021 073 {
borders_Active.push_back(ACS_HLINE|A_STANDOUT); 074 switch (ch)
022 075 {
borders_Active.push_back(ACS_VLINE|A_STANDOUT); 076 case KEY_LEFT:
023 077 if(active_Button==0)
024 active_Button=button_Num; active_Button=w_Buttons.size();
025 if(wide>COLS || high>LINES) 078 active_Button--;
026 { 079 activeButton();
027 makeDialogue(20,10,"Dialogue too 080 break;
big","Error"); 081 case KEY_RIGHT:
028 closeWindow(); 082 active_Button++;
029 } 083 if(active_Button==w_Buttons.size())
030 makeString(win_Name); active_Button=0;
031 makeDialogue(wide,high,content,win_Name); 084 activeButton();
032 } 085 break;
033 086 }
034 087 //wWrite(0,1,"Botón %i",active_Button);
035 int window::closeWindow() 088 //wWrite(0,2,"Pulsado %i",ch);
036 { 089 }
037 del_panel(p_Handle); 090 }
038 delwin(w_Handle); 091
039 refresh(); 092 .
040 return (active_Button); 093 .
041 } 094 .
042 095
043 . 096 void window::activeButton()

40 Número 02 www.linuxmagazine.com.es
Curses DESARROLLO

Listado 2: Los métodos relevantes de window en window.cpp (continuación)


097 { 114
098 for(unsigned int i=0;i<w_Buttons.size();i++) 115 //Segunda fila del botón
099 { 116
100 mvwaddch(w_Handle,but_Y+1,but_X,borders.at(5));
drawButton(w_Buttons.at(i).getTag(),w_Buttons.at 117
(i).getPx(), mvwprintw(w_Handle,but_Y+1,but_X+1,label.c_str()
w_Buttons.at(i).getPy(),borders_Inactive); );
101 } 118
102 mvwaddch(w_Handle,but_Y+1,but_X+label.length()+1
drawButton(w_Buttons.at(active_Button).getTag(), ,borders.at(5));
w_Buttons.at(active_Button).getPx(), 119
w_Buttons.at(active_Button).getPy(), 120 //Tercera fila del botón
borders_Active); 121
103 } mvwaddch(w_Handle,but_Y+2,but_X,borders.at(2));
104 122 for(unsigned int i=0;i<label.length();i++)
105 void window::drawButton(string label,int but_X, 123 {
int but_Y, vector<chtype> borders) 124
106 { mvwaddch(w_Handle,but_Y+2,but_X+1+i,borders.at(4
107 //Primera fila del botón ));
108 mvwaddch(w_Handle,but_Y,but_X,borders.at(0)); 125 }
109 for(unsigned int i=0;i<label.length();i++) 126
110 { mvwaddch(w_Handle,but_Y+2,but_X+label.length()+1
111 ,borders.at(3));
mvwaddch(w_Handle,but_Y,but_X+1+i,borders.at(4)) 127
; 128 wrefresh(w_Handle);
112 } 129 }
113 130 .
mvwaddch(w_Handle,but_Y,but_X+label.length()+1,b 131 .
orders.at(1)); 132 .

w_Buttons, que contiene el vector de qué botón esta activo. Seguidamente, el todos. Otra cosa es que, tal y como viene
botones de la ventana de diálogo. A con- constructor comprueba el tamaño de la implementado, su comportamiento no es
tinuación, los atributos borders_Inactive ventana de diálogo, y si es demasiado del todo funcional, exigiendo que el
y borders_Active guardan el usuario pulse dos veces Enter
estilo de los bordes del botón en para volver a la ventana prin-
modo inactivo (botón no selec- cipal de la aplicación. Pero,
cionado) y modo activo (botón como el motivo de su presen-
seleccionado), respectivamente. cia es meramente a efectos de
Yo he escogido mostrar los bor- depurado (nunca nos va a
des normales en el primer caso y interesar que un usuario vea
en vídeo inverso en el segundo. esta ventana de error), así se
El efecto se puede apreciar en la queda, como doble recordato-
Figura 1 donde se ve el botón rio de lo malos que son los
central seleccionado. La librería bugs en versiones de produc-
curses implementa una serie de ción de un programa. Después
seudo-caracteres para dibujar de este constructor un tanto
líneas y bordes, y estos son los especial, tenemos el método
que utilizo aquí para crear el closeWindow(), que el mes
canto de los botones. Por ejem- Figura 1: Se puede navegar por los botones utilizando las teclas de cursor. pasado se limitaba a cerrar la
plo, ACS_ULCORNER es un ventana y este mes, además,
carácter que se utiliza en la esquina grande, imprime un error. Este diálogo devuelve un valor: el número del botón
superior izquierda (UL = Upper, Left) de de error mostrará los botones que hemos pulsado. El método makeDialogue() es
un cuadro y ACS_HLINE es una línea descrito para la ventana de diálogo que el que se encarga de colocar la ventana
horizontal. El atributo active_Button pretendíamos crear, por tanto, puede ser del diálogo en la pantalla. Lo primero
contiene el valor que le dice a la clase demasiado pequeño para mostrarlos que hace es calcular un posición más o

www.linuxmagazine.com.es Número 02 41
DESARROLLO Curses

Figura 2: La aplicación
Listado 4: La clase button muestra el nombre del
en button.cpp botón pulsado.

01 #include "button.h"
02
03 button::button(int pos_X=0,int
pos_Y=0,string
label="Aceptar")
04 {
05 px=pos_X; py=pos_Y;
06 tag=label;
07
button_Length=tag.length()+2;
08 }
09
10 button::~button()
11 {
12
13 }

menos central para nuestro diálogo. A Figura 3: El diálogo


continuación crea la ventana curses que de error por exceso
contendrá la ventana de diálogo, le de tamaño.
coloca un título, un borde, y lo pone
sobre un panel para poder apilarlo tor, size(). Después, utilizamos i para extra. Por ejemplo, como alguno ya
encima de otras ventanas. Después se poder referirnos a cada uno de los ele- sabrá, es posible pasar una función C
invoca a activeButton(), que es el mentos del vector de botones con el como parámetro de otra función. ¿No
método encargado de dibujar (por medio método at(), explicado más arriba. A sería éste un mecanismo ideal para aso-
del método drawButton()) cada uno de continuación, volvemos a utilizar at() ciar una acción con un botón? Tal vez en
los botones, primero sin enfoque, y para dibujar un borde activo alrededor otro capítulo.
después redibuja el botón que tiene el del botón activo, utilizando como índice
enfoque con los bordes resaltados. A active_Button. Y llegamos al método del Conclusión
continuación, makeDialogue() muestra que todos estaban hablando: drawBut- Hemos visto lo relativamente sencillo
la ventana, actualizando la pantalla y ton(). Este método parece complejo, que es implementar botones en curses y
llama a dialLoop(), el método que con- pero en realidad es una tontería. Un como podemos hacer que afecten al
tiene el bucle del diálogo. Prosigamos botón normalmente constará de tres filas resto del entorno. El siguiente paso iría
con dialLoop, que es el siguiente en de caracteres ¿vale? El borde superior, la dirigido a coger el valor devuelto por la
orden de aparición. Este método es un parte central con el texto de la etiqueta y ventana de diálogo, a través de un
sencillo bucle que comprueba en cada el borde inferior.drawButton se limita a estructura switch... case, llevar a cabo las
pasada si se ha pulsado la tecla Enter dibujar cada una de esas filas con el distintas acciones para cada caso. El mes
para salir. Si no es así, mira si las teclas borde con el atributo (activo o inactivo) que viene veremos como crear menús
pulsadas son las de cursor izquierda (si correspondiente. para nuestra aplicación y con ello habre-
es así, suma 1 al atributo active_Button) mos abordado ya la mayor parte de la
o cursor derecha (en tal caso resta 1 al Botón implementación de interfaces con curses.
atributo active_Button). A continuación, Lo difícil se ha acabado, pero nos queda Hasta entonces, disfrutad de la progra-
redibuja los botones, iluminando el una pequeña clase antes de poder dar mación. ■
botón activo. El redibujado de los carpetazo al artículo. En el Listado 4
botones lo realiza la función activeBut- podéis ver la sencillísima clase button
ton() que itera por el vector apagando que almacena en su interior la informa- Paul C. Brown lleva ya unos cuantos
años escribiendo sobre tecnología e
todos los botones (dibujando el borde ción necesaria (la posición del botón y la
EL AUTOR

informática, especializándose en GNU/


inactivo). El bucle utilizado es otro buen etiqueta a mostrar) para que podamos Linux y tecnologías de Software Libre. En
ejemplo de la flexibilidad de los vectores: dibujar cada uno de los botones. ¿Que de la actualidad comparte la dirección de
la variable i inicialmente vale cero y va tan sencilla que es esta clase podría Linux Magazine España y la escritura
incrementándose hasta el límite del haber sido una estructura? Pues sí, pero con la programación recreativa y la
ardua tarea de enseñar Squeak a su hijo
tamaño del vector, que podemos preferí hacerlo clase, no fuera que más
de cinco años.
averiguar con el método de la clase vec- adelante se me ocurriera funcionalidades

42 Número 02 www.linuxmagazine.com.es
Perl DESARROLLO

Lógica cuántica en Perl y su efecto sobre el juego organizado

Casino Cuántico
La superposición del mundo de la

física cuántica estará pronto

disponible en el núcleo de Perl 6, en

las llamadas “yunciones”. En la actua-

lidad, ya hay disponible un módulo.

En el artículo de este mes le echare-

mos un vistazo a este revolucionario

concepto haciendo uso de un script

que juega al blackjack.


POR MICHAEL SCHILLI

R
ecientemente estuve en una libre- 10 puntos cada una. Un As puede valer use Quantum::Superpositions;
ría ojeando algunos títulos cuando 1 u 11. my $count = any(4,14,24,34);
encontré uno titulado “Winning
Casino Play” [2], donde un jugador pro- ¡Cuidado con la A partir de este punto, la variable $count
fesional explicaba como jugar en los Superposición! parecerá tener cuatro valores diferentes.
casinos de Las Vegas y de Atlantic City ¿1 u 11? De acuerdo, si le sale un 7, un 8 Una expresión lógica como la siguiente
con una alta probabilidad de ganar. El y un As, 7 + 8 + 11 = 26, se pasa. Pero
Blackjack era uno de los temas tratados se puede quedar en el juego contando el if($count == 4 and $count ==U
por el autor en detalle, ya que es uno de As como un 1: 7 + 8 + 1 = 16. 14){
los juegos, dentro del casino, que ofrece En otras palabras, es una mano que print "¡Correcto!<\\>n";
una de las mejores probabilidades de no tiene un valor fijo, sino dos estados }
ganar. solapados (26, 16), del que podemos
quedarnos con el más favorable: 16. devolverá verdadero y ejecutará el
19, 20, 21… ¡Me pasé! Imagínese que tiene cuatro Ases. Esto comando print. Además, comparaciones
Decidí ponerlo en práctica antes de irme supondría 4 posibles estados (4, 14, lógicas como $count <= 21 ya no serán
a probar suerte en el casino, así que me 24, 34). Pero como 24 y 34 no son más verdaderas o falsas en el contexto
puse a escribir un script en Perl que exactamente manos ganadoras, tan de Quantum::Superpositions, sino que
simulara el juego. Las reglas son las si- sólo estaremos interesados en dos de devolverán una superposición de los
guientes: el juego lo juegan el jugador y ellos: 4, la “mano suave” y 14 la estados que cumplan la condición. La
el crupier. Se usan varias barajas de 52 “mano dura”. sintaxis siguiente filtrará los estados que
cartas. Las cartas son extraídas de una Los estados solapados son conocidos son irrelevantes mayores que 21, de los
en una del dispensador de cartas. como superposiciones en física cuántica posibles resultados que dependen de
El objetivo del juego es tener todas y permite a una partícula ocupar dos como contemos el As (4, 14, 24, 34):
las cartas que sean posibles para con- lugares al mismo tiempo.
seguir una mano de 21. Pero cuidado: si Después de instalar el módulo Quan- $count = ($count <= 21);
te pasas de 21, automáticamente tum::Superpositions de Damian Conway
pierdes. Esto es conocido como (disponible en CPAN), se pueden crear Ahora $count contiene sólo any(4, 14).
“busted”. Las cartas del 2 al 10 tienen una superposición de valores numéricos ¡Qué ahorra un montón de tecleo! Las
como valor el número indicado, y las como los mostrados anteriormente, lla- operaciones aritméticas basadas en la
figuras (la Jota, la Reina y el Rey) valen mando a la función any(): superposiciones son bastante simples de

www.linuxmagazine.com.es Número 02 43
DESARROLLO Perl

formular ya que Quantum::Superpositions estados múltiples colapsarían en un todos los estados de la superposición.
sobrecarga todos los operadores. Si el valor único estado, eliminando la Esta es la definición clásica de mínimo.
any(4, 14) está almacenado en $count, ambigüedad: Esto significa que el gato
de Schrödingers [3] debería estar muerto La Clase Shoe en Perl
$count += 10; o vivito y coleando. La implementación: El listado Black-
Esto es diferente en Perl: se puede jack.pm (por motivos de espacio, este
devolverá como resultado any(14, 24). jugar con los estados ambiguos sin listado sólo está accesible a través de la
Así pues, any() especifica la llamada destruir el sistema. Para descubrir los web en [1]) contiene dos clases: Black-
superposición disyuntiva que puede ser estados que una superposición contiene, jack::Shoe, que representa el dispensador
consultada para todos los estados y respon- Quantum::Superpositions importa la fun- de cartas del que el repartidor extrae las
derá correctamente a las consultas lógicas ción ownstates(), que simplemente cartas que van a ser jugadas, y Black-
de cualquiera de sus estados que la cumpla. devuelve una lista de estados: jack::Hand, que representa o bien la
La segunda función presentada por mano del jugador o del crupier.
Quantum::Superpositions es all(), que my @counts = ownstates($count); La clase Shoe usa el módulo CPAN
define una superposición conjuntiva que Algorithm::GenerateSequence para
tiene todos los estados simultáneamente. Estas tres funciones any(), all() y own- generar unas cuantas barajas de cartas.
La siguiente condición no es verdadera: states() permiten al desarrollador El constructor new() acepta referencias a
escribir construcciones dentro del pro- un array, cuyos elementos combina. Si el
my $count = all(4,14,24,34); grama impresionantes. La siguiente primer array contiene todos los palos
sintaxis es lo único que se necesita para (Corazones/Diamantes/Picas/Tréboles)
if($count <= 21) { descubrir la “mano suave” para las car- y el segundo todos los valores (A 2 3 4 5
print "Todos válidos<\\>n"; tas especificadas, o sea, el mínimo de 6 7 8 9 10 J Q K) del juego de cartas, el
} any(4, 14, 24, 34): método as_list() devolverá una lista de
combinaciones que coincidirán con las
al no tener todos los estados valores my $counts = any(4, 14, 24, 34); cartas: As de Corazones, 2 de Corazones,
menores que 21. Por el contrario, all(4, my $soft = ($counts <= allU … Q de Trébol, K de Trébol. La lista
14) <= 21 devolvería verdad. (ownstates($counts)); creada es replicada por el operador x
para reflejar el número de cartas que
¿Está el Gato Muerto? la comparación lógica usa $counts para contendrá el dispensador (línea 29).
Si un investigador comprueba la verdad devolver una superposición de todos los El módulo Algorithm::Numerical::Shu-
de la física cuántica en el mundo real, los estados que son menores o iguales que ffle exporta el método shuffle. Este

Listado 1: blackjack
01 01 #!/usr/bin/perl $shoe);
$dealer->count("soft") < 17) {
02 ############################## 19 my $dealer =
39 P(RED, "D", $dealer);
03 # Jugar al blackjack con Blackjack::Hand->new(shoe =>
40 $dealer->draw();
crupier $shoe);
41 }
04 # Mike Schilli, 2003 20 $dealer->draw();
42 P(RED, "D", $dealer);
(m@perlmeister.com) 21 P(RED, "D", $dealer);
43 $total +=
05 ############################## 22 $dealer->draw();
$player->score($dealer);
06 use warnings; use strict; 23 $player->draw();
44 print "Score: ",
07 use Blackjack; 24 $player->draw();
45 $player->score($dealer),
08 use Term::ANSIColor 25 while(!$player->busted()) {
46 ", Total: ", $total,
09 qw(:constants); 26 P(BLUE, "P", $player);
47 "\n\n";
10 use Term::ReadKey; 27 print
48 redo;
11 $| = 1; my $total = 0; 28 "([H]it/[S]tand/[Q]uit) ";
49 }
12 my $shoe = 29 ReadMode 4;
50 sub P { # Print status in
Blackjack::Shoe->new(nof_decks 30 my $move = ReadKey(0);
color
=> 4); 31 ReadMode 0;
51 print(BOLD, $_[0],
13 { 32 print "\r";
52 "$_[1]", "[",
14 if($shoe->remaining() < 52) { 33 last if $move =~ /^s/i;
53 $_[2]->count_as_string(),
15 print "Shuffling ...\n"; 34 exit 0 if $move =~ /^q/i;
54 "]",
16 $shoe->reshuffle(); 35 $player->draw();
55 RESET, ": ",
17 } 36 }
$_[2]->as_string(), "\n")
18 my $player = 37 P(BLUE, "P", $player);
56 }
Blackjack::Hand->new(shoe => 38 while(!$dealer->busted() and

44 Número 02 www.linuxmagazine.com.es
Perl DESARROLLO

método baraja los elementos del array superposiciones. Si una superposición valores de las teclas pulsadas, sin la
que se le pasa por el argumento, usando no tiene valores después de esta necesidad de que el usuario tenga que
el método de Fisher-Yates. El método operación, o sea, ownstates($counts) pulsar la tecla Enter. Pasando a Read-
reshuffle() del objeto Blackjack::Shoe devuelve una lista vacia, significa que el Mode 0 devuelve el terminal al modo
coloca las 52 cartas definidas en la varia- jugador ha excedido la máxima pun- Cooked, donde las entradas deben
ble de instancia nof_decks en el tuación de 21 y se ha pasado. El método consistir en líneas completas, si el
dispensador de cartas, shoe. count() de la línea 83 y siguientes des- usuario pulsa Enter y ninguna otra tecla
remaining() devuelve el número de cubre las manos “suaves” y “duras”, está pulsada provoca una reacción del
cartas que quedan en el dispensador; usando el truco visto anteriormente para programa.
esto permite al repartidor comprobar que encontrar los valores máximos y míni- Cuando es el turno del usuario, la
el juego puede ser completado con las mos. La función int() convierte la siguiente salida es mostrada en pantalla:
cartas restantes. draw_card() extrae una superposición en un valor escalar.
carta del dispensador y devuelve una [H]it/[S]tand/[Q]uit
referencia a un array, cuyo primer ele- Gana Blackjack
mento es el palo (Corazones/Diamantes/ Si la mano de un jugador contiene exac- El jugador puede optar por Hit (extrae otra
Picas/Tréboles) y el segundo elemento es tamente un As y una carta cuya carta), Stand (se planta) y Quit (se sale del
el valor de la carta (A, 2, 3,…, J, Q, K). puntuación es 10, ha conseguido un juego), pulsando las teclas H, S o Q.
La clase Blackjack::Hand representa la Blackjack, y gana a cualquier otra mano La Figura 1 muestra una jugada típica. El
mano que está jugando un jugador. Trata que sume 21. El método blackjack() crupier empieza el juego sacando dos car-
con las cartas que se han sacado y sus definido en la línea 94 y siguientes com- tas, aunque tan solo una de ellas es
valores. No importa si la mano pertenece prueba si se da esta situación, mostrada boca arriba. Al jugador se le
al jugador o al repartidor. El constructor chequeando si el valor de la mano corre- sirve dos cartas y se le pregunta si desea
sponde a una superposición con los una carta nueva, para acumular puntos en
Blackjack::Hand->new(shoe->U valores 11 y 21, y si la mano contiene su mano. Si opta por plantarse, el crupier
$shoe) exactamente dos cartas. seguirá un patrón fijo establecido para su
El método score() averigua si la mano propia mano. Si la puntuación total
liga el dispensador del que se obtendrán ha ganado o perdido contra el objeto “suave” es menor que 17, tomará una
las cartas con el jugador/repartidor. El Blackjack::Hand del crupier, que lo carta nueva. 17 o más puntos, provocará
método draw() añade una carta nueva a acepta como parámetro. Si el resultado que se plante, en ningún momento está
la mano. es negativo, el jugador pierde. Si es posi- influenciado por la mano del jugador y por
tivo, gana. Echémosle ahora un vistazo a ello el crupier tiene que pagar o recaudar.
Usando la superposición para algunos casos especiales: El jugador de El juego Blackjack.pm puede ser uti-
contar la puntuación Blackjack paga 1:1.5, mientras que el lizado libremente. Podemos añadir una
El método count() de la línea 64 y sigu- repartidor sólo consigue ventajas frente a GUI o escribir un servidor TCP/IP que
ientes cuenta la puntuación de la mano y la apuesta del jugador. Si el jugador tiene juegue al Blackjack a través de la red.
devuelve el resultado, como una super- más de 21, se ha pasado, y pierde incluso Disfrútalo bien y como se dice en Las
posición, una “mano dura” si el repartidor también excede después Vegas, “¡Qué tengas buena suerte!”. ■
$hand->count("hard") o una “suave” la puntuación de 21.
$hand->count("soft") .
Para permitir esto, el bucle for de la Texto en Color y Entradas por RECURSOS
línea 68 y siguientes itera sobre las car- Teclado [1] Listado de este artículo: http//www.
linuxmagazine.com.es/descargas
tas, comprobando los valores y El listado blackjack contiene un script que
sumándolos. La variable $count alma- le permite jugar contra un repartidor com- [2] Avery Cardoza,“Winning Casino Play”,
cena la superposición de las puterizado al Blackjack, como en Las Cardoza Publishing,3rd Ed.,2003,1-58042-
090-7
puntuaciones potenciales de la mano. Vegas. Usa las clases definidas en Black-
Hace uso de la sobrecarga del operador jack.pm para el dispensador de cartas, [3] Ilustración del experimento de
+ de Quantum::Superpositions, así que clase Shoe, y las manos del jugador y del Schrödinger con su gato: http://mist.npl.
washington.edu/npl/int_rep/tiqm/
$counts += 10 añadirá 10 a todas las repartidor, clase Hand. Text::ANSIColor se
TI_fig_09.html
superposiciones de $counts. Cuando un usa para proporcionar la salida coloreada;
As es extraído, el número de superposi- el módulo exporta constantes como
ciones es doblado, sumándole un uno a BOLD, RED, BLUE o RESET, que está eti-
Michael Schilli trabaja como ingeniero
la mitad de ellos y 11 a la otra mitad. quetada como la secuencia de escape del Web para AOL/Netscape en Mountain
EL AUTOR

terminal, basado en los valores de las View, California. Escribió “Perl Power”
$counts = any($counts+1,U constantes pasadas como :constants. Esto para Addison-Wesley y puede ponerse
$counts+11); permite tener la salida en “negrita” o en contacto con él en
coloreada, o volver al modo normal. mschilli@perlmeister.com. Su página
La línea 79 elimina inmediatamente Text::ReadKey en modo Raw (iniciado web es http://perlmeister.com.
cualquier puntuación superior a 21 de las por ReadMode 4) permite capturar los

www.linuxmagazine.com.es Número 02 45
DESARROLLO Pear

Uso de Componentes PHP

Formularios a Tope
Al igual que otros lenguajes, PHP el

lenguaje de guiones para la Web,

está repleto de componentes prefab-

ricados. En este artículo echaremos

un vistazo a aplicaciones prácticas

usando como ejemplo formularios de

gestión.

POR RICHARD SAMAR

L
os programadores, y sobre todo sus
clientes, están siempre interesados
en resultados rápidos. La necesidad
de trabajar en proyectos en paralelo y
unos plazos de cierre muy ajustados es
particularmente duro para los desarro-
lladores web. Debido a esto los
desarrolladores profesionales gastan más
tiempo buscando como afrontar la tarea
que tienen entre manos que escribiendo calidad, los mantenedores de la librería de categorías de aplicación, en un árbol,
miles de funciones auxiliares. PHP [2] clases de PHP habían puesto el punto de con un nombre subrayado. El denomi-
soporta esta filosofía en muchas áreas de mira en la calidad de su colección. En la nado navegador de paquetes [4] en la
desarrollo de aplicaciones, pero desgra- fecha en que apareció PHP 4.3m, Pear Web muestra esta estructura de árbol
ciadamente esto no lo sabe todo el dejó el estado de desarrollo beta y ahora (véase la figura 1). En este artículo ve-
mundo. Y esto es algo que intentaré es un componente esencial de cualquier remos las capacidades de Pear en la
arreglar en este artículo. distribución Linux que incluya PHP. práctica, utilizando el paquete Quick-
La idea tras Pear, la “PHP Extension and Form como ejemplo. QuickForm facilita
Aplication Repository” (Repositorio de El navegador de paquetes el uso de formularios, la principal inter-
aplicaciones y extensiones de PHP) surge muestra las categorías de faz para el usuario y de uso obligatorio
en paralelo con la publicación de PHP 4 en aplicaciones. en las aplicaciones Web. QuickForm ha
1.999. Muchos programadores vieron esto Cuando en PHP se habla de compo- sido asignado a la categoría HTML y así
como una analogía con el CPAN de PERL. nentes, se está haciendo referencia a los puede ser localizado bajo HTML_Quick-
Pero donde CPAN ofrece más cantidad que paquetes. Estos están organizados, por Form. Tal y como hemos dicho con

46 Número 02 www.linuxmagazine.com.es
Pear DESARROLLO

anterioridad, se puede utilizar el nave- lynx -source http://go-pear.orgU $pear list


gador para determinar el ámbito de | php Installed packages:
aplicación, la versión, el historial de ===================
cambios, obtener estadísticas y depen- Esta linea descarga un guión PHP. En Package Version State
dencias con otro paquetes. cuanto lo tengamos en nuestro disco Archive_Tar 0.9 stable
duro, lo ejecutamos y se encargará de Console_Getopt 1.0 stable
Instalando PEAR y QuickForm todo automáticamente. El así llamado DB 1.3 stable
Si PHP 4.3 o posterior está instalado en include_path en el fichero de configu-
nuestro sistema, con casi toda seguridad ración PHP (normalmente en Podemos teclear pear install HTML_Quick-
que lo estará también Pear. En ese caso, /etc/php.ini) ha de estar correctamente Form en una terminal para instalar el
no necesitaremos realizar los pasos de configurado para evitar problemas paquete automáticamente. Si la conexión a
instalación. En el improbable caso de cuando se añadan componentes Pear. Si Internet se viniera abajo en cualquier
que PHP haya sido explícitamente con- PHP está instalado en /usr/local lo nor- momento, podemos utilizar el navegador
figurado y compilado con la opción mal es que Pear se configure para que de Paquetes de la siguiente manera, para
--without-pear, el administrador necesi- esté en /usr/local/lib/php/. Si no quere- recuperar el paquete, resolver cualquier
tará recompilarlo sin esta opción. Si su mos andar arreglando errores de dependencia, en este caso HTML_Com-
distribución aún usa una versión instalación, un vistazo rápido al fichero mon, e instalar la colección:
antigua, puede dar un rodeo, como de configuración nos revelará si las
alternativa a la actualización de PHP, entradas están apuntando a los directo- $ pear install /Path/to/DownU
para obtener el instalador de paquetes rios correctos. load/HTML_Common-1.2.1.tgz
Pear, el cual es esencial para las tareas install ok: HTML_Common 1.2.1
de configuración de paquetes. Para Visualización de Paquetes $ pear install /Path/to/DownU
hacer esto, abra una conexión a Internet La orden pear list muestra en la terminal load/HTML_QuickFrom-3.0.tgz
y teclee lo siguiente en una terminal: una lista de los paquetes install ok: HTML_QuickForm 3.0

Listado 1: emailformular.php
01 <?php 17 $name->setMaxLength(30); 'Por favor indique la
02 require_once 18 $name->setSize(30); dirección de email ',
'HTML/QuickForm.php'; 19 'obligatorio');
03 20 $vname =& 34 $myForm->addRule('textEmail2',
04 // Muestra la versión de $myForm->getElement('textFirst 'Email incorrecto ', 'email');
QuickForm name'); 35
05 print 'PEAR::HTML_QuickForm 21 $vname->setMaxLength(20); 36 // También es posible validar
Version '; 22 $vname->setSize(30); del lado del cliente usando
06 print 23 JavaScript
HTML_QuickForm::apiVersion() . 24 $email =& 37 //
'<br/><br/>'; $myForm->getElement('textEmail $myForm->addRule('textEmail',
07 '); 'Email invalid', 'email',
08 $myForm = new 25 $email->setMaxLength(50); NULL, 'client');
HTML_QuickForm('Formulario de 26 $email->setSize(30); 38
Email', 'POST'); 27 39 // El formulario se congela si
09 $myForm->addElement('header', 28 // Añade las reglas de la validación es OK
'', 'Datos Personales'); validación 40 if ( $myForm->validate() )
10 29 $myForm->addRule('textName', 41 {
11 $myForm->addElement('text', 'Por favor indique el apellido 42 print '¡Gracias! Sus datos
'textName', 'Apellido:'); ', 'obligatorio'); son:';
12 $myForm->addElement('text', 30 43
'textFirstname', 'Nombre:'); $myForm->addRule('textFirstnam $myForm->removeElement('submit
13 $myForm->addElement('text', e', 'Por favor indique el Button');
'textEmail', 'Email:'); nombre', 'obligatorio'); 44 $myForm->freeze();
14 $myForm->addElement('submit', 31 $myForm->addRule('textEmail', 45 }
'submitButton','Entrar 'Por favor indique la 46
datos'); dirección de email', 47
15 'obligatorio'); 48 // Display form
16 $name =& 32 $myForm->addRule('textEmail', 49 $myForm->display();
$myForm->getElement('textName' 'Email incorrecto', 'email'); 50
); 33 $myForm->addRule('textEmail2', 51 ?>

www.linuxmagazine.com.es Número 02 47
DESARROLLO Pear

A continuación, tecleamos pear list otra


vez para que muestre los paquetes
instalados. Más tarde podemos intro-
ducir periódicamente pear upgrade-all
para actualizar cualquier paquete que
tengamos instalado. pear unistall
seguido del nombre del paquete desins-
talará un paquete. Y si estamos
interesado en más detalles de la confi-
guración general de Pear, tecleamos
config-show y se nos facilitará esa infor-
mación.

HTML_QuickForm en Acción
El paquete PEAR::HTML_QuickForm
(nótese el peculiar modo de nombrar
con el símbolo de los dos puntos)
facilita funciones para la creación, vali-
dación y manejo de formularios en
HTML. Es fácil de manejar y extremada-
mente flexible a la vez. además de su
facilidad para obtener resultados
senci–llamente, el paquete también
facilita interfaces para los motores de Figura 1: En la jerga de PHP los componentes se denominan paquetes. El navegador de paquetes basado
plantilla más conocidos, como Smarty en Web muestra los paquetes en una vista de árbol, ordenados por categorías de aplicaciones.
[5]. el listado 1 muestra un pequeño
ejemplo. El paquete Pear utiliza un automáticamente en el include_path omitido, se supondrá el documento
enfoque de programación orientada a configurado anteriormente. De nuevo actual como el objetivo.
objetos, tal como suele entenderse. El esto es un reflejo de la estructura de
formulario de prueba requiere al Pear: QuickForm ocupa una posición Una cabecera y cajas de texto
usuario que introduzca el apellido, el debajo de HTML en la jerarquía y HTML Una cabecera, como la de la línea 9, es
nombre de pila y la dirección de correo es un directorio físico. útil para identificar más fácilmente el
electrónico. Se realiza una validación documento y conseguir formularios
para fallos en la entrada de datos, la Un Derroche de Funciones impecables. Después vienen tres elemen-
experiencia diaria de los programadores El API QuickForm es de rango amplio y tos del tipo de formulario text, que
revela que hay que incluir validaciones, extremadamente funcional, especial- cualquier navegador Web dibujará como
incluso con la más simple de las estruc- mente desde la versión 3. Por tanto una caja de texto HTML. El segundo
turas. La estructura require_once tiene sentido conseguir la salida de parámetro identifica el elemento, mien-
HTML/QuickForm.php de la linea 2 con- apiVersion() en la línea 6. Esto es cono- tras que el tercero especifica el texto que
tiene el paquete Pear requerido. En este cido como método estático, algo que aparecerá junto a la cajas en la página
punto no es necesario un nombre de debería resultarle familiar a la mayoría Web; esta es a la que se refiere como una
ruta absoluto, ya que PHP la buscará de los desarrolladores que usan un etiqueta. Para el botón de enviar de la
lenguaje orientado a objetos: Cuando línea 14 están disponibles los siguientes
Tabla 1: Tipos de usan un operador con doble signo de tipos de elementos:
dos puntos para llamar a un método de • caja de verificación
validaciones para addRule() esta clase, no se necesita inicialización. • imagen
Entrada Significa
Se pasan dos parámetros a la estructura • oculto
required El campo debe ser rellenado en la línea 8: EmailFormular identifica • contraseña
maxlength Longitud máxima del campo el formulario y posteriormente se uti- • radio
minlength Longitud mínima del campo lizará como el nombre del formulario en • seleccionar
email Dirección valida de correo elec- el código HTML. POST especifica el • texto
trónico método HTTP POST para la transmisión • área de texto
lettersonly La entrada solo debe contener de datos. Se pueden incluir otros Normalmente, en un formulario de texto,
letras parámetros y modificadores si son nece- necesitaremos especificar la longitud de los
numeric La entrada solo debe contener sarios. Por ejemplo, puede usarse un campos. Para hacer esto así los desarro-
números
tercer parámetro para especificar el lladores pueden usar getElement() que
regex La entrada debe coincidir con
una expresión regular
do–cumento objeto que será generado. devuelve una referencia a cada elemento y
Como en este caso el parámetro ha sido los asigna a la correspondiente variable. En

48 Número 02 www.linuxmagazine.com.es
Pear DESARROLLO

nuestro ejemplo, de la línea 16 a la 26 se Figura 2:Gracias a Quick-


ajusta la longitud visible de todos los cam- Form, validar direcciones
pos a 30 caracteres, aunque la longitud de correo electrónico es
máxima sea distinta. una tarea fácil. Los cam-
pos obligatorios se
Validación de Campos especifican como tales y
Gracias a QuickForm es bastante fácil una entrada errónea
validar las entradas de los usuarios. El genera el correspondi-
método addRule() le permite asignar un ente mensaje de error.
número arbitrario de reglas a cada ele-
mento. Los elementos se identifican por servidor. El comentario en la línea 37 método más importante aparece en la
nombres únicos. también indica la posibilidad de realizar línea 49: Se llama a display() para que
Las facilidades de validación son la validación del lado del cliente usando muestre el formulario. La figura 2 se
extremadamente amplias, ya que el Javascript. Entonces la instrucción if puede ver el resultado de todo este
método tiene muchos parámetros usa validate() para comprobar si cada esfuerzo, con y sin errores.
opcionales. Las líneas de la 29 hasta la campo ha sido correctamente validado.
34 en el listado 1 muestra un caso muy Luego, validate(), devuelve TRUE y Más Flexibilidad
simple, pasando el texto de error como el congela todo el formulario. La carac- La funcionalidad proporcionada por el
segundo y el tipo de validación como ter- terística de freeze() es que muestra los Listado 1 es aceptable para lo que es,
cer parámetro. La tabla 1 muestra una datos de entrada, sin permitir editarlos. pero el aspecto del formulario (véase la
visión general de los tipos de validación Esto es muy practico, ya que permite Figura 2) definitivamente no tiene nada
más importantes (véase la Tabla 1). al usuario crear una copia impresa, de especial. Además, puede que prefi-
Dependiendo del tipo, el programador después de completar la entrada de ramos personalizarlo en vez de utilizar
deberá pasar al método addRule() un datos. El botón Enviar se elimina dentro los mensajes convencionales. Esto es
valor numérico, una expresión regular o de la directiva if, pues no tendría ningún fácil de hacer gracias al alto grado de
nada como cuarto parámetro. sentido mostrar el botón después de que flexibilidad que facilita QuickForm, tal
Nuestro ejemplo implemente la vali- la entrada de datos se haya terminado como se muestra en otro ejemplo en el
dación de campos desde el lado del satisfactoriamente. Finalmente el Listado 2. Éste crea un un simple for-

Listado 2: creditcard.php
01 <?php style="color: #ff0000">'; 24 $myForm->addElement('text',
02 require_once 12 $elTemplate .= 'textCardholder',
'HTML/QuickForm.php'; '{error}</span><br /><!-- END 'Cardholder:');
03 error -->{element}</td></tr>'; 25 $myForm->addElement('text',
04 // Plantilla para la cabecera 13 'textCardnumber',
05 $headerTemplate = '<tr><td 14 // Instanciar el formulario 'Cardnumber:');
style="white-space: nowrap; 15 $myForm = new 26
background-color: blue;" HTML_QuickForm('CreditcardForm $myForm->setElementTemplate($e
align="center" '; ', 'POST'); lTemplate, 'textCardholder');
06 $headerTemplate .= 16 // Nuevo texto para los campos 27
'valign="top" obligatorios $myForm->setElementTemplate($e
colspan="2"><font size="5" 17 lTemplate, 'textCardnumber');
color="yellow">{header}</font> $myForm->setRequiredNote('<fon 28
</td></tr>'; t color="blue"><b>#</b></font> 29 // Matriz para los tipos de
07 are mandatory'); tarjeta de credito
08 // Plantilla para los campos 18 30 $cardtypes = array( 'visa' =>
de texto (miembro de y número) 19 // Añadir la cabecera y 'VISA', 'master' =>
09 $elTemplate = '<tr><td configurar la nueva plantilla 'EuroCard', 'amex' =>
align="right" valign="top">'; 20 $myForm->addElement('header', 'American Express',);
10 $elTemplate .= '<!-- BEGIN '', 'Creditcarddata'); 31 // Menu desplegable para los
required --><font 21 tipos de tarjeta de credito
color="blue"><b>#</b></font><! $myForm->setHeaderTemplate($he 32 $myForm->addElement('select',
-- END required aderTemplate); 'selectCardtypes',
--><b>{label}</b></td>'; 22 'cardtype:', $cardtypes);
11 $elTemplate .= '<td 23 // Añadir campos de texto y 33
valign="top" align="left"><!-- configurar la nueva plantilla 34 // Matriz para mese y años
BEGIN error --><span para cada uno 35 $months = array (

www.linuxmagazine.com.es Número 02 49
DESARROLLO Pear

pio campo de texto. Las áreas en-


¿Qué es Pear? ¿Qué es cerradas en los comentarios HTML
PECL? contienen los mensajes de error para los
PHP es un lenguaje extremadamente uni- campos obligatorios y los símbolos. En
versal que puede fácilmente integrar el ultimo caso el asterisco rojo es reem-
librerías de programación y así implemen- plazado por un diamante azul. Como
tar interfaces a bases de datos, un formulario está, predeterminada-
herramientas gráficas, analizadores mente, empotrado en una tabla, solo
gramáticos (parsers) para XML y muchas tiene que asegurarse que las etiquetas
otras cosas. Esto que ha hecho a PHP popu- internas de la tabla están bien configu-
lar y que la mayoría de la comunidad radas. No obstante, podría plantearse
comenzara a ponerse a trabajar en el desar-
usar una plantilla de formulario sin una
rollo de extensiones, ¡ésta es una de las
tabla. El método setRequiredNote() de la
ventajas más obvias del Código Abierto!
línea 17 reemplaza los mensajes están-
Pero para mantener la extensión del
paquete de PHP en un tamaño razonable, dar con mensajes personalizados.
solo se proporcionan de manera predeter- Adicionalmente setHeaderTemplate() y
minada con PHP las extensiones más setElementTemplate() registran las plan-
importantes y más usadas. tillas definidas con los elementos.
Figura 3: QuickForm es extremadamente flexible
mulario para la entrada de los datos de cuando hay que alinear campos y asignar etique- Menús Desplegables
una tarjeta de crédito. Los desarro- tas y colores. Las plantillas se pueden usar para Los menús desplegables (elemento tipo
lladores pueden utilizar plantillas para cumplimentar casi cualquier requisito. select) se definen como valores en las
modificar el color, formato y el orden de áreas apropiadas desde la línea 30 hasta
los elementos individuales del formula- cadena entre corchetes define la parte la 41. El área $cardtypes es el cuarto
rio a su gusto. Estas plantillas están del texto del elemento actual y puede parametro de addElement() en la línea
definidas en dos variables de cadena, ser colocado donde quiera. Para campos 32. Este mecanismo posibilita añadir
para la cabecera y para las cajas de de texto, {label} indica el nombre, nuevos valores rápidamente en un
texto, al comienzo del Listado 2. La como Miembro de, y {elemento} el pro- momento posterior sin sacrificar la

Listado 2: creditcard.php (continuación)


36 '01' => 'Enero', '02' => para meses y años er', 'Por favor indique el
'Febrero', '03' => 'Marzo', 48 $myForm->addGroup($validTo, número de tarjeta',
37 '04' => 'Abril', '05' => 'validToGroup', 'Valid to:'); 'Obligatorio');
'Mayo', '06' => 'Junio', 49 61
38 '07' => 'Julio', '08' => 50 // Add Submit button $myForm->addRule('textCardnumb
'Agosto', '09' => 51 $myForm->addElement('submit', er', 'Número de tarjeta
'Septiembre', 'submitButton','Submit Data'); invalido', 'numérico');
39 '10' => 'Octubre', '11' => 52 62
'Noviembre','12' => 53 // El número de la tarjeta de $myForm->addRule('textCardnumb
'diciembre' credito tiene 16 dígitos er', 'Número de tarjeta
40 ); 54 $cardnumber =& demasiado corto', 'longitud
41 $years = array ( '2003' => $myForm->getElement('textCardn mínima', 16);
'2003', '2004' => '2004', umber'); 63
'2005' => '2005' ); 55 $cardnumber->setMaxLength(16); 64 // Freeze form if validation
42 56 succeeds
43 // Crear el grupo de elementos 57 // Reglas de validación: Los 65 if ( $myForm->validate() )
para meses y años dos campos de texto debes 66 {
44 $validTo[] = estar ocupados 67
&HTML_QuickForm::createElement 58 // El número de la tarjeta de $myForm->removeElement('submit
('select', 'selectValidMonth', credito debe ser numérico y Button');
NULL, $months); comprende 16 dígitos 68 $myForm->freeze();
45 $validTo[] = 59 69 }
&HTML_QuickForm::createElement $myForm->addRule('textCardhold 70
('select', 'selectValidYear', er', 'Por favor introduzca 71 // Display form
NULL, $years); miembro de', 'Obligatorio'); 72 $myForm->display();
46 60 73
47 // Grupo de elementos creados $myForm->addRule('textCardnumb 74 ?>

50 Número 02 www.linuxmagazine.com.es
Pear DESARROLLO

legibilidad. El paquete QuickForm más programadores están adoptando la


también facilita los grupos, donde los metodología de aplicaciones basadas Peras y Adobos Gratis
elementos individuales se sitúan juntos. en servidor Web para desarrollar apli- Con una gama tan grande de extensiones
En el caso del formulario de la tarjeta de caciones. También se pueden estimar disponibles, hay que poner un cierto
crédito (véase la Figura 3), tiene más los costes operativos, pues los costes de esfuerzo para promover una librería. Es por
sentido organizar la validez de los datos mantenimiento del software y similares esto que el promotor de Pear, Stig Saether
(que es la combinación de los meses y son más bajos que para las soluciones Bakken, distribuye peras y adobos a los
de los años que forman la fecha) de esta tradicionales cliente/servidor, debido al asistentes a sus presentaciones y talleres
manera. hecho de que el software solamente de Pear. A pesar de que la virtud de este
Para hacer esto, las líneas 44 y 45 necesita ser actualizado del lado del dúo culinario es discutible. atrae la aten-
añaden dos menús desplegables a la servidor. Ambos ejemplos de PHP ción de la audiencia sobre los nombres
Pear y PECL (se dice “pickle”,“adobo” en
matriz $validTo[]. Estos elementos mostrados aquí son muy simples, pero
inglés). PECL es el acrónimo de PHP Exten-
individuales no contienen etiquetas y demuestran que ambas aplicaciones
sion Code Library, que abarca un
esto es porque el tercer parámetro en el Web se desarrollan fácilmente. Y al subconjunto de Pear y contiene las exten-
método estático createElement() es mismo tiempo es fácil acostumbrarse a siones PHP programadas en C. Si se busca
NULL. Se especifica una etiqueta para evitar los errores de entrada. Los sis- extensiones más exóticas, que faciliten
todo el grupo en la línea 48 usando temas de gestión de flujo de trabajo son Mono, el clon del marco de trabajo de
addGroup(); la matriz será el primer un uso típico que implica un montón Microsoft .NET, deberemos examinar PECL.
parámetro que se le pasará. Las de formularios y son un campo perfecto La instalación es manejada por el instal-
restantes instrucciones están en el para el uso de QuickForm. La biblioteca ador de paquetes, como con cualquier otro
Listado 1. presentada en este artículo proporciona paquete Pear. En el caso de los paquetes
una amplia gama de las funciones adi- PECL, nos aseguraremos de que cualquier
Ejemplos Sencillos cionales satisfaciendo varios campos de
dependencia del sistema que surja se
resuelva. Si se está instalando el paquete
Como no es necesario escribir el soft- aplicación, tales como procesado de
Mono, por supuesto que se necesitará el
ware cliente y existe un navegador Web carga de ficheros, mejoras persona- marco de trabajo Mono.
para casi cada sistema operativo, más y lizadas, funciones especializadas de

“callback” o filtros inteligentes para


No es necesario el INFO entrada de campos. Pero QuickForm no
escepticismo [1] Listados de este artículo: http://www. es solamente la librería facilitada por
linuxmagazine.com.es/descargas Pear para simplificar las tareas de los
Los desarrolladores tienden a ser meticu-
[2] Sitio oficial de PHP: http://www.php.net programadores. La transferencia de
losos y desconfiados con el código de los
datos de una tarjeta de crédito, la cuál
demás. Esta es la razón por la cual muchos [3] Sitio oficial de Pear: http://pear.php.net
desarrolladores ven Pear con un cierto grado
podría considerarse como una exten-
[4] Navegador de paquetes Pear: http://pear.
de escepticismo. Pero esta clase de resisten- sión al segundo ejemplo, se maneja
php.net/packages.php
cia a la librería de la clases de PHP está normalmente a través de HTTP o Soap.
[5] Motor de plantillas Smarty: http://smarty. De nuevo los paquetes de Pear reducen
injustificada. Si se confía en PHP, también
php.net/
debemos estar preparado para confiar en la este proceso a apenas algunas líneas de
calidad de Pear, al menos en lo que se refiere [6] Protocolo de la reunión Pear del 2003: código y ahorran a los desarrolladores
a los paquetes estables de la Pear Founda- http://pear.php.net/news/ el esfuerzo de implementar protocolos
tion Classes (PFC). meeting-2003-summary.php
estándar. Gracias a Pear, no es nece-
sario reinventar la rueda para cada
campo de aplicación en el que se aven-
Calidad con C mayúscula
ture. ■
Estos paquetes de alta calidad están sujetos a medidas rigurosas de control de calidad. Cuando se
agregan nuevas características, o cambian las necesidades de una implementación, esos cambios
Richard Samar,
son discutidos por un equipo de experimentados desarrolladores usando una lista de correo. Los http://
paquetes de Pear cumplen con una codificación estándar que define con precisión como deben richard-samar.
programar los desarrolladores, que incluye como hay que sangrar el código, como asignar nom- de, es un consul-
bres de variables. Esta metodología permite que los desarrolladores de Pear y recién llegados al tor
EL AUTOR

lenguaje se hagan rápidamente con el código fuente. Además, es un requisito facilitar una buena independiente
documentación para el código. Gracias a este estándar, la documentación del API para el paquete de TI que vive
puede crearse automáticamente.Y es por esta razón que la página Web de Pear en [3] contiene cerca de
abundantes descripciones de este tipo. Muchos de los autores de paquetes Pear son miembros Frankurt, Ale-
mania. Es un
respetados y bien conocidos de la comunidad de desarrolladores que también han contribuido en
entusiasta de
otras partes de PHP. Para descubrir cuánta sangre, sudor y lágrimas se ha derramado para producir
PHP desde hace muchos años y es bien
código de calidad, solo se debe dedicar unos minutos a leer el resumen de la ultima reunión de conocido en la comunidad alemana de
Pear [6]. PHP.

www.linuxmagazine.com.es Número 02 51
DESARROLLO Python

Manejo básico de ficheros

Crea un
álbum de
imágenes
Siguiendo con nuestro paseo por Python vamos a seguir

viendo características básicas, y concretamente en este

artículo, el tratamiento de ficheros.

POR JOSÉ MARÍA RUÍZ Y JOSÉ PEDRO ORANTES

E
n el último artículo vislumbramos tiona una variable (vease Listado 1). mayores, pudiendo en ocasiones incluso
algo sobre cómo trabajar con obje- Alguien puede crear un objeto de la recuperarnos de ellas. Para ello está la
tos en Python. Fue algo muy sim- clase obj_variable y llamar al método estructura try-except. Rodeamos el códi-
ple, pero que ya nos daba la posibilidad set_variable(23), pero ¿cómo puede go que puede disparar excepciones con
de organizar nuestro código en torno a estar seguro de que la variable var tiene esta estructura (Vease Listado 3).
ello. Python hace un uso extensivo de el valor 23 después de la llamada? Puede A partir de ahora, y hasta que no
los objetos en sus APIs, y especialmente que var no fuese 0, porque otra llamada expliquemos con más profundidad el
del control de errores mediante excep- anterior ya podría haberla asignado. Lo tema de las excepciones, cuando di-
ciones, lo que nos da la posibilidad de único que podríamos hacer es llamar a gamos que una función genera una
lanzar excepciones cuando algo va mal. reset_variable() y así asegurarnos de excepción, significará que ese código
Una excepción es un mensaje que que nuestro valor sea asignado, pero deberá estar rodeado con una estructura
podemos capturar cuando se ejecuta entonces destruiríamos el valor anterior try-except.
cierta función o método y aparece un y no sabríamos qué podría pasar.
error de algún tipo. Normalmente con- Por lo tanto, necesitamos un mecanis- Trabajo con Ficheros
trolamos estos errores mediante el valor mo de comunicación para darle a cono- Ya que hemos conseguido cierta soltura
devuelto por la función (como por ejem- cer al usuario que esa variable ya está con los conceptos de objetos en Python,
plo en C). Esta técnica es engorrosa, asignada. Esto lo podemos hacer con las ahora vamos a ver como se manejan los
pero al igual que todo, tiene sus virtudes excepciones. accesos a ficheros en él.
y sus desventajas. Sin embargo, Python En el Listado 2 aparece una clase que Para acceder a un fichero primero
hace uso de las excepciones en su lugar. hereda de la clase Exception (veremos necesitamos crear un objeto file. El obje-
Cuando una función genera una los mecanismos de herencia en otro to file es parte de la librería base de
excepción decimos que eleva una artículo dedicado a los objetos) llamada Python, así que no es necesario impor-
excepción. Es muy normal tener que Var_Asignada. Cuando en la clase tar ninguna librería externa.
controlar las excepciones en las opera- obj_variable intentamos asignar un >>> archivo = file(‘texto.txt’)
ciones que realicemos con recursos que valor a la variable var y ésta no es 0, file abre los ficheros en modo de sólo
pueden no estar disponibles. Por eso las entonces se dispara, se eleva, la excep- lectura por definición. Eso significa que
vamos a ver, puesto que en este artículo ción Var_Asignada. Si no controlamos la si el fichero no existe obtendremos un
vamos a trabajar con archivos y conex- porción de código en la que se encuen- error. Para verificar si el fichero existe
iones a Internet. tra set_variable() y aparece una excep- podemos usar la función exists() de la
Vamos a crear un objeto que gestione ción, el programa se detendrá y acabará. librería os.path.
un recurso que puede no estar La idea detrás de las excepciones es LI:>>> import os.path >>>
disponible. En este caso el objeto ges- que es posible tratarlas y evitar males os.path.exists(‘texto.txt’) True >>>

52 Número 02 www.linuxmagazine.com.es
Python DESARROLLO

os.path.exists(‘algo-peludo-y-feo.txt’) primero que tenemos que hacer es crear mediante la función mkdir(), que acepta
False el fichero, para lo cual lo abrimos en una cadena y crea un directorio con ese
Por lo tanto, si vamos a abrir un modo de escritura, ‘w’, que creará el nombre. Si queremos crear un directorio
fichero, será importante asegurarse de fichero o truncará el existente (lo borrará que esté dentro de otros directorios tam-
que ya existe. Si en lugar de leer, lo que para crearlo de nuevo, aunque si lo que bién nuevos, tenemos que usar
queremos es crear el fichero, deberemos queremos es añadir al final, usaremos makedirs(). Ambas funciones
invocar al constructor de file con los ‘a’). Posteriormente escribimos en él una pertenecen al módulo os por lo que para
parámetros: cadena con un retorno de carro en mitad usarlas tendremos que hacer:
(para hacer nuestras pruebas) y cer-
>>> archivo = file('texto.txt'U ramos el fichero. Es importante cerrar los >>> import os
,'w') ficheros cuando dejemos de usarlos, >>> os.mkdir('uno')
pero en este caso la razón para cerrarlo >>> os.makedirs('dos/tres')
Este segundo parámetro opcional nos es que vamos a volver a abrirlo en modo
permite definir el tipo de acceso que de lectura. Para borrar esos directorios usaremos la
vamos a realizar al fichero. Tenemos Ahora volvemos a abrir el fichero en función rmdir() y removedirs(). La
varias posibilidades: podemos leer (r), modo de lectura y leemos 4 bytes que primera borra un directorio, mientras que
escribir (w), añadir al final del fichero almacenamos en la variable cadena. la segunda borra una ruta de directorios.
(a) y también tener acceso de lectura/ Cuando leemos con read() avanzamos Vamos a ver esto con más detenimiento.
escritura (r+w). Disponemos también en el fichero, esa es la razón de que el
del modificador b para indicar acceso posterior readline() lea la cadena “ >>> os.rmdir('uno')
binario. Python considera a los ficheros mundo\n” en lugar de “Hola mundo”. >>> os.removedirs('dos/tres')
como ficheros de texto por definición. También vemos que se para en el retorno
Vamos a ver todas las combinaciones en de carro en lugar de continuar. El segun-
el Listado 4. do readline() ya nos permite leer la cade-
Listado 2
Con cualquiera de estas llamadas ten- na “Adios mundo”. 01 >>> class
dríamos en archivo, si todo ha ido bien, Pero… ¿qué ocurriría si en una de las Var_Asignada(Exception):
un objeto que gestiona el archivo indica- lecturas nos encontrásemos con el fin de 02 ... """ Excepción que se
do. Es entonces cuando podemos operar fichero? En el caso de que leyésemos una dispara al intentar asignar
sobre él. Las operaciones más típicas son cadena con el fin de fichero (EOF), al 03 ... una variable ya
las de leer desde el archivo y escribir en final simplemente nos quedaríamos con asignada en obj_variable"""
él. Para ello el objeto file dispone de los la cadena hasta el EOF. En cambio, si 04 ... pass
métodos read(), readline(), write() y sólo leemos el EOF, entonces obtenemos 05 ...
writeline(). Todos ellos operan con cade- una null. Esto es importante para com- 06 >>>
nas de caracteres: readline() y write- probar que hemos acabado con el 07 >>> class obj_variable:
line() trabajan con líneas de texto fichero. Así, un bucle que escriba por 08 ... """ Administra una
(acabadas en retorno de carro), mientras pantalla el contenido del fichero, com- variable """
que read() y write() lo hacen con cade- probaría en cada vuelta si la cadena que 09 ... def __init__(self):
nas sin restricciones. devuelve readline() es null. 10 ... self.var = 0
Lo que vemos en el Listado 5 son algu- Ahora que ya sabemos crear archivos, 11 ...
nas manipulaciones sobre un fichero. Lo tenemos que aprender a borrarlos. Esto 12 ... def set_variable(self,
se realiza mediante la función remove() valor):
de la librería os. Esta función acepta la 13 ... if (self.var ==
Listado 1 ruta de un fichero y lo borra. Si en lugar 0):
01 >>> class obj_variable: de un fichero le pasamos un directorio 14 ... self.var =
02 ... __init__(this): elevará una excepción “OSError”. valor
03 ... var = 0 15 ... else:
04 ... >>> import os 16 ... raise
05 ... set_variable(this, >>> os.remove(texto.txt) Var_Asignada
valor): >>> 17 ...
06 ... if (var == 0): 18 ... def
07 ... var = valor reset_variable(self):
08 ... Directorios y Sistema de 19 ... self.var = 0
09 ... Ficheros 20 ...
reset_variable(this): Con estos pocos métodos tenemos ya a 21 >>>
10 ... var = 0 nuestro alcance la manipulación básica 22 >>> a = obj_variable()
11 ... de ficheros. Pero vamos a necesitar para 23 >>> a.set_variable(12)
12 >>> nuestro programa la posibilidad de crear 24 >>> a.set_variable(34)
directorios. ¿Cómo lo haremos? Pues

www.linuxmagazine.com.es Número 02 53
DESARROLLO Python

Listado 3 Listado 5 Listado 4


01 >>> try: 01 >>> archivo = 01 >>> archivo =
02 ... set_variable(12) file('/tmp/texto.txt','w') file('texto.txt','r')
03 ... set_variable(34) 02 >>> archivo.write("Hola 02 >>> archivo =
04 ... except: mundo\nAdios mundo") file('texto.txt','w')
05 ... print "ERROR: Se ha 03 >>> archivo.close() 03 >>> archivo =
intentado asignar" 04 >>> file('texto.txt','a')
06 ... print "un valor a una 05 >>> archivo = 04 >>> archivo =
variable ya asignada" file('/tmp/texto.txt','r') file('texto.txt','r+w')
07 ... 06 >>> cadena = archivo.read(4) 05 >>> archivo =
08 ERROR: Se ha intentado asignar 07 >>> cadena file('texto.txt','r+b')
09 un valor a una variable ya 08 'Hola' 06 >>> archivo =
asignada 09 >>> cadena = file('texto.txt','rb')
10 >>> archivo.readline()
10 >>> cadena
11 ' mundo\n' Cuando accedemos a un servidor http,
rmdir() borrará el directorio “uno”, que 12 >>> cadena = por ejemplo para ver una página web, lo
no contiene ningún otro objeto en su archivo.readline() que hacemos es pedirle objetos. Esto se
interior (ni directorios, ni ficheros). En 13 >>> print cadena hace mediante el comando GET <obje-
caso de tenerlo, la llamada devolvería un 14 'Adios mundo' to>. Por ejemplo, si queremos la página
error. La función removedirs() comen- 15 >>> archivo.close() index.html de la web
zaría a borrar desde el directorio que http://www.python.org, primero conecta-
está más a la derecha de la ruta (“tres”) mos con el servidor http de
hacia el que está más a la izquierda • Crear, eliminar un directorio. http://www.python.org y después, una
(“dos”). Pero imaginemos que dentro de • Cambiar el directorio de traba- vez conectados, le enviamos al servidor
“dos” también hay un directorio “cua- jo. http el comando GET index.html. En ese
tro”. Entonces se borraría el directorio momento el servidor nos devuelve por el
“tres”, y cuando la función fuese a bor- Python y la web mismo canal el contenido del archivo
rar el directorio “dos” se encontraría con Python posee gran cantidad de librerías index.html.
que no puede porque existe dentro de él para trabajar con recursos de Internet. Dicho así parece muy fácil, pero es
un directorio llamado “cuatro” y pararía. De hecho Zope [1], un servidor de apli- una tarea que en un lenguaje de más
En cuanto a removedirs(), este comando caciones con gran éxito, está creado en bajo nivel requeriría gran cantidad de
aplica rmdir() de derecha a izquierda en Python y hace uso de todas sus carac- librerías y control de errores. En Python
la ruta. terísticas. Mailman [2] o Bittorrent [3] vamos a tener muchas menos dificul-
Imaginemos ahora que necesitamos son también buenos ejemplos. tades. Siguiendo con la explicación
cambiar el directorio en el que estamos Debido a su flexibilidad, Python es vamos a ver en el Listado 6 como
trabajando. En el momento de arrancar usado como lenguaje de implementación haríamos precisamente lo que hemos
el programa ese directorio es el que para multitud de aplicaciones de red así dicho
alberga el programa o bien es el directo- como aplicaciones distribuidas. Por eso, Lo primero es importar la librería
rio desde el que se ejecutó, pero no siem- no es de extrañar que Python suela ser el httplib, creamos entonces una conexión
pre es en el que queremos que el progra- lenguaje en el que se implementan con el host en cuestión y pedimos el
ma trabaje. Cualquier referencia a un muchas de las más novedosas tec- archivo index.html. Esa conexión genera
fichero será tomando como base el direc- nologías de red. una respuesta. La respuesta está forma-
torio de trabajo, en caso contrario ten- En este apartado vamos a comenzar da por varias partes, entre ellas un códi-
dríamos que especificar la ruta de traba- con lo básico. Queremos traer un recurso go numérico (como el famoso 404), un
jo. Para poder cambiar el directorio de de la red a nuestra máquina, y para ello texto que describe el error y una cone-
trabajo, el módulo os tiene la función emplearemos una URL[4] del estilo xión al archivo que pedimos. En el caso
chdir(). Si invocamos dentro de nuestro http://www.algunaweb.algo/imagen.jpg. de una conexión correcta recibiremos un
programa: Pero primero necesitamos crear una 200, un OK y una conexión con el
conexión con el servidor. fichero. De esa conexión leemos con
>>> os.chdir('/tmp') Vamos a emplear para ello la librería read() el contenido y lo almacenamos en
httplib que viene con Python. Esta libr- una variable que llamamos dato.
Desde ese momento cualquier referencia ería nos permite establecer una conexión Entonces podremos cerrar la conexión
a un fichero será direccionada a “/tmp”. con un servidor http y mandarle coman- como si de un fichero se tratara.
Ahora podemos: dos http. Los comandos http son sim- En ese momento ya tenemos la infor-
• Abrir, cerrar, modificar un ples, y de todos ellos, de momento sólo mación que queríamos en dato y el canal
fichero. nos interesa uno, el comando GET. cerrado. ¿No es muy difícil, no?

54 Número 02 www.linuxmagazine.com.es
Python DESARROLLO

Listado 6: El “Recogedor” de Imágenes


001 #!/usr/local/bin/python == len(self.lista)) respuesta.read()
002 # 037 072 conexion.close()
---NOTA---------------------- 038 def longitud(self): 073
---------------- 039 return 074 if( respuesta.status
003 # El fichero que debe ser len(self.lista) != '200'):
pasado como argumento 040 075 nomb_fichero =
004 # debe consistir en un 041 def crea_directorio(cadena): componentes[len(componentes)
listado con una url por 042 componentes = -1]
005 # linea. cadena.split('.') 076 nomb_fichero =
006 # 043 nomb_fichero[:-1]
----------------------------- 044 077 archivo =
---------------- if(os.path.exists(componentes file(nomb_fichero ,'w')
007 class Lista_URLs: [0])): 078
008 """Recibe un fichero y 045 print "Error: el archivo.write(datos)
carga directorio ya existe" 079 archivo.close()
009 sus cadenas en una lista. 046 sys.exit() 080 else:
Provee de métodos 047 else: 081 print "Fallo
010 para obtener de nuevo las 048 descargando" + url
cadenas desde la os.makedirs(componentes[0]) 082
011 lista.""" 049 083 def genera_index(lista):
012 os.chdir(componentes[0]) 084 print 'Generando índice
013 def 050 print 'Creando index.html'
__init__(self,nombre): directorio ' + componentes[0] 085 archivo =
014 self.lista= [] 051 file('index.html','w')
015 self.contador = 0 052 def descarga_urls(lista): 086
016 self.archivo = 053 lista.rebobina() 087 archivo.write('<html>\n')
file(nombre) 054 088 archivo.write('<head>\n')
017 self.cadena = 055 while( not lista.fin() ): 089 archivo.write('<title>
self.archivo.readline() 056 url = Imagenes </title>\n')
018 lista.siguiente() 090
019 while(self.cadena != 057 archivo.write('</head>\n')
'\n'): 058 componentes = 091 archivo.write('<body>\n')
020 url.split('/') 092
self.lista.append(self.cadena 059 servidor = archivo.write('<h1>Imagenes</
) componentes[2] h1>\n')
021 self.cadena = 060 093 archivo.write('<ul>\n')
self.archivo.readline() 061 ruta_imagen = '/' 094
022 self.archivo.close() 062 for i in range( 3, 095 lista.rebobina()
023 len(componentes)): 096 url = lista.siguiente()
024 def rebobina(self): 063 ruta_imagen = 097
025 self.contador = 0 ruta_imagen + '/' + 098 componentes =
026 componentes[i] url.split('/')
027 def siguiente(self): 064 099 imagen =
028 if ( self.contador >= 065 print 'Descargando componentes[len(componentes)
len(self.lista)): imagen: ' + url[:-1] - 1]
029 return '' 066 conexion = 100
030 else: httplib.HTTPConnection(servid 101 while( url != ''):
031 self.valor = or) 102
self.lista[self.contador] 067 archivo.write('<li><img
032 self.contador = 068 src=\"'+ imagen
self.contador + 1 conexion.request("GET", url) +'\"></img></li>\n')
033 return self.valor 069 respuesta = 103 url =
034 conexion.getresponse() lista.siguiente()
035 def fin(self): 070 104 componentes =
036 return (self.contador 071 datos = url.split('/')

www.linuxmagazine.com.es Número 02 55
DESARROLLO Python

Listado 6: El “Recogedor” de Imágenes (continuación)


105 imagen = 114 125 descarga_urls(lista)
componentes[len(componentes) #---------------------------- 126 genera_index(lista)
- 1] ----------------------- 127
106 115 if __name__ == '__main__': 128 elif len(sys.argv) == 0:
107 archivo.write('</ul>\n') 116 129 print 'La sintaxis
108 117 import httplib del programa es:\n'
archivo.write('</body>\n') 118 import os 130 print sys.argv[0] + '
109 119 import os.path archivo\n'
archivo.write('</html>\n') 120 import sys 131 print 'El archivo
110 121 debe contener una URL por
111 archivo.close() 122 if len(sys.argv) == 2: línea'
112 123 lista = 132 else:
#---------------------------- Lista_URLs(sys.argv[1]) 133 print "ERROR: la
----------------------- 124 sintaxis es " + sys.argv[0] +
113 # Main crea_directorio(sys.argv[1]) " <fichero>"

Parámetros parte del programa. detrás de otra. También podemos hacer


Estamos acostumbrados a poder pasar • Crearemos un directorio con el lo mismo usando una función que car-
parámetros a los programas; en UNIX es nombre del archivo que nos gue las URLs en una variable global.
algo común. Pero… ¿cómo podemos hayan dado. Aquí vamos a hacerlo con un objeto. Es
obtener los parámetros de ejecución en • Cambiaremos el directorio de en este momento cuando se deja al lec-
Python? De nuevo tenemos que recurrir trabajo a ese directorio. tor que explore la posibilidad de susti-
a una librería: la librería sys. sys nos pro- • Descargaremos cada una de las tuir el objeto por una variable global y
porciona el acceso a los argumentos a URLs dentro del directorio. las funciones de lista. Algunas notas
través de su variable argv. Esta variable • Generaremos un archivo finales, el programa solo funciona con
es una lista, por lo que podemos obtener index.html que muestre las URLs de imágenes, y el archivo que con-
los argumentos accediendo a las posi- imágenes. tenga las URLs debe acabar con un fila
ciones de la misma. La posición 0 con- ¿Mucho trabajo? Para eso están los pro- vacía (un enter después de la última
tiene el nombre del programa que esta- gramas. Evidentemente no realizaremos imagen).
mos ejecutando, y a partir de la posición todas las comprobaciones que serían Este programa (que se puede ver en el
1 encontraremos los parámetros pasa- necesarias, ya que en tal caso el progra- Listado 6) es muy simple y esta amplia-
dos. Al ser una lista podemos controlar ma se alargaría demasiado, por lo que se mente comentado, pero de nuevo reta-
la cantidad de los parámetros llamando a deja al lector la opción de mejoras. mos a los lectores a mejorarlo y a intro-
len(). Pensemos ahora en el diseño del progra- ducirle control de excepciones. Suerte. ■
ma. Tenemos varias partes:
Programa Primero comprobaremos y alma- RECURSOS
Ahora es el momento de poner todo lo cenaremos la opción con el nombre del
[1] Zope: http://www.zope.org
aprendido en práctica con un programa archivo. A continuación leeremos las
que puede ser útil. URLs. El siguiente paso es crear un direc- [2] Mailman: http://www.gnu.org/software/
En este caso vamos a examinar un pro- torio y cambiar el directorio de trabajo. mailman/
grama que realizará las siguientes tareas: Después descargaremos las URLs. Y, por [3] BitTorrent: http://bittorrent.com/
• El programa aceptará un fin, hemos de generar el archivo HTML. [4] Universal Resource Language
parámetro de entrada que le Vamos a seguir estos puntos para
indicará el nombre de un crear las funciones. Las URLs vamos a
fichero. almacenarlas en una lista. ¿Deberíamos José María Ruiz actualmente está
• El programa abrirá ese fichero y usar objetos? Esta es una de las cosas realizando el Proyecto Fin de Carrera
lo leerá línea por línea. Cada maravillosas que ofrece Python: NO
LOS AUTORES

de Ingeniería Técnica en Informática


línea del fichero será la direc- estamos obligados a usar objetos. Y no
de Sistemas. Lleva 7 años usando y
ción URL de una imagen. digo que los objetos sean malos, sino
• Cada URL será introducida den- que en ocasiones pueden llegar a ser desarrollando software libre y, desde
tro de una lista para su posteri- engorrosos. Por ejemplo, podríamos hace dos, se está especializando en
or uso. crear un objeto Lista_URLs que aceptase FreeBSD. Pedro Orantes está cursando
• Una vez que hayamos acabado como parámetro en su constructor el 3º de Ingeniería Técnica en Infor-
de leer el fichero, lo cerraremos nombre de un fichero y que después nos
mática de Sistemas.
y entraremos en la segunda permitiese ir cogiendo las URLs una

56 Número 02 www.linuxmagazine.com.es
Charly ADMINISTRACIÓN

Apachetop

Rastreando a Apache
Apachetop es a Apache lo que el comando top a los procesos. Esta herramienta

permite a los administradores monitorizar lo que el servidor Web está haciendo

y cuanto trabajo consume una tarea determinada. POR CHARLY KÜHNAST

C
uando se necesita generar un per- Para empezar obsérvese el parecido con
fil de actividad para un servidor top (ver Figura 1). La primera línea no
Web, normalmente se utiliza un es muy interesante, ya que contiene
generador de informes tradicional como sólo la hora del último hit, el uptime y
Webalizer [1]. Pasando un fichero de log la hora actual. La siguiente línea con-
de Apache a una herramienta de tiene el número de respuestas que
informes que generará todo tipo de Apache ha manejado desde que se Figura 1: Apachetop no intenta esconder su simili-
estadísticas útiles e inútiles. Los más arrancó Apachetop, el número de tud con el comando top.
impacientes, como los administradores, demandas por segundo, el total de
quienes tratan de seguir lo que está datos transferidos, el volumen de trans- • [R] ordena por el número de
ralentizando la ejecución de su servidor, ferencias por segundo y la media de demandas
estarán más interesados en lo que datos transferidos por demanda. Las • [Mayúscula] + [R] ordena por
Apache está haciendo ahora mismo. líneas que siguen clasifican las deman- demanda/segundo
Desafortunadamente, los generadores de das por sus valores de retorno. • [B] ordena por Kbytes transferi-
informes no proporcionan este tipo de dos
información… ¡Apachetop[2] al rescate! K.O. • [Shift] + [B] ordena por
La versión 0.7 apareció cuando estaba Las dos líneas siguientes son intere- Kbytes/segundo.
escribiendo la columna de este mes y el santes por una cosa, pueden ser Apachetop actualiza la pantalla cada
autor del programa, Chris Elsworth parametrizadas. Por defecto se muestra 5 segundos. Si el valor de refresco
estará trabajando duro en la versión 0.8. el valor medio de todas las demandas en parece demasido frenético… y esto
La herramienta se proporciona como una los últimos 30 segundos. El siguiente puede pasar si se ha pasado la noche
tarball o un RPM; una vez instalado es código incrementará este período a 60 entera hackeando, simplemente hemos
muy fácil arrancar el programa. Simple- segundos: de usar el parámetro -r 20 para incre-
mente tecleamos: mentar el intervalo de refresco a 20
apachetop -T 60 -f /pathU segundos. Esto es aconsejable por las
Apachetop -f /pathU /Apache-Logfile mañanas para los ojos cansados de los
/Apache-Logfile administradores ■
Pero ¡cuidado!, las configuraciones con
SYSADMIN intervalos muy altos en servidores muy INFO
cargados, impactarán en la monitor- 1] Webalizer: http://www.mrunix.net/
Filtrado de Web...........................58 ización de Apache ya que no tendrá webalizer
La publicidad de los sitios web dificulta la tiempo para realizar los cálculos. Es
navegación por Internet y consume ancho [2] Apachetop: http://clueful.shagged.org/
preferible decirle a Apachetop que mire apachetop/
de banda. Analizamos herramientas que
las últimas 1000 demandas, independi-
permiten bloquear los banners de publici-
entemente del período en el que
dad en la propia máquina o en la red local
ocurrieron. Charly Kühnast es un
Sleuthkit .........................................61 administrador de sis-
La herramienta para análisis forenses en temas bajo entorno
Apachetop -H 1000 -f /pathU
Linux en el centro de
EL AUTOR

archivos que identifica evidencias, recupera


/Apache-Logfile datos de Moers, cerca
archivos borrados y reconstruye escenarios.
del Rin, el famoso río
Taller del Administrador........67 Alemán. Sus tareas
Proporcionar medios de correo básicos es Atajos de Teclado incluyen asegurar la
cada vez un desafío mayor para los admin- seguridad y disponibilidad del cortafue-
Al igual que con el proceso top, Apa-
istradores en grandes redes. Echamos un gos y el mantenimiento del DMZ (zona
chetop puede aceptar comandos en desmilitarizada).
vistazo a los clusters de correo.
tiempo de ejecución a través del teclado:

www.linuxmagazine.com.es Número 02 57
ADMINISTRACIÓN Bloqueo Banners

Bloqueo de anuncios con Navegador o Proxy

Calma Total
La publicidad de los sitios web difi-

culta la navegación por Internet y

consume ancho de banda. En este

artículo se verán herramientas que

permiten bloquear los banners de

publicidad en la propia máquina o en

la red local.

POR OLIVER FROMMEL

E
s difícil encontrar hoy en día un Hay varias alternativas. Algunos nave- de instalar: Tan solo hay que hacer clic
sitio web que no tenga banners de gadores tienen una característica integra- en el enlace de la página principal del
publicidad. Además de los banners da o usan un plug-in. Los programas fil- proyecto [1]. No hacen falta privilegios
que cubren toda la pantalla, cada vez se tros que se ejecutan como servidores de administrador para instalarlo, ya que
incluyen imágenes más grandes que proxy independientemente del nave- AdBlock se instala en el directorio home
reemplazan las cabeceras, dificultando al gador, pero en la misma máquina, son del usuario en ~/.mozilla.
usuario su navegación por la web. otra alternativa. Incluso se pueden ejecu- Hace falta reiniciar el navegador para
Aunque esto pueda ser comprensible tar en una máquina distinta si hiciera activar el plug-in. El menú del plug-in
desde el punto de vista del proveedor de falta, proporcionando un servicio de está disponible en la sección AdBlock
contenidos, para los usuarios es de todo proxy a los ordenadores de la red de casa bajo Tools. Si se añade el patrón mostra-
menos divertido cuando se encuentra o de la oficina. do en la Figura 2, el plug-in bloqueará
con banners de publicidad, especial- un número impresionante de anuncios.
mente, con aquellos que reducen la Integrados en el Navegador El mismo menú permite ver los elemen-
velocidad de navegación. De hecho, es Los usuarios de Mozilla tienen un opción tos en la página actual. Si se descubre un
bastante común encontrarse con banners sencilla. El navegador de Mozilla cuenta anuncio no solicitado, se puede usar su
llamativos, con formatos de imágenes o con un plug-in que bloquea la publici- URL para crear una nueva regla de filtro.
destellos que consumen más memoria dad. La herramienta, apropiadamente Incluso se le puede hacer clic con el
que el contenido real que aportan. llamada, AdBlock filtra la URL. Es fácil botón derecho del ratón y seleccionar
Por ello se han desarrollado un Adblock Image en el menú desplegable
número de programas que impiden que para acceder a las mismas característi-
los banners aparezcan en los sitios webs cas. Siguiendo estos pasos aparece una
e incluso que lleguen a descargarse. Las ventana mostrando la dirección de la
herramientas de bloqueo filtran el flujo imagen. Se puede usar un comodín (*)
de datos permitiendo que los contenidos que modifique la URL para que encaje
interesantes pasen, y bloqueando la pu- con direcciones similares. Suponiendo
blicidad no solicitada. Esto funciona que la URL siguiente sea la mostrada:
porque el navegador primero obtiene la
página solicitada del sitio web. http://img-cdn.mediaplex.com/U
El software inteligente comprueba la ads/2399/9556/DE_DE_mofg_dimU
página en busca de imágenes publici- 4600_dhs_q1w0304_300x200_15k_U
tarias y elimina las partes ofensivas del FL_gif.gif
fichero HTML. Sólo así el navegador
obtiene los elementos para mostrar en la Figura 1: Una página Web repleta de anuncios Se puede quitar la sección que aparece
página. dificulta la visión del contenido real. detrás del nombre del servidor y el direc-

58 Número 02 www.linuxmagazine.com.es
Bloqueo Banners ADMINISTRACIÓN

Figura 2: Usando el menú de Mozilla para config- Figura 3: Se puede inspeccionar el código HTML para localizar las direcciones de los anuncios. Muchos
urar AdBlock. sitios webs usan ‘ad’ como parte de sus nombres.

torio ads y colocar un asterisco como página, sino que son proporcionados por Enviroment), pero la mayoría de las dis-
comodín: terceros que se encargan de la publicidad tribuciones lo instala por defecto.
y son invocados por el proveedor de con- Cuando se descargue desde [2], hay que
http://img-cdn.mediaplex.com/U tenidos. Para usar esta característica asegurarse de que se pulsa el enlace con
ads/* mientras se navega, hay que pulsar el el botón derecho del ratón en el archivo
botón derecho del ratón en el anuncio y Jar y se selecciona Save link to disk. De
Esta línea le dice al plug-in que bloquee seleccionar Block images from server. lo contrario el navegador podría ejecutar
cualquier fichero del directorio ads en el Nótese que este método podría vol- el fichero Jar directamente.
servidor Mediaplex. Ahora si se pulsa el verse contra usted, ya que impide que se Si el programa java no está en el path,
botón Reload, el anuncio desaparece una pueda descargar cualquier imagen que añádase el directorio donde esté ubicado
vez recargada la página. Usando el menú no esté almacenada directamente en el el programa, por ejemplo:
anteriormente mencionado, es probable servidor original. Además, este método
que se encuentren otros candidatos o no bloqueará los anuncios contenidos en export PATH=$PATH:/usr/javaU
bien inspeccionando el código fuente del el mismo sitio web. El plug-in AdBlock /j2sdk1.4.2/bin
fichero HTML (Véase la Figura 3). Los es mucho más eficaz. Si con todo, no
usuarios que usen el navegador Firefox está satisfecho aún, podría usar un proxy Ahora ya se puede ejecutar Muffin te-
de Mozilla estarán encantados al que es más potente y flexible, y además cleando java -jar muffin-0.9.3a.jar
escuchar que el plug-in también fun- funciona con cualquier navegador como (Véase la Figura 4). Muffin usa el filtro
ciona en este navegador. Opera o Konqueror. NoThanks por defecto. El filtro aplica
Algunos anuncios se pueden bloquear unas reglas sencillas para bloquear los
sin el plug-in. La manera más fácil de Saboreando Java banners de publicidad. El proxy incluye
hacerlo es activando la opción Load Muffin es uno de dichos proxy. Se coloca unos filtros extras que no están activos
Images | For the originating Web site only entre el servidor Web y el navegador. por defecto, como son AnimationKiller
en Options | Web Features. Esto funciona Como es un paquete Jar, Muffin puede para eliminar los gifs animados y
bastante bien, porque la mayoría de los ser ejecutado directamente con Java y no Cookiemonster que se encarga de las
banners de anuncios no están almacena- necesita ser compilado ni instalado. Tan Cookies. El filtro NoThanks no funciona
dos en el mismo servidor Web que la sólo hace falta el JRE (Java Runtime directamente. Necesita cargar primero

Glosario
Servidores Proxy: (o simplemente proxies) ejemplo, significar cualquier número de repeticiones
residen entre un cliente (p.e. un navegador http://www.linux-magazine.com.es/issue/02. de cierto carácter (en las expresiones regu-
Web) y un servidor.Visto desde la perspectiva Cookies: Pequeños trozos de información lares). Cuando se teclea ls *.jpg, la shell
del cliente, el proxy es un servidor y desde el basados en texto que los navegadores aso- mostrará todos los nombres de ficheros con
punto de vista del servidor, el proxy es un cian a los sitios webs. Los proveedores de con- el sufijo .jpg, sin importar por qué letras
cliente. Los proxies tienen una caché de los tenidos usan las cookies para almacenar empiece el nombre del fichero.
sitios web visitados para mejorar la veloci- información específica de ese usuario sobre Puerto: Como múltiples programas servi-
dad. En algunos casos, son utilizados para el comportamiento de la navegación por dores se pueden ejecutar en una misma
que los clientes puedan acceder a Internet sin Internet entre dos visitas al sitio web máquina, una combinación formada por el
necesitar una conexión directa. (“¿Cuándo fue la última vez que visitó la número de puerto y la dirección IP identifican
URL: Uniform Resource Locator engloba un página?”). de forma unívoca una conexión. El estándar
acrónimo del servicio (http, ftp,…), la dirección Comodines: La mayoría de los programas de Internet asigna a ciertos servicios específi-
de un servidor de Internet y opcionalmente Linux (como la shell) usan caracteres espe- cos unos puertos determinados llamados
un nombre de directorio y fichero. ciales para representar una o más letras. Por “well-known ports”, por ejemplo, el puerto
Permitiendo que los documentos de Internet ejemplo, el asterisco (*) representa típica- 80 está asignado a la World Wide Web (HTTP)
sean identificado de forma unívoca, por mente una cadena arbitraria, aunque puede y el puerto 25 al email (SMTP).

www.linuxmagazine.com.es Número 02 59
ADMINISTRACIÓN Bloqueo Banners

un fichero de configuración, llamado conexiones simultáneas. La versión


killfile. Existe un ejemplo de killfile comercial tiene filtros especiales para
disponible en el sitio web de Muffin en la Javascript que no están disponibles en la
sección Samples. versión gratuita. Webwasher necesita de
Para cargar el fichero, hay que selec- privilegios de administrador para ser
cionar la entrada para el filtro NoThanks instalado y no es trabajo fácil. Webwasher
en Enabled Filters bajo Preferences. En el suministra dos formatos de paquete, un
cuadro de diálogo que aparece, hay que Figura 4: El programa basado en Java Muffin RPM o un archivo tar comprimido, que
seleccionar Browse en Kill File y localizar el tiene su propio GUI e indica que fichero está contiene un script de instalación.
killfile en el directorio de Muffin. Púlsese procesando. El software se ejecuta directamente sin
Apply y luego Load para indicarle a Muffin habérselo indicado y empieza a escuchar
que use el killfile. El botón Save almacena En Red Hat, el sistema operativo lanza el puerto 9090 a la espera de peticiones.
esta configuración de forma permanente, y el filtro en el arranque del sistema, junto Los ficheros de configuración se encuen-
es una buena idea, a menos que se quiera con los otros programas de servidor. Se tran en /etc/wwasher y los ficheros de
repetir este proceso cada vez que se lance puede hacer de forma manual usando log en /var/log/wwasher. El sistema de
Muffin. El programa filtro crea un directo- /etc/rc.d/init.d/privoxy start. Los ficheros log está desactivado por defecto, pero
rio y lo usa para guardar la configuración y de configuración se encuentran en puede ser activado usando una interfaz
el fichero de log. /etc/privoxy, el fichero de configuración basada en Web, a la que se puede acce-
Para que esto funcione, hace falta principal es /etc/privoxy/config. Hay que der por medio de una dirección especial,
modificar las opciones del navegador, usar este fichero para especificar http://-web.washer-/. El nombre del
añadiendo la herramienta nueva como opciones más detalladas, pero Privoxy usuario por defecto es admin y la con-
un proxy. Esto se aplica a cualquier he- realizará un buen filtrado con los valores traseña es webwasher.
rramienta de proxy que se necesite usar. por defecto.
Si se tiene el navegador Mozilla, abrir las Una vez establecido el puerto del Malcriados
opciones (Edit | Preferences) y pulsar el proxy como 8118 en el navegador de La elección de la herramienta de filtrado
triángulo pequeño titulado Advanced. Internet, como se describió anterior- es una cuestión de gusto. Si no le gusta
Búscar la opción Proxies. Así es como se mente, Privoxy empezará a filtrar los Java, no le gustará Muffin. Si se insiste
activa la configuración manual y poner anuncios de las páginas Web que se vis- en software libre, se puede descartar
los valores correctos en HTTP Proxy y iten. El software tiene una característica Webwasher. Los usuarios de Mozilla y
Port. El primer campo típicamente con- especial para colocar unas etiquetas en Firefox pueden usar AdBlock, aunque no
tiene localhost. Poner el número de puer- los lugares donde ha quitado los anun- es tan potente como los otros filtros.
to del proxy en el segundo campo (Véase cios y puede mostrar la imagen filtrada y Privoxy es una herramienta madura que
la Tabla 1). Opera tiene una configu- la regla de filtrado que ha usado. Esta está bajo desarrollo y está disponible
ración similar en Network | Proxy opción permite comprobar que la he- como un paquete para distintas distribu-
Servers. Firefox usa Tools | Options y rramienta está quitando realmente los ciones. No es difícil instalar ninguno de
finalmente Connection Settings. anuncios o si está eliminando también los programas mencionados. ■
imágenes que realmente se desean ver.
Filtros con Historia Incluso se puede configurar Privoxy RECURSOS
Este software se basa en una herramien- directamente desde el navegador accedi-
ta clásica, Junkbuster [3]. Privoxy [4] endo a una dirección especial http://p.p. [1] AdBlock: http://adblock.mozdev.org
está aún en desarrollo, al contrario que [2] Muffin: http://muffin.doit.org
los otros programas comentados en este Limpia, Fija y da Esplendor [3] Junkbuster: http://internet.junkbuster.
artículo. La página web de Privoxy tiene A los usuarios domésticos les podría gus- com/
paquetes para distintas distribuciones. tar probar Webwasher [5], una he- [4] Privoxy: http://www.privoxy.org
Por defecto, el paquete tiene que ser rramienta gratuita de la empresa [5] Webwasher: http://www.webwasher.
instalado de forma global usando la Webwasher. Esta versión está restringida com/client/download/private_use/linux
cuenta del administrador. a dos usuarios o a un máximo de 20

Tabla1: Filtros Web


AdBlock Muffin Privoxy Webwasher
Posibilidad de instalación sin ser
administrador sí sí sí no
Proxy no sí sí sí
Puerto estándar - 51966 8118 9090
En desarrollo sí no sí sí
Preconfigurado o no sí sí
Licencia gratis gratis gratis Restringida, gratis para uso privado

60 Número 02 www.linuxmagazine.com.es
Sleuthkit ADMINISTRACIÓN

Sleuthkit, la herramienta forense digital

La Huella
Sleuthkit realiza análisis forenses en archivos del sistema de

Microsoft y Unix aplicando sus habilidades como detective

desde la línea de comandos para identificar evidencias, recu-

perar archivos borrados o reconstruir escenarios. Todo esto es

esencial en el arte del trabajo de los forenses digitales. En este

incipiente campo es mejor prepararse y practicar para los pro-

blemas que nos acecharán en el futuro.

POR RALF SPENNEBERG

L
os cortafuegos y los sistemas de • ¿Ha sido modificada alguna acción que el intruso ejecutara en la
detección de intrusión (IDS) alertan información almacenada en los máquina de la víctima. Si los resultados
a los administradores y proporcio- sistemas modificada? ¿Cuál? van ha ser usado posteriormente como
nan protección contra la mayoría de los • ¿Qué pretendía el intruso? evidencias hay requerimientos de cara a
ataques. Pero los intrusos siguen encon- Habitualmente es posible responder a documentación ambigua de los pasos
trando agujeros y atacando máquinas. El estas preguntas tras examinar los proto- individuales de la investigación.
administrador entonces debe actuar colos del cortafuegos y del IDS… si pre-
como un forense realizando pruebas en viamente el administrador ha implemen-
Dispositivo de circuito
el sistema aún vivo (encendido) o ya tado un sistema de seguridad y acceso
muerto (apagado) para salvar evidencias adecuado. Pero la monitorización inte-
cerrado mejorado
vitales. gral de sistemas y redes normalmente va Una vez que el controlador de circuito cerra-
Herramientas como TCT, la clásica en contra de las políticas de protección do mejorado y el comando losetup modifica-
do han sido instalados hemos creados los
utilidad forense (el paquete de he- de datos personales.
dispositivos adecuados usando el comando
rramientas Coroner [4] o el más nuevo El análisis forense de los sistemas afec-
createdev. Ahora simplemente podemos
Sleuthkit [1], objeto de este artículo), tados tras el evento es la única forma de montar la imagen de una disco duro com-
ayudan a resolver estos problemas. Tras obtener evidencias claras. Los proce- pleto usando los siguientes comandos:
una intrusión, hay una serie de difíciles dimientos exactos son complicados y
# losetup -r /dev/loopa host_U
preguntas que responder como: dependen de numerosos factores. Si esta-
hda.dd
• ¿Cómo ocurrió la intrusión? mos buscando una introducción comple-
# fdisk -l /dev/loopa
• ¿Qué provoco que el cortafue- ta en la materia hay unos pocos de docu-
Ahora podemos acceder a las particiones
gos no parase el ataque? mentos (algunos disponibles en la Red) individuales usando
• ¿Por qué el IDS no detectó el que pueden ayudar [5]. El propósito de /dev/loopa1,/dev/loopa2, etc. Puesto que la
ataque (hasta que fue demasia- cualquier investigación forense es opción -r establece el dispositivo de circuito
do tarde)? averiguar los eventos y la secuencia en la cerrado como solo lectura, incluso los sis-
• ¿Qué sistemas han sido afecta- que sucedieron: la serie de actividades temas de archivos de publicación no pueden
dos? que llevaron a la ocurrencia y cualquier escribir.

www.linuxmagazine.com.es Número 02 61
ADMINISTRACIÓN Sleuthkit

TCT y Sleuthkit
El primer paquete de herramientas para el treado @stake [3]) comenzó añadiendo her- The Atstake Sleuth Kit. Brian lanzó adi-
análisis forense de sistemas UNIX fue escrito ramientas adicionales a TCT al principio, lan- cionalmente el visor Autopsy Forensic. Al
por Wietse Venema y Dan Farmer en 1999 [5]. zando estos como utilidades de TCT. Estas margen de su nombre es un visor Web que
El paquete Coroner (TCT) es una colección de utilidades ofrecen una serie de funciones de los administradores pueden encontrar útil
como un interfaz GUI para comandos TASK.
comandos que los administradores pueden sistemas de archivos añadidos a los que
En abril del 2003 Brian Carrier cambió de
usar para realizar tareas forenses tras un inci- aparecen en TCT.
nuevo el nombre del proyecto a “The
dente en ordenadores UNIX.Wietse Venema Analizando sistemas de archivos no UNIX. Sleuthkit” para marcar el lanzamiento de la
aún mantiene este paquete de herramientas Al principio del 2002 Brian Carrier imple- versión actual, la 1.61. Esto enfatiza la natu-
y ofrece regularmente actualizaciones en su mentó el soporte a FAT y NFTS para propor- raleza Código Abierto del proyecto y su
página Web [4].TCT puede analizar los sigu- cionar capacidad analítica a sistemas de independencia de la corporación Atstake.
ientes sistemas operativos: Sun Solaris, archivos adicionales. También trabajo en Los archivos del proyecto están disponible
SunOS, Linux, FreeBSD, OpenBSD y BSD/OS. los códigos fuente de TCT, lo que fue razón en Sourceforge [1,2].
Brian Carrier de Atstake (típicamente dele- suficiente para cambiar el nombre a TASK,

Ejecutar los pasos individuales de la • Fecha y hora. homólogo criptográfico Crytcat o un


investigación en un orden determinado • Procesos activos. túnel SSU para transferir los datos al sis-
asegurará que los resultados son repro- • Archivos abiertos. tema forense en el que comprobaremos y
ducibles: “Asegurar y aislar la escena. • Configuración de red. analizaremos los datos.
Grabar la escena, proseguir con una • Conexiones de red.
búsqueda sistemática de evidencias”. [6] Esta información se pierde cuando el Migrando datos
sistema es apagado, pero puede ser El Netcat debe estar a la escucha en la
Asegurar y Aislar. extremadamente útil. Típicamente solo máquina de destino si usamos Netcat
El primer paso en el análisis forense es necesitamos comandos de Linux nor- para transferir el contenido del disco:
un asunto muy controvertido. La mayo- males para asegurar estos datos, y el
ría de expertos recomiendan desconectar comando grave-robber de tct es muy nc -l -p 3000 > host_hda.dd
el sistema de la red activa inmediata- útil. El comando no es parte de
mente. Esto previene que el intruso se de Sleuthkit. Es importante usar programas Y entonces pasamos los datos del disco
cuenta del análisis y borre sus pasos. de fuentes muy fiables cuando asegu- duro desde el sistema que tenemos que
Algunos expertos no están de acuerdo ramos una evidencia. Por ejemplo, copiar hasta Netcat:
con esto. El intruso puede haber instala- comandos compilados estáticamente en
do un código oculto que automática- un CD o en un disquete protegido con- dd if=/dev/hda | nc Server 3000
mente borra el sistema si este es tra escritura.
desconectado de la red. Es difícil hacer Los datos no-volátiles es lo siguiente. Los investigadores forenses saben muy
una recomendación general, pero yo Estos significa los archivos del sistema y bien que deben calcular la suma de
suelo recomendar y usar el primer méto- la memoria intercambio. Adicionalmente control del disco imagen inmediata-
do. debemos grabar cualquier documento
cercano y la apariencia general del sis- Listado 1: Particiones para
Grabando el escenario tema. Una cámara puede ser muy útil el primer ejemplo.
Analizamos un ordenador comprometi- por motivos de documentación.
01 Disk /dev/hda: 0 heads, 0
do, el experto forense primero debe
sectors, 0 cylinders
procurar salvar la información volátil Simple Copia de Seguridad
02 Units = sectors of 1 * 512
antes de proceder a salvar la no-volátil. Una simple copia de seguridad del sis-
bytes
Las siguientes son volátiles: tema no es suficiente. La copia de los
03 Device Boot Start End Blocks
• Memoria principal. archivos del sistema deben ser idénticos
Id System
• Mensajes del Kernel. a los originales, y podemos perder
04 /dev/hda1 63 15119999 7559968+
archivos borrados por el intruso. La
83 Linux
copia de seguridad debe incluir espacio
05 /dev/hda2 15120000 80408159
de sobra. La herramienta dd de UNIX
32644080 5 Extended
puede ejecutar esta tarea. La versión
06 /dev/hda5 15120063 16178399
Windows está disponible en [7]. EL
529168+ 82 Linux swap
administrador debe usar dd para hacer
07 /dev/hda6 16178463 24373439
Figura 1: Cuando el IDS anuncia un intruso (en copias de seguridad del disco duro com-
4097488+ 83 Linux
este caso Short está usando Win-Popup para aler- pleto y no solo de particiones individ-
08 /dev/hda7 24373503 32568479
tar una explotación IMAP) es tarea del uales. Al hacerlo es importante no alma-
4097488+ 83 Linux
administrador el iniciar los procedimientos de cenar ningún dato en el disco original.
09 /dev/hda8 32568543 80408159
respuesta ante incidentes. Sleuthkit nos puede En su lugar debemos usar un disco exter-
23919808+ 83 Linux
ayudar a analizar los sistemas de archivos. no usando la herramienta Netcat, su

62 Número 02 www.linuxmagazine.com.es
Sleuthkit ADMINISTRACIÓN

mente después de la copia. Esta suma Si estos pasos parecen muy complicados La segunda parte de esta serie describe
proporciona después evidencia de que podemos hacer copia de seguridad de las unas sencillas investigaciones usando
la copia de seguridad no ha sido particiones individuales, pero esto Autopsy.
manipulada. supone correr el riesgo de perder infor- Su instalación es extremadamente sen-
mación necesaria para el análisis forense cilla: descargamos el paquete desde su
md5sum host_hda.dd si ésta está almacenada en áreas no par- página Web, lo extraemos y ejecutamos
ticionadas. El controlador mejorado de make. Esto sitúa las herramientas en el
La siguiente tarea es dividir el disco duro circuito cerrado [8], que es capaz de subdirectorio bin/. El visualizador
en particiones puesto que Sleuthkit solo acceder al disco duro completo como un forense Autopsy es muy fácil de compi-
puede manejar particiones. El comando dispositivo de circuito cerrado, es más lar, sin embargo, puede que prefiramos
fdisk -lu host_hda.dd lista las particiones práctico que la separación manual de usar los paquetes RPM.
(ver listado 1). imágenes individuales del disco. Las herramientas Sleuthkit están
Podemos usar de nuevo dd para divididas en 4 categorías. La primera
extraer particiones individuales. Para Búsqueda Sistemática muestra información de sistemas de
hacer esto necesitamos calcular el Tras guardar los archivos del sistema del archivos completos y solo contiene el
tamaño de estas usando los cilindros del equipo comprometido, crearemos las comando fsstat. El segundo grupo
inicio y del final. En el caso de hdal esto sumas de comprobación y almacenare- comienza por d y nos permite acceder
supone 15 119 999 - 63 + 1 = 15 119 mos una copia en un lugar seguro, el a los datos almacenados en archivos
937. ddpuede entonces usar esta infor- investigador puede proceder a analizar como: dcalc, dcat, dls, and dstat.
mación para guardar la primera partición una copia de los archivos del sistema Sleuthkit nos proporciona las sigu-
en un archivo propio: dejando el original como una evidencia ientes herramientas para información
no tocada. Sleuthkit proporciona una meta almacenada en ínodos: icat,
dd if=host_hda.dd of=host_hda1U serie de comandos para este paso. ifind, ils, and istat. Los comandos en
.dd bs=512 skip=63 count=U Veremos algunas de las más importantes el 4º grupo comienzan con f y están
15119937 herramientas en las siguientes secciones. diseñados para tareas de nivel de

Despertando de la Muerte
Restaurar archivos borrados no es para nada etario y grupo, el contador de referencia y 3 de datos. Las referencias a los bloques de
una tarea trivial en sistemas de archivos sellos de tiempo UNIX (ctime,atime y datos y el enlace entre el nombre del archivo
UNIX. No conozco ningún comando unerase mtime). El ínodo también contiene 12 refer- y el ínodo tiende a no cambiar. Por tanto es
para restaurar datos sin peligro de pérdidas encias directas a bloques de datos que son posible usar herramientas como ils para
independiente del sistema operativo UNIX las direcciones de los primeros 12 bloques de mostrar ínodos borrados e icat para restaurar
que usemos. Por tanto ese esencial disponer datos en el archivo. Los ínodos usan adi- los contenidos de los archivos. No obstante
de algunos conocimientos previos de cómo cionalmente referencias indirectas, apuntan- esto solo funciona si el sistema de archivos
guarda y borra datos el sistema de archivos do la primera a un bloque de datos que con- no ha reasignado el ínodo o los bloques de
para usar herramientas como TCT o Sleuthkit tiene referencias directas a bloques de datos. datos a otro archivo. El comando fls muestra
y para afrontar los incidentes que puedan Las 2 últimas referencias apuntan a un los nombres de los archivos borrados.
surgir al restaurar archivos borrados. El bloque indirecto doble o triple (ver figura 2). Las implementaciones modernas borran
segundo sistema de archivos extendidos Cuando el sistema de archivos borra un más.
(EXT 2) es un útil ejemplo de un ínodo archivo simplemente marca el acceso del
Muchas distribuciones modernas de Linux
heredado basado en sistemas de archivos directorio y el ínodo como borrado y libera el
borran archivos de una forma que previenen
UNIX. Cada archivo se representa por una espacio ocupado por el ínodo y los bloques
de forma efectiva que sean
estructura especial, su ínodo. El
restauradas.
ínodo almacena la información
Desafortunadamente esta opción
meta que pertenece al archivo.
de seguridad tiende a impedir el
Adicionalmente, se requieren los
análisis forense con herramientas
bloques de datos para almacenar
como ils y icat. En este caso, el
el payload. Los directorios son sim-
administrador que realice la
ple archivos especiales que de
investigación se ve forzado nor-
nuevo comprometen el ínodo. Sus
malmente a restaurar usando el
bloques de datos almacenan las
comando Sleuthkit dls, que lee el
listas de directorio que contienen
espacio descuidado del disco
nombres de archivos y enlaces a
duro. El investigador puede
los ínodos apropiados.
entonces usar grep o la her-
El ínodo en EXT2 ramienta sorter para investigar
Los ínodos almacenan la informa- Figura 2: El ínodo (izquierda) guarda la información meta para un archivo. los resultados. Autopsy es un
ción meta para un archivo excepto interfaz elegante que ayuda con
Referencia los bloques de datos con los contenidos del archivo. Los
su nombre. Esto incluye su estas investigaciones más com-
archivos más grandes pueden requerir el uso de referencias indirectas.
tamaño, tipo, permisos, propi- plejas.

www.linuxmagazine.com.es Número 02 63
ADMINISTRACIÓN Sleuthkit

copias de seguridad. Nuestro


Listado 2: Archivos Borrados ejemplo usa el sistema de
01 class|host|device|start_time
archivos Forensic Challenge.
02 ils|kermit.spenneberg.de|honeypot.hda5.dd|1052056153
Esta competición fue organiza-
03 st_ino|st_alloc|st_uid|st_gid|st_mtime|st_atime|st_ctime|st_dtime|st_mode|st
da por el proyecto Honeynet en
04 _nlink|st_size|st_block0|st_block1
enero del 2001. Un archivo tar
05 1|a|0|0|973385737|973385737|973385737|0|0|0|0|0|0
que contiene datos está
06 1890|f|17275|20|973695367|973695367|973695367|973695367|40755|0|0|6172|0
disponible para ser descargado
07 1891|f|17275|20|846630170|973695173|973695367|973695367|100644|0|1082|6173|0
desde varios sitios [9]. Puesto
08 1892|f|17275|20|973695367|973695367|973695367|973695367|40755|0|0|6174|0
que las particiones han sido
09 1893|f|17275|20|846630171|973695173|973695367|973695367|100644|0|1458|6175|0
separadas previamente no
10 1894|f|17275|20|846630171|973695173|973695367|973695367|100644|0|1362|6176|0
podemos usar estos archivos
11 2243|f|17275|20|846630171|973695173|973695367|973695367|100644|0|1465|6177|0
para ilustrar los primeros pasos
de la copia de seguridad del
disco duro.
archivos como la creación de listas y la información hacia la que las he- Tras la descarga, el forense novato
búsqueda de archivos. rramientas están orientadas y mostrando debe extraer los datos y verificar la suma
El comando mactime muestra los sus limitaciones. de comprobación. Esta última está loca-
eventos cronológicamente en un sis- EXT2 y EXT3 pueden producir algunos lizado en el archivo readme. El siguiente
temas. Los comandos file y sorter clasifi- efectos secundarios desagradables en comando extrae la suma MD5 y las veri-
can los archivos en la imagen del disco algunas distribuciones modernas. fica con las imágenes individuales:
duro por tipo. Dependiendo de los parchas aplicados,
estos archivos de sistema pueden borrar # tail +12 readme | headU
Archivos de Sistema la referencia a los bloques de datos del -6 | md5sum -c
Soportados ínodo y esto impide a herramientas sen- honeypot.hda1.dd: Ok
Sleuthkit analiza los tipos de archivos en cillas como icat restaurar el contenido de honeypot.hda5.dd: Ok
el sistema mostrados en la tabla 1. un ínodo borrado. honeypot.hda6.dd: Ok
desafortunadamente no soporta archivos honeypot.hda7.dd: Ok
de sistema típicos de Linux como Reiser Sugerencias Prácticas: honeypot.hda8.dd: Ok
FS, JFS o XFS. El cuadro “Despertando Reanimación. honeypot.hda9.dd: Ok
de la Muerte” describe como funcionan Ahora es momento de analizar las imá-
los archivos del sistema UNIX, indicando genes del disco duro de las que hicimos La función de las particiones indivi-
duales se proporciona para suplementar
Listado 3: Descubriendo Datos Interesantes la investigación (ver tabla 2).
Montaremos las particiones como solo
01 # ils -f linux-ext2 -r honeypot.hda5.dd | tail +4 | lectura usando el dispositivo de circuito
02 > awk -F '|' '$11 > 0 {print $1}' | cerrado que proporciona un vistazo ini-
03 > while read in; do cial. Pero esto puede ser peligroso
04 > icat honeypot.hda5.dd $in > data/hda5.icat/$in porque puede modificar los datos. Ver el
05 > done cuadro “Solo lectura, escritura a veces”.
06 # file data/hda5.icat/* | egrep "tar|gzip|RPM|ELF" Los comandos Sleuthkit proporcionan
07 data/hda5.icat/109791: GNU tar archive un vistazo más profundo. Los archivos
08 data/hda5.icat/109861: GNU tar archive borrados son el primer punto de interés
09 data/hda5.icat/109865: RPM v3 bin i386 nfs-utils-0.1.9.1-1 (si el atacante ha intentado borrar sus
10 data/hda5.icat/109866: RPM v3 bin i386 wu-ftpd-2.6.0-14.6x huellas) este es normalmente el mejor
11 data/hda5.icat/109943: ELF 32-bit LSB relocatable, Intel 80386, camino para descubrirlos.
version
12 1 (SYSV), not stripped
Ínodos de archivos borrados
13 data/hda5.icat/109944: ELF 32-bit LSB relocatable, Intel 80386, El comando ils muestra información
version ínodo de un archivo del sistema; el
14 1 (SYSV), not stripped parámetro -r indica al parámetro que se
15 # tar tf data/hda5.icat/109791 concentre en ínodos borrados (por defec-
16 ssh-1.2.27/ to). El listado 2 muestra los resultados
17 ssh-1.2.27/COPYING para ils -f linux-ext2 -r honeypot.hda5.dd
18 ssh-1.2.27/README El resultado esta en formato de tabla,
19 ssh-1.2.27/README.SECURID conteniendo la línea 1 la cabecera y la
20 [...] línea 2 los datos correspondientes.
Evidentemente el comando se ejecutó en

64 Número 02 www.linuxmagazine.com.es
Sleuthkit ADMINISTRACIÓN

Solo lectura, Escritura a Veces


Cuando realicemos análisis forenses es nor- lectura. Por supuesto, esto cambia la suma de do:
malmente útil montar las particiones del comprobación MD5. hay una simple prueba # mount -o ro -t reiserfs
disco duro para buscar archivos. Esto es par- para esto: necesitaremos una imagen de
/dev/loop0 /mnt
ticulamente cierto para Reiser FS, puesto que prueba y su suma de comprobación para el
umount /mnt
Sleuthkit no soporta el sistema de archivos ensayo:
# md5sum /tmp/testimage.orig
de Reiser. Para garantizar la integridad de los # dd if=/dev/zero
datos, los investigadores deben generar c6ffc8a13a6821cd327d1db9ee351fafU
of=/tmp/testimage.origU
sumas e comprobación para todos los sis- /tmp/testimage.orig
bs=1024k count=50 Solo hay 3 formas de evitar esto:
temas de archivo y montarlas como solo lec-
# losetup /dev/loop0
tura. Desafortunadamente, el modo solo lec- • Modificar los controladores EXT3 o Reiser
tura no siempre se puede considerar como /tmp/testimage.orig FS.
válido: los sistemas de no publicación real- # mkreiserfs /dev/loop0
• Salvar el sistema de archivos en un CD-
mente no cambian nada si son montados # md5sum /tmp/testimage.orig
ROM.
como solo lectura. Sin embargo, los sistemas 2ceed9e819bf4348a33a21f7697149c8U
• Usar el controlador mejorado de circuito
de archivos de publicación como EXT3 o reiser /tmp/testimage.orig
cerrado [8].
FS tienden a actualizar la evento de la publi- Tras montar en solo lectura e inmediata-
cación de opciones montadas como de solo mente desmontar, la suma MD5 ha cambia-

el puesto kermit spenneberg.de para un


archivo llamado honeypot hda5.dd . Las Listado 4: Sumario de Mactime
cosas comienzan a ser más interesantes
en la línea 3. Ésta es la segunda cabecera 01 ed Nov 08 2000 14:51:53 17969 .a. -/-rwxr-xr-x 1010 100 109832
de la tabla y se utiliza para cualquier /usr/man/.Ci/scan/x/x
línea restante. La primera columna, 02 1760 .a. -/-rwxr-xr-x 1010 100 109829 /usr/man/.Ci/scan/bind/ibind.sh
st_ino contiene el número ínodo, y la 03 15092 .a. -/-rwxr-xr-x 1010 100 109836 /usr/man/.Ci/scan/x/pscan
segunda columna (st_alloc) indica si el 04 4096 .a. d/drwxr-xr-x 1010 100 109841 /usr/man/.Ci/scan/port/strobe
ínodo esta libre (f) u ocupado (a). Hay 05 1259 .a. -/-rwxr-xr-x 1010 100 109834 /usr/man/.Ci/scan/x/xfil
muchos caminos para descubrir archivos 06 4096 .a. d/drwxr-xr-x 1010 100 109831 /usr/man/.Ci/scan/x
interesantes. El primer camino supone 07 [...]
cualquier archivo con tamaño superior a 08 Wed Nov 08 2000 14:52:09 9 m.c l/lrwxrwxrwx 0 0 46636
cero (columna 11, st_size). Estos /root/.bash_history -> /dev/null
archivos se investigan usando el coman- 09 9 m.c l/lrwxrwxrwx 0 0 23 /.bash_history -> /dev/null
do file con el objeto de catalogar el con-
tenido del archivo. Para hacer esto la investigación en el primer archivo tar familiar comando ils, este implica usar fls.
herramienta accede a una gran base de (línea 15) muestra que hemos descubier- Este comando recoge información de
datos que contiene casi todos los for- to SSH Versión 1.27. cualquier archivo que aún existe en el sis-
matos de archivos conocidos (magic*). tema de archivos. La opción-m crea un
La versión Sleuthlit de file no es dife- Diario de Abordo resultado que luego es procesado por el
rente de la versión incluida con muchas El segundo método para analizar comando mactime. También se muestra el
distribuciones, si bien la base de datos archivos borrados implica que el investi- punto de montaje. Se require el parámetro
puede ser mayor. gador forense cree primero un diario -m para lis, no para el punto de montaje.
cronológico de las operaciones de los El archivo utilizado para recoger la
Archivos Interesantes archivos en el sistema. El diario cubrirá mayoría de los datos se llama body por
El listado 3 muestra las sintaxis posibles. cualquier archivo
La línea 1 quita las primeras 4 líneas de en lugar de solo Tabla 1: Sistemas de archivos en Sleuthkit
la información ínodo del comando ils y archivos borrados.
pasa el resto al comando awk (línea 2). También tiene sen- Sistema de Archivos Opción de Línea de Comandos

Esto encuentra cualquier ínodo con tido cubrir todos BSDi FFS bsdi
FAT Filesystem FAT12 fat12
tamaño superior a cero y pasa su los archivos del
FAT Filesystem FAT16 fat16
número al comando icat. Este último sistema en el
FAT Filesystem FAT32 fat32
extrae los archivos de la imagen y los análisis.
FreeBSD FFS freebsd
guarda en un subdirectorio llamado El administrador
Linux Filesystem EXT2 linux-ext2
data/hda5.icat/ usando como nombre primero recoge
Linux Filesystem EXT3 linux-ext3
del archivo el número del ínodo. datos de los
NTFS ntfs
El comando filees entonces usado para archivos del sis- OpenBSD FFS openbsd
garantizar el tipo de archivo y grep filtra tema (ver figura 3). Solaris FFS solaris
los archivos interesantes (línea 7). La Al igual que el

www.linuxmagazine.com.es Número 02 65
ADMINISTRACIÓN Sleuthkit

en la tercera columna.
Una a indica acceso al
RECURSOS
archivo y una c indica que [1] Sleuthkit: http://www.sleuthkit.org
ha sido modificada infor-
[2] Autopsy Forensic Browser: http://autopsy.
mación meta (permisos,
sf.net
propietarios, …).
[3] Atstake: http://www.atstake.com
Podemos ver donde se
han llamado a los compi- [4] The Coroner’s Toolkit: http://www.
porcupine.org/forensics/tct.html
Figura 3: Para analizar el orden de las modificaciones de múltiples ladores y librerías asocia-
sistemas de archivos el investigador necesita cotejar la informa- das, lo que nos permite [5] Dan Farmer and Wietse
ción del archivo y del ínodo en el archivo body. reconstruir los pasos del Venema,“Computer Forensic Analysis”:
http://www.porcupine.org/forensics/
atacante.
motivos históricos. Ejecutar mactime para Hay una contrapartida a este camino. [6] Richard E.Saferstein,“Criminalistics: An
este archivo genera un diario de abordo de Si el atacante ha modificado el archivo Introduction to Forensic Science”,Prentice
Hall
modificaciones del sistema de archivos. más de una vez el ínodo solo salvará la
Podemos restringir el resultado al punto fecha de la última modificación. La he- [7] dd for Windows - Unx-Utils: http://
unxutils.sf.net/
en el que estemos interesados. En nuestro rramienta mactime solo mostrará la últi-
ejemplo cogido de Forensic Challenge ma modificación. [8] Enhanced Loopback: ftp://ftp.hq.nasa.
podemos suponer que el ataque se produ- gov/pub/ig/ccd/enhanced_loopback/
jo el 7 de noviembre de 2000. GUI al rescate [9] Forensic Challenge files: http://project.
Los comandos Sleuthkit pueden ser honeynet.org/challenge/images.html
Monitorización del Tiempo muy difíciles de usar y eso hace compli-
Consistente cado prestar atención a los resultados.
Para proveer monitorización del tiempo La búsqueda de códigos específicos en El visor forense Autopsy (ver figura 4)
constante debemos usar el parámetro -z todos los sistemas de archivos y proporciona un GUI de este tipo.
para especificar la zona horaria usada analizar los contenidos de archivos bo- También permite al investigador docu-
por el sistema que crea los datos. En este rrado puede ser tedioso y requerir mentar y comentar los datos y resulta-
caso usamos CTS (horario central están- mucha programación. dos. Bajo algunas circunstancias puede
dar - GMT-0600). El resultado muestra En estas circunstancias, GUI puede ser tener sentido o ser necesario usar la
actividades no usuales a las 14:51 el 8 de muy útil cuando realizamos análisis línea de comandos, pero los investi-
noviembre (ver listado 4). El directorio forenses. Proporciona una capa abstracta gadores serán capaces de realizar los
/usr/man/.Ci/ no debería estar allí en para los comandos y presenta solo los pasos más importantes dentro del GUI.
realidad. resultados, lo que significa que los inves- La segunda parte de esta serie revisará
Los archivos que contienen cambios tigadores forenses no necesitan consultar el visor forense Autopsy Forensic
también son de interés. Estos archivos las páginas principales para obtener Browser usando los ejemplo de la
son fácilmente reconocibles por la m resultados. Forensic Challenge. ■

Tabla 2: Particiones del Desafío


Partición Sistema de archivos
/dev/hda8 /
/dev/hda1 /boot
/dev/hda6 /home
/dev/hda5 /usr
/dev/hda7 /var
/dev/hda9 swap

Ralf Spenneberg es instruc-


tor y autor de Unix/Linux.
El año pasado vió publica-
do su primer libro.
EL AUTOR

“Intrusion Detection
Systems for Linux Servers”
(Sistemas de Detección de
Intrusión para Usuarios de
Linux). Ralf también ha
desarrollado diverso mate-
Figura 4: El visor forense Autopsy provee una apariencia Web a Sleuthkit y facilita el rial formativo.
análisis de sistemas de archivo.

66 Número 02 www.linuxmagazine.com.es
Email Clusters ADMINISTRACIÓN

Trucos: Clusters para Emails

El Cartero más Rápido


Uno de los mayores retos para los administradores es propor-

cionar servicios básicos de correo electrónico en redes a gran

escala. La mayoría de las distribuciones Linux hacen lo mejor

posible para reenviar el correo electrónico, pero los admin-

istradores pueden hacerlo aún mejor. Instalar un MTA (Mail

Transfer Agent) no tiene por qué ser una pesadilla si se toma un

poco de tiempo para planear lo que se quiere conseguir. Se

pueden usar varios servidores para compartir la carga de difer-

entes maneras, asegurándose de que el correo siempre se envíe.


POR MARC ANDRÉ SELIG

E
s raro que los usuarios de las esta- ciones a pequeña escala con unas 30 o Los hosts internos simplemente reen-
ciones de trabajo tengan problemas 40 máquinas. Imagínese cada host que- vían cualquier mensaje al mismo relay. El
con el email. Los MUAs (Mail User riendo enviar sus propios mensajes. Listado 1 muestra la configuración de un
Agents) tales como Mozilla, KMail o Sería casi imposible seguirles la pista. Se smart host para Sendmail en el archivo M4
Evolution recogen el correo de su tendría que reconfigurar cada host de .../sendmail/cf/cf/sendmail.mc. Al mismo
proveedor de servicios de Internet y forma individual si el jefe quisiera ver tiempo, esta configuración deshabilita el
envían los mensajes nuevos al provee- algunas estadísticas o si se necesitara MSA (Message Submission Agent), que
dor. En otras palabras, se comunica instalar un servicio de encriptación o un rara vez se necesita, y restringe el servicio
directamente con el MTA de su provee- archivo estandarizado. Obviamente, se a las conexiones locales de SMTP (Simple
dor, tal y como se muestra en la Figura 1. deseará evitar todo ese trabajo y por el Mail Transfer Protocol) [5]. La configu-
Esta configuración está diseñada para contrario, optar por un sistema de correo ración de smart host para Qmail es bas-
manejar a un único usuario con un único centralizado. Además, la tarea de filtrar tante más simple. Una única línea en
programa. Si el usuario tiene varios los paquetes será mucho más fácil si se /var/qmail/control/smtproutes es todo lo
clientes, normalmente necesitará confi- impide el contacto directo con el mundo que se necesita:
gurarlos de forma separada. En el caso exterior a los dispositivos internos de
de una estación de trabajo que soporte nuestra red. :relay.myorg.uk
múltiples usuarios, tiene sentido instalar
un MTA local. Véase la Figura 2. Permanezcamos Unidos El servidor SMTP de Qmail se llama
Sendmail [1] es el MTA por antonoma- La mayoría de las instalaciones a gran desde inetd. Y este es el único sitio
sia, aunque Qmail [2], y Postfix [3] tam- escala designan uno o más ordenadores donde restringir el servicio al host local,
bién son populares. El MTA le permite como relays o smart hosts (Véase la usando TCP Wrapper por ejemplo.
configurar de forma automática los pro- Figura 3). Estas máquinas aceptan men- Postfix permite incluir ambas configura-
cesos para enviar los emails. Este trabajo sajes enviados por los sistemas internos ciones en /etc/postfix/main.cf:
típicamente se realiza por el servicio y los reenvían a los buzones, sin impor-
cron, que enviará cualquier salida de sus tar si el destino final está dentro o fuera relayhost = relay.myorg.uk
tareas al root. de la red local. Se pueden centralizar las inet_interfaces = 127.0.0.1
tareas avanzadas de email en los smart
Sin Escalabilidad hosts. Y las estadísticas solicitadas por el Desde luego, se debe asegurar de que el
Desafortunadamente, esta configuración jefe se podrán obtener del análisis de los relay central proporcione este servicio
tiene limitaciones, incluso en instala- archivos de log de los smart hosts. sólo a los sistemas internos de la red,

www.linuxmagazine.com.es Número 02 67
ADMINISTRACIÓN Email Clusters

entrantes. Se necesitaría un nombre de


Listado 1: Smart Host con Sendmail dominio para la dirección de correo de
01 define(`SMART_HOST', `relay.myorg.uk')dnl cada host. Además, supondría el tener
02 FEATURE(`no_default_msa',`dnl')dnl que instalar los filtros antispam y los
03 DAEMON_OPTIONS(`Port=smtp, antivirus en cada máquina. Y que no se
Addr=127.0.0.1, Name=MTA') olvide el riesgo de seguridad que podría
04 FEATURE(`nocanonify')dnl suponer tener el puerto 25 (SMTP) abier-
to en cada host.
El método típico es similar al adoptado
Listado 2: Configuración MX de la Universidad de Trier para el correo saliente. El correo entrante
debe manipulase y repartirse por un
01 mas@ishi:~> dig uni-trier.de mx pequeño grupo de máquinas especial-
02 izadas. El cómo se realiza esta tarea
03 ; <<>> DiG 8.3 <<>> uni-trier.de mx dependerá de lo grande que sea la red y
04 [...] del volumen de correo que sea necesario
05 manejar.
06 ;; ANSWER SECTION:
07 uni-trier.de. 1D IN MX 10 rzmail.uni-trier.de. Centro de Control
08 uni-trier.de. 1D IN MX 50 rzmail2.uni-trier.de. Una pregunta importantes es ¿se usará
09 un sistema centralizado de buzones o se
10 ;; AUTHORITY SECTION: distribuirá cada mensaje de correo a
11 [...] cada máquina? La solución centralizada
es más sencilla y fácil de proteger. La dis-
tribución del correo tiene más sentido en
Listado 3: Configuración MX de AOL ambientes con una alta cualificación téc-
nica, ya que permite a los usuarios tener
01 mas@ishi:~> dig aol.com mx
mayor libertad de elección con respecto
02
a las configuraciones individuales.
03 ; <<>> DiG 8.3 <<>> aol.com mx
Además, los usuarios pueden mermar la
04 [...]
potencia de proceso de sus estaciones de
05
trabajo aplicando filtros adicionales y
06 ;; ANSWER SECTION:
reglas de ordenación.
07 aol.com. 1H IN MX 15 mailin-01.mx.aol.com.
En ambos casos, un servidor MX (Mail
08 aol.com. 1H IN MX 15 mailin-02.mx.aol.com.
Exchage) central manipulará los correos
09 aol.com. 1H IN MX 15 mailin-03.mx.aol.com.
entrantes al principio. Luego podrá reen-
10 aol.com. 1H IN MX 15 mailin-04.mx.aol.com.
viar los mensajes a los usuarios profe-
11
sionales directamente a sus estaciones de
12 ;; AUTHORITY SECTION:
trabajo. Se puede deshabilitar el servidor
13 [...]
SMTP o restringirlo a recibir solamente
14
las transmisiones locales para todas las
15 ;; ADDITIONAL SECTION:
máquinas. El protocolo POP (Post Office
16 mailin-01.mx.aol.com. 5M IN A 64.12.138.152
Protocol), IMAP (Internet Message Access
17 mailin-01.mx.aol.com. 5M IN A 152.163.224.26
Protocol) o, en algunos casos, un sis-
18 mailin-01.mx.aol.com. 5M IN A 205.188.156.122
temas de ficheros de red como NFS, se
19 mailin-01.mx.aol.com. 5M IN A 64.12.136.57
encargarán de distribuir los mensajes
20 mailin-01.mx.aol.com. 5M IN A 64.12.137.89
desde el sistema central de correo a las
21 mailin-01.mx.aol.com. 5M IN A 64.12.137.184
estaciones de trabajo individuales.
22 mailin-01.mx.aol.com. 5M IN A 64.12.138.57
23 [...]
Sincronizados
Nuestros ejemplos anteriores suponen
para evitar que los spammers se /etc/mail/relay-domains; Qmail necesita un único relay y un único servidor MX
aprovechen de ello. Muchas de las dis- que se establezca la variable de entorno para el manejo del correo. En la mayoría
tribuciones lo tienen ya activado por RELAYCLIENT y Postfix la variable de las pequeñas y medianas empresas
defecto. De hecho, será más probable mynetworks en el archivo main.cf. ambas funciones las realiza una única
que se tengan dificultades, si se quiere máquina. La experiencia nos dice que
permitir que el relay reenvíe los correos Recepción de Correo una única máquina puede manejar unos
generados internamente. Si se tiene No es una buena idea dejar que los hosts 25000 mensajes por día o incluso más,
Sendmail, se puede editar el archivo individualmente reciban los mensajes dependiendo de las condiciones locales.

68 Número 02 www.linuxmagazine.com.es
Email Clusters ADMINISTRACIÓN

Este hecho hace que la que se usarán indistintamente por las


selección y programación fuentes externas. Insertando el comando
de los filtros sea algo que dig varias veces con distintos intervalos
se preste bastante al uso entre una vez y otra, se podrá observar
de trucos. Procmail es que el orden de salida ha cambiado.
Figura 1: Para sistemas independientes el manejo de email es sen- útil para un único También, cada una de las cuatro
cillo. El cliente de correo (MUA) contacta directamente con el usuario que quiera crear entradas MX apuntan a direcciones IP
servidor de correo del proveedor (MTA). rápida y fácilmente un diferentes. Esto permite a AOL distribuir
filtro que se aplicará a los mensajes entrantes entre un gran
toda clase de productos número de máquinas para proporcionar
como software antivirus un equilibrado de la carga.
o el Spam Assassin. Tan
pronto como el volumen Reunido
llegue a un nivel crítico, AOL necesita almacenar los mensajes
sin embargo, Procmail se recibidos por los distintos servidores antes
convierte en un devo- de asignarlos a los buzones de los clientes.
Figura 2: Cuando el mensaje es enviado por una estación de trabajo rador de recursos: engen- La solución típica a este reto es un servi-
independiente, el MUA le pasa el mensaje al MTA local. dra procesos gigantescos dor de ficheros rápido que albergue a cada
y realmente delegar en su uno de los buzones. Cada uno de los
tarea se hace inviable. servidores MX monta este directorio de
Sendmail, es preferible correo del servidor de ficheros y escribe
con su elegante Milter. cualquier mensaje recibido directamente
en el buzón del usuario apropiado.
Distribución de Desafortunadamente, este método no es
Carga trivial: situaciones donde dos servidores
Si un servidor de correo MX intenten entregar mensajes al mismo
está sobrecargado, lo usuario a la vez y colisionen, deben ser
primero que hay que bus- evitadas. En un próximo artículo para esta
car es una configuración columna se verá con más detalle el proble-
Figura 3: Un relay central de correo o smart host se encarga de reen- inapropiada, tal como el ma y sus posibles soluciones.
viar los mensajes salientes. de Procmail. Pero esto no La arquitectura que se ha estado
es siempre la respuesta. mirando proporciona un ahorro de recur-
El envío del correo es típicamente una Si está teniendo problemas con los men- sos en otros sitios. Donde sea que se
tarea más crítica que la recepción de los sajes entrantes en su servidor MX, es necesite un servidor MX central que eje-
mismos. Aunque no necesita mucha bastante simple delegar en otros servi- cute servicios para POP o IMAP, puede
potencia de proceso, las conexiones dores MX adicionales. El Listado 2 mues- ser ahora descargado por el servidor de
salientes suelen ser más lentas o incluso tra la disposición típica de la configu- ficheros o por otros ordenadores. El
provocan fallos. Esto implica que los ración MX, tal y como se usa en la segundo truco (permitiendo que un
recursos pueden estar ocupados por bas- Universidad de Trier. Nótese las priori- único nombre de host en el DNS apunte
tante tiempo. Incluso, los MTAs como dades asignadas a cada servidor MX (a la a varias direcciones IP) también ayuda a
Qmail tienen problemas manejando izquierda de cada nombre de host). proporcionar un balanceo de la carga del
grandes colas de correo. Sin embargo, la Los programas que envíen el correo servidor de relay. Si este servidor está
siempre presente inundación de spam intentarán usar la máquina con la priori- sobrecargado, simplemente hay que
hace que los mensajes salientes repre- dad más baja; de este modo añadir un segundo servidor con el
senten tan solo una fracción de la carga rzmail.uni-trier.de (prioridad 10) será la mismo nombre. ■
total. Irónicamente, esto en realidad que espere la mayor cantidad de men-
facilita el escalado. sajes. El sistema de backup, rzmail2 (pri-
RECURSOS
oridad 50) no se usará a menos que el
[1] Sendmail:http://www.sendmail.org/
Aceleración de Sistemas sistema principal no esté disponible.
[2] Postfix: http://www.postfix.org/
En el caso de la recepción de email, Aunque este método produzca redun-
cualquier mecanismo de filtro impactará dancia, no distribuye la carga. Cada [3] Qmail: http://www.qmail.org/
en el rendimiento del sistema. Cuantos cliente y cada MTA intentará enviar el [4] Milter: http://www.sendmail.com/part-
más filtros se apliquen y más complica- correo a rzmail.uni-trier.de. ner/resources/development/milter_api/;
dos sean, mayor tiempo tardará en AOL.com (véase Listado 3) hace esto Milter Perl modules:
http://search.cpan.org/~cying/
recibir un único mensaje. Esto implica de manera diferente, combinando dos
que un menor número de mensajes se métodos de distribución de la carga. Por [5] Relevant RFCs:821 and 2821 (SMTP),1939
procesaran de forma simultánea en una un lado, los cuatro servidores MX tienen (POP3),3501 (IMAP) http://www.rfc-edi-
tor.org
única máquina. la misma prioridad (15), lo que implica

www.linuxmagazine.com.es Número 02 69
Bienvenidos a Linux User
Ésta es la sección dedicada a la presentación de software interesante y útil que nos ayuda
en nuestro quehacer diario con el escritorio Linux. Aquí aprenderemos a utilizar
software estándar de una manera más eficiente, adquiriremos valiosos
conocimientos y descubriremos apasionantes nuevas aplicaciones.

Herramientas: TaskJuggler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71


Todas las organizaciones, desde las empresas a los grupos de usuarios sin ánimo de lucro
pueden ahorrar mucho tiempo y dinero con la herramienta adecuada.TaskJuggler ayuda
a organizar los recursos y proporciona una descripción clara de cada uno.

Desktopia: Twin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74


Escribir mensajes, leer noticias, grabar CDs o incluso procesar imágenes, ninguna de estas
tareas requiere GUI en Linux.Y Twin incluso proporciona un gestor de ventanas para la
consola.

Aplicaciones: Konserve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77


La “Konservacióbn”es una buena cosa y Konserve, una herramienta KDE, no es una excep-
ción. Sus sofisticados mecanismos para realizar copias de seguridad evitan el engorro que
suele suponer esta tarea.

Programación Básica: XUL (II) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79


Mozilla, aparte de estupendo navegador, es toda una plataforma de desarrollo que per-
mite crear interfaces de manera sencilla y rápida. En la segunda parte de esta serie apren-
demos a añadirle funcionalidad real y útil a nuestros componentes.

Educación: WIMS (II) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83


En nuestra segunda parte de la serie sobre WIMS explicamos cómo se crean las clases,
cómo se las llena de contenido, cómo se inscribe a los alumnos y el modo en que pueden
trabajar.

Iniciación a LaTex (II) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88


En esta nueva entrega sobre el procesador de textos LaTeX, os vamos a ir mostrando con
mayor detalle todas las múltiples, y a veces casi mágicas, posibilidades que este sistema
de escritura nos ofrece.

Línea de Comandos: Head, tail y cat . . . . . . . . . . . . . . . . . . . . . . .93


Utilidades pequeñas como head, tail y cat se usan para mostrar el contenido de los
ficheros de texto. Aunque todos traten con ficheros de texto, estas herramientas de la
línea de comandos son dignas de mención ya que pueden combinarse para formar
potentes utilidades.
Herramientas LINUX USER

TaskJuggler

Un Plan sencillo
Las empresas y los proveedores de

servicios no son los únicos que con-

fían en los ordenadores para planear

tareas y proyectos. Los clubs y organi-

zaciones sin ánimo de lucro pueden

ahorrar mucho tiempo, dinero y

dolores de cabeza con la herramienta

adecuada. TaskJuggler le ayuda a

organizar sus recursos y proporciona

una descripción clara.

POR FREDERIK BULSMA

Y PATRICIA JUNG

L
as tareas y los proyectos que necesi- pueden convertirse a cualquier otro for- Puede omitirse la opción --with-kde-sup-
tan de organización han acompaña- mato permitiendo una migración fácil a port si no tiene KDE. La rutina de confi-
do a la humanidad durante siglos. su sistema de gestión de contenidos. guración se ha diseñado para propor-
Lamentablemente, las personas y más cionar tanta funcionalidad como la
recientemente los programas que pueden Funcionalidad Avanzada máquina de desarrollo pueda soportar.
asignar recursos y tareas de manera efi- Echémosle un vistazo a la versión de Como ejemplo, esto regenera los ficheros
ciente siempre han escaseado. TaskJug- desarrollo 1.9.2, que proporciona nuevas de documentación si se puede localizar
gler [1] por Chris Schläger y Klaas Freitag opciones tales como los Informes CSV las librerías Docbook.
no sólo proporciona esta clase de fun- mencionados anteriormente. Además de Si Perl y los módulos XML::Parser,
cionalidad sino que ha resultado ser una un compilador C++, como g++ del Postscript::Simple, Date::Calc,
enorme ayuda en optimizar cualquier “GNU Compiler Collection”, GCC, tam- Class::Method Maker y Data::Dumper
escenario definido en términos de bién será necesario el paquete de desa- CPAN están instalados, el proceso de
proyectos y recursos. rrollo del sistema X Windows. La docu- compilación también genera un progra-
El programa permite definir costes y mentación se encuentra en el sitio web ma llamado tjx2gantt el cual crea diagra-
utilidades sencillas de control, con de Taskjuggler, http://www.taskjuggler. mas Gantt como se muestra en la Figura
turnos y prioridades. Acepta como entra- org/, también se necesitará al menos la 1.
da un fichero de texto con extensión .tjp versión 3.1 de la biblioteca Qt. Después de completar el proceso de
que describe los objetos. La siguiente Para descomprimir el paquete TaskJug- make, hay que asumir privilegios de
sintaxis indica al programa que analice gler hay que introducir lo siguiente administrador antes de instalar TaskJug-
un archivo gler tecleando make install.
tar xjf taskjuggler-1.9.2_U
taskjuggler nombre_fichero.tjp unstable.tar.bz2 Proyectos, Turnos y Recursos
cd taskjuggler-1.9.2_unstable Tiene sentido crear un directorio para
TaskJuggler produce informes en HTML sus propios proyectos, dándole un lugar
o ficheros con formato CSV que son per- Entonces lanzamos el proceso de compi- a TaskJuggler para almacenar sus defini-
fectos para publicaciones en Internet o lación introduciendo ciones e informes. La página web de
para la manipulación de hojas de cálcu- TaskJuggler [2] proporciona algunos
los en OpenOffice. Como alternativa, el ./configure --with-kde-support ejemplos para ayudar a explicar como
programa puede generar datos XML que make utilizar la aplicación.

www.linuxmagazine.com.es Número 02 71
LINUX USER Herramientas

proyecto. Este proyecto tiene que ver con gler supondrá las horas de trabajo por
los turnos de trabajo para el equipo for- defecto del proyecto para este turno.
mado por los administradores de sis- Cada turno está asignado a un ID (por
temas. ejemplo phonesupport para el tiempo
Los últimos parámetros indican la que los miembros del equipo de admi-
línea temporal del proyecto en el formato nistradores de sistemas pasarán dando
AAA-MM-DD. A la hora de definir la soporte telefónico) y un título.
fecha de conclusión del proyecto no Los miembros de la plantilla afectados
debería ser muy estricto y permitir por el proyecto están indicados por el
definirla con algo de margen, ya que las uso de la palabra resource como se mues-
tareas fuera de la línea de tiempo del tra en el Listado 2. Además de un
proyecto se ignoran. descriptor único (como joe), el nombre
El tercer parámetro que se necesita es completo es útil como descripción. El
el número de versión. Puede ser un sim- atributo vacation puede usarse opcional-
Figura 1: Un diagrama Gantt de un proyecto. ple “1.0”; si se utiliza un sistema de mente para definir un período vaca-
control de versiones para gestionar los cional; maxeffort define un factor que
Podemos echarle un vistazo al directo- ficheros de TaskJuggler, se puede permite calcular el trabajo a media jorna-
rio de los ejemplos en las fuentes que especificar un comodín (”$Id” para da. En vez de una semana de trabajo de
nos hemos bajado. El fichero ShiftSche- CVS). cuarenta horas, Anders Gundstrom sólo
dule.tjp detalla los cuatro componentes Estos parámetros obligatorios pueden trabaja 8*0.8=6.4 horas. La palabra shift
del proyecto: La definición, los niveles, llevar detrás opciones detalladas entre vincula a Khaled Safri con un horario de
los recursos disponibles y las tareas. paréntesis, como las horas diarias traba- trabajo especial; en este caso, las horas
Echémosle un vistazo a la sección pro- jadas (ocho horas en nuestro ejemplo) y definidos para los estudiantes en el Lista-
ject de este primer ejemplo (Véase el Lis- el número de días trabajados por año do 1.
tado 1). shifts proporciona un identifi- (256 en el ejemplo). Finalmente, lo más importante: que
cador, que va seguido por el nombre del Los objetos shifts se pueden usar para se completen las tareas (ver Listado 3).
definir períodos de turnos de trabajo. Nuestro primer ejemplo define una
Los turnos se usan para acumular la
1: Definiciones Shift cantidad de tiempo de la gente que tra-
baja a la vez. El objeto workinghours
Listado 3: Definiciones de
01 project shifts "Duty Schedule
02 SysAdmin Team" "$Id"
define los períodos de trabajo diarios Tareas
2002-06-01
específicos. Los días se abrevian de la 01 task sysadmin "System
03 2002-08-01 {
siguiente manera: tue para martes, wed Administration" {
04 02 dailyworkinghours 8
para miércoles, etc. La palabra off indi- 02
05 yearlyworkingdays 256
ca un día sin horas de trabajo dentro del 03 # Lo siguiente no es realmente
06 }
proyecto. Si se pierde un día, TaskJug- una tarea. Sólo
07 flags hidden 04 # define la fecha de comienzo
08 shift phonesupport "Phone Listado 2: Definiciones de del proyecto.
09 support" { 05 task start "Start of plan" {
10 workinghours mon 9:00
Recursos 06 start 2002-06-01
- 12:00 01 resource joe "Joe Bughunter" 07 milestone
11 workinghours tue 9:00 {vacation 2002-06-10 - 08 flags hidden
- 12:00 2002-06-13 09 }
12 workinghours wed off 02 } 10
13 workinghours thu 14:00 03 resource khaled "Khaled Safri" 11 task usersup "User Support" {
- 17:00 04 { 12 depends !start
14 workinghours fri 9:00 05 shift studenthours 13 duration 2m
- 12:00 06 } 14 shift
15 } 07 [...] phonesupport
16 shift studenthours "Student 08 resource anders "Anders 15 priority 900
Hours" { Gundstrom" { 16 allocate joe {
17 workinghours mon 9:00 09 maxeffort 0.8 alternative
- 14:00 10 } 17 anders, khaled, sally select
18 [...] 11 resource paul "Paul Gutier" { 18 minloaded }
19 workinghours fri 9:00 12 vacation 2002-07-02 - 19 }
- 14:00 13 2002-07-08 20 [...]
20 } 14 } 21 } # Fin de Sysadmin Tasks

72 Número 02 www.linuxmagazine.com.es
Herramientas LINUX USER

tarea, sysadmin que se divide para crear un diagrama de


en trabajos individuales entre Gantt.
llaves. El punto start define Además TaskJuggler está
un hito, donde puede comen- perfectamente capacitado para
zar otra tarea. El soporte de generar informes HTML útiles
los usuarios depende de la sin usar ninguna herramienta
terminación de start y no adicional. Añadiendo el código
puede suceder antes del 1 de del Listado 4 htmlweeklycalen-
Enero de 2002. El hito no dar al fichero .tjp para el calen-
aparecerá en los informes dario de Sally de la Figura 2 se
debido a que es una etiqueta creará un planning semanal del
oculta. período del proyecto en Calen-
Ahora podemos asignar las darsally.html.
tareas de soporte que van a La función isresource(sally)
ser planeadas para los próxi- filtra las asignaciones para el
mos dos meses (duration 2m) recurso sally y hideresource
al turno phonesupport con oculta cualquier recurso que
una prioridad de 900. 1 indica Figura 2: Calendario HTML de Sally. no (~) coincida con este crite-
algo sin importancia, mien- rio. columns schedule saca un
tras que 1000 tiene la máxima programa detallado usando
prioridad. El atributo allocate estos datos. Dejando la línea
asigna la plantilla a las ta- hidetask 1 inserta una línea
reas. Esto significa en este para notas entre la fecha y la
caso seleccionar aquellos tarea en el calendario HTML.
miembros de la plantilla de El informe CSV también está
un grupo formado por joe, definido en el fichero .tjp,
anders, khaled y sally que como se muestra en el Listado
tienen la carga de trabajo más 5. csvtaskreport proporciona los
ligera (select minloaded). La nombres individuales y effort
selección de criterio Figura 3: OpenOffice con los datos cargados desde TaskJuggler. en horas (loadunit hours9 para
maxloaded es lo contrario a todas las tareas que no están
esto y selecciona los miembros de la xmlreport "ShiftSchedule.tjx" ocultas para el período entre 06.01.2002
plantilla con la carga más pesada. y 07.01.2002 (ver Figura 3).
Order selecciona el primer miembro de le dice a TaskJuggler que cree un informe
la plantilla sin nada asignado y ran- XML y lo almacene en un fichero llama- Un Plan Diferente
dom simplemente coge uno do ShiftSchedule.tjx. Por supuesto se No importa si se necesita informes de
cualquiera. puede ver este fichero con un editor XML quien trabajará, durante cuanto tiempo y
o una herramienta similar, pero su en qué, o planes sencillos de asignación
Planificación Simplificada potencia real queda reflejada cuando se para su plantilla, TaskJuggler ofrece un
Tan pronto como el alcance del proyecto necesita importar o exportar datos. El abanico de funciones que podrían fácil-
ha sido especificado, TaskJuggler puede DTD apropiado está disponible en http:// mente rellenar un manual de referencia.
proporcionar el planning: Añadiendo la www.taskjuggler.org/show_dtd.php. El directorio Examples en el fichero
siguiente línea al fichero .tjp Puede pasarse el fichero XML al script fuente taskjuggler proporciona más
Perl mencionado antes, tjx2gannt [3], ejemplos. Este directorio y los ficheros
de ejemplo también ofrecen un número
Listado 4: Programa de pistas, por ejemplo, en el uso de
Asignado a Sally Listado 5: Vistazo del scripts de macros y proyectos multi-
01 htmlweeklycalendar
número de horas de partes. ■
"Calendar-sally.html" {
trabajo por pregunta y día
02 headline "Assignment 01 csvtaskreport "effort.csv" { RECURSOS
Schedule 02 columns name, daily,
03 for Sally" effort [1] TaskJuggler:http://www.penguin.org/
handbook
04 columns schedule 03 start 2002-06-01
05 hidetask 1 04 end 2002-07-01 [2] Proyecto TaskJuggler:http://www.
06 hideresource 05 hidetask hidden taskjuggler.org/example.php
07 ~isresource(sally) 06 loadunit hours [3] Script de Perl tjx2gantt: Instalado por
08 } 07 } defecto con TaskJuggler

www.linuxmagazine.com.es Número 02 73
LINUX USER deskTOPia

Twin librerías instaladas introduciendo ldcon-


fig con privilegios de root. Antes de

XFree-libre
hacer esto debemos estar seguros de que
/etc/ld.so.conf contiene una línea para
/usr/local/lib. SuSE dispone de esto por
defecto, pero los usuarios de Mandrake y
de Red Hat deberán añadirla manual-
Componer mensajes, leer noticias, grabar CDs o incluso procesar imágenes, mente.

ninguna de estas tareas requiere GUI en Linux. Y Twin incluso proporciona un Arranque
Es indiferente si lanzamos Twin en una
gestor de ventana para la consola. POR ANDREA MÜLLER
consola o en X. El programa automática-
mente elegirá el modo apropiado según
el entorno. En sistemas basados en GUI,

V
entanas basadas en la línea de cdp, por lo que quizás no necesitemos Twin abrirá su propia ventana de escrito-
comandos le puede sonar a twcd. rio en una ventana normal. En consolas
muchos como una hoguera en el Descomprimimos el código fuente de basadas en texto, Twin ocupará la pan-
fondo del mar. Pero esto es exactamente Twin y cambiamos al directorio creado talla completa, proporcionando una
lo que hace Twin, Textmode Windows por este primer paso twin-0.5.1. Después apariencia genuina de gestor de ven-
Enviroment (Entorno de Ventanas en viene el truco habitual de las tres cartas, tanas.
Modo texto) [1] de Massimiliano Ghilar- ./configure, make y make install, que se Antes de lanzar Twin debemos recor-
di. El gestor de ventanas basado en con- ocupará de compilar e instalar el soft- dar activar el servicio gpm, que propor-
sola nos permite hacer malabarismos ware. Para compilar también twcd ejecu- ciona soporte al ratón en modo texto.
con las ventanas de la misma forma que tamos un make -C contrib tras el paso Mandrake y Red Hat Linux habilitan gpm
nos lo permitiría X. Si no disponemos de make. Esto funcionó en nuestra versión por defecto. Los usuarios de SuSE
un servidor X activo ya no necesitaremos de laboratorio, estando libcdaudio y las pueden hacer su para convertirse en root
cambiar entre consolas más, y Twin cabeceras adecuadas disponibles en e introducir /etc/init.d/gpm start. Si el
incluso se puede ejecutar sobre GUI. /usr/lib/ y en /usr/include. soporte del ratón causa problemas con X
Twin se instalará por defecto en los podemos deshabilitar gpm tecleando
Ajuste de Ventanas directorios bajo /usr/local, por lo que etc/init.d/gpm stop.
No debemos esperar encontrar Twin en necesitaremos ser root para ejecutar Una vez nuestro gestor de ventanas
el CD de nuestra distribución. En su make install. Entonces podemos proce- se esta ejecutando no hay nada que nos
lugar, necesitaremos lanzar nuestro com- der a introducir nuestro sistema en las impida poblar el escritorio de ventanas
pilador y crear el programa desde el
código fuente que esta disponible para
su descarga en [1]. Para compilar Twin
necesitaremos nuestra herramientas
estándar de desarrollo, las librerías
ncurses y zlib y el paquete de desarrollo
adecuado. Si deseamos lanzar una
sesión de Twin en X necesitaremos adi-
cionalmente el paquete de desarrollo
Xfree (XFree86-devel para SuSE o
xlibs-dev para otras distribuciones).
También podemos instalar gpm y
gpm-dev para proporcionar manipu-
lación de ventanas basadas en el ratón.
Este paso no es necesario en SuSE
debido a que el paquete gpm está preins-
talado por defecto y contienen adicional-
mente los archivos de desarrollo.
Twin incluye un reproductor de CD lla-
mado twcd en el subdirectorio contrib
bajo el directorio del código fuente. Para
usar esta aplicación necesitamos instalar
libcdaudio [2] desde el DVD o desde [3].
Por supuesto que hay muchos reproduc- Figura 1: Debemos prestar atención a nuestras aplicaciones, desde el monitor del sistema, hasta el
tores útiles basados en consolas como cliente de correo de electrónico, con Twin.

74 Número 02 www.linuxmagazine.com.es
deskTOPia LINUX USER

Como alternativa podemos pulsar con venientes barras de desplazamiento


el botón izquierdo del ratón en una que nos permiten desplazar los resulta-
espacio vacío del escritorio para indicar dos.
a Twin que muestre el menú principal.
[Alt-Tab] cambiará de una ventana a Opciones
otra. El primer sitio al que debemos ir cuando
Al igual que a otros muchos gestores queramos configurar Twin a nuestro
de ventanas, a Twin le podemos indicar gusto es a la entrada del menú ? /
Figura 2: Twsysmon usa una barra gráfica para que mueva una ventana pulsando sobre Options, que abre el menú Options (ver
visualizar el uso de recursos. ella y manteniendo pulsado el botón figura 3).
izquierdo del ratón. Para cambiar la Si las sombras de nuestras ventanas
de programas. Presionando la tecla escala de la ventana debemos pulsar actuales son muy grandes para nuestros
[Pausa | Inter] o pulsando el botón dere- sobre el ancla situada en la esquina infe- gustos podemos seleccionar Shadows
cho del ratón, se mostrará el menú Twin rior derecha arrastrando el puntero del para reajustarlas o simplemente quitar la
en la parte superior de nuestra pantalla. ratón. También podemos usar el teclado marca de la casilla para no utilizar las
Entonces podemos seleccionar File / para hacer esto. Seleccionando Window sombras. Seleccionando Hidden Menu
New Term para lanzar twterm, equiva- / Resize y después usando las teclas de ocultará el menú. En este caso debemos
lente xterm de Twin, si bien puede que flecha para escalar la ventana. Presion- pulsar el botón derecho del ratón para
prefiramos usar el atajo [Alt-flecha ando [Intro] finalizaremos. ver el menú de nuevo.
hacia arriba]. Por supuesto, un simple twterm no es Si pretendemos ejecutar muchas ven-
Twin añade una pequeña barra de un gran avance sobre la consola normal, tanas en el mismo escritorio Twin
título a cada ventana. Los botones en la por lo que deberemos lanzar unos pocos simultáneamente quizás debamos habili-
barra proporcionan funcionalidades de terminales más y asignarles progra- tar el Enable Screen Scrolling (habi-
útiles. El botón de la izquierda cierra la mas para monitorizar múltiples aplica- litación del desplazamiento de ven-
ventana, el segundo colapsa la ventana, ciones. tanas). Esto levanta las restricciones del
dejando solo la barra a la vista o la File / Execute lanza un programa direc- área visible del escritorio y nos permite
expande de nuevo si está colapsada. El tamente sin necesidad de usar la línea de mantener pulsado el botón izquierdo del
tercer botón (en la derecha) hace activa comandos. En el caso de aplicaciones ratón para desplazar fuera del área visi-
la siguiente ventana abierta en nuestro interactivas como el cliente de correo ble de la ventana, por ejemplo, mientras
escritorio. Esto es muy útil debido a mutt podemos marcar la casilla Run in movemos ventanas.
que Twin solo proporciona acceso al Terminal para proporcionar soporte a las Un editor de texto nos permite más
menú del objeto que actualmente esta aplicaciones necesarias. configuraciones individuales en Twin.
activo (los usuarios de Macintosh Como podemos observar en la figura Copiamos el archivo /usr/local/lib/twin
estarán familiarizados con este com- 1, Twin nos permite estar pendientes de en ~/.twinrc y editamos el archivo
portamiento). aplicaciones críticas. Si comenzamos a (muy bien comentado) hasta que sa-
perderles la pista, la lista de la ventana, tisfaga nuestras necesidades. El archivo
Listado 1: Colores al cual podemos dejar en el escritorio proporciona detalles de mucha ayuda
diferentes y nuevos atajos pulsando el botón central del ratón, nos sobre las combinaciones de color
ayudará a resolver este entuerto. disponibles y los atajos de teclado. El
en Twin
listado 1 nos muestra como cambiar el
01 #Esta entrada en línea 23, Todo Incluido color de fondo en Twin y como añadir
aproximadamente Twin vienen con una colección de he- botones de acceso rápido para el moni-
02 in ~/.twinrc rramientas. Para usarlas de debemos tor mutt y top. \xb1, en la sección Back-
03 #define un fondo verde primero lanzar un scocket de Twin selec- ground es la notación hexadecimal del
04 for Twin. cionando Modules / Run Socket Server. asterisco (*) que Twin usa como ima-
05 Background 1 High Black On Twin utiliza el método de cliente/servi- gen de fondo. Opcionalmente podemos
06 Green ("\xb1") dor como el sistema de ventanas X. usar la anotación octa para caracteres
07 Algunas aplicaciones de Twin utilizan individuales como \100 para @. Si
08 #atajo teclado de mutt este socket para hablar con el escritorio. estas anotaciones son muy complicadas
keyboard shortcut La entrada del menú ? / Clock arranca podemos usar como alternativa texto
09 [Shift-Tab] el reloj integrado de Twin. El comando normal para animar nuestro fondo. La
10 Key Shift "Tab" ExecTty twsysmon arranca un monitor del sis- siguiente entrada proporciona los resul-
"mutt" tema gráfico que proporciona estadísti- tados mostrados en la figura 4:
11 cas de los recursos del sistema y actua-
12 #Arranque rápido para top con liza la hora (ver figura 2). twcat es una Background 1 High White
[F1] alternativa al comando cat. La sintaxis on Magenta (
13 Key "F1" ExecTty "top" es igual a la original (twcat filename), "Linux Machine! "
pero adicionalmente proporciona con- "###################"

www.linuxmagazine.com.es Número 02 75
LINUX USER deskTOPia

" " comando twattach o conexión separadas por coma del


" " twdisplay para volver a parámetro --hw=X de la siguiente forma:
" " poner Twin en nuestra
) pantalla. twattach usa twdisplay -twin@
menos recursos pero 2.168.0.1:0 --hw=X,gz
Si blanco intenso no es como desventaja debe-
de nuestro gusto mos apuntar que solo para indicar al gestor de ventanas que
podemos omitir el nos facilita permisos comprima los datos a transferir, hacien-
parámetro High. de lectura a la actual do por tanto un uso óptimo de la cone-
La palabra clave sesión de Twin. No xión de red. La sobrecarga adicional
ExecTty en el cuadro de Figura 3: Configuración desde el obstante, intentar requerida para la compresión no debería
comandos de lanza- menú de Opciones. restaurar una sesión de ser ningún problema incluso para
miento rápido indica a Twin basada en conso- máquinas antiguas.
Twin que debe lanzar un programa en la usando el comando GUI twattach
un terminal. Debemos asegurarnos de corromperá el display Caja de herramientas
poner todas las instrucciones de tecla- Debido a que twattach causa errores El paquete twutils de la página Web de
do entre comillas excepto Ctrl, Alt y ocasionales al restaurar el modo de dis- Twin está diseñado para almacenar
Shift. play original en nuestros ensayos de lab- futuras herramientas de Twin. De
oratorio, twdisplay es preferible para momento, sólo contiene una calculado-
Twin Móvil equipos con potencia suficiente. El si- ra científica. Tras descomprimirla
Siempre parece que, tan pronto lan- guiente comando restaura nuestra sesión debemos cambiar el directorio
zamos GUI o cambiamos a otra consola de Twin en X: twutils-0.2, y ejecutar ./configure y
o máquina para hacer alguna otra cosa, make para compilarla. Nos hacemos
necesitamos alguna de las aplicaciones twdisplay --twin@:0 --hw=X root e introducimos make install para
que actualmente se ejecutan en Twin hacer que twkalc esté disponible en las
como el programa de correo electrónico. --twin@:0 especifica el display de Twin. sesiones de Twin.
Afortunadamente, el desarrollador de La primera sesión de Twin lanzada siem-
Twin pensó en esto. El escritorio de Twin pre será la 0. Si no estamos seguros del Compañía de fiar
esta disponible siempre que lo necesita- número, la herramienta twfindtwin nos Twin proporciona un gestor de display
mos, incluso si nos hemos desconectado dirá cual es la correcta. al igual que otros entornos de escritorio
con anterioridad. Si no especificamos el nombre del twdm. Esta pantalla de conexión en
detach es la palabra mágica: Twin se anfitrión, twdisplay supondrá que se está modo de texto proporciona una ven-
desconecta el solo de la consola en la ejecutando localmente. Si deseamos tana de conexión pseudo gráfica que
que fue lanzado y pasa a ejecutarse en tomar control de una sesión que fue lan- nos solicita que introduzcamos nuestro
segundo plano. Primero arrancaremos zada en otro equipo en nuestra red debe- nombre de usuario y contraseña antes
el servidor socket y luego File / Detach. mos usar el siguiente comando, de conectarnos a nuestra sesión de
Sin el servidor socket, Twin desaparece suponiendo que la dirección IP es Twin. root puede introducir
en segundo plano donde no podremos 192.168.0.1: /usr/local/sbin/twdm para arrancar el
hablar más. Ahora podemos desconec- gestor de displays.
tarnos de el y lanzar un GUI o twdisplay -twin@ El tutorial Twin, localizado en el sub-
cualquier otra aplicación. Cuando nece- 2.168.0.1:0 --hw=X directorio doc bajo el directorio del
sitemos la sesión Twin escribiremos el código fuente, contiene el procedimien-
El valor de --hw= especifica to de cómo integrar twdm en el sistema
el modo que Twin usará para de inicio. Debemos usar una máquina
los resultados. Si estamos tra- de pruebas no obstante: tras arrancar
bajando en la consola, tty es twdm, fuimos incapaces de usar el
el valor correcto. Usaremos X teclado, lo que complicó sobre manera
o gfx para X. Este último la conexión. ■
añadirá algo de condimento a
nuestra ventana Twin (ver
RECURSOS
ventana 6).
Si nuestra conexión de red [1] Twin: http://linuz.sns.it/~max/twin/
es lenta (puede que sea el [2] libcdaudio: http://cdcd.undergrid.net/
caso) y lanzamos una sesión libcdaudio
de Twin a través de Internet, [3] rpm de libcdaudio: ftp://194.199.20.114/
el compresor zlib puede ayu- linux/contrib/libc6/i386/libcdaudio-0.99.
darnos. Especificaremos las 9-1.9.0.i386.rpm
Figura 4: Un fondo personalizado para el escritorio Twin. opciones adicionales de la

76 Número 02 www.linuxmagazine.com.es
KTools LINUX USER

Konserve

Más Vale Prevenir...


La “Konservación” es una Buena cosa y Konserve, una herramienta KDE no es

una excepción. Sus sofisticados mecanismos de copia de seguridad realmente

previenen los dolores de cabeza provocados por esta tarea.

POR STEFANIE TEUFEL

P
uede que este terrorífico escenario Debido a que el programa se instala en
le sea familiar. Según se aproxima /usr/local/kde y éste no es el típico direc-
la fecha tope de la entrega de su torio KDE, la llamada
tesis, artículo o contrato, de pronto nota- /usr/local/kde/bin/konserve no encon-
mos que el documento clave de repente trará los iconos o el archivo de ayuda.
ha desaparecido de nuestro equipo. Por Hay dos formas de solucionar esto. 1). Ahora debemos pulsar con el botón
supuesto no siempre hemos recordado Mientras configuramos podemos intro- derecho del ratón sobre el icono para
(o simplemente hemos sidos muy vagos) ducir la ruta a nuestro directorio KDE: que aparezca el menú que se muestra en
hacer una copia de la figura 2.
seguridad de nuestros ./configure -prefix=/U
documentos más path/a/driectorio-kde Invisible
Figura 1: Pequeño, importantes. ¿No sería El asistente es la modalidad que yo al
pero tan útil… una buena idea que Esto permite a make install poner la menos recomendaría para ayudarnos en
alguna herramienta en instalación del software en este directo- las primeras copias de seguridad. Debido
segundo plano se ocupara de realizar rio más tarde. Debido a que esta forma a que Konserve soporta cualquier
estas tediosas tareas? Esta es la idea que no nos permite distinguir entre aplica- número de
básicamente tuvo Florian Simnacher ciones claves de software de nuestro dis- copias de
cuando lanzó el proyecto Konserve. tribuidor y las herramientas que seguridad
La página Web del proyecto, http:// nosotros hemos añadido, la segunda con alcance
www.simnacher.net/konserve/konserve. opción es preferible. Pasamos los direc- definido por
html, proporciona un tarball con el códi- torios de mayor nivel de nuestro soft- el usuario
go fuente. Si disponemos de Red Hat 8.0 ware KDE a la variable KDEDIRS de la tendremos
podemos usar el paquete RPM; si no siguiente forma: que facilitar Figura 2: El menú desple-
debemos compilar las fuentes. Los pasos un nombre gable proporciona acceso a
habituales harán el trabajo: configure; export KDEDIRS=/opt/kde3:/usrU para el perfil funciones críticas.
make; make install. /local/kde de la copia
de seguridad en la primera pantalla. Ele-
KTOOLS Tras completar los pasos de la insta- giremos algo intuitivo que nos ayude con
En esta columna presentamos herramientas
lación podemos iniciar la herramienta de el perfil más fácilmente. ¿Hemos acaba-
que mes a mes han demostrado ser especial- copia de seguridad accediendo a través do? Bien, entonces pulsaremos Next para
mente útiles funcionando bajo KDE, resuel- del menú de inicio KDE a Programs/kon- continuar.
ven un problema que de otra forma sería serve o escribiendo konserve & en una En la siguiente caja de dialogo (ver
ignorado deliberadamente o simplemente ventana de consola (puede que necesite- figura 3) debemos especificar cuales son
son unas de las cosas más bonitas de la vida,
las cuales, una vez descubiertas, no podemos
mos indicar la ruta). Haciendo esto los archivos de los que deseamos hacer
dejar de utilizar. aparecerá un pequeño icono con forma copia de seguridad en el campo Source
de lata en la barra del menú (ver figura url. El nombre de componente “URL” es

www.linuxmagazine.com.es Número 02 77
LINUX USER KTools

Figura 3: Los archivos fuente para la copia de Figura 4: Especificamos los intervalos entre Figura 5: Una comprobación rápida de las selec-
seguridad. copias de seguridad. ciones.

un poco confuso debido a que el progra- viduales. El menú desplegable nos per- mos seleccionar el menú Preferences y
ma espera nombres de archivos o direc- mite elegir entre días, horas, minutos o añadir los detalles requeridos en la caja
torios. Konserve de hecho rehusó segundos. de diálogo mostrada en la figura 6.
realizar una copia de seguridad de una Al acabar el asistente, podemos acti- La caja de diálogo dispone de las mis-
página Web en nuestras pruebas. var la marca de Backup active (Copia de mas funciones que el asistente, si bien
Si especificamos un directorio, seguridad activa) para lanzar los traba- algunos nombres han cambiado: Source
cualquier subdirectorio o archivo dentro jos de copias de seguridad. O también url es ahora solo Source, y Backup url es
de este será incluido en nuestra copia podemos acceder al diálogo de menú ahora Archive. También podemos uti-
automáticamente. Si no recordamos el Preferences (preferencias) para lanzar lizar los botones Move Up (Mover hacia
nombre del directorio que deseamos los trabajos manualmente. La quinta arriba) y Move Down (mover hacia
copiar, simplemente pulsaremos en el pantalla (ver figura 5) proporciona un abajo) para cambiar el orden de los per-
icono de carpetas y usaremos el gestor files.
de archivos para localizar los archivos Como indican sus propios nombres, el
requeridos. Entonces pulsamos Next de botón Add (Añadir) creará un nuevo per-
nuevo. fil y Remove (Quitar) eliminará el perfil
Konserve nos solicita ahora que seleccionado. Una pulsación sobre
especifiquemos donde queremos almace- Restore (Restaurar) indicará a Konserve
nar el archivo. Si utilizamos el campo que debe restaurar la última copia de
Backup url para especificar un directorio, seguridad realizada. Esto es muy útil si
Konserve proporcionará un nombre eliminamos los archivos originales por
único con el siguiente formato directory- Figura 6: El diálogo de preferencias proporciona error. Lo único que perderemos serán los
name-yyyyMMddhhmmss.tar.gz (nombre un atajo para crear perfiles de copias de seguri- cambios realizados desde la última copia
del directorio - año mes día hora minutos dad. de seguridad.
segundos.gz). El archivo no será sobres- Cualquier perfil existente puede ser
crito por la próxima copia de seguridad. vistazo general de las selecciones reali- utilizado para crear una copia de seguri-
No obstante, si especificamos el nombre zadas. Entonces podemos pulsar Finish dad no programada. El menú desple-
de una archivo Konserve machacará la para finalmente lanzar el proceso de gable proporciona una lista de los nom-
copia de seguridad previa con la nueva. copia de seguridad. bres de los perfiles. Simplemente debe-
Una cosa más: el directorio objetivo debe mos pulsar en el nombre del perfil desea-
existir previamente en el sistema o Kon- Un Atajo do para que Konserve inicie la copia. Por
serve mostrará un error y se pondrá en Independientemente de lo amigable que ejemplo, esto es útil si necesitamos sal-
huelga. sea el asistente, una vez hayamos com- var el trabajo de un día de trabajo antes
Tras especificar qué y dónde, la cuarta prendido la forma de trabajar de Kon- de salir de la oficina.
pantalla (ver figura 4) nos permite serve, es muy probable que prefiramos Konserve puede realizar copias de
indicar cuándo. Podemos especificar el hacer el trabajo sin la ayuda la próxima seguridad de servidores FTP al igual que
intervalo entre copias de seguridad indi- vez. Para hacerlo de esta forma, debe- las realiza de archivos locales. Para uti-
lizar esta funcionalidad simplemente
debemos indicar una ruta como
GLOSARIO
ftp://tunombredeusuario@ftp.tuprovee-
Tarball: El programa tar compara archivos ser comprimidos usando el programa gzip. dor.org/path/a/fichero/fichero.tar.gz
múltiples para crear un único archivo. Esta
recolección de datos es habitualmente conoci- Path (Ruta): la ruta nos indica la localización como nuestro Archive (Archivo) objeti-
da como “tarball”. Los tarball tienen normal- de un archivo en el árbol de archivos del sis- vo. Cuando creamos que hemos hecho
mente extensión como .tar, .tar.gz o .tgz. las tema. Es, por tanto, una lista de todos los
las suficientes copias de seguridad sim-
dos últimas extensiones indican que los directorios que necesitamos cruzar para
acceder a ese archivo. plemente debemos pulsar Quit para
archivos fueron añadidos al tarball antes de
finalizar. ■

78 Número 02 www.linuxmagazine.com.es
XUL LINUX USER

Mozilla XUL: Diseño de Interfaces.

Jugando con
Bloques
En el primer capítulo de nuestro tutorial de programación en XUL del último

mes exploramos algunos de los diferentes componentes y facilidades que XUL

ofrece a la hora de construir interfaces gráficas. Si bien era bonita de ver, nues-

tro interfaz era lo más inconsistente que podamos imaginar.- muy bonita, pero

sin materia gris. POR JONO BACON

E
ste mes vamos a incrementar nues- si pulsamos en el menú Archivo y luego Los beneficios de usar funciones es
tros conocimientos en construcción en el Salir, esperamos que la aplicación que pueden ser utilizadas una y otra vez
de elementos de interfaces y se cierre como se supone que ha de por diferentes eventos. Por ejemplo, si
añadirles funcionalidades reales y útiles hacer. Este tipo de interacción involucra escribimos una función que crea un do-
que se utilizarán para crear los bloques 2 tipos de procesos: un Manipulador de cumento nuevo querremos conectarla al
de construcción de aplicaciones futuras Eventos y una Función. objeto del menú Archivo > Nuevo y tam-
usando XUL. Algunos lectores puede que estén fami- bién al botón de la barra de herramientas
liarizados con este tipo de funcionalidad utilizado para abrir un nuevo documen-
Bloques de Interactivos por otras herramientas gráficas: Qt tiene to. De esta forma todas las cosas se
Cualquier tipo de herramienta gráfica, sus Señales/Slots, por ejemplo. La conectan entre sí como una sola.
donde se incluye XUL, es inútil si no premisa básica es que cada tipo de con-
dispone de funciones que traten la inte- trol gráfico (como un botón, barra de Código Bajo Control
racción. Cuando un usuario pulsa un desplazamiento, menú, barra de herra- Con toda esta teoría discutida, probable-
botón, desplaza una barra de desplaza- mientas, caja de texto, …) tenga dife- mente el lector se estará preguntando
miento, selecciona una pestaña, selec- rentes formas en las que el usuario pueda como encaja todos esto en el contexto
ciona un objeto de un menú o pulsa en interaccionar con él. Por ejemplo, un general. ¿Cómo creamos un manipulador
el botón de una barra de herramientas, botón dibujado en la pantalla podemos de eventos, cómo creamos una función
esperamos que suceda algo. Por ejemplo, pulsarlo, con una lista de objetos en una y, sobre todo, cómo agrupamos todo
caja podemos seleccionar un componente junto para qué funcione de forma con-
Otros lenguajes y XUL y con una barra de desplazamiento junta? La respuesta a todas esta pregun-
podemos desplazarlo. Cada uno de estos tas es Javascript.
Una de las mayores preguntas que se realiza
diferentes tipos de interacción se llama Antes de que continuemos debemos
al mirar a XUL es si hay otros lenguajes
Evento. Algunos componentes o widgets hablar un poco de Javascript. Muchas
disponibles para escribir código XUL. Actual-
mente el único lenguaje soportado es (los controles gráficos son normalmente personas se mofan de solo pensar en
Javascript, si bien se está pensando en la llamados en inglés widgets) también Javascript y lo consideran solo útil para
inclusión de otros lenguajes en versiones tienen diferentes formas de eventos para crear esos molestos mensaje que reptan
futuras de Mozilla. Entre estos lenguajes diferentes formas de interacción. por la barra de estado de los nave-
puede que estén incluidos Python o C#. Cada uno de estos eventos no es útil si no gadores web y para crear menús que
Muchas de de las discusiones entre los podemos responder a ese evento con algo pueden hacer una página Web aparentar
desarrolladores se giran alrededor de la útil, y para hacer esto necesitamos usar una ser incómoda y que solo funcionan par-
creación de un nuevo nivel de funcionalidad función. Una función es simplemente un cialmente en algunos visores.
de la aplicación Mozilla: la máquina virtual
trozo especial de código que podemos Sí es cierto, Javascript puede ser utiliza-
de Mozilla. Podemos encontrar más infor-
escribir y que hace algo útil. Esto puede ser do para todas esas cosas y es posiblemente
mación al respecto del progreso del proyec-
cambiar el texto de algunas partes de la la cara más pública del lenguaje. Realmente
to Mozilla en las Webs Mozillazine (http://
www.mozillazine.org/) y en Planet Mozilla interfaz, añadir algo de información al com- pienso que Javascript es un lenguaje ma-
(http://planet.mozilla.org/). ponente, procesar información o cualquier ravilloso, compacto y útil que puede ser
otra cosa que sea de utilidad. considerado como el pegamento de los

www.linuxmagazine.com.es Número 02 79
LINUX USER XUL

Un ejemplo de este tipo de funcionali- <html> que es la etiqueta padre. La eti-


Listado 1: first.xul dad con el que todos estamos familia- queta padre es como la raíz del árbol y
01 <?xml version="1.0"?> rizados es la del software de foros web cada una de las otras etiquetas son como
02 <?xml-stylesheet modernos. Cuando usamos los botones ramas que surgen del árbol. Por ejemplo,
03 href="chrome://global/skin/" de formateo al componer un mensaje si miramos a la etiqueta <body>, te-
04 type="text/css"?> para el foro, el botón añadirá etiquetas nemos dos etiquetas <div> que están
05 de formateo a la caja de texto principal. dentro de esta. Estas dos etiquetas <div>
06 <window ¿Cómo sabe comunicarse el botón con la son como dos ramas. Debajo podemos ver
07 id="test-window" caja de texto del mensaje cuando lo pul- como nuestras etiquetas forma un árbol
08 title="Test Program" samos? Sencillo: usa DOM. con la etiquetas <html> como raíz:
09 DOM funciona de forma que crea un
10 xmlns="http://www.mozilla.org/ árbol con todos los elementos en nuestra <html>
11 keymaster/gatekeeper/there.is. página Web. Veamos el siguiente código <head>
12 only.xul"> como un ejemplo: <title>Mi Sitio Web</title>
13 <body>
14 <button id="name" 01 <html> <div>
15 label="Mi botón"/> 02 <head> <h1>Bienvenidos aU
16 03 <title>MiU mi sitio web</h1>
17 </window> Sitio Web</title> <div>
04 </head> Contenido.
05 <body>
visores Web: es muy útil para unir dife- 06 <div> Con nuestras etiquetas en un árbol como
rentes tipos de funcionalidades. En el te- 07 <h1>Bienvenidos aU este podemos usar DOM para encontrar
rreno de XUL usamos un objeto especial mi sitio web</h1> ciertas etiquetas y mostrarlas o con-
llamado Documento Objeto Modelo 08 </div> seguir la información requerida de ellas.
(DOM), la idea tras DOM es que los ele- 09 <div> De esta forma podemos encontrar una
mentos en una página Web deben ser todos 10 Contenido. etiqueta en particular y modificarla de
accesibles en código de forma que todos 11 </div> cualquier forma. Como resultado, DOM
podemos ver y cambiar los contenidos de 12 </body> no sólo nos provee de un método para
estos cuando y como necesitemos. Por 13 </html> encontrar las etiquetas adecuadas, si no
ejemplo sería útil cambiar el título, la fecha que también nos proporciona un método
y etiquetas de los botones de una página Cada una de las etiquetas del código anida para actualizarlas.
Web cuando interactuemos con ella. dentro de otra, menos la etiqueta
DOM y XUL
Para empezar de forma rápida utilizare-
Listado 2: Código Completo Listado 3: second.xul mos como ejemplo simple la creación de
01 01 <?xml version="1.0"?> 01 01 <?xml version="1.0"?>
un botón con un sistema de evento/fun-
02 <?xml-stylesheet 02 <?xml-stylesheet
cionalidad. Lo primero de todo será crear
03 href="chrome://global/skin/" 03 href="chrome://global/skin/"
un nuevo archivo llamado first.xul, al
04 type="text/css"?> 04 type="text/css"?>
que añadiremos el siguiente código (ver
05 05
listado 1 en la página previa).
06 <window 06 <window
Cuando cargamos este archivo en un
07 id="test-window" 07 id="test-window"
visor Mozilla obtendremos un simple
08 title="Programa de Prueba" 08 title="Programa de Prueba"
botón como esperamos. Nuestro primer
09 09
paso ahora es añadir un manipulador de
10 xmlns="http://www.mozilla.org/ 10 xmlns="http://www.mozilla.org/
eventos que especifique a que tipo de
11 keymaster/gatekeeper/there.is. 11 keymaster/gatekeeper/there.is.
interacción queremos responder. Cada
12 only.xul"> 12 only.xul">
evento se activa por un manipulador
13 13
especial que especifica con que tipo de
14 <script 14 <script src="second.js"/>
interacción estamos tratando. La tabla de
15 src="functions.js"/> 15
eventos XUL es una lista de eventos
16 16 <textbox id="textbox"/>
soportado concurrentemente que está
17 <button id="name" 17 <button id="showinfo"
disponibles en XUL (lista conseguida de
18 label="Mi botón" 18 label="Mostrar Información"
XULPlanet.com).
19 onclick="func_showdialog();"/> 19 onclick="func_getinfo();"/>
20 20
El Señor de los Botones
21 </window> 21 </window>
Empezaremos explorando uno de los
manipuladores de eventos más común:

80 Número 02 www.linuxmagazine.com.es
XUL LINUX USER

onclick. Para añadir este manipulador y gestionar muchas funcionalidades, estamos creando una función (“func-
necesitamos añadir onclick a la línea de también pueden ser simples. Explo- tion”) y que queremos llamarla
código que crea el botón y luego especi- raremos nuestra primeras funciones en fun_showdialog. Los paréntesis vacíos se
ficar que debe ocurrir. Cambiemos el Javascript con un ejemplo muy sencillo. usan para indicar que nuestra función no
código del botón a esta línea: Para usar funciones se recomienda poner procesa nada. Una actividad propia de
todas las funciones en un archivo sepa- las funciones es pasarles información
<button id="name" label="Mi boU rado y acceder al mismo desde nuestro entre paréntesis, procesando la informa-
tón" onclick="alert('Hola');"/> archivo de comandos XUL. Para empezar ción y devolviendo el resultado. Con
debemos crear un archivo llamado fun- nuestra función simplemente estamos
En este código añadimos el controlador tions.js y añadirle el siguiente código: ejecutando el código dentro de ella y no
onclick y dentro de las comillas decimos procesado nada, siendo este el motivo de
lo que queremos que haga el contro- function func_showdialog() que los paréntesis estén vacíos.
lador. En este simple ejemplo usamos la { Las llaves indican la extensión de la
función de alerta de Javascript para que alert("Esto es una función"); función. El código dentro de la función
aparezca una caja de dialogo con la pa- } comienza tras el símbolo { y termina tras
labra “Hola” dentro. Si ahora salvamos el símbolo }. En nuestra función actual
el código, recargamos la página y pul- Este código contiene una serie de ele- solo tenemos una línea que nos da un
samos el botón veremos las cajas que mentos claves. La primera línea dice que caja de dialogo de alerta familiar. El
aparecen cuando pulsemos con el ratón.

Todo Funciona Eventos XUL


Como podemos observar en nuestro Evento Descripción
primer ejemplo, añadir funcionalidad a onclick se llama a la acción de pulsar y soltar el ratón sobre un elemento. Sólo debemos usar el evento
un widget es muy sencillo. Al margen de onclick cuando tenemos una razón para responder a pulsaciones de ratón. Para botones,elemen
la sencillez, nos encontramos con el tos de menús y similares debemos usar oncommand como respuesta porque responde también
a usuarios que usan el teclado u otros dispositivos.
problema de que nuestro código va ha
onmousedown acción de pulsar el ratón sobre un elemento. El gestor de eventos será llamado tan pronto el
ser muy largo y confuso si ponemos toda botón del ratón sea presionado,incluso antes de ser soltado.
su funcionalidad entre marcas de comi- onmouseup cuando el botón del ratón se suelta estando sobre un elemento.
llas. ¿Qué hacemos si lo que necesitamos onmouseover se llama a la acción de mover el puntero del ratón sobre un elemento. Podemos usar esta acción
es hacer algo de matemáticas, procesado para destacar un elemento,si bien CSS proporciona una manera de hacer esto automáticamente,
expansivo y magia con la programación por lo que no debemos usar un evento para esto. Pero por ejemplo puede que queramos mostrar
que requeriría mucho código escrito? La un texto de ayuda sobre una barra de menú.

respuesta es hacer nuestra propia fun- onmousemove acción de mover el puntero del ratón mientras está sobre un elemento. El evento será ejecutado
muchas veces si el usuario mueve el ratón,por lo que debemos evitar usar este evento en la
ción. medida de lo posible.
Una función es un bloque de código onmouseout se llama a la acción de mover el puntero del ratón fuera de un elemento. Puede que entonces
que puede ser llamado por otro trozo de dejemos de destacar el elemento o quitemos el texto marcado.
código. Podemos considerar las fun- oncommand evento que ocurre cuando se selcciona un botón o elemento de un menú. Para menús debemos
ciones como libros dentro de librerías. añadir este evento al elemento menuitem. Debemos usar este evento en lugar de manejar el
Podemos estar leyendo un libro y no ratón nosotros mismos puesto que el usuario puede seleccionar el botón o el elemento del menú
usando el ratón, una tecla de acceso directo o atajos del teclado.
entender un asunto concreto, cogiendo
onkeypress ocurre cuando una tecla se presiona y suelta cuando un elemento tiene el enfoque. Puede que
entonces otro libro que nos aclare el
queramos usar este evento para añadir una tecla de acceso directo extra o para verificar la posi
asunto. Lo que nos permite básicamente bilidad de incluir determinados caracteres en un campo.Veremos como crear accesos directos
una función es empaquetar conjunta- desde el teclado en posteriores números.
mente en código un complejo paquete de onkeydown se ejecuta cuando se presiona una tecla mientras un elemento tiene el enfoque. Debemos obser
programación y acceder a ésta de una var que el evento se ejecutará en cuanto se presiona la tecla,incluso antes de que ésta sea
soltada. Puede que no usemos este evento habitualmente, puesto que hay otros eventos de
forma simple en sólo una línea. Si bien
teclado más usuales.
las funciones pueden resultar complejas
onkeyup se ejecuta cuando una tecla es soltado teniendo un elemento el enfoque.
onfocus se ejecuta cuando un elemento obtiene el enfoque bien mediante la pulsación del ratón o por el
Listado 4: second.js uso del tabulador. Podemos usar este evento para destacar un elemento o mostrar texto.
onblur se ejecuta cuando un elemento deja de tener el enfoque debido a que hemos pulsado otro ele
01 function func_getinfo() mento o pulsamos el tabulador. Podemos usarlo para verificar información o cerrar elementos
emergentes. No obstante es recomendable verificar campos al pulsar el botón de confirmación
02 {
(OK).
03 var
onload se ejecuta en una ventana al abrirse. Normalmente añadiremos este evento a la etiqueta de una
04 info=document.getElementById(' ventana para inicializarla. Estos añadirá usualmente valores por defecto en condiciones incluidas
05 textbox'); en el código.
06 alert(info.value); onunload se ejecuta cuando se cierra una ventana. Normalmente añadiremos esta etiqueta de ventana
07 } para registrar información antes de que esta se cierre.

www.linuxmagazine.com.es Número 02 81
LINUX USER XUL

(ID) textbox que es nuestra caja de


texto.
Podemos observar que la función
getElementById está escrita justo al lado
de la palabra document. La forma de fun-
cionar es que document se refiere a nues-
tro documento XUL principal y a los wid-
gets incluidos en él.

Punto
El símbolo del punto (.) indica que el
Figura 1: Nuestro primer código Javascript habili- Figura 2: Usando DOM para conectar nuestras código a la derecha del mismo debe ser
tado. widgets. aplicado al código a la izquierda del sím-
bolo. En este caso buscamos un widget
punto y coma que aparece tras cada una Debemos asegurarnos de que este atri- dentro del id textbox dentro de nuestro
de las líneas de la función es importante. buto es único y fácil de recordar, puesto documento principal. Con esta línea
Se utiliza para indicar el final de cada que nos referiremos a los widgets por completa tenemos los contenidos de
línea en Javascript. él. En nuestro código también hemos nuestra caja de texto almacenados en
cambiado el nombre de la función a nuestra variable info. El concepto de
Conexión fun_getinfo() al igual que el nombre del usar puntos para indicar dónde aplicar la
Con nuestra función acabada ya estamos archivo de nuestra función en la línea 9 función es común a muchos lenguajes de
listos para conectarla a nuestro código a seconds.js. programación. Usamos este concepto de
XUL principal. primero necesitamos car- El siguiente archivo que debemos edi- nuevo en la segunda línea al usar la fun-
gar el archivo funcions.js en nuestro tar es seconds.js. Añadimos el código ción value para obtener el valor de la
archivo XUL como fuente de nuestro del listado 4. En este código es donde variable info. Anidamos este código den-
código. Para hacer esto usamos la etique- realmente ocurre la acción. El objetivo tro de la función alerta para mostrarlo en
ta <script> dentro de la etiqueta <win- de este código es que el usuario pueda la caja de dialogo. Debemos prestar aten-
dow> para especificar la fuente del escribir algo en la caja de texto y que ción a que no se usan comillas dobles en
archivo. Adicionalmente también necesi- los contenidos de la caja sean mostra- el código de la caja de alertas. Solo
tamos cambiar el contenido del atributo dos en la caja de alertas de diálogo. usamos comillas dobles cuando quere-
onclick del botón al nombre de nuestra Para hacer esto necesitamos comuni- mos imprimir texto (llamado string o
función. Para clarificar estas modifica- carnos con la caja de texto, obtener la cadenas en castellano) en la caja de aler-
ciones mostramos el código completo en información y ponerla en la caja de tas. En nuestra caja de alertas, en esta
el listado 2. alertas. ocasión, estamos imprimiendo los con-
La principal razón por la que he En la primera línea del código de la tenidos de la variable.
reproducido el código complete ha sido función creamos una nueva variable
para demostrar el correcto emplaza- llamada info. Para hacer esto usamos Conclusión
miento del código nuevo. Si pusiésemos la palabra clave var para indicar que En este número hemos realizado unos
la etiqueta <script> debajo de las eti- info es una variable. Para aquellos no importantes primeros pasos hacia con-
quetas <?xml> (un error muy común familiarizados con variables, una vari- seguir un interfaz funcional XUL.
en aquellos que piensan que el script se able nos permite almacenar informa- Todavía nos falta camino por andar,
aplica al archivo entero) obtendríamos ción en la memoria del ordenador y pero estos cimientos harán nuestros pro-
un error y nuestro esfuerzos serían referirnos a ella con un nombre. gramas futuros sean más sencillos de
baldíos. Debemos estar seguros de que Podemos pensar en las variables como escribir y entender. Siempre es impor-
nuestro script está dentro de la etiqueta una caja de cartón con un nombre tante tener claro los fundamentos antes
<window>. escrito en su lateral. Si metemos algo de continuar el camino. En el siguiente
en la caja nos podemos referir a ella capítulo vamos a continuar con algunas
Exploración de DOM por el nombre que aparece en el late- funciones y funcionalidades más elabo-
Avancemos y exploremos DOM un poco ral. En este caso el nombre escrito en radas para unir diferentes partes de
más. Para empezar, crearemos un poco el lateral es info. nuestras interfaces XUL. Hasta entonces
de código nuevo. Este nuevo archivo lo En la misma línea de nuestro código debemos mirar con detenimiento los
vamos a llamar second.xul, al que le var info fijamos los contenidos de la ejemplos que hemos visto e intentar
añadiremos el código del listado 3. variables con el código a la derecha del entenderlos con el mayor detalle posi-
En este código tenemos dos elemen- signo =. Este es el código que real- ble. Si hay conceptos aún confusos no
tos gráficos principales: una caja de mente coge la información de la caja de debemos preocuparnos, puesto que la
texto y un botón. Es importante obser- texto. Dentro del código utilizamos la mayoría serán explicados con mayor
var como cada widget tiene un atributo función getElement-ById de Javascript detalle en próximos números. ¡Buena
id que le proporciona un nombre único. para acceder al widget con la identidad suerte! ■

82 Número 02 www.linuxmagazine.com.es
Educación LINUX USER

El servidor interactivo de actividades matemáticas WIMS (II)

Bienvenidos a la Aula
Virtual
Acabábamos el primer artículo sobre WIMS[1] prometiendo dedicar espacio a aprender a crear clases virtuales y a desar-

rollar nuestras propias actividades. Es el momento de cumplir nuestras promesas: explicaremos cómo se crean las

clases, cómo se las llena de contenido, cómo se inscribe a los alumnos y el modo en que pueden trabajar.

POR JUAN RAFAEL FERNÁNDEZ

L
as clases virtuales son un mecanis- crea la clase y la va a administrar. Este clase, que el profesor inscriba a los
mo que permite a los profesores administrador de la clase no debe con- alumnos manualmente o la entrada
organizar el trabajo de los alumnos fundirse con un administrador del sis- mediante una contraseña que el profe-
en torno a los distintos tipos de recursos tema y no necesita permisos especiales. sor comunica a los alumnos. El sistema
de un sitio WIMS y les permite también Por otro lado es necesario que la preferido es este, por razones bien
realizar un seguimiento de sus progre- máquina que realiza la función de sitio explicadas en la ayuda de WIMS: la
sos. WIMS pueda enviar correo y que el pro- entrada no-restringida presenta proble-
Recordemos que en la página inicial fesor tenga una cuenta, porque el mas de control y de seguridad para los
(ver la figura 1) teníamos un enlace al mecanismo de autentificación se basa administradores, y requiere que se
área de profesores. Entremos en este en una contraseña que se le envía por habilite expresamente. Por otro lado, la
espacio y podremos conocer las clases correo. Por último se nos ofrece también entrada manual, además de ser labo-
que ya han sido creadas y tendremos la la posibilidad de crear superclases, para riosa, es más propia de sistemas cerra-
oportunidad de crear una clase nueva. supervisar grupos de clases. Evidente- dos y comerciales de educación (no
Eso es lo que vamos a hacer ahora, mente no es esta la tarea que nos urge obstante, hay habilitado un sistema de
crearemos una clase de ejemplo, a la ahora. importación de datos a partir de hojas
que vamos a llamar Artículo sobre Rellenaremos el formulario de de cálculo y de ficheros en formato
WIMS. Varias aclaraciones son nece- creación de la clase como en la figura 2. csv). Una contraseña por clase es un
sarias antes de que se creen confu- A la hora de configurar el acceso de los sistema sencillo y razonablemente
siones: el sistema utiliza el término alumnos tenemos varias posibilidades: abierto; es el sistema que vamos a uti-
supervisor para referirse al profesor que que todo el mundo pueda entrar en la lizar.

Figura 1: Página inicial de un servidor WIMS. Figura 2: Creación de una clase virtual.

www.linuxmagazine.com.es Número 02 83
LINUX USER Educación

Figura 3: Confirmación de que se ha creado la clase. Figura 4: Administración de la clase.

Rellenados los campos y pulsado el Administración de una clase Entramos nuevamente como profesor,
botón de enviar, WIMS comprueba la virtual contestamos al mensaje del foro como
corrección de los datos y nos presenta La figura 4 nos muestra la interfaz de señal de cortesía, y nos centramos en el
otra pantalla en la que deberemos con- administrador de las clases. Recordemos tema: es el momento de añadir activi-
firmar datos y contraseñas. Final- que hemos creado la clase, pero no dades ya disponibles en WIMS, previa-
mente, envía el mensaje de correo con hemos inscrito a ningún alumno y está mente a aprender a crear las nuestras
la contraseña aleatoria que permitirá vacía de contenidos[2]. Vamos a entrar propias. Para ello añadamos una de cada
crear la clase. En este caso es 60009 ahora como alumno (desde la página uno de las tipos de recursos disponibles,
(ningún secreto, son contraseñas de inicial pulsando en la zona de alumnos, salvo las votaciones y encuestas, que
un solo uso), la figura 3 nos muestra la área de estudiantes) y a inscribirnos en considero de menor interés en este
pantalla de confirmación de que se ha la clase. La figura 5 nos muestra este primer momento. Y además el uso de
creado la clase y nos presenta tres momento. Previamente el profesor nos esta funcionalidad es de aprendizaje
enlaces que deberemos guardar: la habrá comunicado la contraseña de fácil e intuitivo.
página de administración de la clase, acceso a la clase. Nos inscribimos y Si hacemos clic en documento
la de inscripción de alumnos y el comprobamos que todo funciona podremos crear una lección. Los llama-
enlace a la página de trabajo de los poniendo un mensaje en el foro del dos documentos de WIMS son conjuntos
estudiantes. grupo. de páginas html con un conjunto de

Tabla 1: Lista de directivas


directiva número de parámetros descripción
title 1 define el título de un ejercicio
language 1 el lenguaje del ejercicio,en,es o fr
author 1 define el autor del ejercicio
email 1 define la dirección de e-mail del autor
format 1 formato de la explicación
precision 1 precisión al comparar la respuesta del usuario con la solución. Damos un entero positivo n aquí:la comparación se hará con precisión de
1/n
range 1 rango de la variable cuando se evalúa una función proporcionada por el usuario. Se daría con la forma n1..n2,donde n1 es el punto inicial,
n2 es el punto final
statement 1 El parámetro es la explicación del ejercicio
plot ? un gráfico dinámico (en construcción)
answer 2 define una respuesta libre. El primer parámetro es el texto de la pregunta, y el segundo,la respuesta correcta. El tipo de respuesta
(numérica o funcional) se determinará automáticamente de acuerdo a la respuesta correcta
choice 3 define una elección múltiple. El primer parámetro es el texto de la elección,el segundo,la(s) elección(es) correcta(s), y la tercera la(s)
otra(s) elección(es). Los últimos dos parámetros serían listas separadas por comas. Se permiten mútiples elecciones correctas. Si una
elección aparece tanto en la lista de elecciones correctas y erróneas,se tomará como buena.
condition 2 define una condición especial para la evaluación de respuestas libres
solution 1 da la solución del ejercicio con la explicación. El gestor OEF puede decidir si mostrar esta explicación al usuario,de acuerdo con el nivel de
dificultad asignado
hint 1 da una pista sobre el ejercicio. El gestor OEF puede decidir si mostrar la pista, de acuerdo con el nivel de dificultad asignado al usuario

84 Número 02 www.linuxmagazine.com.es
Educación LINUX USER

Figura 5: Inscripción en una clase. Figura 6: Un documento LaTeX en una lección WIMS.

ventajas frente al uso de páginas html de secundaria) y seleccionaremos Ejer- ¿Cómo se crea un examen? Con un
de origen externo: en primer lugar per- cicios OEF (recordemos que OEF sig- título y los ejercicios de una hoja de
miten el enlace de ejercicios WIMS para nifica Online Exercise Format, Formato ejercicios. Se le pone una fecha límite de
acompañar la teoría con la práctica, y la de Ejercicios En línea) o Actividades realización y un tiempo para el examen
integración de ejemplos que permiten la WIMS como las categorías donde y un número de oportunidades. Final-
explotación de su potencia de cálculo. vamos a buscar. Seleccionamos el ejer- mente se activa. Ahora la página de
Por último incluyen la posibilidad de cicio Fracciones OEF, lo configuramos administración de la clase tiene un
plegar y desplegar secciones, facilitando fijando sobre todo el nivel de dificultad aspecto distinto del inicial (figura 8).
la claridad de exposición o el acceso al y lo lanzamos. Al pie de la página
detalle si es necesario. Un buen ejemplo aparecerá el enlace que nos permitirá Creación de ejercicios
de documento de este tipo siempre insertar el ejercicio en la hoja. Pul- sencillos con createxo
disponible es la ayuda de WIMS, basta samos y confirmamos los datos y el sis- Creemos una nueva hoja de trabajo y
desplegar una sección para que nos tema nos devuelve a la página de pulsemos en ejercicio: hemos lanzado
aparezca la opción de volver a cerrarla. preparación de la hoja, donde apare- la aplicación createxo, que nos permitirá
En nuestro caso se tratará de la incor- cerá el ejercicio que hemos añadido. generar de forma interactiva y sencilla
poración de un documento escrito en Así podremos seguir modificando la nuevas actividades.
LaTeX (los documentos incorporados hoja hasta que la consideremos com- Createxo viene muy bien documenta-
pueden ser documentos LaTeX, html o pleta. Finalmente deberemos activarla da en la documentación integrada en
documentos fuente WIMS, .src, que el para que pueda ser utilizada por los WIMS. Antes de lanzarnos a explorar la
sistema se encarga de convertir a html. alumnos; debemos tener en cuenta que interfaz, deberemos plantearnos las ca-
No obstante, siempre es preferible el uso la activación implica que ya no racterísticas del ejercicio que queremos
de este formato, por seguridad de que el podremos realizar más modificaciones generar: con qué tipo de preguntas
resultado va a ser el deseado y por sobre ella (más exactamente no vamos a trabajar (de texto, numéricas,
velocidad)[3]. El resultado se puede podremos realizar modificaciones sin gráficas…) y el tipo de respuestas que
apreciar en la figura 6. perder los datos del progreso de los esperamos (única entrada tecleada por
¿Cómo se añade un ejercicio? No pul- alumnos). La figura 7 nos muestra el el alumno, múltiple para elegir la cor-
saremos en ejercicio o ejercicios de la resultado de este proceso tal como lo recta…). En WIMS el número de
clase porque estos nos lanzan el proce- verá un alumno. La documentación nos respuestas correctas puede ser única (la
so de creación de ejercicios nuevos. Lo proporciona una serie de consejos capital de España es Madrid), múltiple
que haremos será crear una hoja de importantes para el uso eficaz de las pero cerrada o múltiple abierta (cuatro
ejercicios a la que añadiremos varios hojas de ejercicios: en el comentario capitales europeas), o infinita (dos
ejercicios del nivel en el que estamos que acompaña a la hoja conviene dar números cuya suma sea 0, respuestas:
trabajando, H1. En primer lugar información clara sobre las condiciones -1 y +1, -2 y +2, …); lo que es nece-
creamos la hoja, le pondremos un título de uso de la hoja (recordemos que sario es que el resultado sea com-
(por ejemplo Ejercicios con podemos configurar repeticiones de putable. Además la pregunta admite
fracciones) y volvemos a la página de práctica para ejercicios que no son parámetros modificables aleatoriamente
administración, donde constará que evaluables en sí mismos y ajustar la y el mismo ejercicio puede utilizarse
está en preparación. Pondremos le- ponderación de la nota de cada ejerci- repetidas veces sin que nunca sea igual.
velH1 en la casilla de búsqueda (esta- cio en el cálculo de la media de todos Mejor ejercicio que el del ejemplo
mos creando una clase del primer año los ejercicios). primero será la capital del país

www.linuxmagazine.com.es Número 02 85
LINUX USER Educación

Figura 7: Hoja de trabajo para los alumnos. Figura 8: Una clase completa.

europeo X es Y, donde X se selecciona 09 dicha y el tipo de respuesta que es


aleatoriamente. 10 (numérica…).
Nuestro primer ejercicio es el de 11 \statement{¿Cuál es la Como podemos ver en la tabla 1, todo
mayor simplicidad posible: nos pregunta capital de ejercicio OEF empieza con su título, el
cuál es la capital de España y debemos España?} idioma es que está creado y los datos del
teclearla en una pequeño recuadro. Lo 12 autor (nombre y dirección de correo
hemos generado sin ver una línea de 13 \hint{Está en el centro de electrónico). Vemos también que el
código. Podemos aprender más leyendo la península ibérica} lenguaje es de muy alto nivel. No nos
la documentación (disponemos incluso 14 \answer{La capital cuesta nada hacer una versión más
de algunos ejercicios comentados) y es}{Madrid} avanzada (figura 9):
examinando, modificando y ampliando {type=set}
los ejercicios ya disponibles. Empezare- 15 01 \title{Ejercicio con
mos por examinar el código que hemos 16 \solution{Madrid es la respuesta múltiple}
generado, vamos a levantar el capó y capital del Reino de España 02 \language{es}
mirar cómo funciona el motor. Porque desde 1561,año en que 03 \range{-5..5}
además es que estamos hablando de un Felipe II trasladó 04 \author{Juan Rafael
programa de unas cuantas líneas de allí su corte.} Fernández}
cabecera y cuatro líneas reales de pro- 05 \email{juanrafael.fernandez
gramación. Acabamos de echar nuestro primer vis- @hispalinux.es}
tazo al formato OEF. A los que conoz- 06 \computeanswer{no}
01 \title{Ejercicio de respuesta can LaTeX, les resultará muy familiar (y 07 \format{html}
única} para los que no, pueden seguir el curso 08 \precision{10000}
02 \language{es} de LaTeX que comenzó el mes pasado 09
03 \range{-5..5} en Linux Magazine). Se compone de 10 \statement{La capital de
04 \author{Juan Rafael directivas (en nuestra primera línea es España es...}
Fernández} \title) seguidas por uno o más paráme- 11
05 \email{juanrafael.fernandez tros encerrados entre corchetes. La 12 \choice{Capital actual de
@hispalinux.es} directiva \answer (respuesta) admite España} {Madrid}
06 \computeanswer{no} tres parámetros, el texto que acompaña {Benalmádena, Toledo,
07 \format{html} a la respuesta (lo que en inglés se llama Valladolid}
08 \precision{10000} prompt), la respuesta propiamente
Un aviso: las respuestas correctas se
muestran cuando comprobamos los ejer-
BIBLIOGRAFÍACOMPLEMENTARIA A LA DEL ARTÍCULO ANTERIOR cicios porque estamos trabajando en
Las FAQ se instalan con el paquete wims-common, pero siempre habrá una versión más actualiza- modo supervisor. ¡Los alumnos no lo
da en http://wims.auto.u-psud.fr/wims/faq/fr/. tendrán tan fácil! Vemos que el sistema
Sobre los ejercicios OEF http://wims.auto.u- añade la respuesta no lo sé (esto es con-
psud.fr/wims/wims.cgi?lang=fr&+module=adm/doc.fr&+cmd=new&+job=read&+doc=1027&+b figurable), y deja fuera aleatoriamente
lock=main. una de las respuestas erróneas que
hemos proporcionado. Finalmente

86 Número 02 www.linuxmagazine.com.es
Educación LINUX USER

Figura 9: Un ejercicio OEF. Figura 10: Una vista del foro de la clase.

crearemos un ejercicio que modifica la 14 } una herramienta para programadores. Y


pregunta a partir de un listado de países 15 \text{row=randomrow(\data)} esa es otra película…
y sus capitales. Esto nos servirá para 16 \text{capital=item(1,\row)}
aprender cómo funciona la selección 17 \text{pais=item(2,\row)} … Y el Mes que Viene
aleatoria de preguntas. 18 En la tercera y última parte veremos
19 \statement{ cómo se aplica todo lo que hemos apren-
01 \title{Ejercicio con 20 <p> dido a una clase real, y haremos un bal-
parámetros} 21 <center> ance de los valores pedagógicos de
02 \language{es} 22 ¿Cuál es la capital de \pais? WIMS. ■
03 \range{-5..5} 23 <p>
04 \author{Juan Rafael 24 <br> NOTAS
Fernández} 25 \embed{reply 1,18}
[1] Hablábamos en el artículo anterior del
05 \email{juanrafael.fernandez 26 </center> Web Interactive Mathematical Server;
@hispalinux.es} 27 } pues bien, la aplicación ha cambiado de
06 \computeanswer{no} 28 \answer{La capital de nombre oficial para subrayar su flexibili-
07 \format{html} \pais es...}{\capital} dad a WWW Interactive Multipurpose
08 \precision{100} {type=atext} Server. El artículo anterior se puede
09 descargar de http://www.linuxmagazine.
10 \matrix{data= Hasta este momento no hemos utilizado com.es/issue/01.
11 Madrid,España más que actividades ya disponibles y [2] Para los obsesos de la seguridad y de la
12 Lisboa,Portugal creado ejercicios con Createxo. La docu- salvaguardia de sus datos informaremos
13 Roma,Italia mentación de WIMS nos deja claro que de que lo que se ha creado es un subdirec-
la verdadera torio en /var/lib/wims/log/classes, del que
podemos hacer copias de seguridad. En
potencia del sis-
nuestro caso la clase se guarda con el
tema se logra
nombre de 9128182, y a medida que
cuando se utiliza
vamos añadiendo actividades contendrá
Modtool para a su vez las carpetas doc para los docu-
crear módulos mentos, exam para los exámenes, sheet
WIMS. Con Crea- para las hojas de ejercicios, forum para el
texo no se tiene foro o tablón de anuncios, vote para las
control sobre la encuestas, score y noscore para registrar la
notación del ejer- marcha de los alumnos, y src y def para los
cicio, ni sobre la fuentes y los ejercicios generados.
progresión de la Además se guarda el número y datos de
los alumnos inscritos en la clase.
dificultad. Por
otro lado Modtool [3] Las FAQ nos informan de que es posible
es mucho más hacer referencia a cualquier otro tipo de
documentos (pdf, imágenes, ficheros de
flexible pero
sonido, etc.) en nuestras lecciones. Basta
requiere mucho
seguir el enlace depósito de ficheros.
Figura 11: Podemos ver el progreso del alumno con WIMS. más trabajo: es

www.linuxmagazine.com.es Número 02 87
LINUX USER LaTeX

LaTeX en Linux (2ª Parte)

Tipografía Profesional
al Alcance de Todos
Continuando con el artículo que os presentamos en el número anterior de nuestra revista en el que nos introducíamos

en el mundo de la Tipografía Profesional de la mano de LaTeX, en esta nueva entrega os vamos a ir mostrando con mayor

detalle todas las múltiples, y a veces casi mágicas, posibilidades que este sistema de escritura nos ofrece.

POR JOSE MANUEL GONZÁLEZ VIDA

C
oncretamente vamos a abordar se puede usar incluso para colgar docu- alguna de estas instrucciones, LaTeX
desde el uso de texto de distintos mentos en Internet. adapta el tamaño de letra de cada aparta-
colores hasta el uso de referen- Vamos a empezar a generar documen- do de nuestro documento de forma
cias cruzadas, listas o enumeraciones. tos. En todos los ejemplos que vamos a automática. Si observamos los ejemplos
Veremos con ello la razón por el cual, si ir viendo utilizaremos el siguiente for- de nuestro último artículo el tamaño de la
bien hasta hace pocos años LaTeX era mato de fichero: fuente del título, del autor, de una sec-
usado fundamentalmente por ción, etc. son distintos según el nivel en el
matemáticos y demás gente “rara”, en \documentclass[a4paper,12pt]U que nos encontremos y ese trabajo lo
la actualidad su uso está siguiendo un {article} hace LaTeX automáticamente.
ritmo de crecimiento exponencial den- \usepackage[latin1]{inputenc} Uno de los efectos más llamativos en
tro de ámbitos profesionales, universi- \usepackage[T1]{fontenc} la presentación de un documento es el
tarios e incluso dentro del público en \usepackage[spanish]{babel} poder cambiar los colores del texto. Para
general, y hay motivos por ello. Por \begin{document} ello, en el preámbulo de nuestro docu-
ejemplo… Aquí va el cuerpo del documento mento, tenemos que incluir el paquete
\end{document} \usepackage[controlador] {color} junto
¿LaTeX genera sólo ficheros con un controlador que debemos elegir
DVI? Nótese, que además de los paquetes en función del compilador que vamos a
Aquí os presentamos una primera sorpre- que explicamos el mes pasado, hemos usar para generar nuestro documento. Si
sa… LaTeX genera también de manera incluido el paquete fontenc con la usamos como compilador latex el nom-
muy fácil documentos de tipo PDF con opción <T1> cuya utilidad es, bre del controlador que tenemos que
calidad profesional. Para ello sólo hay “enseñar” a LaTeX a cortar adecuada- colocar es dvips. Por el contrario, si
que compilar el texto de nuestro docu- mente las palabras con acentos que usamos pdflatex el nombre del contro-
mento con el compilador PDFLaTeX. caigan al final de una línea. lador es pdftex. Una vez cargado este
Seguramente ya lo tendremos instalado paquete disponemos, en principio de 6
en nuestro ordenador al instalar el El Maravilloso Mundo del colores, rojo (red), azul (blue), verde
paquete teTex, pero si no fuera así bus- Texto Multicolor (green), cian (cyan), magenta (magenta)
caremos en el programa de gestión de En nuestro artículo anterior veíamos y amarillo (yellow). Para insertar en el
software de nuestra distribución de Linux cómo cambiar el tipo de fuente y cómo texto una frase o pa-labra en color usare-
el paquete pdflatex y lo instalaremos. usar letra negrita, itálica, etc. Sin embargo mos la instrucción \textcolor{nombrecol-
El uso de este nuevo compilador es también es típico en cualquier procesador or}{texto}, donde el nombrecolor es el
casi idéntico al que hemos usado en de texto el poder cambiar el tamaño de nombre del color en inglés. Pero ¿sólo
nuestro artículo anterior con la única texto o incluso su color. En LaTeX existen tenemos 6 colores? La respuesta es no,
diferencia de que ejecutaremos en nues- distintos tamaños de letra predetermina- de hecho si añadimos al paquete color,
tro terminal la orden pdflatex en lugar dos por las instrucciones (de mayor a además del controlador antes menciona-
de latex para compilar nuestro docu- menor) \Huge, \huge, \LARGE, \Large, do, la opción usenames disponemos de
mento. El formato PDF tiene la ventaja \large, \normalsize, \small, \footnotesize y los 68 colores que mostramos en la
de ser más estandarizado que el DVI y \tiny. Naturalmente, salvo que usemos Figura 1.

88 Número 02 www.linuxmagazine.com.es
LaTeX LINUX USER

Referencias cruzadas Figura 1: Tabla con los


Otra de las grandes ventajas que tiene 68 colores de texto que
LaTeX es el uso de lo que se denominan nos proporciona la
referencias cruzadas, es decir, añadir a opción usenames del
determinadas partes del texto ciertas paquete color.
“etiquetas” para poder hacer referencia
a ellas posteriormente. Para ello vamos
a usar tres instrucciones,
\label{etiqueta}, \ref{etiqueta} y
\pageref{etiqueta}. El uso es muy
sencillo y para verlo lo mejor es un
ejemplo. Introducimos en el cuerpo de
nuestro documento las siguientes líneas
y lo compilamos dos veces seguidas:
Figura 2: Un primer
01 \section{Las referencias ejemplo de una lista de
cruzadas en \LaTeX} tipo enumerate.
02 \label{sec:refcru}
03 En este apartado estamos
aprendiendo a manejar
04 referencias cruzadas con
\LaTeX.
05
06 \section{Creación de Listas}
07 \label{sec:tablas}
08 En esta sección abordamos
la creación de listas \dots
09
10 \dots como podemos ver en la
sección \ref{sec:refcru}
11 (véase página \pageref ción \ref{etiqueta} por el número que quetas mal referenciadas en el docu-
{sec:refcru}) \LaTeX \ permite LaTeX haya asignado automáticamente mento final veremos dos símbolos de
12 hacer referencias cruzadas a la sección en cuestión. El comando interrogración, ??, en aquellas referen-
de manera muy fácil \dots \pageref{etiqueta} hará referencia al cias que no tienen etiqueta.
número de la página de nuestro docu- Tal vez lo mejor para manejar este
(\dots, por cierto, sirve para mostrar mento donde se encuentra la estructura tipo de errores sea retomar el ejemplo
puntos supensivos […]). Si vemos el etiquetada. anterior y hacer dos pequeños ejercicios
resultado de nuestro ejemplo comen- Una cuestión a tener en cuenta es el de los errores que acabamos de men-
zamos a ver la potencia de LaTeX. no repetir etiquetas, ya que las referen- cionar, compilar el resultado y ver lo
¿Cómo han funcionado las referencias cias apuntarían a etiquetas equivo- que nos devuelve el compilador.
cruzadas? Observemos que, en primer cadas. LaTeX nos avisa en el proceso
lugar hemos puesto etiquetas a las dos de compilación si tenemos etiquetas Listas
secciones de nuestro documento. Como repetidas con un mensaje del tipo Una forma habitual de presentar infor-
etiqueta se puede colocar cualquier pa- LaTeX Warning: Label mación estructurada en cualquier docu-
labra (sin espacios ni símbolos “raros”). ‘NombreEtiqueta’ multiply defined. mento es usando listas con sus distin-
Normalmente para “etiquetar” alguna También nos puede pasar que al hacer tos elementos, bien sean numerados o
parte de nuestro documento se suelen alguna referencia nos equivoquemos al no. Incluso, a veces, es necesario
usar algunos caracteres indiquen de qué escribir la etiqueta y tal etiqueta no anidar unas listas dentro de otras unas
tipo de estructura se trata (aquí la parte exista. En tal caso el error que nos numeradas de una forma y otras de
sec: la utilizamos para indicar que esta- devuelve LaTeX al compilar es LaTeX otra, etc. En esta sección aprenderemos
mos etiquetando una sección) seguida Warning: Reference ‘NombreEtiqueta’ a crear listas con LaTeX y veremos lo
de otra palabra que relacionemos con la on page x undefined on input line xxx. fácil que nos pone su tratamiento:
zona etiquetada. Posteriormente cuan- De cualquier manera, hay que observar numeraciones automáticas, sangrías
do en nuestro texto queramos hacer ref- dos detalles: en ambos casos el proce- relativas al nivel de cada lista también
erencia a esa estructura (en el ejemplo so de compilación del documento no se automáticas, etc.
es una sección) podemos emplear detiene, por lo que conviene estar Lo mejor será comenzar viendo un
\ref{etiqueta} de modo que al compilar atentos a la salida que obtenemos del ejemplo. Añadamos lo siguiente al
dos veces LaTeX sustituirá la instruc- compilador y, por otra parte, si hay eti- cuerpo de nuestro documento LaTeX

www.linuxmagazine.com.es Número 02 89
LINUX USER LaTeX

Figura 3: Un segundo ejemplo con listas anidadas. Figura 4: Una lista descriptiva, con los nombres de los campos en negrita.

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] Comprehensive TeX Archive Network: http://www.ctan.org
[4] XFIG Drawing Program for the X Window System: http://www.xfig.
org

dentro de la sección Creación de El resultado ahora


Listas: (ver Figura 3) nos
muestra dos listas
\begin{enumerate} de distinto tipo Figura 5: Nuestro documento también se puede guardar como PDF.
\item Aquí colocamos un anidadas.
ßßelemento de la lista. En LaTeX existen tres tipos de listas con el texto que hemos puesto entre
\item Y aquí otro elemento. definidas por sus correspondientes corchetes resaltado en negrita y a contin-
\end{enumerate} entornos: enumerate, itemize y uación el resto del elemento.
description. El formato es siempre el Podéis probar a poner varios niveles
Compilamos el documento anterior y mismo: \begin{TipodeLista} y anidados de una lista de tipo enumerate
observamos el resultado. Debe ser \end{TipodeLista} y los elementos o o itemize y observar que la numeración
parecido al que reproducimos en la elementos de la lista van precedidos o los símbolos que emplean para cada
Figura 2. Observemos que cada ele- del comando \item. Las listas de tipo nivel cada uno de estos entornos es dis-
mento de la lista aparece automática- enumerate son listas numeradas, tinta. En principio LaTeX nos permite
mente numerado y con una sangría mientras que las del tipo itemize profundizar hasta cuatro niveles con
horizontal específica para todos los ele- emplea pequeños iconos en cada cualquiera de estos entornos.
mentos de su mismo nivel en la lista. nivel. Por último las listas de tipo
Compliquemos el ejemplo añadiendo description tienen un formato ligera- Conclusión
otra lista anidada: mente diferente. Lo vemos en el sigu- Como hemos podido comprobar, LaTeX
iente ejemplo: puede hacer mucho más aparte de
\begin{enumerate} mostrar generar texto llano. Con los dis-
\item Aquí colocamos unU \begin{description} tintos formatos y colores de letras, las
elemento de la lista. \item[Nombre:] Fulanito. referencias y listas, podemos dotar a
\item Y aquí otro elemento. \item[Apellido:] Gutiérrez. nuestros documentos de agilidad y clar-
\begin{itemize} \item[Cargo:] Presidente. idad, conservando siempre un aspecto
\item Un primerU \end{description} muy profesional.
elemento en el segundo nivel. El mes que viene ahondaremos en
\item Otro elemento enU Si compilamos nuestro documento escri- otros aspectos para mejorar la pre-
este nivel. biendo en el cuerpo del mismo el ejemp- sentación de nuestras obras con la
\end{itemize} lo anterior obtendremos como resultado inclusión de gráficos y fórmulas
\end{enumerate} una lista donde cada elemento comienza matemáticas. ■

90 Número 02 www.linuxmagazine.com.es
buenas razones
5 para suscribirse

SI UTILIZAS LINUX, NECESITAS LINUX MAGAZINE


AHORRO RENOVACIÓN AUTOMÁTICA
1 Más del 15% descuento con respecto al precio de portada: Consigue 12 números por el
precio de 10 y 4 DVDs ¡Gratis!
4 A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios
para que renueves tu subscripción. Con Linux Magazine, tu subscripción se renovará cada
año. Recibirás una confirmación aproximadamente 60 días antes del final de tu periodo
de subscripción, pero no se requiere que hagas nada al respecto para seguir suscrito.
ENVÍO GARANTIZADO
2 ¡No te pierdas Linux Magazine nunca más! La subscripción a Linux Magazine te asegura
que recibas los conocimientos Linux de más alta calidad en tu domicilio cada mes.
GARANTÍA DE DEVOLUCIÓN DE DINERO
APOYO A LA COMUNIDAD 5 Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu sub-
scripción en cualquier momento. Te abonaremos el precio de todos los números que no

3 Linux Magazine es algo más que una revista de Linux. Linux Magazine patrocina grupos,
congresos, proyectos y eventos relacionados con el Software Libre. Suscribiéndote a Linux
hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.

Magazine garantizas que podamos seguir apoyando el Software Libre allá donde haga
falta.

Pedidos online: www.linuxmagazine.com.es/subs


o utiliza el formulario al dorso

W W W. L I N U X M A G A Z I N E . C O M . E S / S U B S
Formulario
Suscripción

Para un servicio más rápido, realice su (+ 34) 951 010 516


pedido online en:
www.linuxmagazine.com.es

Sí Dirección Facturación

Número Inicial

Zona

Modo de Pago

Dirección Envío

Condiciones
head, tail LINUX USER

Head, Tail, Cat

De Cabo a Rabo
Pequeñas utilidades como head, tail y

cat se usan para mostrar el contenido

de los ficheros de texto. Otros coman-

dos y programas proporcionan

funciones parecidas. Aunque todos

traten con ficheros de texto, estas

herramientas de línea de comando

son dignas de mención ya que

pueden combinarse para formar

potentes herramientas.

POR HEIKE JURZIK

L
inux proporciona unos cuantos pro- programa. Para hacerlo, cat usa la opción una lista que será redireccionada al
gramas capaces de mostrar ficheros -n cuya salida coloca un número al prin- comando sort:
de texto. Por supuesto, se puede cipio de cada línea del fichero.
arrancar un editor como Vi ó Emacs ó un Pero hay que tener cuidado con los $ cat lista.txt | sort
paginador como less o more, para leer formatos binarios. Si por error se mues- Arnie 42
estos ficheros. Pero ¿por qué no usar tra un fichero binario usando cat, no sólo Easter 120
algo más simple, como cat, head y tail? podríamos encontrarnos con una pan- Petronella 100
talla llena de caracteres de control Spátula 30
El Gato Multifunción extraños, sino que las propias entradas
El programa cat no sólo “concatena” podrían volverse ilegibles (ver Figura 1). Cualquier salida desde cat puede redirec-
múltiples ficheros para crear uno sólo, El comando reset puede ayudar a remedi- cionarse fácilmente usando herramientas
también es útil para mostrar ficheros ar esta situación. Escribimos reset en el típicas de Unix. El operador > envía la
individuales en la salida estándar del prompt, y presionamos [Return] para salida a un nuevo fichero, fichero2:
equipo. De la forma más simple, cat restaurar el terminal. Puede que no sere-
fichero.txt, muestra por pantalla el con- mos capaces de ver lo que escribimos. Si cat fichero1 > fichero2
tenido de fichero.txt. esto no ocurre también puede intentarlo
A veces se necesita añadir números de con echo [Crtl-v][Esc][c][Return]. Esto se puede hacer con múltiples
línea a un fichero de texto para referirse cat se usa a menudo para redireccionar ficheros. Para hacerlo así, simplemente
a estas líneas. Esto, por ejemplo, puede datos mediante una cauce a otros pro- hay que teclear el nombre de los ficheros
facilitar la explicación del listado de un gramas. Se puede usar cat como salida a uno tras otro:

cat fichero1 fichero2 > fichero3


Línea de Comandos
Aunque los GUIs (interfaces de usuario) como KDE o GNOME son útiles para muchas tareas, si se Si fichero3 no existe, este comando lo
tiene la intención de dominar al máximo una máquina Linux, necesitaremos volver a utilizar la creará. Si el fichero existe, cat simple-
antigua línea de comandos de vez en cuando. Además de esto, probablemente nos enfrentaremos
mente lo sobreescribirá. Un operador
a varios escenarios donde algún conocimiento básico será muy útil al poder movernos por la
distinto permitirá a cat añadir a un
jungla de los comandos de la shell.
fichero existente:

www.linuxmagazine.com.es Número 02 93
LINUX USER head, tail

Listado 1: head incluye un


separador para múltiples
ficheros
01 huhn@asteroid:/etc$ <B> head
-n 3 *.conf
02 ==> aatv.conf <==
03 # fichero de configuración de
aatv.
04 # Modo de video. Escoger entre
PAL, SECAM y NTSC.
05 ==> abcde.conf <==
06 # Sistema por defecto para
abcde.
07 # Nada en este fichero está Figura 1:“Basura binaria” en la línea de comandos – resetear normalmente ayuda.
descomentado por defecto.
08 # fichero muy largo a través de múltiples configuración en /etc a menudo indica el
09 ==> adduser.conf <== paquetes que son reensamblados usando nombre y uso del fichero en la primera
10 ... cat. Una aplicación típica de esta técnica línea. Para mostrar las tres primeras líneas
sería para transportar datos en disquetes de los ficheros de configuración de este
o en ficheros adjuntos en los emails. directorio se puede teclear head -n 3 *.conf
Listado 2: Combinación de Algunos grupos de noticias, como Práctico: Si se ejecuta head para múlti-
tail -f y grep comp.unix.shell han estado realizando ples ficheros, la herramienta añade un
01 root@marvin[~] <B>tail -f un concurso, desde hace unos años, lla- separador visible (Listado 1). Si no
/var/log/isdn/isdnlog | grep mado “Useless Use of Cat Award” [1]. El quiere que aparezca este separador se
RING<B> ganador es la persona que sugiera la puede utilizar el parámetro -q (--quiet).
02 Sep 25 13:25:51 * Call to tei forma más inútil de usar el comando cat.
127 from +353 77777777, La idea es la siguiente: “El propósito de Final Feliz
Ireland on +44 207/40, London cat es concatenar ficheros. Si un fichero, El comando tail trabaja de forma similar,
RING (Speech) concatenándolo con nada, es una pérdi- pero como sugiere el nombre, la salida es
03 Sep 25 13:31:09 * Call to tei da de tiempo y coste, tenemos lo que la última línea de un fichero. Se pueden
127 from +39 2/4444444, Milano buscamos”. Dejo a la discreción de los especificar múltiples ficheros en la sali-
on +44 207/40, London RING lectores lo que consideren “inútil”. Pero da. Junto con la opción -n número, la
(Speech) un uso redundante de cat sigue el princi- opción -f es muy usada. Esto permite
04 Sep 27 12:38:30 * Call to tei pio de Unix del uso de pipes para conec- visualizar las últimas líneas de ficheros a
127 from ? on + 44 207/40, tar las herramientas pequeñas. Y los que están continuamente añadién-
London RING (3.1 cualquier hardware moderno debería ser doseles datos, como los ficheros de logs.
05 kHz audio) capaz de manejar ese proceso adicional Así tail para un fichero de logs de RDSI
sin demasiado esfuerzo. indicará quién está conectado a través
del teléfono (Listado 2).
cat fichero1 fichero2 >>U A la Cabeza Se puede obtener el mismo efecto con
fichero3 Nomen est omen: head muestra la primera el paginador less, simplemente tecleando
línea de un fichero por pantalla. Si se eje- [Shift+f] mientras se visualiza el
Si redirigimos la salida a un fichero de cuta head fichero.txt normalmente se fichero. El programa entonces escuchará
esta forma, cat no tendrá problemas en mostrarán las diez primeras líneas. Se las nuevas lineas en el fichero (aparece
el manejo de ficheros binarios. Esto per- puede cambiar esta opción que trae por el estado de las líneas leídas:
mite el uso de split para distribuir un defecto usando -n número. El fichero de
Waiting for dataU
...(interrupt to abort)
GLOSARIO
Salida estándar: Hay tres “canales estándar” estos canales de E/S para enviar la salida de mientras se hace). Tecleamos [Ctrl-c]
para la entrada y la salida, stdin (entrada error estándar a un fichero, por ejemplo. Pipe: para salir del modo “Follow”. ■
estándar), stdout (salida estándar) y stderr Permite encadenar múltiples comandos
(salida estándar de errores). La entrada conectando la salida de un comando con la RECURSOS
estándar típicamente es el teclado, mientras entrada de otro. Los pipes se crean usando el
que la salida y el error estándar normal- carácter |. Como ls-l | less enviará la salida del
[1] Useless Use of Cat Award: http://rhols66.
mente usarán la pantalla. Los operadores comando ls al paginador less, el cual lo
adsl.netsonic.fi/era/unix/award.html#cat
especiales > y < permitirán redireccionar mostrará por pantalla página a página.

94 Número 02 www.linuxmagazine.com.es
Proyectos COMUNIDAD

Software Libre y sus Creadores

Proyectos en Marcha
El software libre incluyes un abanico tan amplio de aplicaciones que puede ser difícil encontrar la herramienta perfecta.

En esta sección, escogemos lo mejor de la cosecha. Este mes exploramos “los PCs dentro de los PCs”, máquinas virtuales

y emuladores varios. POR MARTIN LOSCHWITZ Y GEORGE C.F. GREVE

L
os usuarios a menudo necesitan ais- VServer tiene su propio proceso init, tema anfitrión no dispone. Desafortu-
lar partes del sistema para evitar el puede arrancar procesos con sus propias nadamente, existen distribuciones que
acceso al sistema principal desde el direcciones IP. VServer, y los procesos no se podrán ejecutar dentro de un
área aislada. Esta práctica protege al sis- que utiliza, terminan limpiamente, junto entorno UML, mientras que VServer eje-
tema principal de un potencial ataque con las utilidades VServer. Además, las cutará casi cualquier host Linux.
contra el subsistema aislado. versiones más recientes de VServer
pueden imponer restricciones a los Nuevas Propuestas
Venerable Anciano recursos permitidos a un servidor. Pero, Xen [3] utiliza el kernel a un nivel incluso
Chroot es el método más antiguo y sen- al igual que chroot, el servidor virtual más bajo. En vez de arrancar un kernel
cillo. Los administradores simplemente utiliza el kernel del sistema anfitrión. Linux normal, arranca una imagen Xen
necesitan emular un sistema Linux con User Mode Linux (Linux en Modo especial, asignando números a todos los
los ficheros requeridos bajo un nivel de Usuario o UML) [2] adopta un método sistemas en el ordenador (incluyendo el
directorios específico. Chroot engaña a diferente, a pesar de que también ejecu- sistema anfitrión y los clientes virtuales) y
cualquier programa que se arranque en dotándoles de direcciones como enti-
este subárbol de directorios y le hace dades lógicas, denominados dominios
creer que está corriendo bajo el directo- virtuales. Otra característica especial de
rio raíz del sistema. Los procesos sólo Xen es que emula un PC idealizado en los
pueden acceder a los ficheros encerrados dominios huésped, en vez de intentar
en este entorno. emular toda la gama de hardware. Los
Pero chroot tiene sus desventajas. Por dominios virtuales cargan el kernel opti-
Ronald Raefle, visipix.com

ejemplo, los programas en la “cárcel” mizado para Xen, que sólo dispone de
chroot comparten los recursos del sis- una selección mínima de los drivers que
tema principal. Si un programa se necesita para arrancar. Esto se puede
comporta mal, puede colgar a todo el sis- comprobar en la salida de dmesg después
tema. Lo que es más, atacantes del arranque, que contiene unas escasas
experimentados pueden escapar de la cincuenta líneas. Habiendo dicho lo cual,
cárcel y acceder al sistema principal. cada dominio virtual sigue comportán-
Vmware, que emula un PC, lleva ya tar un sistema dentro de un sistema. dose como un ordenador completo. Estos
algunos años dando tumbos por ahí. El UML carga su propio kernel en el espacio proyectos hacen que me sienta optimista
servidor Vmware permite a los usuarios de usuario del sistema anfitrión. A dife- sobre la posibilidad de existencia de alter-
montar múltiples entornos que utilizan rencia de VServer, UML posee su propio nativas a VMware en los entornos de
sistemas diferenciados y aislados sobre sistema de ficheros, que o bien puede producción algún día. Pero si lo que bus-
el mismo hardware. Desafortunada- crear el usuario a partir de un fichero de cas es un sistema virtual en tu propia
mente, el código fuente es cerrado, lo imagen, o descargar de la página de ini- máquina, chroot puede que sea justo lo
que es común en aplicaciones comer- cio de UML. Nuevamente, la que necesitas, ya que UML, VServer y Xen
ciales, y el precio ha hecho llorar a más configuración básica incluye un parche son mucho más difíciles de configurar. ■
de un administrador de sistemas. para el kernel, sin el cual no funcionaría
el sistema. A pesar de lo cual, algunos RECURSOS
Bueno, Bonito y Barato sistemas, por ejemplo Suse, ya vienen
[1] Proyecto VServer: http://www.
VServer [1] es software libre. VServer con el parche integrado de serie en su linux-vserver.org
abarca dos componentes: un parche para kernel estándar. UML proporciona un
[2] Página de User Mode Linux: http://
el kernel y las utilidades VServer, que control detallado sobre el hardware al
user-mode-linux.sourceforge.net
administra las tareas en el espacio del cual se le permite acceder al sistema
[3] Xen, un emulador de PCs: http://xen.
usuario. Cada VServer puede ser arran- cliente. A diferencia de VServer, UML
sourceforge.net
cado separadamente. Como cada puede emular hardware del que el sis-

www.linuxmagazine.com.es Número 01 95
LINUX MAGAZINE Eventos

Eventos Seleccionados
LinuxWorld Expo FOSDEM 2005 LinuxPark CeBIT 2005
Fecha: 14–17 Febrero Fecha: 26–27 Febrero Fecha: 10-16 Marzo
Ciudad: Boston, MA, EE.UU. Ciudad: Bruselas, Bélgica Ciudad: Hannover, Alemania
Sitio Web: Sitio Web: Sitio Web:
www.linuxworld www.fosdem.org www.cebit.de/
expo.com homepage_e

Calendario de Eventos Fecha Ciudad Sitio Web


Evento Fecha Ciudad Sitio Web
OSDL Enterprise Linux Summit 31 Enero –02 Febrero Burlingame, CA, EE.UU. www.osdllinuxsummit.org
SAINT 2005 31 Enero–04 Febrero Trento, Italia www.saint2005.org
CodeCon 4.0 11-13 Febrero San Francisco, CA, EE.UU. www.codecon.org/2005
Southern California Linux Expo 12 Febrero Los Angeles, CA, EE.UU. www.socallinuxexpo.org
LinuxWorld Conference & Expo 14-17 Febrero Boston, MA, EE.UU. www.linuxworldexpo.com
UKUUG LISA/Winter Conference 24-25 Febrero Birmingham, R.U. www.ukuug.org/events/winter2005
FOSDEM 2005 26-27 Febrero Bruselas, Bélgica www.fosdem.org
Solutions Linux 01-03 Marzo París, Francia www.solutionslinux.fr
Linux Park CeBIT 2005 10-16 Marzo Hannover, Alemania www.cebit.de/homepage_e
O’Reilly Emerging Technology Conference 14-17 Marzo San Diego, CA, EE.UU. conferences.oreillynet.com/etech
Novell BrainShare 2005 20-25 Marzo Salt Lake City, UT, EE.UU. www.novell.com/brainshare
YAPC::Taipei 2005 26-27 Marzo Taipei,Taiwan taipei.pm.org
LinuxWorld Conference & Expo, Canada 18-20 Abril Toronto, Canadá www.linuxworldcanada.com
MySQL Users Conference & Expo 2005 18-21 Abril Santa Clara, CA, EE.UU. www.mysql.com/news-and-events/users-
conference
linux.conf.au 18-23 Abril Canberra, Australia conf.linux.org.au/
3rd International Linux Audio Conference 21-24 Abril Karlsruhe, Alemania www.zkm.de:81/lac
GUADEC 2005 29-31 Mayo Stuttgart, Alemania http://2005.guadec.org

Información de Contacto
Director Para el Resto del Mundo www.linuxmagazine.com.es - España
Paul C. Brown Brian Osborn www.linux-magazine.com - Mundo
ads@linux-magazine.com www.linux-magazine.de - Alemania
Coolaboradores
Tel.: (+49) 6509 910 495
Paul C. Brown, Jose Manuel González Vida, Juan Si bien se toman todas las medidas posibles para
Fax.: (+49) 6509 910 497
Rafael Fernández, Pedro Orantes, José María Ruíz garantizar la precisión del contenido de los artículos
Director Editorial publicados en Linux Magazine, la editorial no se
Traductores
Paqui Martín Vergara, Paul C. Brown, Jesús Reyes Paul C. Brown hace responsable de imprecisiones aparecidas en la
Delgado, Antonio Rueda. Director de Producción revista. Asimismo, Linux Magazine no comparte
Sergio Hardasmal necesariamente las opiniones vertidas por sus
Maquetación colaboradores en sus artículos. El riesgo derivado
Sergio Hardasmal anuncios@linux-magazine.com
del uso del DVD y el material que contiene corren
Diseño de Portada Subscripciones: www.linuxmagazine.com.es/ por cuenta del lector. El DVD es estudiado escrupu-
Paul C. Brown, Pinball magazine/subs losamente para confirmar que está libre de virus y
(info@pinball-werbeagentur.de) errores.
Precios Subscripción
Publicidad (12 números + 1 DVD cada 3 números) Copyright y Marcas Registradas © 2004 Linux New
www.linuxmagazine.com.es/pub/ España: 49,50 € Media Spain, S.L. Linux New Media Spain S.L. prohíbe
Para España Europa: 59,90 € la reproducción total o parcial de los contenidos de
Paul C. Brown Resto del Mundo - Euros: 79,90 € Linux Magazine sin su permiso previo y por escrito.
pbrown@linuxmagazine.com.es Resto del Mundo - Dólares U.S.A.: $94,90 € Linux es una Marca Registrada de Linus Torvalds.
pbrown@linuxnewmedia.es
Tel.: (+ 34) 951 010 556 Tel.: (+34) 951 010 556 Impreso en Alemania
Móvil.: (+ 34) 655 036 836 Fax.: (+34) 951 010 516
subs@linuxmagazine.com.es Impresión: Dierichs Druck + Media GmBH
Fax.: (+ 34) 951 010 516
Linux Magazine Distribución: SGEL
Sergio Hardasmal
anuncios@linuxmagazine.com.es Linux New Media Spain,
Tel.: (+ 34) 951 010 556 S.L. Avda. Juan López Peñalver, 21
Para Alemania, Austria y Suiza 29590 - Campanillas Málaga
Osmund Schmidt ESPAÑA
anzeigen@linux-magazine.com info@linuxnewmedia.es
Tel.: (+49) 6335 9110 Tel.: (+34) 951 010 556
Fax.: (+49) 6335 7779 Fax.: (+34) 951 010 516

96 Número 02 www.linuxmagazine.com.es
Humor LINUX MAGAZINE

La Carretera en Estado Puro

TJ Racer 2004
M
eternos en la piel de un incluyendo la M30 de Madrid, el M25 de
intrépido conductor urbano, Londres, la S30 de Sevilla o la célebre
un Fernando Alonso de la N340. Una vez elegida la modalidad y el
bocacalle y la circunvalación, ya no es circuito, se nos presenta una imagen
privilegio de unos pocos. Llega a las estática de la carretera tomada desde
consolas y al PC lo último en simula- dentro de un turismo atrapado en un
ciones automovilísticas, llega TJ Racer embotellamiento un lunes a las ocho de
2004. Levántate al alba, ponte al volante la mañana. Los mandos que controlan la
de tu utilitario y prepárate a enfrentarte conducción son de un realismo sorpren-
a la aventura de cada día: el tráfico de dente. Podemos girar el volante, cambiar
camino al trabajo. El juego permite jugar de marchar, acelerar el motor, pisar el
sólo contra la máquina, en modo multi- freno, encender y apagar los faros, irá a ninguna parte. “Hemos pretendido
jugador y en red y dispone de un amplio señalizar con los intermitentes o las llevar la experiencia de los juegos de
abanico de circuitos donde elegir, recrea- luces de emergencia… todo. Pero no conducción a nuevas cotas de realismo y
dos a partir de localizaciones reales, importa, puesto que nuestro vehículo no veracidad” comenta Epifanio Rovira,
Director de Marketing de StressWare, los
fabricantes del juego. “Creemos que
muchos jugadores están hartos de simu-
ladores que descuidan los aspectos que
aportan mayor disfrute al viaje en
automóvil”. La factura del juego, es
impecable, sin duda. Se ha recreado
hasta el último manchón de insecto
estrellado contra el parabrisas. Aunque,
por otra parte, no hace falta ser inge-
niero de cohetes para crear una imagen
estática desde el interior de un coche.
Sin embargo, para aportar precisamente
mayor realismo, aparte de los controles
vistos anteriormente y que son propias
de las conducción (aunque no influyen
para nada en el desenlace de la partida),
existe otra serie de controles a las que se
llega a través de combinaciones de
teclas. F1, por ejemplo, permite tambo-
rilear sobre el volante; F2 permite lanzar
un exabrupto (el tono de los cuales se
Figura 1:TJRacer: Pura adrenalina. puede configurar según la edad de los
jugadores en la pantalla de control)
sobre el estado del tráfico; F3 permite
TJ Racer
encender la radio, aunque lo único que
Precio: Más de lo que estás dispuesto a pagar por semejante basura emiten todas las emisoras sintonizables
Fabricante: StressWare (www.mushoestres.com) es información sobre el estado del tráfi-
Requisitos Mínimos: Pentium VIII a 9.8 GHz,1024 Gbytes de RAM,120 Gbytes de disco co. La tecla F4 permite acceder a un
duro y tarjeta gráfica 3D de 128 Mbytes compatible.
menú donde existen otras acciones alter-
Calificación:
nativas seleccionables con el ratón, entre
Gráficos 9,6
ellas: Bostezar, Aplicar Maquillaje,
Sonido 3,1
Rascar > Cabeza/Mano/Entrepierna,
Jugabilidad 2,1
Precio 1,0
Pegar Moco en Salpicadero y Tirar Pedo.
GLOBAL 4,0 Sin lugar a dudas, el juego más realista
desde los Sims. ■

www.linuxmagazine.com.es Número 02 97
PRÓXIMO NÚMERO Número 3

Marzo 2005: Número 3

Próximo Número
Especial seguridad
Érase una vez que se era un tiempo indefenso. La mayoría de las distribu-
cuando sólo las grandes redes necesita- ciones Linux incorporan una o más
ban cortafuegos. Pero hete que en la red herramientas para configurar o adminis-

Desarrollo
En la sección dedicada
a la programación,
veremos una interesante
aplicación programado en Ruby,
aprenderemos a controlar una casa
domótica con un bot para jabber
escrito en Perl y como controlar
procesos de la línea de comando con
PHP.

SysAdmins
En la sección dedicada a los admin-
istradores de sistemas tendremos más
útiles consejos de Charly, nuestro redac-
tor/administrador y veremos como
“hibernar” un portátil.

Linux User
Seguiremos con nuestro cursos de XUL y
www.photocase.de

presentaremos nuevas aplicaciones y


herramientas que nos harán la vida más
fácil. Continuaremos nuestra serie sobre
LaTeX, ahondando en su utilidad para
representar ecuaciones e imágenes.
de hoy en día, donde los escaneadores trar la barrera de seguridad de tu Seguiremos conociendo la línea de
de puertos llaman a la puerta disfrazados ordenador. A pesar de ello, a veces tiene comandos para que todos puedan
de inocentes cabritillas y un lobo feroz sentido ver lo que se ofrece en el mundo aprovechar el poder de las instrucciones
acecha a cada router, cada ordenador del sofware comercial. El mes que viene del shell.
necesita alguna forma de protección en abordaremos lo que se tiene que saber
forma de cortafuegos. Si utilizas Inter- sobre los cortafuegos, su análisis y su Noticias
net, si no tomas alguna medida, estás configuración. También traeremos las noticias más can-
dentes del mundo Linux, un calendario
Boletín Linux Magazine de eventos completo, información sobre
los últimos avances en materia de inse-
El Boletín de Linux Magazine te da la oportunidad de ver lo que se avecina en el
guridades de las aplicaciones e
siguiente número de Linux Magazine e incluye enlaces a artículos que aparecen
información sobre los proyectos más
en nuestro sitio web antes de que la versión impresa llegue a los quioscos.
interesantes que se llevan a cabo en el
Suscríbete en www.linuxmagazine.com.es/boletin.
campo del Software Libre.

A LA VENTA FEBRERO 2005


98 Número 01 www.linuxmagazine.com.es
Quiere Linux.
Desea que el funcionamiento
de sus aplicaciones y la
administración de sus sistemas
se realice a través de un soporte
profesional de confianza. Necesita
Red Hat. Disponible en 7 distintas
arquitecturas y certificado por
Oracle, Bea, IBM y Sap, entre
otros, le permitirá gestionar sus
sistemas a través del canal Red Hat
Network.

THE PLATFORM OF CHOICE.

redhat.es | ES 900 800 409

© 2004 Red Hat, Inc. All rights reserved. “Red Hat,” the Red Hat “Shadowman” logo, and the products listed are trademarks or registered trademarks of Red Hat,
Inc. in the US and other countries. Linux is a registered trademark of Linus Torvalds.