Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
HARDWARE
Impresoras
PCs Silenciosos
Desarrollo
Objetos cuánticos en Perl: Haz saltar
Grabadoras DVD
TaskJuggler
Python
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:
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.
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.
www.linuxmagazine.com.es Número 02 5
NOTICIAS Premios Linux New Media
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. ■
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
10 Número 02 www.linuxmagazine.com.es
Introducción
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
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
Decisiones de
Impresión
La impresora que elijamos dependerá del uso que
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
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
14 Número 02 www.linuxmagazine.com.es
Impresoras PORTADA
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
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
Ejecución silenciosa
Un ordenador beige, con venti-
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
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
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
www.linuxmagazine.com.es Número 02 21
PORTADA PCs Silenciosos
22 Número 02 www.linuxmagazine.com.es
Cámaras Digitales PORTADA
La Caja de Fotos
Las cámaras digitales progresiva-
tradicionales en nuestras
gPhoto o mediante el
módulo basado en
kernel de memoria
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
24 Número 02 www.linuxmagazine.com.es
Cámaras Digitales PORTADA
www.linuxmagazine.com.es Número 02 25
PORTADA Cámaras Digitales
26 Número 02 www.linuxmagazine.com.es
Cámaras Digitales PORTADA
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
La Tostadora
¿Cuándo un DVD no es un DVD? Actualmente hay al menos cinco estándares
ha probado seis grabadoras de DVD que soportan todos estos estándares. Con-
¿
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
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.
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
www.linuxmagazine.com.es Número 02 31
DESARROLLO SDL
sobre la pantalla. Este mes, mostraremos cómo esas operaciones básicas de carga y transferencia de bloque se pueden
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
www.linuxmagazine.com.es Número 02 33
DESARROLLO SDL
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
www.linuxmagazine.com.es Número 02 35
DESARROLLO SDL
36 Número 02 www.linuxmagazine.com.es
SDL DESARROLLO
www.linuxmagazine.com.es Número 02 37
DESARROLLO Curses
Dialogando se Entiende
la Gente
El otro día estuve en un taller
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
40 Número 02 www.linuxmagazine.com.es
Curses DESARROLLO
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 }
42 Número 02 www.linuxmagazine.com.es
Perl DESARROLLO
Casino Cuántico
La superposición del mundo de la
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
Formularios a Tope
Al igual que otros lenguajes, PHP el
gestión.
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
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
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
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
50 Número 02 www.linuxmagazine.com.es
Pear DESARROLLO
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
Crea un
álbum de
imágenes
Siguiendo con nuestro paseo por Python vamos a seguir
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
54 Número 02 www.linuxmagazine.com.es
Python DESARROLLO
www.linuxmagazine.com.es Número 02 55
DESARROLLO Python
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
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
www.linuxmagazine.com.es Número 02 57
ADMINISTRACIÓN Bloqueo Banners
Calma Total
La publicidad de los sitios web difi-
la red local.
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
60 Número 02 www.linuxmagazine.com.es
Sleuthkit ADMINISTRACIÓN
La Huella
Sleuthkit realiza análisis forenses en archivos del sistema de
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,
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
64 Número 02 www.linuxmagazine.com.es
Sleuthkit ADMINISTRACIÓN
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. ■
“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
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
68 Número 02 www.linuxmagazine.com.es
Email Clusters ADMINISTRACIÓN
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.
TaskJuggler
Un Plan sencillo
Las empresas y los proveedores de
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
www.linuxmagazine.com.es Número 02 73
LINUX USER deskTOPia
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
www.linuxmagazine.com.es Número 02 75
LINUX USER deskTOPia
76 Número 02 www.linuxmagazine.com.es
KTools LINUX USER
Konserve
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
Jugando con
Bloques
En el primer capítulo de nuestro tutorial de programación en XUL del último
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
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
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.
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
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
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.
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
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
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.
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.
www.linuxmagazine.com.es Número 02 87
LINUX USER LaTeX
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.
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
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
90 Número 02 www.linuxmagazine.com.es
buenas razones
5 para suscribirse
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.
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
Sí Dirección Facturación
Número Inicial
Zona
Modo de Pago
Dirección Envío
Condiciones
head, tail LINUX USER
De Cabo a Rabo
Pequeñas utilidades como head, tail y
potentes herramientas.
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:
www.linuxmagazine.com.es Número 02 93
LINUX USER head, tail
94 Número 02 www.linuxmagazine.com.es
Proyectos COMUNIDAD
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
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
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
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
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
© 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.