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

100
Integración Linux-Windows GRUB NTFS WINE GMaps Gambas Metapixel Redes anónimas Bacula Xfce 4.2 Tellico GMaps Utiliza la potencia de Google Maps en tu propia página web p42 Gambas El entorno de desarrollo visual para el lenguaje Basic en Linux p51 NÚMERO 10 P.V.P 5,95 Distribución profesional de Suse DVD 4,2 Gb Versiones 32 y 64 bits Redes anónimas Cómo mantener el anonimato en Internet WWW.LINUX - MAGAZINE.ES LINUX MAGAZINE NÚMERO 10 Edición en Castellano INTEGRACIÓN LINUX-WINDOWS Conectando Windows con Linux Cómo crear un sistema de arranque dual perfecto p12 Escritura en particiones NTFS desde Linux p16 Configuración avanzada de WINE p19 Crea grabaciones permanentes de tus streams de audio favoritos p37 Ripeando audio SUSE LINUX professional 9.3

description

Puesto a la venta octubre 2005. Tema de Portada: Integración Linux - Windows. DVD: Suse Linux 9.3

Transcript of Linux Magazine - Edición en Castellano, Nº 10

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

Inte

gra

ció

n Lin

ux

-Win

do

ws

GR

UB

NT

FS W

INE

GM

ap

s Ga

mb

as M

eta

pix

el R

ed

es a

nim

as B

ac

ula

Xfc

e 4.2 Te

llico

GMapsUtiliza la potencia de Google Maps

en tu propia página web p42

GambasEl entorno de desarrollo visual

para el lenguaje Basic en Linux p51

NÚMERO 10 • P.V.P 5,95 €

Distribución profesional de Suse

DVD 4,2 Gb

Versiones 32 y 64 bits

Redes anónimasCómo mantener el anonimato en Internet

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

LIN

UX M

AGAZIN

E

NÚMERO 10

Edición enCastellano

INTEGRACIÓNLINUX-WINDOWS

Conectando Windows con Linux

Cómo crear un sistema de arranque dual perfecto p12

Escritura en particiones NTFS desde Linux p16

Configuración avanzada de WINE p19

Crea grabaciones permanentes

de tus streams de audio favoritos p37

Ripeando audio

SUSE LINUXprofessional 9.3

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

El otro díaestaba enel aero-

puerto esperan-do a un colega, ymi hijo (en plenafase“FlightGear”)

me pidió que le comprase una revista deaviones para combatir el aburrimiento.Yo, por supuesto que se la compré. Paramí, adquirí un comic de superhéroes.

Al cabo de un rato (el vuelo se retra-saba), nos intercambiamos revistas.Cuando me tocó, leí la editorial. En ella,el director se quejaba amargamente delas trabas burocráticas con las que seencuentran los aficionados a la aviacióndeportiva. Cuentan con mis simpatías,pero no pude evitar pensar lo irrelevan-te de sus problemas para con la socie-dad en general.

Sin embargo, a efectos prácticos,nuestra comunidad, la de los desarrolla-dores y especialistas en software libre,es muy parecida a la de los que vuelanen Cessna. Leemos revistas especializa-das que nadie más lee, organizamoseventos a los que nadie más va y habla-mos un lenguaje que nadie más entien-de.

¿Por qué? La aviación deportiva tieneunos efectos virtualmente nulos en lasociedad. Pero, ¿qué ocurre con nos-otros? ¿Acaso lo que hacemos no acaba“calando”? Indudablemente sí, pero¿por qué tan poco y por qué tarda tanto?Uno de los problemas, a mi parecer,reside precisamente en que, por desgra-cia, como con cualquier grupo especiali-zado, los programadores no hablan elmismo lenguaje que el hombre de lacalle. Si bien, casi todo el mundo tieneordenador y lo utiliza, pocos entiendenlos términos interfaz, entorno de

ventanas o, siquiera, escritorio.Normalmente, si mencionas uno deestos vocablos en una conversación conun “profano”, la respuesta que obten-drás es algo como “Y eso ¿qué es? Lo deWindows ¿no?”.

Una de las principales conse-cuencias de esto es la alienacióndel usuario con respecto al crea-dor. ¿Sabe el usuario medio queen el mundo del software libresus preguntas casi siempreobtienen respuestas? ¿Sabe quecuando uno pide una caracterís-tica para una aplicación los des-arrolladores normalmentetoman nota? ¿Sabe que los des-arrolladores se sienten casi tanhuérfanos sin los comentariosde los usuarios como los usua-rios sin la ayuda de los desarro-lladores? Todos nosotros sabe-mos que así es, pero casi ninguno deellos es consciente de que los mecanis-mos para realizar estas acciones estándisponibles desde hace tiempo.

Hemos de encontrar una manera depopularizar el trabajo que realizan losespecialistas de manera que sea inteligi-ble para el común de los mortales, y laúnica manera de conseguirlo es abrien-do (aún más) el canal de comunicaciónentre consumidores y creadores.

En la Campus Party, una periodistasolicitaba a los líderes de cada sección yclan para que explicasen en 20 palabrasqué es lo que pretendían o qué estabanhaciendo allí. Durante la aKademy, Otroperiodista pedía a Kelle Dalheimen, pre-sidente de kde.org, que describiese KDEen una sola oración y “sin tecnicismos”.Desafortunadamente, nada es tan senci-llo, de ahí los crasos errores y las burdassimplificaciones que aparecen en laprensa no-especializada y que tanto nosavergüenzan o hacen reír.

Sin embargo, estos ejemplos nosdemuestran que se nos exigen explica-ciones. Se nos exige simplificar los con-ceptos, adoptar un lenguaje que unusuario final pueda entender. Sólo asípopularizaremos nuestro trabajo, acele-raremos la adopción de alternativas ydotaremos a los usuarios finales, elhombre de la calle, del poder al quecreemos que tiene derecho y se le haarrebatado antes de poder disfrutarlo.

La influencia de los desarrolladoresen el mundo cotidiano, el mundo de lainformática de consumo, el mundo delos usuarios finales y de las empresas,es tangible, es real. Pero no podemosconfiar en los medios mayoritariospara cerrar el abismo entre usuariosfinales y creadores de software, por-que, si bien existen especialidadescomo el periodismo deportivo o elcomentario político, no existe todavíaun escuela para el periodismo tecnoló-gico. Por otro lado, la experiencia nosdemuestra que a las empresas no lesinteresa dotar al usuario de conoci-mientos, y las únicas campañas depopularización que organizan son lasde sus productos para convertir losordenadores en electrodomésticos.

Por tanto, la tarea recae como siempreen la comunidad. La sobrecargada einfravolarada comunidad. Es la ella laresponsable de cerrar la brecha, organi-zando eventos populares, despojándosede poses elitistas y moderando su len-guaje para hacerlo conciso, llano y ase-quible. �

3

EDITORIAL

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

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

¿HAY ALGUIEN AHÍ?

Paul C. Brown

Director

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

4 Número 10

CONTENIDOS • Linux Magazine nº 10

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

28 Zend Studio

Revisamos el IDE Zend Studio y enseña-

remos cómo se puede usar para acelerar

el desarrollo en PHP.

33 Xfce 4.2

Si estás preparado para vivir sin KDE o

Gnome, tal vez sea hora de probar Xfce,

un eficiente, ligero y vistoso escritorio

con una enorme colección de herra-

mientas.

37 Audio StreamsEnseñamos cómo grabar una emisión de

nuestro programa favorito desde la web.

39 Tellico

Muchos usuarios únicamente buscan

una sencilla aplicación de base de

datos. ¡Tellico al resscate!

42 GMaps

Explotamos el API de libre acceso de

Google Maps para crear una interesante

aplicación para nuestra web.

PORTADA EVALUACIÓN

47 Redes anónimas

Las “redes libres” evitan la censura y

que permiten mantener el anonimato y

la privacidad de cada uno de sus compo-

nentes.

51 Gambas

Gambas, un IDE gratuito para Linux

para la programación en Basic es la res-

puesta de la comunidad del Software

Libre a Visual Basic.

54 Perl: Vim

Vemos cómo los programadores de Perl

pueden ahorrar esfuerzos usando las

técnicas de Vim.

DESARROLLO

14 Boot

Vemos distintas posibilidades para el

arranque y describiremos cómo configu-

rar nuestro sistema para un arranque

dual.

18 Captive NTFS

Le invitamos a conocer Captive NTFS –

una herramienta gratuita para montar

particiones Windows NTFS desde Linux.

21 Wine

Configurar Wine es cualquier cosa

menos trivial y un poco de experiencia

siempre será de ayuda.

LINUX MAGAZINE

3 Editorial

6 DVD Linux Magazine

8 Inseguridades

10 Negocios

95 Suscripciones

97 Eventos

97 Información de Contacto

98 Próximo Número

PRÁCTICO

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

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

76 KTools: KPager 2

Si queremos una mejor visualización de

los escritorios virtuales, podemos probar

Kpager2, un paginador alternativo para

KDE.

78 Metapixel

Una herramienta libre que crea atracti-

vos fotomosaicos a partir de una colec-

ción digital de imágenes.

81 DesktopíaJWM es un gestor de ventanas para

usuarios de Linux que requieran una

interfaz gráfica de usuario eficiente y no

les asuste lidiar con un editor de texto

para conseguirlo.

84 EducaciónUna reivindicación compartida por los

profesores de todo el mundo que utili-

zan software en sus clases es la necesi-

dad de un catálogo de recursos educati-

vos.

89 Línea de comandos

Este mes echamos un vistazo a cómo

crear y administrar cuentas de usuarios

Linux desde la línea de comandos.

90 EventosEl aKademy 2005 se celebró con gran

éxito de público y crítica. Linux

Magazine estuvo allí.

ADMINISTRACIÓN

LINUX USER61 Python

Nos construimos nuestro y centro de

control planetario para nuestra web y de

paso vemos algunas de las librerías más

potentes de Python.

65 La Columna de Charly

66 Bacula

Cuando las tareas de backup llegan a ser

demasiado complicadas para un script,

la herramienta de backup gratuita

Bacula puede ser la respuesta.

70 Documentación

En el artículo de este mes del Taller del

Administrador, examinamos los progra-

mas y formatos detrás de la documenta-

ción que leemos cada día.

� Versión profesional

� DVD de 4,2 Gbs que incluyeversiones de 32 y 64 bits

� Instalación a disco duro asis-tida

� Soluciones cliente y servidorlistas para utilizar

� Solución ofimática completa yorganizador de fotos digitales

� Bloqueador de spam, anti-virus y protección con corta-fuegos

Más información en la página 6

SUSE LINUXprofessional 9.3

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

DVD LINUX MAGAZINE

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

con un mínimo de problemas. El instala-dor identifica el hardware y propone unaconfiguración. Se puede aceptar la confi-guración por defecto o adaptarlo lasnecesidades de cada cual.Seleccionaremos paquetes, redimensio-naremos particiones e incluso podremosconfigurar el cortafuegos desde el insta-lador.

Nuevo y ActualizadoSuse Linux Pro 9.3 viene con una enor-me cantidad de paquetes actualizados.Incluimos en el DVD el kernel 2.6.11,KDE 3.4 y GNOME 2.10. Algunos compo-nentes actualizados incluyenGCC 3.3.5, glibc 2.3.4, Mono1.1.4 y PostgreSQL 8.0

Este versión trae además variasaplicaciones ausentes de versio-nes anteriores. Uno de los máspopulares es la inclusión delmotor de búsquda Beagle quetrae la tecnología de búsqueda deInternet al ordenador doméstico.El objetivo de Beagle es el de pro-porcionar un acceso rápido ysencillo a cualquier tipo de infor-mación. Beagle encuentra fiche-ros, música, mensajes y fotos enuna sola búsqueda.

Suse Linux es una de las distribu-ciones Linux más populares anivel mundial y Suse Linux

Professional es un sistema operativo ver-sátil y repleto de características que tienealgo para todo el mundo. El usuario finaldoméstico elige Suse Linux Pro debido asu excelente sistema de detección dehardware y sólido soporte para audio ymultimedia. Suse Linux es también unaexcelente opción para el escritorio corpo-rativo, donde ofrece estabilidad y aplica-ciones ofimáticas punteras. Pero SuseLinux es igualmente exitoso en el mundode los servidores, con una amplia colec-ción de servicios de red y algunos extras,cortesía de los expertos en redes deNovell.

La versión 9.3 de Suse Linux Pro pro-porciona algunas interesantes aplicacio-nes nuevas y es una inteligente opciónpara usuarios de Linux de cualquierclase y condición. Este mes, en el DVDde Linux Magazine, Suse LinuxProfessional 9.3.

InstalaciónInserta tu DVD de Suse Linux Pro deLinux Magazine en tu lector de DVDs yrearranca tu máquina. El instaladorbasado en GUI configurará tu sistema

Suse Linux Pro 9.3 también viene conF-Spot, una herramienta para la adminis-tración de imágenes digitales. Otra nuevaincorporación es la del poderoso sistemade virtualización Xen. Xen es un monitorde una máquina virtual que permite a tusistema Linux soportar múltiples entor-nos de máquinas virtuales con un costede CPU mínimo. Xen ofrece testeos ymodelados eficientes, a la vez que unaadministración simplificada de coleccio-nes complejas de entornos virtuales.

YaSTSuse Linux viene con YaST, una de laherramientas de configuración mejores yde mejor reputación en todo el mundoLinux. YaST provee de un interfaz conve-niente para la administración de softwa-re, hardware, redes, configuración de sis-tema, seguridad y cuentas de usuario. Sepuede utilizar YaST para configurar par-ticiones, para la administración energéti-ca, ajustes del cortafuegos opciones dearranque. YaST también nos permitiráinstalar y eliminar software, configurarservicios de red, resolver problemas conlos dispositivos y ver la bitácora del sis-tema. YaST es una única herramientapara todas y cada una de las cuestionesde configuración, y una vez te acostum-bres a utilizarlo, te preguntarás cómopudiste vivir sin él.

Figura 1: Utilizamos el Centro de Control de KDE para

administrar la configuración del escritorio.

Procesador: Pentium 1-4 o equivalen-te.

Memoria: Mínimo 128 Mbs; 256 Mbs recomendado.

Disco Duro: Al menos 500 Mbs para un sistema mínimo; 2,5 Gbs recomendado para un sistema estándar.

Requisitos del Sistema

DVD DE LINUXMAGAZINE

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

DVD LINUX MAGAZINE

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

El EscritorioDentro de Suse Linux 9.3 Pro, encon-traremos una colección muy rica deaplicaciones multimedia. Incluido enDVD, tenemos reproductores demedios como Kaffeine y Realplayer 10,kdetv para la televisión y el reproduc-tor de música JuK. También encontra-rás reproductores de CDs, herramientapara la edición de audio y el tostadorde CDs, K3b.

Asimismo se incluye la versión deprueba del suite ofimáticoOpenOffice.org 2.0. OpenOffice es unjuego completo de aplicaciones orienta-do a la productividad ofimática e incluyeun procesador de textos, una hoja de cál-culo, software para la creación y visuali-zación de presentaciones y una base dedatos.

El suite de administración de informa-ción personal, Kontact, y su alternativa,Evolution, contienen herramientas paraadministrar tu correo electrónico, tucalendario y libreta de direcciones.Podremos navegar por la web conFirefox y Konquereor o acceder a mensa-jería instantánea con Gaim y Kopete.Suse 9.3 contiene los programa de admi-nistración de imágenes gthumb y gwen-view, al igual que los editores gráficosGIMP 2.2 e Inkscape 0.41.

ConclusiónSuse Linux Pro 9.3 es un sistema Linuxrico y versátil que puede adaptarse a casicualquier situación. Suse es genial parael escritorio, a la vez de que es un siste-ma servidor estable y fiable. Instálate elDVD Suse Linux 9.3 de Linux Magazine

hoy y verás como estarás de acuerdo conlos miles de usuarios que a lo largo yancho del mundo eligen Suse como sussistema Linux preferido. �

Figura 4: Síguele la pista a tus citas con el administrador de informa-

ción personal Kontact.

• Kernel Linux 2.6.11

• Xorg 6.8.2

• KDE 3.4

• OpenOffice Pre 2.0

• GIMP 2.2

• Inkscape 0.41

• F-Spot

• Beagle

• Xen

• GCC 3.3.5

• Eclipse 3.0.1

Destacamos

Figura 2: El administrador de imágenes digitales F-Spot es un recién

llegado al sistema Suse. F-Spot nos ayuda a organizar nuestra colec-

ción de fotos digitales.

Figura 3: YaST proporciona un interfaz unificado para la administra-

ción de la configuración de Suse Linux.

Figura 5: Akregator de KDE proporciona acceso a noticias RSS.

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

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

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

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

enlaces a los parches. Los avisos también

incluyen una referencia a la lista de

correo.

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

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

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

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

en HTML con códigos para fusionar las

versiones corregidas.

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

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

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

avisos seguridad y referencias a las

listas de correo.Los avisos son páginas

HTML,pero no contienen enlaces a los

parches.

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

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

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

versión de Red Hat se agrupan.Los avisos

de seguridad se proveen como una

página HTML con enlaces a los parches.

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

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

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

seguridad en Slackware.

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

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

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

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

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

SuSE Linux se muestran de color rojo en el

sitio de actualizaciones generales.

Contiene una corta descripción de la

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

POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS

8

INSEGURIDADES

Schlagwort sollte hier stehenLINUX USERINSEGURIDADES

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

�SPAMASSASSINSpamAssassin provee una manera de

reducir el correo comercial no solicitado

(SPAM) de la entrada de correo.

Se ha encontrado un error de denega-

ción de servicio de SpamAssassin. Un

atacante podría construir un mensaje

de tal modo que haría que

SpamAssassin consumiera todos los

recursos de la CPU. Si se enviaran un

determinado número de dichos mensa-

jes, podría conducir a una denegación

de servicio, evitando potencialmente la

entrega o el filtrado de correo. El

Proyecto de Vulnerabilidades y

Exposiciones Comunes (Common

Vulnerabilities and Exposures o CVE –

http://cve.mitre.org) ha asignado el

nombre CAN-2005-1266 a este proble-

ma.

Para detalles completos, por favor,

diríjanse a la documentación en línea de

Spam Assassin en la siguiente dirección:

http://wiki.apache.org/spamassassin/

NextRelease.

Los usuarios de SpamAssassin deberí-

an actualizarse a los paquetes que con-

tienen la última versión disponible,

3.0.4, la cual no es vulnerable a este pro-

blema y resuelve los ya existentes. �

-Referencia Debian: DSA-736-1

-Referencia Gentoo: GLSA 200506-17

-Referencia MAndriva:

MDKSA-2005:106

-Referencia Red Hat: RHSA-2005:498-10

-Referencia Suse: SUSE-SA:2005:033

� TELNETEl paquete Telnet suministra un cliente

telnet para la línea de comandos.

Gael Delalleau descubrió un problema

en la revelación de información, y más

concretamente, en la manera en la que

un cliente telnet manipulaba los mensa-

jes desde un servidor telnet. Un atacante

conocedor del problema podría construir

un servidor telnet malicioso que recogie-

ra información desde el medio, de cual-

quier víctima que se conecte a él. El pro-

yecto de Vulnerabilidades y Exposiciones

Comunes (Common Vulnerabilities and

Exposures o CVE – http:// cve.mitre.org)

ha asignado el nombre CAN-2005-0488 a

este problema. �

-Referencia Red Hat:RHSA-2005:504-06

� GAIMLa aplicación Gaim es un cliente de men-

sajería instantánea multiprotocolo.

Jacopo Ottaviani descubrió un error

en la manera en la que Gaim manipula-

ba la transferencia de ficheros de

Yahoo! Messenger. Para un usuario

malicioso es posible enviar la petición

de transferencia de un fichero especial-

mente manipulado que hace que Gaim

se estropee. El proyecto de

Vulnerabilidades y Exposiciones

Comunes (Common Vulnerabilities and

Exposures o CVE -http://cve.mitre.org)

ha asignado el nombre CAN-2005-1269

a este problema.

Adicionalmente, Hugo de

Bokkenrijder descubrió un error en la

manera en la que Gaim analiza los

mensajes de MSN Messenger. Para un

usuario malicioso es posible enviar un

mensaje MSN Messenger especialmente

manipulado que hiciera que Gaim se

colgara. El proyecto de

Vulnerabilidades y Exposiciones

Comunes (Common Vulnerabilities and

Exposures o CVE – http://cve.mitre.org)

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

INSEGURIDADES

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

El proyecto de Vulnerabilidades y

Exposiciones Comunes (Common

VulnerabilEities and Exposures o CVE –

http://cve.mitre.org) ha asignado el nom-

bre CAN-2005-2096 a este problema. �

-Referencia Debian: DSA-740-1

-Referencia Gentoo: GLSA 200507-05

-Referencia Mandriva:

MDKSA-2005:112

-Referencia Red Hat: RHSA-2005:569-03

-Referencia Slackware:

SSA:2005-189-01

-Referencia Suse: SUSE-SA:2005:039

� PHPPHP es un lenguaje de programación

embebido en HTML, usado comunmente

con el servidor web HTTP Apache.

Se descubrió un error en el paquete del

servidor PEAR_XML_RPC incluido en

PHP. Si se usa un script PHP que imple-

menta a un servidor XML-RPC usando el

paquete PEAR XML-RPC, es posible que

un atacante remoto construya una

demanda XML-RPC que puede hacer que

PHP ejecute comandos PHP arbitrarios

como el usuario “apache”. El proyecto de

Vulnerabilidades y Exposiciones

Comunes (Common Vulnerabilities and

Exposures o CVE – http://cve.mitre.org)

ha asignado el nombre CAN-2005-1921 a

este problema.

Se descubrió una condición de carrera

en la manipulación de los ficheros tem-

porales en el script shtool instalado por

PHP. Si un módulo PHP de un tercero

que usa shtool es compilado como root,

un usuario local podría modificar los

ficheros arbitrarios. El proyecto de

Vulnerabilidades y Exposiciones

Comunes (Common VulnerabilEities and

Exposures o CVE – http://cve.mitre.org)

ha asignado el nombre CAN-2005-1751 a

este problema.

Los usuarios de PHP deberían actuali-

zar sus paquetes. Los nuevos paquetes

contienen parches retroportadas para

estos problemas. �

-Referencia Gentoo: GLSA 200507-08

-Referencia Mandriva:

MDKSA-2005:109

-Referencia Red Hat:

RHSA-2005:564-15

-Referencia Suse: SUSE-SA:2005:041

ha asignado el nombre CAN-2005-1934

a este problema. �

-Referencia Debian: DSA-734-1

-Referencia Gentoo: GLSA 200506-11

-Referencia Mandriva:

MDKSA-2005:099

-Referencia Red Hat: RHSA-2005:518-03

-Referencia Slackware:

SSA:2005-162-01

� ZLIBZlib es una librería de compresión de

datos sin pérdida de propósito general,

usada por múltiples programas deiferen-

tes.

Tavys Ormandy descubrió un desborda-

miento de búfer que afectaba a la versión

1.2 y versiones siguientes de Zlib. Un ata-

cante que conozca este desbordamiento

de búfer podría crear un stream comprimi-

do cuidadosamente manipulado que haría

que la aplicación se colgara cuando el

usuario abra el stream. Como ejemplo, un

atacante podría crear un fichero de ima-

gen PNG malicioso que haría que el nave-

gador web o el visor de correo se estropea-

ra cuando se visiona la imagen.

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

10

NOTICIAS LINUX

Schlagwort sollte hier stehenLINUX USERNOTICIAS

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

Según el Libro Blanco del software enEspaña, el número de empresas que ofre-cen soporte a software libre ya superanlos 400.

En el mes de abril, habían registra-das unos 350 empresas en su base dedatos, pero el número de regis-tros desde entonces ha subidoal vertiginoso ritmo de trescompañías por semana, supe-rándose los 400 firmas regis-tradas al principio de septiem-bre.

Sin embargo, debido al carác-ter abierto y voluntario de lalista, se observan ciertas “discre-pancias” entre lo que se pone yla realidad de la adopción de tec-nología basada en software yestándares libre por parte de lasempresas que se apuntan como

400 (PERO NO TANTAS)“proveedores de soporte de solucioneslibres”. Así, analizando los sitios web delas diez últimas empresas del listado,sólo cinco de ellas se revelan como explí-citamente de soporte o desarrollo desoftware libre.

De las otras cinco, cuatro son descara-damente proveedores de soluciones pro-pietarias y la última, ni se sabe, ya quesu web no está implementada. Si la pro-porción de “intrusos” se mantiene a lolargo y ancho de la lista, la validez de las

cifras son más que cuestionables.Por comunidad autónoma, como

era de esperar, los primeros pues-tos son para Cataluña (91 empresasregistradas) y Madrid (88 empresasregistradas), seguidas muy de lejospor Andalucía (55 empresas regis-tradas). Las zonas donde es menosprobable que te tropieces con unafirma que te eche una mano con tuinstalación de Linux son las regio-nes de Baleares, Murcia y Navarra,empatados a 7 empresas cada una,Cantabria (6 empresas) y La Rioja(3 empresas). �

El último culebrón del veranonos lo traen dos gigantes (tres,si incluimos la RepúblicaPopular de China) que, obvia-mente, tienen tanto dinero,que les sobra para quemarloen abogados y juicios.

Ya es de dominio público elrebote que se pilló la empresade Redmond cuando el Dr.Kai-Fu Lee les abandonabapara irse a Google. Tanto esasí, que Microsoft decidiódemandar a Google por “inci-tar a la infracción” del contra-to de “no-competencia” quemantenía a Lee atado algigante de las ventanas.

Como respuesta, Google hainterpuesto una contrade-manda a Microsoft alegandoque los términos en los quese expresa el susodicho con-trato son demasiado ampliosy que, por tanto, en lo que sederiva es en una de compe-

MS VS GOOGLE VS MStencia ilegítima (¿prácticasmonopolítisticas en el merca-do de “cerebros” tal vez?) queimpide que expertos contrata-dos por el gigante del softwa-re elijan marcharse libremen-te a otras empresas… preferi-blemente a Google, se entien-de.

Según Lee, el mismísimoGates declaró sentirse “jodi-do”, no sólo por él, sino porel gobierno y el pueblo Chinoen general. Por un lado esta-ba la deserción de Lee, y porotro están las restrictivasleyes de la República Popularde China que hacen virtual-mente imposible repatriarcapital extranjero invertidoen el país. Y es que los planesde Microsoft para con Chinahan tenido un éxito muy rela-tivo en el mejor de los casos,nulo en la mayoría, sobretodo si se compara con los

millones de dólares invertidospor Redmond en el proyecto.Añádase a esto el hecho deque China notiene ningunaintención deabandonar suplan de inde-pendencia tec-nológica(reemplazan-do Windowspor Linux agran escala),y se entende-rá la jodi…er… el fasti-dio de Gates.

Volviendo a la refriegaMicrosoft/Google, Redmondya había sufrido la humilla-ción de ver cómo uno de susingenieros más prominentesse marchaba a la Gran Gcuando Mark Lucovsky pre-sentó su dimisión a finales

del año pasado. Según unadeclaración jurada deLucovsky, Steve Ballmer, CEO

de MS, agarró unasilla y la arrojócontra el mobilia-rio de su oficina.Después empeza-ron las invectivas:“Ese jodido EricSchmidt es unaputa mariquita. Voya joder a ese tío. Lohe hecho antes y lopuedo volver ahacer” gritó, refi-riéndose al CEO deGoogle. “Voy amatar a Google”.

Ballmer declaró que lainterpretación de la reuniónde Lucovsky era una “burdaexageración”. En el caso deque no lo fuera, la mamá deBallmer le debería limpiar laboca con jabón. �

Kai-Fu Lee

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

sobre Wine del mes de junio de 2005,pero el artículo de este mes, realizadopor un miembro del equipo de desarrollode Wine, ofrece algunos detalles prácti-cos que son difíciles de encontrar en otraparte. Si solamente van a leer un artículosobre Wine este año, éste es el quedeben leer.

Si de verdad necesitan vivir conWindows ¿Por qué no traer Windows aLinux? Esperamos que disfrutencon nuestro tema de porta-da: Integración deWindows enLinux.�

Herramientas y técnicas para la integración con Windows.

CONVIVIENDO CONWINDOWS

11

Integración Linux-Windows • PORTADA

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

Pensamos que el arranque dual deLinux con Windows es lo másfácil del mundo, así que instala-

mos nuestra distro Linux favorita encimade un sistema Windows y lo hace perfec-tamente, sin que derramemos ni unasola gota de sudor. Incluso un prácticomenú preguntará qué sistema deseamosiniciar y una vez que arranque el sistemaelegido, se comportará como si fuera elúnico cerebro dentro de la máquina.

¿Pero qué pasa si algo va mal? ¿Y si seha perdido una partición? ¿Y si Windowsse contamina con spyware y tenemosque reinstalar? ¿Y si sólo queremosmodificar la configuración, o nos cansa-mos del arranque dual y solamente que-remos acceder a los archivos deWindows, desde Linux? En el tema deportada de este mes, Integración deWindows en Linux, describiremos cómofunciona internamente el arranque dualy explicaremos cómo configurar su pro-pio sistema de arranque dual.

En nuestro artículo principal“Puliendo el arranque: Colocando juntosLinux y Windows en el mismo discoduro” explicamos qué hay detrás del

Configurando un arranque dual . .12

Captive NTFS . . . . . . . . . . . . . . . . . . . .16

Wine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19

EN PORTADA

menú de arranque, además de algunastécnicas para personalizar un arranquedual. Aprenderemos cómo manejar elcargador de inicio Grub los sistemas deinicio duales. Mostraremos cómo Grub

inicia Windows e incluso enseñaremoscómo configurar el inicio de Linux desdeel archivo boot.ini.

Nuestra segunda historia,“Entrelazando: Accediendo a particionesen sistemas de arranque dual” describi-remos Captive NTFS, una herramientalibre que permite que Linux pueda leer yescribir en particiones NTFS. Tambiénveremos algunas herramientas librespara Windows que permiten acceder alos archivos de las particiones ext2.

Si estamos buscando otro tipo de inte-gración, donde incluso no sea necesarioreiniciar el sistema para hacer funcionarlos programas de Windows, les gustaránuestro tercer artículo sobre cómoejecutar aplicaciones Windows enLinux con Wine. El programaWine es un tema con unagran cobertura en prensa,puede que incluso hayanvisto nuestro artículo

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

12

Si tenemos dos sistemas que comparten un mismo ordenador, el gestor de arranque nos mostrará los menús

para elegir qué sistema arrancar. Veremos distintas posibilidades para el arranque y describiremos cómo

configurar nuestro sistema para un arranque dual. POR ANDREA MÜLLER

Instalar Linux y Windows en un mismo disco duro

ARRANQUE BRILLANTEInstalar Linux y Windows en un mismo disco duro

ARRANQUE BRILLANTE

PORTADA • Boot

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

Si necesitamos usar aplicacionescomo Dreamweaver, MicrosoftOffice o juegos mordernos, y no

nos gusta la solución de usar Wine oVMware, puede que tengamos queechar mano de un sistema Windows. Ysi instalamos un sistema Windowsjunto a Linux en un ordenador, tendre-mos que configurar un gestor de arran-que para poder elegir qué sistemaarrancar. Afortunadamente no es nece-sario adquirir software comercial paraello, ya que la mayoría de las distribu-ciones proporcionan las herramientasnecesarias para una configuración dearranque dual. Lilo, que en su día fue elprincipal gestor de arranque, ha queda-do casi completamente eclipsado porGrub (Grand Unified Bootloader) [1]. Elgestor de arranque de Gnu/HURD tienemuchas más características que el sen-cillo Lilo. Además de soporte para siste-mas de ficheros, Grub tiene integrado

una línea de comandos que permitearrancar los sistemas operativos instala-dos aunque el archivo del menú estédefectuoso o se haya borrado acciden-talmente.

A Su GustoSi pretendemos instalar Linux yWindows en un mismo ordenador, nosdaremos cuenta de que Linux es elmenos exigente de los dos. De hecho,Linux se siente igual de cómodo en unapartición extendida que en una prima-ria. Linux puede incluso instalarse enun segundo disco duro sin mayor pro-blema. Por contra, el sistema operativocon base en Redmond no echará aandar a menos que esté en la primerapartición primaria activa.

Mientras que Windows 95/98/MEnecesitan la primera partición primariaactiva como disco del sistema, lasvariantes de NT, Windows 2000 y XP,

sólo necesitan tener allí los archivos dearranque: el directorio Windows y elresto del sistema pueden instalarse enuna unidad lógica de una particiónextendida. Sin embargo, los archivosntldr y ntdetect.com, así como el archi-vo de configuración boot.ini (véaseFigura 1), tienen que estar en cualquiercaso en la primera partición primariaactiva. El gestor de arranque de la fami-lia NT no hace uso del registro principalde arranque (MBR), sino del sector dela partición con los archivos de arran-que. Caso de existir otro sistemaWindows en el disco donde tenemos elXP, la rutina de instalación añade auto-máticamente el sistema existente almenú de arranque.

Método EstándarEl sistema de arranque múltiple máshabitual añade Linux por encima delsistema Windows previamente instala-

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

do. La mayoría de las distribuciones usael gestor de arranque Grub por defectoy añade la instalación de Windows almenú de Grub (véase figura 2).

El archivo de configuración de Grub,/boot/grub/menu.lst le indica cómo ini-ciar Windows. Lo que sigue podría se lavariante más simple. Funciona conWindows 95/98/ME y la familia NT.

title Windows

root (hd0,1)

chainloader +1

La línea que comienza por title especifi-ca el nombre de la entrada del menú deGrub. La línea root le indica a Grub quépartición contiene el sistema que quere-mos iniciar.

La sintaxis es ligeramente distinta a laestándar Linux, /dev/hdx. hd0 se refiereal disco duro. Grub comienza a contardesde 0. El primer disco conectado alprimer controlador IDE, que debería lla-marse /dev/hda en notación Linux, eshd0 para Grub. Tras la coma sigue lapartición, y de nuevo Grub comienza acontar desde 0. Por tanto, nuestro ejem-plo arrancaría un sistema Windowsalbergado en /dev/hda2. Es habitualencontrar Windows instalado en lasegunda partición primaria, dado quemuchos fabricantes configuran una par-tición de rescate en /dev/hda1.

En lugar de una contraseña de admi-nistrador, algunas distribuciones usanrootnoverify. Esta contraseña le indica aGrub que no trate de leer el sistema dearchivos que empieza en la siguientepartición. Como sólo estamos ejecutan-do código del sector de arranque de lapartición, no hay diferencias entre root

y rootnoverify.Las instrucciones para arrancar el sis-

tema Windows contienen una líneachainloader +1. El parámetro +1 leindica a Grub que ejecute el código quesigue a la partición root. Sin embargo, enlugar de esto podríamos especificar la

ruta al archivo con el código de arranquedel sistema. Podemos hacer esto hacien-do que Linux escriba el sector de arran-que de una partición Windows 2000 óXP en un archivo llamado /boot/ntsector

de la siguiente manera:

dd if=/dev/hda1 U

of=/boot/ntsector U

bs=512 count=1

Para ejecutar el NTloader desde estearchivo en nuestra partición Linux,necesitamos añadir la siguiente entradaa nuestro archivo menu.lst:

title Windows

root (hd0,4)

chainloader /boot/ U

ntsector

Sin embargo, necesitamos especificarroot para leer la partición Linux, que es/dev/hda5 en nuestro ejemplo, si quere-mos que Grub encuentre el archivo. Ladirectiva rootnoverify no funcionará eneste caso, dado que es necesario elsoporte de sistema de archivos de Grubpara leer el sector de arranque desde unarchivo. Este método sólo funcionará siel archivo con el código de arranqueestá almacenado en una partición conun sistema de archivosque soporte Grub.Además de los habi-tuales sistemas deLinux como ext2, ext3,reiser y xfs, tambiénpodría ser VFAT deWindows 95, Windows98 y Windows ME.

Así mismo es bas-tante habitual ver laopción makeactive enlas entradas de arran-que Windows. La líneadebe seguir a la líneaque indique la parti-ción a Grub. Lo que

13

Boot • PORTADA

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

realmente hace esta opción es activarel flag para la partición, lo cual esnecesario, ya que Windows necesita lapartición primaria activa para arran-car. La mayoría de las distribucionesponen esta entrada en el archivomenu.lst sólo para asegurarse, perosólo es necesario si tenemos múltiplesparticiones primarias en nuestro discoduro y una de las particiones no-

Windows ha activado el flag.

Espacios De IntercambioExiste otro escenario que implica algode más trabajo para los usuarios quequieran arrancar Windows. La idea esconectar un disco duro a la segundacontroladora IDE. Todo Windows XP o9X rechazará arrancar desde este disco.Pero Grub entra en escena con la opciónmap que soporta espacio de intercam-bio virtual en disco. El gestor de arran-que aguarda que los discos se intercam-bien siguiendo lo que marca la opciónmap. La siguiente entrada intercambia-ría /dev/hda y /dev/hdb y arrancaría unsistema Windows instalado en/dev/hdb1:

title Windows

map (hd0) (hd1)

map (hd1) (hd0)

root (hd1,0)

chainloader +1

Es importante señalar que, tras el inter-cambio, Grub seguirá refiriéndose aldisco conectado a la segunda controla-dora IDE como hd1, por lo que, en loconcerniente a Grub, el intercambio vir-tual de los discos no tiene efectossecundarios.

Figura 1: El gestor de Windows 2000 y XP lee su configuración desde el archivo boot.ini.

Figura 2: La mayoría de las distribuciones configuran el gestor

de arranque Grub y añaden Windows al menú.

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

veremos unalista de lasparticiones en/dev/hda,incluyendo lainformacióndel sistema dearchivos

Si no esta-mos segurosen qué parti-ción estáalmacenado/boot, pode-mos teclearfind

/boot/grub/stage1 para encontrarlo.Este comando lista cualquier particióncon un archivo con ese nombre. Unavez que Grub conoce la ubicación deldispositivo raíz, con el comando setup

(hd0) instalamos Grub en el MBR de/dev/hda.

Cambiar el Cargador de NTSi todo esto suena demasiado arriesga-do, y suponiendo que simplemente que-remos probar Linux, podríamos usar elpoco conocido cargador de NT, y su fun-ción de arrancar cadenas. Esta técnicasupone que tenemos Windows NT ocualquier otro miembro de la familia NT.Los viejos 95/98 y ME no tienen gestorde arranque. El cargador de cadenas fun-ciona de manera similar al ejemplo deGrub con el sector de arranque NT. Encontraste con Grub, sin embargo, el car-gador de NT únicamente puede ejecutarcódigo de arranque de un archivo y sólosoporta los sistemas de archivos nativosde Windows, VFAT y NTFS.

Durante la instalación, los usuariosmás cautos harán que el sistema noescriba el gestor de arranque en el MBR,sino en el sector de arranque de la parti-ción Linux. Pero esto no funcionará siusamos el sistema de archivos XFS, queguarda la información de administraciónen este área y sobrescribiría el gestor dearranque. Podemos arrancar Linux enmodo seguro, haciendo uso del soportede la distribución, y ejecutar dd paraescribir el sector de arranque en unarchivo al llegar a este punto. La sintaxisen caso de tener nuestra versión deLinux en /dev/hda5 sería la siguiente:

dd if=/dev/hda5 of=bootsec.linU

bs=512 count=1

El archivo bootsec.lin contiene el Grubinstalado y debe ser transferido a unade las particiones Windows usando unpendrive USB o un diskette si fuesenecesario. El directorio raíz del disco c:,que es donde reside boot.ini, es unbuen lugar para guardar el archivo.Añadimos una línea al arhivo boot.ini

que especifique la ubicación de boot-

sec.ini. La entrada apunta al archivocon el sector de arranque y el nombrecon el que aparecerá en el menú dearranque de Windows. Por ejemplo:

c:\bootsec.lin="Launch Grub"

A menos que tengamos timeout a 0, elgestor de arranque de Windows mostra-rá un menú la próxima vez que encen-damos nuestro equipo, permitiendo alos usuarios elegir entre Windows y laentrada Launch Grub. SeleccionandoLaunch Grub entramos en un menú deGrub, donde podemos elegir entre el sis-tema Linux o simplemente el cargadorde NT nuevamente.

ConclusiónLa mayoría de las distribuciones máspopulares de Linux configuran unarranque dual automáticamente si ins-talamos Linux encima de un sistemaWindows ya existente. Pero para aque-llos que estén buscando la manera deinstalar Windows en una máquinaLinux, o si queremos probar algo distin-to, las técnicas descritas en este artículoserán un buen punto de partida. �

Segundo Puesto paraWindowsLos usuarios de Linux que quieran aña-dir Windows a su sistema se enfrentana mayores problemas. Tanto Windows95/98/ME como la familia NT sobrescri-ben el MBR durante la instalaciónestándar, borrando la instancia de Grubque allí reside. Si estamos pensando enesta posibilidad y tenemos un diskettede arranque Grub, no deberíamos tenerproblemas en reinstalar Grub a poste-riori. Para crear un diskette de instala-ción de Grub, ejecutamos en primerlugar dd para escribir el archivo stage1

en el sector de arranque del diskette.Suponiendo que hemos instalado y con-figurado Grub, el archivo se ubicarábajo el directorio /boot/grub, al igualque menu.lst. Tecleamos:

dd if=stage1 of=/dev/fd0 U

bs=512 count=1

en este directorio enviaremos stage1 aldiskette. El siguiente comando:

dd if=stage2 U

of=/dev/fd0 bs=512 seek=1

hace lo mismo para stage2. El paráme-tro seek=1 asegura que no sobrescribi-mos el archivo stage1 transferido en elúltimo paso, sino que guardamos stage2

detrás de stage1.Después de completar estos pasos,

nuestro diskette de arranque tiene todolo necesario para poder reinstalar Grub.Tras arrancar, Grub mostrará la línea decomandos integrada sin menú. Elprompt soporta completado con tabula-dor y tiene también ayuda en línea. Sitecleamos help se mostrará una lista decomandos, y con help nombredelcoman-

do obtendremos una explicación delcomando.

Reinstalar GrubPara reinstalar Grub, en primer lugartenemos que señalarle su partición raíz,es decir, la partición con el directorio/boot/grub y los archivos de estado. Si/boot está situado en /dev/hda5 necesi-taremos teclear root (hd0,5) en elprompt de Grub. Admite completadocon tabulador, por lo que normalmenteno tendremos que teclear el cierre deparéntesis. Por ejemplo, podemos tecle-ar root (hd0 y al presionar el tabulador

PORTADA • Boot

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

[1] Grub: http://www.gnu.org/software/

grub

RECURSOS

Figura 3: La línea de comandos de Grub proporciona ayuda en línea y

completado con tabulador.

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

16

¿Porqué reiniciar cada vez que se necesita acceder a los datos del otro

sistema operativo? Le invitamos a conocer Captive NTFS – una her-

ramienta gratuita para montar particiones Windows NTFS desde Linux.

También le mostraremos unas cuantas herramientas para leer parti-

ciones Linux desde Windows. POR THORALF POLET

Acceso a Particiones en Sistemas con Arranque Dual

TÚ ENCIMA

PORTADA • Captive NTFS

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

Como el sistema de ficherosWindows NTFS cada vez es máspopular, los usuarios de equipos

con arranque dual Windows/Linux estáncontinuamente enfrentados a un proble-ma: Linux es incapaz de escribir en par-ticiones NTFS [1]. El kernel de Linuxtiene un módulo para ver las particiones

NTFS, sin embargo, los desarrolladoresadvierten a los usuarios contra intentosde operaciones de escritura utilizando elmódulo del kernel.

El anticuado sistema de ficheros FATera la única forma de compartir datosentre Linux y Windows en un equipocon arranque dual. Sin embargo, Jan

“Lace” Kratochvil ha presentado laherramienta gratuita Captive NTFS [2],una utilidad que soporta accesos deescritura en particiones NTFS. JanKratochvil es el autor de otras aplicacio-nes útiles para Linux, incluyendoSurprise, una herramienta para redimen-sionar particiones [3]. La última versiónde Captive NTFS (versión 1.1.5) se des-arrolló a principios de este año y llamó laatención su gran aceptación debido a suuso con la versión 3.4 de Knoppix y otrossistemas basados en Knoppix, talescomo LinuxDefender Live! deBitDefender.

En este artículo se describirá cómoacceder a una partición NTFS desdeLinux mediante Captive NTFS. Tambiénmostraremos algunas herramientas paraacceder a particiones Linux desdeWindows.

Acceso DenegadoNTFS es uno de los secretos mejoresguardados de Microsoft. La compañíanunca ha estado dispuesta a proporcio-

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

nar información a segundos sobre cómoacceder a particiones NTFS. Este incon-veniente ha llevado a la comunidadLinux a utilizar pequeños trucos, hacién-dose con los drivers originales deWindows. Captive NTFS proporcionauna “caja de arena”, un espacio dememoria separado que simula un subsis-tema con un kernel W32 y garantiza laestabilidad del sistema durante operacio-nes de bajo nivel. Captive requiere el dri-ver NTFS, ntfs.sys y el kernelntoskrnl.exe.

Los desarrolladores cogen algunas desus rutinas del proyecto React OS [4],un emulador gratuito de Windows NT.A diferencia de Wine, Captive sóloimplementa el espacio de usuario. Envez de ampliar Wine, como era la ideaoriginal, Jan Kratochvil perfeccionóReact OS, que proporciona algunas delas rutinas que necesita. Captive conec-ta los drivers como un sistema de fiche-

ros userland (LUFS) [5], porlo que necesitará instalarLUFS para usar Captive.Puede descargar el códigofuente de Captive NTFS o elpaquete RPM de la páginaweb del proyecto; y hay unpaquete Debian (captive-sta-

tic-1.1.5-1.deb de 9.6 MB)en [6]. El proceso de instala-ción sigue los pasos desiempre:

dpkg -i captive-static-1.1.5-

1.deb.apt-get le propocionauna forma más simple: tan sólo aña-dir una entrada para deb http://www.

kruyt.org/debian/ a su lista fuente/etc/apt/sources.list y a continuación lla-mar a apt-get update && apt-get install

captive-native. Si el servidor está caído,necesitará convertir el paquete RPM dela página web del proyecto en [2] utili-zando alien captive-static_1.1.5-

0.i386.rpm e instalar mediante dpkg -i

captive-static_1.1.5_1.i386.deb.Antes de utilizar el driver, probable-

mente querrá hacer una copia de seguri-dad de su partición NTFS, por si lascosas van mal. A pesar de la aceptaciónde los usuarios, no hay garantía de ope-raciones libre de errores. Después detodo, a causa de las políticas deMicrosoft, los desarrolladores no cono-cen todas las especificaciones de NTFS.A tener en cuenta, también, el hecho deque Captive utiliza una caja de arena locual ralentiza la velocidad.

El programa de setup accede a unoscuantos ficheros de Windows: cdfs.sys,

ext2fsd.sys, fastfat.sys, ntfs.sys y

17

Captive NTFS • PORTADA

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

ntoskrnl.exe. Para evitar problemas lega-les, debería tener una copia legal deWindows, ya que Microsoft ahora estállevando a juicio los casos del uso ilegalde componentes de su sistema operativo.

El script captive-install-acquire poneespecial cuidado en encontrar los fiche-ros requeridos. El programa tiene ten-dencia a caer mientras busca en modográfico, por lo que sería convenienteestablecer la opción --text para forzar elmodo texto. Copiando los ficheros indi-cados antes de su partición Windows a/var/lib/captive puede ahorrarle bastan-te tiempo, ya que la operación de bús-queda puede ser lento.

Si quiere, puede descargar más driversactualizados de la página web del pro-yecto. El Acuerdo de Licencia al UsuarioFinal (EULA) requiere una licencia váli-da de Windows XP para utilizar losficheros. No tiene permiso para descar-gar los ficheros automáticamente desdela página web de Microsoft.

El programa /usr/bin/captive-install-

fstab añade cualquier partición queencuentre al fichero /etc/fstab, permi-tiendo a los usuarios realizar un simplemount. Tras detectar las particionescorrectamente, captive-install-fstab

muestra un mensaje como el delListado 1.

Las entradas en /etc/fstab de nuestroejemplo se muestran en el Listado 2.

Por razones de seguridad, debería evi-tar el montaje automático de particiones.En vez de ello, móntese cada particiónque se necesite manualmente, por ejem-plo, mount /mnt/captive-noname2. JanKratochvil recomienda a los usuariosque ejecuten umount para desmontar lasparticiones NTFS antes de apagar o reini-ciar el sistema.

Si desea usar puntos de montaje másintuitivos, hay que modificar las entra-

Figura 1: El programa de instalación de Captive

busca drivers en el sistema.

Figura 2: Preparados, listos, ya…

01 Found NTFS disk partitions are prepared in /etc/fstab. You can mount

them by commands mount(8) or usermount(1), such as:

02 mount /mnt/captive-LABEL_C

03 Available captive-ntfs partitions:

04 /mnt/captive-noname

05 /mnt/captive-noname2

06 /mnt/captive-noname3

07 /mnt/captive-noname4

Listado 1: Salida captive-install-fstab

01 /dev/hda5 /mnt/captive-noname captive-ntfs defaults,noauto 0 0

02 /dev/hda6 /mnt/captive-noname2 captive-ntfs defaults,noauto 0 0

03 /dev/hda12 /mnt/captive-noname3 captive-ntfs defaults,noauto 0 0

04 /dev/hda1 /mnt/captive-noname4 captive-ntfs defaults,noauto 0 0

Listado 2: Entradas en /etc/fstab para NTFS

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

En los últimos años se le han hechomenos cambios al programa. El mayoravance es que la herramienta tieneahora la habilidad de leer fstab paramostrar el punto de montaje en vez deun identificador de dispositivo críptico.En aspecto, el explorador de Windowsque viene con Windows 9x/NT esmucho más intuitivo -esto puede pro-porcionarle una pista de porqué JohnNewbigin escogió el nombre deExplore2fs. Opcionalmente puede per-mitir el acceso de escritura, pero asumasu propio riesgo.

El programa no puede escribir en par-ticiones Ext3 y la opción está deshabilita-da permanentemente. Explore2fs recono-ce particiones ReiserFS, pero no muestrael contenido de las particiones. La últimaversión 1.07 también integra soporteLVM2 (RHEL3 y FC3).

Otra opción es la herramientaExt2IFS [8], que actualmente es un dri-ver de Windows para particiones Ext2/Ext3. Tras la instalación de Ext2IFS,una entrada IFS Drives aparece en elcontrol del sistema, mostrando las par-ticiones y proporcionando a los usua-rios la habilidad de hacer click para

asignar una letra a parti-ciones Ext2/Ext3.

El driver soporta accesode lectura y escritura paraestas particiones median-te las letras de unidad. Adiferencia de Explore2fs,el software tambiénsoporta acceso de escritu-ra en Ext3.

Total CommanderPara ser justos, no vamosa olvidar el plugin Ext2 +Reiser 1.2 para TotalCommander [9], quesoporta acceso de lecturapara Ext2 y Ext3, al igualque ReiserFS.

Los únicos inconve-nientes con los drivers yprogramas para el acce-so a particiones Linux es

que no hacen caso de los permisosUnix; en otras palabras, se saltan losprivilegios de root. Podrá encontrarmás herramientas para el acceso a par-ticiones Reiser en [10], [11], [12] y[13]. �

das de fstab y añadir lospuntos de montajemanualmente. Captivecreará tanto un usuariocomo un grupo con elnombre captive.

El 31 de Octubre de2004, Jan Kratochvilpuso un mensaje en lalista de correo del proyec-to anunciando el final deltrabajo de desarrollo.Afirmó que la versiónfinal tenía toda la funcio-nalidad que necesitaba,lo cual significa que elsoporte para el ServicePack 2 no estaba inclui-do. Si tiene instalado elSP2, le será imposibleusar los drivers.

Después de actualizarel sistema Windows XP aWindows XP Service Pack 1, los driversantiguos deberían haber sido copiadosal directorio -normalmenteC:\Windows\$NtServicePackUninstall$

por seguridad. En este caso, su mejoropción es copiar los ficheros manual-mente o realizar la descarga descritaanteriormente. Si tiene instalado elSP2, su única opción es descargar elsistema de ficheros requerido.

Aparte de los pequeños problemas develocidad y los problemillas con la ins-talación del driver, Captive ofrece unasolución sin coste factible para accedera particiones NTFS desde Linux. Sinecesita acceso de escritura permanentey mayor rendimiento que el que Captivepueda ofrecerle, podría probar unaherramienta comercial como ParagonNTFS para Linux, que cuesta alrededorde 70 euros.

Acceso a LinuxLa otra parte de la ecuación es cómoacceder a particiones Linux desdeWindows. Este problema es bastantefácil de resolver, ya que Linux es un sis-tema abierto que no presenta ningúnobstáculo para tener acceso de escritura.Una de las herramientas más antiguaspara acceder a Linux es Explore2fs deJohn Newbigin [7]. Originalmente des-arrolló un software para Windows NT,pero actualmente soporta cualquier ver-sión de Windows desde Windows 95 enadelante.

PORTADA • Captive NTFS

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

[1] Entrada de NTFS en la Wikipedia:http://en.wikipedia.org/wiki/NTFS

[2] Página web de Captive: http://www.

jankratochvil.net/project/captive/

[3] Proyecto de Jan Kratochvil: http://

www.jankratochvil.net

[4] ReactOS: http://www.reactos.com

[5] Sistema de Ficheros LUFS: http://lufs.

sourceforge.net/lufs/

[6] Paquete Captive Debian: http://www.

kruyt.org/?sub_item=46

[7] Explore2fs: http://uranus.it.swin.edu.

au/~jn/linux/

[8] Driver Ext2 para Windows: http://

www.fs-driver.org

[9] Plugins para Total Commander: http://

ghisler.com/plugins.htm

[10] Visualrfstool: http://sourceforge.net/

projects/visualrfstool/

[11] Rfstool: http://www.p-nand-q.com/

download/rfstool.html

[12] RFSGUI: http://www.wolfsheep.com/

map/#RFSGUI

[13] LTOOLS: http://www.it.fht-esslingen.

de/~zimmerma/software/ltools.html

RECURSOS

Dos conferencias sobre Unix

(1993/94) “engancharon” a Thoralf

Polet. Thoralf es usuario de Linux

desde 1996 y está particularmente

interesado en el uso de Linux en

educación.El A

uto

r

Figura 4: Ext2IFS integra las particiones Linux como discos normales de

Windows.Grub y añaden Windows al menú.

Figura 3: El interfaz de Explore2fs es parecido al explorador de Windows.

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

La capa de compatibilidad Wine permite a los usuarios de Linux utilizar

programas de Windows. Lamentablemente, configurar Wine es

cualquier cosa menos trivial y un poco de experiencia siempre será de

ayuda. POR JOACHIM VON THADDEN

WINEPRÁCTICO

Ejecutando programas Windows con la API Wine

19

Wine • PORTADA

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

Linux ofrece toda una serie deopciones a los usuarios que nece-siten ejecutar un programa

Windows de vez en cuando. Se puedeemular una máquina completa con apli-caciones tales como Vmware o Qemu ose puede simular un subconjunto conWin4Lin. Estas soluciones funcionanbastante bien, pero también tienenalgunas desventajas: Por un lado, losusuarios deben comprar tanto el entor-

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

madas al sistema y a sus parámetros,extremadamente complejos de invocar.Además, algunas funciones se adaptanpara satisfacer el entorno de Windows yrealizan muchas suposiciones sobre elsistema subyacente. Por ejemplo, el sis-tema de archivos de Linux es absoluta-mente diferente del sistema de archivosde Windows. Para atenuar este proble-ma, sería útil tener la capacidad de utili-zar las bibliotecas originales deWindows. Por supuesto, esto significaposeer una licencia de Windows, perola mayoría de la gente tiene una detodos modos, así que ¿porqué no haceralgo útil con ella?

El proyecto de código abierto Wineproporciona funcionalidad de progra-mación y también integra bibliotecasoriginales. Las siglas recursivas “Wine”,que significan “Wine is not an emula-

tor” expresan qué es Wine en realidad:no es un emulador del sistema operati-vo, sino una capa de compatibilidad.Tras un largo periodo de desarrollo ycon la ayuda de las empresas comercia-les, Wine ha alcanzado una etapa dedesarrollo que permite que los usuariosejecuten un número asombrosamentegrande de programas Windows sobreLinux. Este artículo echa una prácticaojeada sobre cómo utilizar Wine.

Instalación de WineComo Wine está sujeto a ciclos de des-arrollo muy rápidos, la versión que uti-licemos es crítica. Esto hace que notenga mucho sentido ir a por la ultimaversión, de hecho, es aconsejable adop-tar una postura más conservadora ymantener una versión funcional.Dejaremos los experimentos para los

sistemas nuevos.La versión de Wine que youso, la 20041019, no es la

última. Los paquetes deWine siempre utilizanla fecha de arranca-miento como número

de ver-

sión. La edición de octubre de 2004 esextremadamente estable y me da toda lafuncionalidad que necesito. Las versio-nes publicadas desde entonces han sidomuy experimentales y no son recomen-dables para su utilización en produc-ción. La última versión disponible cuan-do escribía esto, 20050419, parecía pro-metedora, pero rehusaba cooperar conMicrosoft Word.

Afortunadamente, instalar Wine se haconvertido en un juego de niños. Losprocedimientos de compilación e insta-lación agotadores son cosa del pasadoen la mayoría de las distribuciones,pues el sitio oficial de Wine está bastan-te al día con paquetes para Suse, RedHat, Fedora, Mandrake, Slackware eincluso para FreeBSD [1]. Tambiénestán disponibles los paquetes más anti-guos [2]. Después de descargar elpaquete, los usuarios con distribucionesbasadas en RPM simplemente se han deconvertir en root y arrancar la siguienteorden

rpm -Uvh wine-200xxxxx-*

para instalar Wine en sus sistemas. Sihay restos de una versión previa, tecle-ando rpm- e wine se elimina la versiónanterior. En Fedora, el mecanismo deseguridad Prelink almacena versionespreenlazadas de todas las bibliotecasdel sistema, lo que puede causar algu-nos problemas. Si no se desea deshabili-tar Prelink totalmente, primero hay quehacerse root y después, tras la instala-ción de Wine, borrar las bibliotecas pre-enlazadas de la siguiente manera:

killall prelink;prelink -uav;U

rm /etc/prelink.cache; ldconfig

Como el mecanismo Prelink compruebalas bibliotecas cada 24 horas, el sistemavolverá a un estado seguro a las 24horas como muy tarde. Si se tiene prisa,se puede llamar al guión prelink delcron para restablecer el mecanismo:

killall prelink;U

/etc/cron.daily/prelink

Los paquetes de Wine suministradoscon Debian han ganado un cierto gradode notoriedad por estar pobrementemantenidos y ser altamente impredeci-bles. Los usuarios de Debian deberán

no de emulación como el sistema opera-tivo, que además ocupan un valiosoespacio en la máquina anfitrión. Laemulación también limita el rendimien-to y consume memoria. Un programamedio funcionando en un emuladorpuede lograr sólo de un 50 a un 80 porciento de su rendimiento trabajando enmodo nativo, incluso incrementando eluso de memoria RAM estática en el sis-tema operativo invitado.

Una alternativa a la emulación essimplemente suministrar las bibliotecasde Windows para el sistema Linux. Enteoría, este método permitiría que elprograma funcionara en Linux.Desafortunadamente, este método escomplicado. Primero, las funciones debiblioteca de Windows, conocidas comoAPI (interfaz de programación de apli-cación), no están adecuadamente docu-mentadas. Y en muchos casos, sobretodo los programas escritos porMicrosoft, llaman a funciones indocu-mentadas. Como hay un montónde redundancia en la API,uno puede sospecharque Microsoft real-mente ha perdido lapista a los millaresde lla-

PORTADA • Wine

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

01 [wine]

02 "GraphicsDriver" = "x11drv";

(x11drv, ttydrv)

03 "ShowDotFiles" = "1"

04 "ShowDirSymlinks" = "1"

05 "Path" = "c:\\windows;c:\\win-

dows\\system"

06 "Windows" = "c:\\windows"

07 "System" =

"c:\\windows\\system"

08 "Temp" = "t:\\"

09 "Profile" =

"c:\\windows\\Profiles\\Admini

strator"

Listado 1: Configuración,primera parte

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

desinstalar cualquier paquete de Wineque descubran, después cambiar derepositorio e instalar los paquetes origi-nales desde el cuartel general de Wine,tal como se indica en [3].

Sistema de Directorios deWineWine almacena los archivos de configu-ración y trabajo de los usuarios junto alos programas Windows de los usua-rios, bajo el directorio del usuario en elsubdirectorio .wine. Hay que ser cuida-doso cuando se ingrese como root. Aligual que los usuarios de sistemasLinux sólo ingresan como root para rea-lizar tareas administrativas, los usuariosde Wine no deben usar nunca cuentascon privilegios. Los programas deWindows no destacan precisamente porsu seguridad, entre otros motivos, ypueden comprometer el sistema. Porotra parte, las llamadas al sistema quepodrían fallar pueden funcionar para elusuario root y esto puede hacer que elcomportamiento del programa seaimpredecible.

Se necesita un nuevo directorio Winepara completar los pasos de la instala-

de datos del sistema seafácil de leer y modificarpor humanos y máqui-nas.

Wine utiliza enlacesbajo el directorio~/.wine/dosdevices paraproporcionar las letras deunidades que Windowsemplea y son exactamen-te los nombres, a base deletras, que los programasde Windows esperan,esto es c:, d: y así sucesi-vamente. Por lo tanto, elsubdirectorio c está asig-nado a la unidad c: deWindows, dentro delárbol del sistema dearchivos de Linux y aquíes donde comienza latípica colección de archi-vos de Windows que apa-recen cuando se arrancaWine la primera vez. Elsubdirectorio c/windows

tiene unos cuantos enla-ces simbólicos a progra-mas tales comoregedit.exe o notepad.exe;

estos programas son parte del paquetede Wine y deberían funcionar sin nin-guna configuración adicional. Para pro-bar esto, solamente hay que teclear

wine notepad

Esto debe arrancar nuestro primer pro-grama en Wine. Algunos paquetes ins-talan estos programas como enlacesduros en el árbol del sistema de archi-vos de Linux, permitiendo a los usua-rios arrancar la aplicación con sóloteclear notepad.

Configuración SencillaLa configuración de Wine la maneja elarchivo config y su estructura es bastan-te simple. Al igual que en los archivos.ini de Windows, el archivo config abar-ca nombres de grupos entre corchetes,seguidos por pares "Clave" = "Valor".Al contrario que en Windows, tanto lasclaves como los valores deben estarentrecomillados y los comentarios seindican con el punto y coma. El ordende los grupos no es relevante.

El grupo [wine] (Listado 1) contienevarios parámetros básicos que contro-

Wine • PORTADA

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

ción. Si se tiene un directorio Wineanterior, se debe renombrar, en aras dela seguridad. Inicializar un nuevo direc-torio es muy fácil, solamente tecleewine en la consola. Esto coloca el archi-vo de configuración y la base de datosdel registro, donde se guardaran losarchivos con el sufijo reg, directamentebajo el directorio ~/.wine. Las versio-nes más recientes de Wine no crean unarchivo de configuración. La siguienteorden:

cp /usr/share/doc/wine-U

20041019/samples/config ~/U

.wine

copia un archivo de plantilla. Por cierto,Wine no soporta el archivo de Registrooriginal de Windows. En su lugar, Wineutiliza un formato en texto plano, alma-cenando las colmenas del Registro delsistema y de los usuarios en los archi-vos system.reg y user.reg. Como los pro-gramas normalmente no acceden direc-tamente al Registro, sino que usan elmétodo recomendado de acceder a tra-vés de llamadas al sistema, ésta es unabuena manera de conseguir que la base

Figura 1: La recompensa: programas complejos de Windows, como Microsoft Word, muestran un buen rendi-

miento en Linux.

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

al configurar la versión a Windows 98,tendremos la configuración que tienemás funcionalidad en la API de Wine.

El cuadro de mandos más potente selocaliza bajo [DllOverrides] (Listado 2,línea 6). Aquí es donde se especificancuales de las bibliotecas integradas seutilizarán y cuales serán sustituidas conlas versiones del Windows original.Estos ajustes pueden ser priorizados.Por ejemplo, especificando "native,

builtin" se indica que Wine debe buscarprimero las bibliotecas nativas. Si estabiblioteca no está disponible, se utiliza-rá la copia de Wine. Para utilizar la DLL

original de Windowses necesario copiarlabajowindows/system enel árbol del sistemade archivos simula-do de Windows o enel directorio quecontiene la aplica-ción se desea utili-zar. Sin embargo, notodas las DLLs son

adecuadas o útiles. Por ejemplo, elnúcleo de Windows, el sistema de usua-rio y el subsistema gráfico se localizanen las DLLs kernel.dll, user.dll y gdi.dll

y no se pueden utilizar con Wine. Estomismo también se aplica a sus equiva-lentes de 32 bit, kernel32.dll, user32.dll

y gdi32.dll. Las DLLs de bajo nivel, lamayoría de los controladores de disposi-tivo y los archivos VXD son igualmenteinservibles.

DLLsLas DLL de Windows 98 son la mejorapuesta. Algunas de ellas están disponi-

lan la estructura del sistema de archivosy el acceso a los recursos del sistemaLinux. Es conveniente establecer a 1 losparámetros de "ShowDirSymlinks" y"ShowDotFiles", para permitir al visorde Windows mostrar todos los archivosdel sistema Linux. Por ejemplo, ocultarlos enlaces simbólicos puede significarla pérdida de un montón de tiempo bus-cando archivos. El resto de los paráme-tros se puede dejar como está.

La sección [Version] (Listado 2) per-mite a los usuarios modificar el compor-tamiento de las bibliotecas Wine. Laclave "Windows" puede asumir lamayoría de las versiones desdeWindows 3.0 hasta el ultimísimoWindows 2003 y esto es importantepara una serie de aplicaciones. Sinembargo, la mayoría de las aplicacionesfuncionarán mejor si se selecciona"win98" para este parámetro. Además,

PORTADA • Wine

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

Figura 2: Wine es conocido por funcionar

con múltiples aplicaciones de Windows.

01 [Versión]

02 ; Versión de Windows a imitar

(win95, win98, winme, nt351,

nt40, win2k, winxp, win2k3,

etc.)

03 "Windows" = "win98"

04 ;"DOS" = "6.22"

05

06 [DllOverrides]

07 ; Algunas dlls no funcionarán,

así que los dejamos en buil-

tin.

08 ; No modificar estas líneas.

09 "advapi32" = "builtin";Las

versiones nativas no funcionan

10 "avicap32" =

"builtin";Relacionado con el

Hardware

11 "capi2032" =

"builtin";Completamente imple-

mentado

12 "comctl32" = "builtin";Las

versiones nativas causan erro-

res.

13 "comdlg32" = "builtin";thunk

14 "crtdll" =

"builtin";Completamente imple-

mentado

15 "ctl3d32" ="builtin";thunk

16 "d3d8" = "builtin";Relacionado

con el Hardware

17 "d3d9" = "builtin";Relacionado

con el Hardware

18 [...]

19 "msi" = "native"

20 "ole32" = "native"

21 "odbc32" = "native,builtin"

22

23 ;algún espía o programas que

no queremos que arranquen

24 "*autorun.exe" = "native,buil-

tin"

25 "*ctfmon.exe" = "builtin"

26 "*ddhelp.exe" = "builtin"

27 "eMusicClient.exe" = "builtin"

28 "*findfast.exe" = "builtin"

29 "icwconn1.exe" =

"builtin";Evita la carga desde

ICW aunque exista la clave del

Registro

30

31 ; predeterminado para todas

las demás dlls y ejecutables

32 "*" = "native, builtin"

33 ;"*" = "builtin, native"

Listado 2: Configuración, segunda parte

Figura 3: El desinstalador ofrece una selección de herramientas

de desinstalación.

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

bles en Internet [4] o desde Microsoft.Hay que evitar las bibliotecas deWindows XP, ya que casi nunca vienenlibres de errores. La precaución es reco-mendable, incluso con las DLLs deWin98. Algunas funcionan bien conalgunas aplicaciones, pero la versiónincorporada en Wine funciona mejorcon otras. En muchos casos, Winepuede influenciar sobre los llamadoscontroles, es decir, DLLs que proporcio-nan elementos tales como campos deentradas o cuadros de diálogo,commctrl.dll y commdlg.dll y sus equi-valentes de 32 bit. Lo mismo se aplica alas DLLs OLE que proporcionan unpuerto de funcionalidad COM sin que elsoftware de instalación falle. Como todoel asunto es tan complicado, básica-mente Wine permite que los usuariosespecifiquen la configuración de DLLprograma a programa, pero esto se verámás tarde. En WineHQ hay notas sobrelos problemas con las DLLs e informa-ción sobre la mayoría de las DLLs más

comunes en Windows en[5]. Se puede comprobarfácilmente el estado de laimplementación de labiblioteca de Wine en[6].

Sustituir DLLsAlgunos componentesinstalados por Office uotros programas puedenllegar a ser un auténticotormento. Estos depura-dores, con sus ventanasemergentes siempre quefalla una aplicación, pue-den hacer que la vida seamiserable. El archivo

mdm.exe en el directoriowindows/system es un típico ejemplo.Afortunadamente se pueden deshabili-tar este tipo de aplicaciones en la sec-ción DLLOverrides, por ejem-plo:

"*mdm.exe" = "buil-

tin"

significa que buscará estecomponente en la colec-ción de bibliotecas de Winey como este programa noexiste en su colección, nofuncionará.

SubsistemaGráficoEl siguiente grupo [x11drv]

(Listado 3) describe laspropiedades del subsiste-ma Gráfico, que se encar-ga de convertir las llama-das a la API de Windows

al X11 del sistemaoperativo Unix.Son interesanteslas configuracio-nes "Managed" y"Desktop". Unvalor de "Y" parael primero le diceal gestor de venta-na X11 que manejelas ventanas de losprogramas Windows;una configuración a"N" significa que Winelas manejará. La ventajade dejar que sea el gestor

de ventanas el que realice este trabajo esintegración mejorada con el sistema deventanas del escritorio. Si en vez de esopermitimos a Wine que maneje el aspec-to de las ventanas, obtendremos el típicolook & feel de Windows. En muchoscasos, los programas sólo funcionarán eneste modo. Configurar "Y" como prede-terminado es una buena idea en la mayo-ría de los casos.

El parámetro "Desktop" permite queun programa funcione en su propia ven-tana del escritorio; se puede indicar eltamaño, como por ejemplo 800x600.Esto tiene sentido con programas queestropean el escritorio o insisten en eje-cutarse en primer plano. Este modo tam-bién se recomienda para juegos, quetienden a conmutar los modos gráficosmuy a menudo. Y si un juego se estro-pea, esto puede dejar al ordenador selec-

cionado en el modo gráfi-co. Los diversos

miembros de lafamilia Windows

Install Shieldtambién tien-den a apro-piarse de

todo elescrito-

rio e

Wine • PORTADA

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

Figura 5: Powerpoint y el solitario funcionan perfec-

tamente.

Figura 4: El entorno de creación de servicios web de

Macromedia, Flash MX en ejecución bajo WINE.

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

El otro ajuste de esta sección controlalos modos gráficos acelerados, y la con-figuración predeterminada debería fun-cionar bien, esto mismo es válido paralos tipos de letras, los puertos e/s yotras secciones. Los paquetes de insta-

lación tienen cuidado con las configura-ciones específicas de cada distribución.

Configuraciones de sonidoLa cosa empieza a animarse en la sec-ción "WinMM", que es la que maneja lasalida del sonido. Para ello se necesitahabilitar el controlador de dispositivoadecuado. El controlador correcto paralos usuarios de KDE es "winearts.drv".No todos estos controladores están bienimplementados. En particular para lasalida de sonido, puede que sea necesa-rio recurrir a "wineoss.drv", asumiendoque se deshabilita el sonido para losdemás programas que se hayan configu-rado antes de esta selección para evitarconflictos. Esta advertencia se aplicaespecialmente a los servicios de sonidode KDE y GNOME artsd y esd.Las secciones posteriores manejan lasconfiguraciones predeterminadas de lasaplicaciones. [AppDefaults\\<progra-

ma>\\x11drv] define la salida gráficapara un programa en concreto.Opcionalmente se puede utilizar[AppDefaults\\<programa>\\DllOverri

des] para establecer una DLL predetermi-nada que tendrá prioridad sobre la confi-guración en la correspondiente seccióngenérica. Esto permite limitar Install

Shield a una ventana o evitar queQuicktime Player 5 utilice DirectDraw .La documentación en [7] ofrece multi-tud de pautas útiles sobre los paráme-tros, la configuración y la puesta apunto de Wine.Los expertos preferirán configurar Winemanualmente; es decir, preferirán editarel archivo de configuración. Los recién

interrumpir cualquier cosa que halla.Algunas secciones permiten configura-ciones individuales para el controladorde dispositivo X11, pero de nuevo, anali-zaremos esto con mayor profundidadmás adelante.

PORTADA • Wine

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

Figura 6: Cedega es una versión de WINE optimizada y orientada a

juegos.

Figura 7: WINE permite ejecutar bajo Linux programas para los que

no existen equivalentes todavía.

01 [x11drv]

02 ; Número de colores asignado a

la paleta del sistema

03 "AllocSystemColors" = "100"

04 ; Use a private color map

05 "PrivateColorMap" = "N"

06 ; Estimación de la corrección

sobre la velocidad en algunas

operaciones

07 gráficas

08 "PerfectGraphics" = "N"

09 ; Profundidad de color a usar

en pantallas con multi-profun-

didad

10 ;;"ScreenDepth" = "16"

11 ; Permite al gestor de venta-

nas gestionar las ventanas

creadas

12 "Managed" = "Y"

13 ; Utiliza una ventana de

escritorio de 640x480 para

Wine

14 ;"Desktop" = "1024x768"

15 ; Usa la extensión XFree86 DGA

si está presente

16 ; (make sure /dev/mem is

accessible by you !)

17 "UseDGA" = "N"

18 ; Usa la extensión XVidMode

si está presente

19 "UseXVidMode" = "Y"

20 ; Usa la extensión XRandR si

está presente

21 "UseXRandR" = "N"

22 ...

23

24 [WinMM]

25 "Drivers" = "wineoss.drv"

26 ; Predeterminado para la mayo-

ría de las configuraciones

normales

27 ;"Drivers" = "winearts.drv"

28 ; para KDE

29 ;"Drivers" = "winealsa.drv"

30 ; para usuarios de ALSA

31 ;"Drivers" = "winejack.drv"

32 ; para el servidor de sonido

Jack

33 ;"Drivers" = "winenas.drv"

34 ; para el sistema de sonido

NAS

35 ;"Drivers" = "wineaudioio.drv"

36 ; para máquinas Solaris

37 ;"Drivers" = "" ;

38

39 [AppDefaults\\_INS0432._MP\\

40 x11drv]

41 "Desktop" = "1024x768"

42

43 [AppDefaults\\QuickTimePlayer.

44 exe\\DLLOverrides]

45 "ddraw" = ""

Listado 3: Configuración, tercera parte

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

llegados preferirán una herramientaapropiada, basada en un interfaz gráfi-co. Con winesetuptk se puede realizaruna edición simple o la generación dellos archivos .wine/config.Desgraciadamente, esta herramienta nose ha puesto al día y por eso utilizaalgunas opciones de configuraciónobsoletas. Está en desarrollo una nuevaherramienta, llamada winecfg, pero enel momento de escribir esto no se habíaterminado. Esto nos deja con la opciónde la configuración manual, las WineTools, basadas en Wine o CrossoverOffice.

Preparados, estabilizados,¡ya!Una de las ordenes más importantes enel uso diario de Wine es el reinicio delsistema Windows. Afortunadamente,Wine nos ayuda a evitar un auténticoreinicio. Tecleando

wineboot

iniciaremos el proceso dearranque al estilo Windows.

Muchos programas uti-lizan Install Shield.

Por desgracia,Microsoft no haconsiderado, demomento, especi-ficar un esquemade instalaciónbien definido, encontraste con losesquemas intro-ducidos hacetiempo comoDPKG o RPM.Esto significa quelos instaladoresson algunos de losmayores escollospara Wine y estopuede causar pro-

blemas con los programas más compli-cados.

Si un programa no se puede instalar deninguna manera, se puede intentar insta-larlo primero en Windows 98. Hay queasegurarse de que se tiene una copia deseguridad, o mejor aún, exportar elRegistro antes de intentar la instalación.Una vez instalado el programa, se copiaal directorio que corresponda bajo~/.wine, se vuelve a exportar el Registroy se comparan los resultados. Será nece-sario usar la herramienta regedit de Winepara modificar las claves que hayan cam-biado. En muchos casos, la instalaciónañadirá nuevas DLLs y también seránecesario copiar dichas DLLs al directo-rio Wine. Con un poco de suerte, el pro-grama debe funcionar. Los programasque no utilizan claves del Registro sonmucho más funcionales. Lotus Notessería un ejemplo. Aunque la instalaciónno funciona en Wine, se puede instalaren Windows y después simplemente hay

que copiar la versión 6.51 deNotes al lugar adecuado del

árbol de directoriosWine.

Los programasque durante

la instalación solicitan un CD o queinserte el siguiente disquete puedenponer en aprietos a los usuarios menosexperimentados. Por supuesto quehará falta montar el CD en Linux, aúnasí, hay que evitar que el instaladoracceda al CD en el directorio de mon-taje, ya que este intento de acceder alCD bloqueará la unidad, impidiendoque se pueda desmontar cuando hagafalta cambiar de disco. Conociendoesta problemática, no habrá dificul-tad si se responde a la petición de

Wine • PORTADA

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

Wine ha dado lugar a un importantenúmero de productos comerciales ytodos ellos han comenzado en el códigobase de Wine antes de especializarse encaracterísticas específicas, adelantandoa Wine en esos aspectos. CrossOverOffice de CodeWeavers [13] se especiali-za en el soporte de las principales aplica-ciones ofimáticas y hay que decir queCodeWeavers ha hecho un gran trabajo.El hecho de que CodeWeavers aportasus parches a los desarrolladores deWine ha permitido que Wine crezca real-mente en los últimos 12 meses.CrossOver Office ofrece las bibliotecasmás recientes de Wine, un instalador deinstalaciones muy apropiado para lasaplicaciones que soporta, completa inte-gración del escritorio, y soporte deCodeWeavers. Las desventajas de tenerque probar nuevas versiones de Wine,desperdiciando tiempo, sesiones de ins-talación maratonianas y montones dehoras perdidas revisando documenta-ción en la Web, pueden ser cosa delpasado, por solamente 40$ US o 40Euros, un precio que no tiene nada decaro.

Cedega de Transgaming [14] se ha espe-cializado en el uso de Wine como plata-forma de juegos y ha impulsado el des-arrollo de la emulación de DirectX. Elcódigo especial de protección anti-copia,permite a los usuarios ejecutar juegoscon protección anti-copia. Este softwareestá disponible como versión de suscrip-ción por 5$ o 5 Euros al mes, con unasuscripción mínima de tres meses. Conla excepción del código de protecciónanti-copia, el código fuente de Cedegaestá disponible y eso significa que losusuarios pueden compilarse Cedega.Hay paquetes disponibles para variasdistribuciones, preparados para instalaren [15].

Alternativas: CrossOverOffice y Cedega

Figura 8: WINE permite una migración gradual a Linux. En la imagen,

una presentación ejecutándose en Powerpoint.

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

veces no queda másremedio que reiniciarla aplicación. Losprogramas que noterminan limpiamen-te pueden dejar com-ponentes funcionan-do en memoria. Paraobtener más detalleshay que teclear ps

-ax|grep wine.

wineserver -kill

mata cualquier ins-tancia de Wine.

Los programas quedevoran la pantalla

completa y la enredan también son muymolestos. En Wine, la mejor manera demanejar estos programas es, cuando selancen, ponerlos todos juntos en unaventana, como se explica a continua-ción: se elimina la etiqueta de comenta-rio de la línea "Desktop" = "1024x768"

para ejecutar todas la aplicacionesWindows en ventanas o mejor aún,crear en la configuración una secciónespecífica para la aplicación para que elprograma rebelde se ejecute sólo en unaventana.

El Centro de Control (Control Center)será de ayuda para manejar los progra-mas que se configuran a través delWindows System Settings. Tecleando lasiguiente orden:

wine control

se arranca la herramienta y se obtie-ne el acceso a la configuración de loscomponentes instalados en el siste-ma. También se pueden desinstalar

programas utilizando el Centro deControl:

wine uninstaller

arranca un applet que ofrece una listade los programas de desinstalaciónregistrados. Wine tiene un restringidosoporte de programas DOS.

wine wcmd

arranca el intérprete de órdenes, dondese pueden ejecutar programas DOS,pero con muchas limitaciones. Si sequiere ejecutar programas DOS, es pre-ferible utilizar dosemu o dosbox [8];sobre todo si se trata de juegos DOS.

Trabajando con el hardwareWine proporciona una capa de emula-ción para archivos binarios pertenecien-tes a otros sistemas operativos. Estoincluye unas cuantas restricciones quehacen que en la práctica algunas aplica-ciones no se puedan utilizar. Por ejem-plo, las aplicaciones que necesitan uncontrolador de dispositivo de hardwareespecífico no funcionarán. De hecho, elmero intento de instalar controladores dedispositivo de hardware Windows estáabocado al fracaso, ya que la forma enque los dos sistemas operativos manejanel hardware es radicalmente diferente. Apesar de esto, algunos programas quenecesiten acceso directo al disco duro oal lector de CDROM, funcionarán. Wineofrece un modo de acceso directo paradar soporte a esto, permitiendo queimprobables candidatos a funcionar enWine, como la versión descargable deNero Burning ROM funcione, mientrasque CloneCD proporciona sus propios

controladores para el acceso aldispositivo, controladores que,por desagracia, no se entiendencon Wine. Independientementede la aplicación que se esté pen-sando instalar, no está de másdarse una vuelta por las bases dedatos en [9] y [10] para compro-bar si alguien ya ha hecho el tra-bajo duro y posiblemente hayacreado un informe o una guia deinstalación.

DirectXLos juegos que confían enDirectX pueden funcionar bien

cambio de disco, desmontando el CDdesde la consola, cambiando el CD ymontando el siguiente.

El uso diario enseña que algunos pro-gramas se han de arrancar desde dentrode sus directorios para que vayan bien.Otros no se toman bien que los usua-rios cambien de escritorio virtual entiempo de ejecución, de hecho, lo másseguro es que se cuelguen y que cuestebastante reanimarlos. La mayoría de las

PORTADA • Wine

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

Hay algunas cosas con las que hay quetener cuidado antes de poner a Wine enproducción. Antes de nada, hay quetener presente que sólo el 30 por cientode todas las aplicaciones Windows fun-cionan satisfactoriamente bajo Wine. Nopodemos esperar mucho del sistema yaque no está diseñado como un sustitutode Windows; si es esto lo que andamosbuscando, la respuesta obvia es Linux,con su asombrosa colección de aplica-ciones útiles y libres. Lo que Wine nosofrece es la oportunidad de ejecutarimportantes aplicaciones Windows paralas que no podemos hallar reemplazo,permitiendo de ese modo una migracióngradual. Si hacemos un uso muy intensode los productos de Office, quedaremosdefinitivamente convencidos con laposibilidad de poder seguir utilizandoestas aplicaciones y probar algo nuevoal mismo tiempo. Las alternativascomerciales, Cedega para juegos yCrossOver Office para los productosOffice, son aportaciones muy valiosas,pues proporcionan soporte y ayuda paramantener la velocidad del desarrollo. Enun entorno comercial, tendremos dificul-tades para encontrar un sustituto.

Futuro

Figura 10: El programa para la creación de diagramas

Visio en funcionamiento bajo WINE.

Figura 9: WINE ofrece la posibilidad de que el usuarios siga utili-

zando las herramientas con las que siempre ha trabajado en

Windows

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

o pueden fallar. De nuevo, convieneacudir a los recursos de Internet paraaveriguar más. Wine emula el compor-tamiento de DirectX 8 y esto da unaauténtica oportunidad de ejecutar jue-gos compatibles con DirectX. Por otraparte, ninguno de los que usan protec-ción anti-copia funcionará en Wine.Estos mecanismos son de tan bajonivel que están condenados a fallar.Pero, en cualquier caso, no se debeinstalar nunca el DirectX original. Nofuncionará y además puede destrozartotalmente la configuración actual deldirectorio Wine.

DepuraciónTarde o temprano los usuarios de Winese las verán con el depurador winedbg.El depurador aparece cuando una apli-

cación que está funcio-nando en Wine se cuelga.Si no se tiene interés eninvestigar los motivos,basta con pararlo. Si seprefiere analizar el pro-blema, se puede teclearbt para solicitar informa-ción.

La mejor manera detratar con los programastraviesos es probar pri-mero varias configura-ciones en la versiónWindows. Algunos pro-gramas son muy exigen-tes con la ruta desde

donde se arrancan. Otra vez, hay queintentar arrancar los programas desdesu propio directorio, proporcionandouna ruta Windows completa o inten-tando la ruta Linux (Listado 4).Aunque se supone que los ejemplos deestas rutas son equivalentes, un pro-grama Windows no tiene porqué verlas cosas de la misma manera.

La elección de gestor de ventanastambién puede causar unos cuantosinconvenientes. En estos casos, cambiarlos parámetros Managed y Desktop

puede hacer milagros, sobre todo cuan-do un programa funciona, pero no dibu-ja la ventana del programa correcta-mente.

Puede que sea razonable especificaralgunos parámetros de depuracióncuando se arranca un programa:WINEDEBUG="+loaddll" wine pro-

gram_path arrancará un programa ydirá si las DLLs que utiliza el progra-ma son incluidas o nativas. Esta infor-mación permite identificar DLLs conuna inadecuada implementación enWine y reemplazarlas con las DLLSequivalentes en Windows, lo que a suvez, se supone, permitirá ejecutar elprograma elegido. La documentaciónde Wine Debug en [11] menciona unaserie de parámetros adicionales quepermite a los usuarios sacar compo-nentes específicos del entorno de eje-cución.

Si se busca ayuda con Wine, el archi-vo de la lista de usuarios de Wine [12]tiene un montón de hilos de discusióncon preguntas y respuestas sobre losproblemas en Wine y, por supuestoque las nuevas preguntas son bienveni-das. �

Wine • PORTADA

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

[1] Cuartel General de Wine”: http://www.

winehq.org/site/download

[2] Descarga de Wine: http://

prdownloads.sourceforge.net/wine

[3] Descarga de paquetes Debian: http://

www.winehq.org/site/download-deb

[4] Fuentes de las DLLs para Windows:http://www.dll-files.com/

[5] Acerca de las DLL: http://www.

winehq.com/site/docs/wine-devel/

arch-dlls

[6] Estado de implementación de laBiblioteca: http://www.winehq.com/

site/status_dlls

[7] Documentación de Wine: http://www.

winehq.org/site/documentation

[8] Dosbox: http://dosbox.sourceforge.

net/

[9] Aplicaciones que funcionan en Wine:http://appdb.winehq.org/

[10] El rincón de Frank, sitio alternativo deWine: http://frankscorner.org/

[11] Documentación de Depuración:http://winehq.org/site/docs/

wine-user/x1824#AEN1826

[12] Foro de Wine para sus dudas: http://

www.winehq.org/site/forums

[13] Crossover Office: http://www.

codeweavers.com/

[14] Cedega de Transgaming: http://www.

transgaming.Com/

[15] Paquetes de instalación deTransgaming: http://www003.

portalis.it/115/

RECURSOS

01 01 wine "c:\\program

files\\microsoft office\\offi-

ce\\winword.exe"

02

03 wine "~/.wine/c/Program

Files/Microsoft

Office/Office/WINWORD.EXE"

04

05 cd ~/.wine/c/Program

Files/Microsoft Office/Office;

wine WINWORD.EXE

06

07 cd ~/.wine/c/Program

Files/Microsoft Office/Office;

wine

08 "c:\\program files\\microsof-

toffice\\office\\winword.exe"

Listado 4: arrancadores deprogramas Alternativos

Figura 11: El soporte a Photoshop de Adobe es muy estable.

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

Los expertos en PHP consideran a

Zend Studio como el entorno IDE

más maduro y con más caracterís-

ticas útiles. La última versión

ofrece manipulación avanzada de

bases de datos y otras mejoras.

Vamos a revisar el IDE Zend Stu-

dio y enseñaremos cómo se

puede usar para acelerar el desar-

rollo en PHP.

POR CARSTEN MÖHRKE

Exploración del Entorno de Desarrollo Zend Studio 4

DESARROLLO RÁPIDO

28

EVALUACIÓN • Zend Studio 4

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

La elección de un entorno de des-arrollo integrado es a menudocuestión de gusto. Muchos des-

arrolladores de PHP prefieren editores detexto como Emacs o Vim. Los desarrolla-dores que prefieren una solución másintegrada tienen varias opciones en elmundo Linux. El IDE gratuito QuantaPlus, el entorno de código cerradoMaguma e incluso Eclipse (con su con-junto de plug-ins adecuado) son buenasalternativas a un editor. Para los desarro-lladores de PHP, Zend Studio tiene lareputación de ser uno de los IDE másmaduros y potentes.

Zend Studio es la criatura de la empre-sa Israelí Zend Software, que prefiere serconocida como “La Compañía del PHP”.Versiones anteriores tenían problemas derendimiento o inestabilidad, pero la últi-ma versión, Zend Studio 4, es un entor-no de desarrollo extremadamente poten-te y estable. Zend Studio no es gratis nipertenece a la comunidad de CódigoAbierto, aunque sus 249 dóalres bien

valen la pena. Se puede descargar unaversión de prueba del sitio web de Zend.La versión de prueba es plenamentefuncional durante un período de 21 días,tras los cuales se degrada a la “ZendStudio Personal Edition”, una versión nocomercial que deshabilita muchas de lascaracterísticas interesantes que hacenque no merezca la pena (véase el cuadro

titulado “Zend Studio PersonalEdition”).

La InstalaciónDespués de descargar el paquete y des-comprimir el archivo de 47 Mbytes, sepuede ejecutar el programa de instala-ción directamente. Un asistente le guiaráa través del proceso tras solicitarle que

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

Zend Studio 4 • EVALUACIÓN

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

conteste a algunas preguntas. Además delas preguntas típicas sobre el directoriode instalación, se puede indicar qué ver-sión de PHP se desea soportar (4 ó 5).PHP 4 y 5 no son cien por cien compati-bles y contienen diferentes comandos,así que esta selección influirá en el colo-reado de la sintaxis y su comprobación.Las buenas noticias son que esta caracte-rística se puede modificar más adelante.Otra cosa importante sobre la instalaciónes decidir si se va a instalar el ZendStudio Server (Figura 1). Diga que sí,porque se necesitará para poder depurarde forma efectiva más adelante.

La InterfazTras completar la instalación, ZendStudio automáticamente detecta el idio-ma de la configuración del sistema y seejecuta con el soporte de idioma adecua-do. En el momento de de escribir esteartículo, el entorno soportaba lossiguientes idiomas: Inglés, Francés,Alemán, Ruso y Español.

La interfaz de usuario(Figura 2) está divididaen varios paneles. Laparte de arriba a laizquierda muestra losficheros, servidores ybases de datos de accesodirecto. Debajo seencuentran varios inspec-tores que proporcionan alos desarrolladores unavisión rápida de los fiche-ros, clases y métodos quepertenecen al proyectoactual. La parte inferiorde la pantalla está reser-vada para los mensajes y

la ventana de depuración. La segundaventana proporciona información sobrelos valores de las variables, las llamadas ala pila y cosas similares. A la derecha seencuentra un área que muestra la “panta-lla de salida”. Esta zona muestra el códigodel script generado para que se pueda verde un vistazo. Zend Studio tambiénmuestra las cabeceras HTTP. Esto es unacaracterística importante ya que un nave-gador no lo hace. Finalmente, la ventanade edición está en el centro de la pantalla.Para todos aquellos que estén preocupa-dos en dónde colocar todos estos panelesen una pantalla pequeña tenemos buenasnoticias: se pueden escalar los paneles yocultar aquellos que no se necesiten.

La ConfiguraciónAntes de empezar a usar Zend Studio enun entorno de producción, probablemen-te necesite ajustar algunos parámetrosde configuración. El cuadro de diálogopara personalizar el sistema se titulaPreferences y se abre seleccionando

Preferences

en el menúde herra-mientas.

La mayoríade estas pre-ferencias soncuestión degusto. Sinembargo,hay algunasopciones adi-cionales quenecesitarácambiar paraobtener unentorno de

desarrollo útil. Por ejemplo, se puededefinir cómo mostrar el tabulador en lasolapa Editing. El formato Newline

puede ser importante. Esta opción espe-cifica si una nueva línea se representapor un retorno de carro y avance de línea(estándar de Windows) o por tan sólo unavance de línea (estándar de Unix).

La Configuración delServidorEn muchos casos, se necesitará trabajarcon ficheros almacenados en un servi-dor. El IDE Zend proporciona la caracte-rística de almacenar los ficheros directa-mente en un servidor usando una cone-xión FTP. Se puede usar SFTP o FTPsobre SSH para mayor seguridad si esnecesario. El menú de ficheros muestraun cuadro de diálogo donde se puedeconfigurar una conexión nueva a un ser-vidor (Figura 3). Para configurar la cone-xión, se necesita proporcionar la infor-mación usual, como el nombre del servi-dor, el nombre del usuario y su contrase-ña. Hay que asegurarse de desmarcar laopción Reconnect on Startup o ZendStudio intentará conectarse al servidorcuando se ejecute el IDE y esto puede serrealmente molesto si se tiene una listalarga de servidores o si la conexión noestá disponible. Zend Studio tambiéntiene soporte CVS, que se puede configu-rar con el menú de herramientas.

La Configuración de unServidor de Bases de DatosEl acceso directo a servidores de basesde datos es una característica nueva en

Figura 1: Un asistente nos lleva a través del proceso de insta-

lación de Zend Studio. Asegúrese de instalar el servidor de

Zend Studio.

Figura 2: El interfaz de usuario de Zend Studio.

Las siguientes características no estándisponibles en la versión Zend StudioPersonal Edition:

• Perfiles

• Analizador de Código

• Soporte para CVS

• Inspectores

• Soporte FTP

• Depuración Remota

• Descripción de funciones en la termi-nación de código

• Búsqueda de ficheros

• Impresión

• Sangrado de código

Zend Studio PersonalEdition

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

Zend Studio 4. Pulsando en SQL de laventana de gestión de ficheros (arriba ala izquierda) hace que se muestre unalista de servidores configurados. Desdeluego, la lista estará vacía si se acaba deinstalar el programa. Para añadir ele-mentos a la lista, hay que hacer clic conel botón derecho del ratón en la ventanay seleccionar “Add Server” para abrir laventana que se muestra en la figura 4.

En esto momentos Zend Studio sopor-ta acceso directo a los siguientes servi-dores de bases de datos: Oracle, SQLite,Microsoft SQL Server, PostgreSQL yMySQL. Después de introducir las cre-denciales de acceso, se puede accederinmediatamente al servidor. Haciendoclic con el botón derecho del ratón abreuna conexión y proporciona al entornode desarrollo acceso a cualquier base dedatos, tablas y registros para los que elusuario actual tenga permiso de acceso.

Los desarrolladores pueden ver laestructura de las tablas o su contenidoen la ventana que normalmente contie-

ne el editor. Zend Studio no soportala manipulación directa de

los registros, ya queno se preten-

de

que sea una interfaz de bases de datos.En modo base de datos, se puede usar laparte inferior del interfaz para introducircomandos SQL (Figura 5). Esta caracte-rística permite a los desarrolladores veri-ficar las consultas SQL antes de añadir-las al código PHP.

En ProducciónAunque Zend Studio permite la ediciónindividual de ficheros, los desarrollado-res prefieren normalmente trabajar conproyectos. Cuando se añade un proyectonuevo seleccionando New Project en elmenú Project, aparecerá un asistente quesolicitará el nombre del proyecto nuevo,la ruta donde almacenar los ficheros delproyecto y las preferencias de depura-ción para el proyecto. Después de crearun proyecto se muestraen la parte de laizquierda, en el inspec-tor de proyectos. Ahorase puede hacer clic conel botón derecho delratón o usar el menúde ficheros para aña-dirle ficheros.

Zend Studio tienevarias característicasque facilitan la ediciónde código. Además delcoloreado de la sinta-xis, que actualmentesoporta hasta el más sencillo de los edi-tores, la terminación automática delcódigo es probablemente una de lasherramientas más útiles. Mientras se estátecleando, Zend Studio muestra una listade funciones, variables u otros elemen-tos que empiezan con las letras que sehan tecleado.

Considerando el número de comandosPHP, el hecho de que el sistema muestreun breve resumen de lo que cada fun-ción realiza es, verdaderamente cómodo.Una lista de parámetros aparece cuandouna función se haya identificado correc-

tamente.Zend Studio añade

dinámicamentecualquierfunción,variable yclase que sedefina en lalista de ter-minación

automática de

código. Esto no está restringido al ficheroque actualmente se esté editando, sinoque también incluye cualquier otrofichero que se haya abierto al mismotiempo. (La terminación de código puedeocasionar confusión cuando Zend ofreceuna clase de un fichero abierto que nopertenece al proyecto actual).

Como PHP no soporta la declaraciónde los tipos de las variables, Zend Studiono tiene forma de saber a qué tipo dedato pertenece un parámetro que se lepase a una función. Sin embargo, losdesarrolladores pueden añadir bloquesde documentación (docblocks) para pro-porcionar esta información para sus pro-pias funciones, clases y métodos. Paraello, hay que pulsar el botón derecho delratón en una función del Inspector de

Proyectos y seleccionarAdd description parainsertar un docblockvacío.

La primera líneadebería ser una brevedescripción de la fun-ción, que aparecerá enla ayuda de la termina-ción automática decódigo. Los Docblocksson extensibles pormedio de etiquetas,permitiendo describirlas propiedades de una

función o clase. Las etiquetas siempreempiezan por @. Una etiqueta tiene queser precedida por un asterisco (*) y unespacio en blanco. Por ejemplo, unaentrada como @return: describiría eltipo de retorno de una función. La eti-queta @param: se refiere a un paráme-tro. Se necesita una entrada separadapara cada parámetro, seguido del nom-bre de la variable y el tipo de dato. Sepuede encontrar una lista completa deetiquetas en [1].

Esta solución puede parecer algo com-plicada al principio, pero tiene sentido,ya que los docblocks pueden ser real-mente útiles cuando se usan junto conprogramas de generación automática dedocumentación. Para ayudar al desarro-llador con ello, Zend Studio tiene elPHPDocumentor en el menú de herra-mientas (Figura 6). El documentador,como su propio nombre indica, creadocumentación formateada en HTML,PDF, CHM o XML a partir de un ficherode código fuente.

EVALUACIÓN • Zend Studio 4

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

Figura 3: El cuadro de diálogo de configura-

ción del servidor FTP permite configurar una

conexión a un servidor FTP.

Figura 4: Configurando un servidor

SQL.

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

Zend Studio 4 • EVALUACIÓN

sean correctas, su estilo deprogramación sea pobre. Se puedeinvocar el analizador de código bien pre-sionando la secuencia de teclas[Ctrl]+[Alt]+[A], bien accediendo a tra-vés del menú herramientas.

DepuraciónPor supuesto, Zend Studio ayuda a losdesarrolladores a localizar errores ocultos.La herramienta de depuración permiteinterrumpir la ejecución de código y com-probar lo que está sucediendo con lasvariables críticas. Zend Studio soportatanto la depuración local como remota. Ladepuración local significa que el código seesté ejecutando directamente en el entor-no Zend Studio con la salida apareciendoen el lado derecho de la ventana de ZendStudio. Como a menudo es imposiblecomprobar localmente todo, tambiénsoporta ladepuracióndesde el servi-dor.

Ejecutartodo el pro-grama enteroy comprobarlos resultadosno es unaforma útil dedepuración.Esto es por loque ZendStudio permi-te establecermúltiplespunto de rup-turas. Estos se

puedenañadir o quitar simplementehaciendo clic sobre el número de la líneade código. Después de establecer lospunto de rupturas, presionando [F5] oseleccionando Run en el menú debughará que el código se ejecute. Cuando elintérprete llegue a la línea que contengael punto de ruptura , interrumpirá la eje-cución del programa justo antes de eje-cutar dicha línea, permitiendo al des-arrollador inspeccionar el estado del sis-tema más detenidamente.

Como se mencionó previamente, laparte derecha de la pantalla muestra elscript de salida. Se puede inspeccionar elestado del script actual en esta zona. Estepanel muestra las variables actuales,

El análisis automático de la sintaxis esotra característica potente. Zend Studiocomprueba la entrada automáticamenteen busca de errores sintácticos mientras seestá tecleando. Si se descubre un error,subraya la línea de código que lo contieneen rojo y coloca una marca roja en el mar-gen para indicar el punto. Entonces sepuede colocar el ratón encima de la línea osobre el código que contiene el error y elIDE mostrará un mensaje de error.

Zend Studio también proporciona frag-mentos de código, que son fragmentosde código externo proporcionados por lacomunidad de código abierto que hansido probados y cuya funcionalidad estádemostrada. Estos fragmentos de códigoson otra característica útil que se ha aña-dido a Zend Studio 4 que puede ayudaral desarrollador a reinventar la rueda. Labiblioteca contiene unos 300 fragmentosy también incluye funciones de actuali-zación que permiten importar nuevosfragmentos de código.

Desde luego, no hay quien escribacódigo sin cometer algún error; es bas-tante importante ser capaz de encontrartantos errores como sea posible. Denuevo, Zend Studio proporciona unaamplia gama de opciones. El analizadorde código es una característica interesan-te. Aunque otros IDEs tienen analizado-res de código, el analizador de Zend fun-ciona de forma diferente. Este ayuda aencontrar irregularidades, que puedenser o no errores. Analiza el código y lecomunica al desarrollador los posibleserrores que encuentra.

El analizador recolectará las líneas decódigo, que aunque sintácticamente

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

Figura 6: El PHPDocumentor permite crear la documentación de los fiche-

ros de código fuente.

Figura 5: Accediendo al servidor MySQL

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

directamenteen el servidory la sesión secontrola remo-tamente porZend Studio.Para soportarla depuraciónremota, hayque instalar elservidor deZend Studio,que se incluyecon la licenciadel IDE. Si nose instala elservidor mien-tras se estéinstalandoZend Studio,

se puede descargar desde www.zend.

com.El servidor no es una aplicación inde-

pendiente, sino que necesita estar inte-grado con un servidor web Apache exis-tente. Se puede usar tanto el servidorApache que va incluido con el productoo bien usar un servidor Apache instaladoanteriormente. En este último caso, elprograma de instalación intentará locali-zar la ruta a los ficheros de configura-ción, como httpd.conf y php.ini y si nologra localizarlo, solicitará al usuario laruta a los mismos.

Además, el programa de instalaciónnecesita saber qué clientes tienen permiti-do acceder al servidor. El servidor Zend nodebe ser instalado en servidores web enentornos de producción, ya que la rutinade instalación reemplaza el fichero índiceen el directorio DocumentRoot. Ahora,después de reiniciar el servidor, cada vezque se llame a la página inicial del servi-dor desde el navegador, automáticamenteserá reenviado a la página del servidorZend Studio. La página proporciona unresumen de la configuración y permitemodificar la configuración de PHP. El pro-grama de instalación crea una copia deseguridad de los ficheros modificados.

Las características realmente intere-santes para el control del servidor Zendson parte de Zend Studio. Se puede habi-litar la depuración basada en el servidoren Preferences | Tools | Debug.

Después de hacerlo, habría que com-probar la conexión al servidor seleccio-nando Check debug server connection.Tras pasar la prueba satisfactoriamente,

se puede usar la función Debug URL opresionar la tecla de atajo [F8]. Para pro-bar una página web, hay que introducirla URL de la misma en la ventana queaparece. Tras pulsar OK la sesión empie-za; se abre el navegador y permite elcontrol remoto de la sesión.

Zend Studio obtiene el código fuentedirectamente desde el servidor, así que nohay necesidad de crear una copia local. Alcontrario de la depuración local, el depu-rador remoto se detiene antes de la prime-ra línea de código, eliminando la necesi-dad de establecer un punto de ruptura.Aparte de eso, la funcionalidad es como laprestada por la depuración local. La salidase muestra tanto en el entorno ZendStudio como en el navegador.

En algunos casos, la salida se almace-na primero en un buffer de salida y no seenvía al navegador. En ese caso, si seañade flush() al código fuente, se envia-rá el contenido del búfer de salida alnavegador.

Más PotenciaPuede ser que se esté familiarizado conlos problemas de respuesta lenta de lasaplicaciones web nuevas. Es bastantedifícil localizar la fuente del cuello debotella. Zend Studio proporciona un per-fil en el menú de herramientas. El perfilanaliza el programa en ejecución en elservidor de depuración y muestra eltiempo requerido por la CPU para proce-sar un fichero o una función (Figura 7).

ConclusionesAunque hay formas más baratas de pro-gramar en PHP, ni Eclipse, ni Emacs, nitampoco Quanta +, contienen un depu-rador. La ayuda sensible al contexto deZend es más madura que el de las otrasalternativas. Los desarrolladores que tra-bajen en grandes proyectos podríanechar en falta el soporte para versiones yel cliente de CVS no es aún perfecto,pero Zend Studio 4 viene con muchascaracterísticas que lo compensan.

Por mucho que se diga, vale la pena elprecio que hay que pagar por ZendStudio. �

incluyendo tanto el tipo de dato como sucontenido. El contenido de los arrays y delos objetos se muestra de la misma forma.Por defecto, tan sólo se pueden ver lasvariables locales (es decir, las variablesvisibles en el contexto actual). Sin embar-go, se puede hacer clic en el signo +junto a GLOBALS para ver las variablessuperglobales, incluyendo su contenido.Las llamadas a la pila también son intere-santes de observar; tan sólo hay que pul-sar en Stack para mostrarlas. En la pila esdónde el intérprete gestiona las llamadasa las funciones. Esto permite ver la pilacon los nombres de las funciones que elsistema ha llamado hasta el momento. Lafunción al fondo de la pila será siempremain(), es decir, el cuerpo del programa.Esta vista proporciona al desarrollador laventaja de poder inspeccionar las varia-bles dentro de las funciones en el interiorde la pila, que podrían ser sobrescritaspor otras llamadas.

Depuración RemotaTras llegar a un punto de ruptura, sepuede avanzar paso a paso por las líneasde código siguientes o bien ejecutar elprograma hasta el siguiente punto deruptura. La solución anterior es útil si sequieren inspeccionar los cambios de losvalores individuales conforme el códigoprogresa. Presionando [F11] en el menúdebug le dice al intérprete que avance ala línea siguiente. Si se selecciona Run elintérprete ejecutará el código hasta elsiguiente punto de ruptura. La depura-ción remota es una forma más avanzadade depuración donde el código se ejecuta

EVALUACIÓN • Zend Studio 4

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

[1] Manual del PHPDocumentor: http://

www.phpdoc.org

[2] Zend: http://www.zend.com

RECURSOS

Figura 7: El perfil de Zend Studio analiza el uso de la CPU y ayuda a locali-

zar los cuellos de botella.

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

Si estás preparado para vivir sin KDE o Gnome, tal vez sea hora de pro-

bar Xfce, un eficiente, ligero y vistoso escritorio con una enorme colec-

ción de herramientas. POR MANFRED SHULENBURG

Instalar y explorar Xfce 4.2

UNA NUEVAESTRELLA

Xfce 4.2 • EVALUACIÓN

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

En enero de este año, el proyectoXfce publicó la versión 4.2 del escri-torio Xfce (véase Figura 1). Como

otros escritorios alternativos, Xfce es másrápido y más ligero con los recursos quesistemas más extendidos como Gnome yKDE. Pero Xfce es mucho más avanzadoque la mayoría de sus alternativas.

El escritorio Xfce 4.2, que es compati-ble con las especificaciones Freedesktop,proporciona un buen número de utilida-des de administración, un entorno dedesarrollo para compilar aplicaciones, ysoporte para más de 40 lenguajes de pro-gramación. Xfce 4.2 nos ofrece una mez-cla única de características y rendimien-to que lo hace una alternativa ideal paramuchos usuarios que quieran bajar unpeldaño desde Gnome o KDE.

Instalar Xfce 4Al igual que Gnome, Xfce está basado enel GIMP Multi Platform Toolkit.

Obviamente GTK+ será uno de lospaquetes que necesitaremos a la hora deinstalar Xfce 4. Además de GTK+, nece-sitaremos pkg-pkgconfig, libxml2, libdbh,y los correspondientes paquetes devel,dbh [1] y a2ps [2]. La página web deXfce [3] tiene información detallada dela función de todos estos paquetes nece-sarios.

Algunas distribuciones, incluidas SuseLinux y Fedora Core 3, tienen sus pro-pios paquetes Xfce que cumplen todaslas dependencias. Si usamos Suse pode-mos ejecutar YaST para instalar Xfce. Siusamos Fedora Core 3 podemos ejecutarla herramienta de administración depaquetes seleccionando System settings |

Add/Remove applications en el menúprincipal. De esta manera accedemos aun paquete Xfce 4 listo para instalar conun clic.

Alternativamente, podemos movernosal directorio con los paquetes de Fedora

desde la línea de comandos (por ejem-plo: /media/cdrom/Fedora/RPMS/) ydesde allí tecleamos system-install-pac-

kages xfce4*. Si optamos por este méto-do, tendremos que instalar el administra-dor de ficheros Xffm de manera manualcomo siguiente paso.

Para todas las demás distribuciones, osi queremos instalar la ultimísima ver-sión de Xfce, tendremos que instalar losbinarios de Xfce o los paquetes con elcódigo fuente. Los usuarios de UbuntuLinux pueden ejecutar la herramienta deadministración de paquetes basada eninterfaz gráfica Synaptic, o bien teclearapt-get install xfce4 para proceder a lainstalación. Necesitaremos una conexióna Internet en ambos casos. Debemos ase-gurarnos que hemos seleccionado lafuente de paquetes Universe. Una vezfinalizada la instalación, podemos tecle-ar startxfce4 para ejecutar Xfce.Mandrake Linux tiene también paquetes

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

listos para ejecutar en [4]. Tecleando lasiguiente orden:

urpmi.addmedia eslrahc U

http://www.eslrahc.com/10.1/U

with hdlist.cz

para añadir la URL a las fuentes de ins-talación existentes. Ejecutamos ahoraRpmdrake, buscamos Xfce y selecciona-mos el paquete xfce-4.2.1. Rpmdrakeresuelve automáticamente las depen-dencias. Nótese que, por defecto,Rpmdrake no instala la enorme colec-ción de herramientas disponibles paraXfce 4.2.1.

Instalación con AsistenteUna de las características especiales deXfce es que el entorno de escritorio tienesu propio instalador con interfaz gráfica(véase Figura 2). Si queremos usar esteinstalador, debemos descargar el archivoxfce4-4.2.1.1-installer.bin que ocupa15Mbytes desde [5] y darle permiso deejecución tecleando chmod +x

xfce4-4.2.1.1-installer.bin.El Xfce Installer comprueba el softwa-

re instalado, descarga cualquier progra-ma necesario desde Internet e instala unentorno completo de Xfce. El programanos avisa antes de iniciarse si no hapodido resolver las dependencias nece-sarias.

Bugs en Soportepara DebuggingEl siguiente paso esseleccionar los compo-nentes que vamos ainstalar. Será mejorevitar en este pasola opciónDebugging

Support. Si habi-litamos estaopción, apare-cerá un men-saje de erroral terminarla instala-ción. Deacuerdocon eldes-arro-

lladorde Xfce,

este proble-

ma está causado por un bug en el progra-ma xf-calendar que impide instalar elsoporte para debugging.

Incluso si hemos deshabilitado elsoporte para debugging, aparecerá unmensaje de error al final del proceso deinstalación: Software Uninstaller:

Registering failed. De nuevo, esto se debea un bug, pero afortunadamente no afec-ta propiamente a Xfce. El entorno confi-gurado desde este instalador con interfazgráfica funciona sin problemas.

Instalación desde lasFuentesEl conjunto completo de módulos deXfce está disponible esun archivo tar enSource-Forge [6]. Parapoder instalar losmódulos Xfce, necesi-taremos descargar losarchivosxfce-4.2.1.1-src.tar.bz2

y a2ps.tar.gz, aunquela mayoría de las dis-tribuciones ya tendránesta última instalada.Si al teclear which

a2ps nos aparece laruta del programa,sólo necesitaremosdescargar el paquetede Xfce.

Instalaremos a2ps en primer lugar, sifuese necesario. Luego descomprimimosel archivo xfce-4.2.1.1-src.tar.bz2 teclean-do tar xvfj xfce-4.2.1.1-src.tar.bz2. Eldirectorio creado en este paso,xfce-4.2.1.1, contiene un buen númerode archivos tar.gz que contienen el códi-go del programa. Podemos teclear tar

xfvz filename.tar.gz para descomprimirestos archivos.

Ahora nos vamos a los siguientesdirectorios: dbh-1.0.22, gtk-xfce-engi-

ne-2.2.6 y libxfce4util-4.2.1. En cada unode estos tres directorios, debemos teclear./configure, make, y make install.Necesitaremos permisos de administra-

EVALUACIÓN • Xfce 4.2

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

Figura 1: Xfce ofrece una atractiva interfaz de usuario con muchas características avanzadas.

Figura 2: El asistente de instalación de Os-Cillation.com sirve

como instalador gráfico de Xfce.

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

Xfce 4.2 • EVALUACIÓN

cionalidades básicas aXfce y son comparablescon las librerías DLLusadas por Windows.

Por ejemplo, la libre-ría libxfce4mcs permitecontrolar varias confi-guraciones, aunque lamayoría de las aplica-ciones no hacen uso de ella. Libxfce4utilcontiene un sistema de ayuda, sin inter-faz gráfica. Libxfcegui4 se encarga de lainteracción con el sistema X Window.

El PanelEL intuitivo panel de Xfce 4 tiene iconospara terminal, administrador de ficheros,navegador web, email, reproductor mul-timedia, escritorios, administrador deconfiguración, impresoras (con arrastrary soltar), archivos de ayuda, bloqueadorde pantalla, cierre de sesión y apagadode sistema (véase Figura 3). Podemosconfigurar cualquier icono pulsando conel botón derecho sobre él.

Podemos usar los botones con flechasa la derecha del administrador de fiche-ros y a la derecha del administrador deimpresoras para añadir más entradas a labarra. Por ejemplo, si usualmente guar-

damos nuestros archivos en /data, puedeque queramos que xffm apunte a estedirectorio al ejecutarlo. Para ello, añadi-mos un nuevo launcher y tecleamos laURL de /data en Command:. Cada vezque pulsemos en la entrada del panel, eladministrador de archivos xffm se iniciay se sitúa directamente en el directorio/data. Para añadir un nuevo laucher alpanel, pulsamos el panel con el botónderecho del ratón y seleccionamos Add

new object | Starter.

El Gestor de ConfiguraciónEl Settings Manager es un gestor de con-figuración consistente en un panel quepermite establecer la apariencia y com-portamiento de varios applets de maneraadecuada (véase Figura 4).

Además de varias opciones relativasal aspecto, este Settings Manager tienetambién herramientas para la configu-ración de sonido, impresora y acceso alcalendario. Algunas de las configura-ciones controladas por este gestor deconfiguración son bastante rudimenta-rias (por ejemplo, no proporciona unaopción para probar el sonido al confi-gurar la tarjeta de sonido), pero almenos el programa es fácil de usar eintuitivo.

El Administrador deArchivos XffmEl veloz administrador de archivos Xffmusa un diseño completamente diferenteal de sus competidores, Konqueror yNautilus. Dicho esto, su funcionamientoes fácil de comprender y debería hacer lavida más fácil a sus usuarios que cam-bian de Windows a Linux. Xffm com-prende ocho componentes, que puedeniniciarse individualmente a través delmenú principal.

*Xftree – Xftree es propiamente eladministrador de archivos. Muestra losarchivos locales y soporta navegaciónpor los archivos. El comando para quexffm muestre los archivos locales esxfree4.

dor para el paso make install. Despuésde finalizar la instalación de libxfce4util,pasamos a administrador para lanzar elprograma ldconfig y fijar la ruta dePkgconfig:

export PKG_CONFIG_PATH=/usr/ U

local/lib/pkgconfig

Continuamos con la instalación en losdirectorios libxfcegui4, libxfce4mcs, yxfce-mcsmanager. Podemos añadir másmódulos en el orden que queramos. Unavez terminemos de añadir módulos,tecleamos ldconfig para asegurarnos deque Xfce encuentre sus librerías de siste-ma cuando se inicie.

Si instalamos Xfce sin fijar ningúnparámetro, el entorno de escritorio sesituará en /usr/local/. Si preferimos ins-talar Xfce en /usr, tendremos que especi-ficar --prefix=/usr cuando ejecutemos./configure. Si hacemos esto no tendre-mos que exportar PKG_CONFIG_PATH=.

Componentes de Xfce 4Xfce 4.2 incluye un buen número de apli-caciones (véase Tabla 1), una colecciónde scripts (véase Tabla 2) y un sistemade librerías. Esta última proporciona fun-

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

Figura 3: El panel de Xfce proporciona a los usuarios un pequeño

menú y un buen número de accesos directos.

Componente Función

xfwm4 El gestor de ventanas y corazón del entorno de escritorio Xfce 4.2.xfce4-panel Una intuitiva barra que permite añadir fácilmente menús y botones de acceso.xfce4-session El administrador de sesiones se asegura de que encontraremos el escritorio tal

y como lo dejamos la última vez.xfce-mcs-manager El administrador de configuración.xfce-mcs-plugins Plugins para el administrador de configuración que no son estrictamente

necesarios, pero facilitan las cosas mucho con el ratón, teclado y la pantalla.xffm Xffm es un veloz administrador de archivos. El hecho de integrar un explora

dor de redes Samba es una característica útil para usuarios conectados en red y, digamos, LinVecinos.

xfce4-appfinder El Application Finder de Xfce busca programas instalados procesando los archivos .desktop, de la misma manera que KDE y GNOME.

xfce4-icon-theme El tema para los iconos estándar. Soporta iconos PNG y SVG de momento.xfce-utils El paquete de accesorios incluye varias herramientas de escritorio, scripts y

documentación de usuario para su navegación.xfdesktop El gestor de fondo de escritorio xfdesktop controla la configuración del fondo

y proporciona un menú de administrador al pulsar el botón derecho del ratón. El menú de administrador merece una mención especial. Podemos usarlo para adaptar el menú de escritorio o de administrador a nuestras necesidades.El editor de menús es también la interfaz que usamos para editar el archivo ~/.config/xfce4/desktop/menu.xml.

xfprint Xfprint es un gestor de impresión independiente que soporta CUPS, BSD-LPR e impresión a achivo.

xfwm4-themes Temas ornamentales para el gestor de ventanas xfwm4.gtk-xfce-engine-2 El gtk-xfce-engine-2 permite a los usuarios unas ventanas más vistosas con

GTK2. No es estrictamente necesario pero ofrece a los usuarios mayor placer visual para el esritorio.

xf-calendar Xf-calendar es un sencillo calendario con funciones de recordatorio.

Tabla 1: Componentes principales de Xfce 4.2

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

bién etiqueta carpetas en red. Podemosiniciar este componente tecleando xfbo-

ok4.*Xfglob – Muestra los resultados de

una búsqueda de archivos. Podemosabrir o ejecutar programas directamentedesde aquí. Con el comando xfglob4

abrimos el cuadro de diálogo para bús-quedas.

*Xffrequent – Proporciona una listade archivos y directorios visitados fre-cuentemente con Xffm, definiéndosecomo frecuente el umbral en 13 visitas.Se puede cambiar esta cifra en el menúprincipal si se desea. El comando parainiciarlo como herramienta independien-te es xfapps4.

*Xfrecent – Muestra los últimos archi-vos accedidos a través de Xffm. Se iniciatecleando xfrecent4.

*Xffstab – El componente Fstab, quepodemos lanzar tecleando xffstab4,muestra los dispositivos físicos y puntos

de montaje. Suponiendo quetenemos los privilegios adecua-dos, también podemos montar ydesmontar unidades.

*Xftrash – Es la papelera deXfce, que es diferente a cualquie-ra de KDE o GNOME. Si arrastra-mos un archivo de un directorioa la papelera, Xfce automática-mente crea una carpeta oculta enese directorio llamada .wastebas-

ket y mueve el fichero allí. Estonos permite investigar el conte-nido de la papelera para cadadirectorio de manera individualtecleando xftrash4.

Conclusiones y Mapade RutaXfce 4 es un entorno de escrito-rio estable y muy rápido. Notiene tantas características comolos pesos pesados, KDE yGNOME. Sin embargo es exce-lente para ordenadores antiguoscon recursos de memoria limita-

dos o usuarios que valoran un entornode escritorio veloz.

Trabajar con Xfce es un proceso intuiti-vo, que debería facilitar la vida a losusuarios noveles o con experiencia sólobajo Windows. Para hacer las cosas aúnmás fáciles, está previsto incorporarsoporte para iconos de escritorio. Hayuna detallada lista de mejoras por des-arrollar en [7]. Mientras tanto, podemosinstalar la herramienta Rox Filer [8] quenos posibilita tener iconos de escritoriobajo Xfce. �

*Xfsamba – Es el clienteSMB de Xfce. El navegadorde redes permite buscaren ordenadoresWindows en red y acce-der a directorios remo-tos. Para iniciar estecomponente comoun programa inde-pendiente, teclea-mos xfsamba4.

*Xfbook –Permite a losusuarios defi-nir marcado-res paradirectoriosvirtualesy archi-

vos. Xfbookno sólo admi-

nistra marcadoreslocales, sino que tam-

EVALUACIÓN • Xfce 4.2

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

[1] Librería para crear árboles multidi-mensionales binarios en disco: http://

sourceforge.net/projects/dbh/

[2] Conversor PostScript: http://ftp.gnu.

org/gnu/a2ps/

[3] Página de Xfce: http://www.xfce.org/

[4] Paquetes para Mandrake: http://www.

eslrahc.com/

[5] Instalador de Xfce: http://www.

os-cillation.com/article.php?sid=42

[6] Fuentes de Xfce: http://sourceforge.

net/projects/xfce/

[7] Nuevas características: http://www.

myoo.de/xfce/index.php/4.4_TODO

[8] Rox Filer: http://rox.sourceforge.net/

phpwiki/index.php/ROX-Filer

RECURSOS

startxfce4 Script de arranque del gestor de ventanas Xfce 4xfhelp4 Abre la documentación de Xfce 4 instalada localmente en nuestro navegadorxflock4 Bloquea la pantalla usando el Xscreensaver si está disponible.xfmountdev4 Monta dispositivos en el punto de montaje especificado e inicia xffm desde

ese allí. Al cerrar xffm, se desmonta el dispositivo.xfterm4 Arranca el terminal definido por la variable $TERMCMD. Si la variable no está

fijada, el script inicia xterm por defecto.

Tabla 2: Principales Scripts

Figura 4: El Settings Manager nos permite acceder a los componentes y configuraciones de Xfce.

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

Las emisoras de radio ya no sólo se limitan a la FM, sino que hay

muchas en Internet. Pero ¿cómo podemos grabar una emisión de

nuestro programa favorito desde la web? POR KRISTIAN KISSLING

Grabando Audio desde Internet

¡TÓCALA DE NUEVO!Grabando Audio desde Internet

¡TÓCALA DE NUEVO!

Ripping Audio Streams • PRÁCTICO

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

Internet ha dado a luz una nueva

generación de emisoras de radio que

emplean la retransmisión por la web

denominada webcasting o streaming,

para llevar a los usuarios sus programa-

ciones usando múltiples protocolos. La

innumerable cantidad de emisoras de

radio de shoutcast.com usan el formato

MP3 para sus retransmisiones, pero las

emisoras de radio tradicionales prefieren

usar el protocolo RTSP o PNM, los de

RealPlayer o el protocolo MMS, el de

MPlayer. Desafortunadamente, la graba-

ción de datos desde una fuente de entra-

da de audio implica algo de trabajo

extra.

StreamsLas emisoras de radio que usan el forma-

to MP3 son las más fáciles de grabar.

Streamriper [1] soporta la grabación de

datos MP3, como los de shoutcast.com o

icecast.org. El GUI Streamtuner [2]

soporta la grabación y reproducción

simultánea permitiendo a los usuarios

manipular algunos parámetros (Figura

1). Ambos programas pueden ser instala-

dos utilizando las aplicaciones de ges-

tión de paquetes que vienen con la

mayoría de las distribuciones. Los usua-

rios de Fedora tendrán que instalar el

paquete xmms-mp3 [3]. Hay que tener

en cuenta que tanto Fedora Core 3 como

Suse 9.3 ya no contendrán por defecto

los códecs para MP3.

Después de instalar Streamtuner,

habrá que ejecutar el programa a través

del menú del botón Inicio, pero se puede

abrir una ventana de terminal y teclear

streamtuner si lo prefiere. Esto hace que

se abra la interfaz gráfica con varias

solapas y entradas. Si se selecciona la

solapa SHOUTcast se muestra una lista

de las emisoras de radio disponibles. Si

se hace doble clic sobre una de ellas se

ejecuta el reproductor de MP3, como

Xmms, para empezar la reproducción.

Para grabar una emisora, tan sólo hay

que pulsar el botón Record de la barra de

herramientas. Entonces se abre una con-

sola que registra todo el proceso. Las pis-

tas se almacenan por defecto en el direc-

torio home del usuario.

A lo GrandeSi lo que se desea es grabar las emisiones

en formato RealAudio, entonces se com-

plica el proceso. RealPlayer que está dis-

ponible para Linux [4], puede reproducir

estos formatos pero no grabarlos. Se

necesita Vsound o Sox [5] para grabar

RealAudio.

Es fácil identificar la dirección de la emi-

sora si está incluida directamente en la

dirección web. Haga clic con el botón

derecho en el enlace que muestra el

stream y (en Mozilla) seleccione Save

link target as. Puede abrir el fichero en

un editor de texto, como kate, para ver la

dirección del stream. El procedimiento

para identificar la dirección es más com-

plicado si la estación de radio incluye el

reproductor en una ventana emergente.

En este caso, necesita echarle un vistazo

al código fuente de esta ventana para

obtener la dirección. Quizás necesite ais-

lar el marco con el botón de play de la

ventana emergente. Para hacerlo en

Mozilla, haga clic con el botón derecho

en cualquier parte cerca del botón de

play y seleccione Show only this frame.

Ahora puede buscar en el código HTML

cosas como lsc.redirect, embed src, ra,

rm o smil. A continuación, introduzca

wget -O address.txt http://foundad-

dress.ra para analizar la dirección y

almacenarla en el fichero address.txt.

Por último teclee cat address.txt para

leer el fichero de direcciones y descubrir

las direcciones, que normalmente

comenzarán con RTSP:// o MMS://.

Cuadro 1: Encontrando la Dirección de la Emisora

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

Vsound captura la salida de

audio de cualquier programa

de sonido externo e invoca a

Sox para almacenarlo en for-

mato .wav. Además de estos

dos programas se necesita

Lame [6], para convertir los

ficheros wav a MP3.

Antes de empezar la instala-

ción, hay que asegurarse de

que los paquetes no estén ya

instalados. Esto se hace tecle-

ando which sox. si la respues-

ta no contiene una ruta como

/usr/bin/sox, entonces habrá

que ejecutar el gestor de

paquetes y empezar la instala-

ción de Sox y Vsound. Luego

se instala Lame. Se puede des-

cargar RealPlayer como un paquete RPM

o como un fichero binario desde

Internet. RealPlayer supone que el entor-

no de ejecución de Java (JRE) está dis-

ponible. Para averiguarlo tan sólo hay

que teclear which java. Si no aparece,

habrá que instalarlo primero. Para insta-

lar el fichero binario, hay que entrar

como root y luego teclear el comando:

sh ./RealPlayer10GOLD.bin.

El proceso de grabación comprende

tres pasos. Primero, hay que averiguar la

URL de la emisora (véase el cuadro

“Encontrando la Dirección de la

Emisora”). Segundo, abrir una ventana

de terminal y teclear el siguiente coman-

do:

vsound -d -t -f U

test.wav realplay U

rtsp://stream_address

Este comando ejecuta RealPlayer y

comienza a reproducir la emisión desde

la dirección rtsp://stream_address mien-

tras que Vsound lo graba. La opción -f

redirige el audio a un fichero denomina-

do test.wav. La opción -d se asegura de

que se escucha mientras se graba. Hay

que recordar que hay que cerrar el pro-

grama RealPlayer manualmente para

empezar a convertir el fichero temporal

au a formato wav. Hay que asegurarse de

que se dispone de espacio suficiente en

el disco duro para poder almacenarlo. El

tercer paso es convertir el fichero wav a

MP3. Tecleando lame test.wav radiostre-

am.mp3, se realiza la conversión.

Ripéalo…Por último, vamos a ver el protocolo

MMS. MMS son las siglas de Microsoft

Media Services. Los ficheros MMS los

confecciona el Windows Media Player.

MPlayer puede leer este formato, pero

hay que instalarlo manualmente, ya que

casi ninguna distribución incluye

MPlayer. Los usuarios de Suse pueden ir

a [7] para descargar los paquetes reque-

ridos: Lame, el codec Win32 y mplayer.

Los usuarios con Fedora, Mandrake o

Debian deben compilar la aplicación

desde los archivos fuente.

La compilación de MPlayer desde los

ficheros fuente lleva menos tiempo que

intentar resolver todas las dependencias

que se producen al instalarlo desde el

paquete. Primero se entra como root y se

crea un directorio, como se sigue: mkdir

/usr/local/lib/codecs. Se establecen los

permisos con: chmod 664

/usr/local/lib/codecs. Tras descargar el

paquete essential codec desde la página

de MPlayer en [8] y descomprimirlo, hay

que copiar el contenido

del paquete en el direc-

torio /codecs, luego hay

que teclear ./configure,

make y luego, como

root, make install. Este

paso sitúa el ejecutable

en /usr/local/bin.

Ahora vienen los tres pasos

anteriores. Primero, obtener la

dirección de la emisión, tal y

como se describe en el cuadro

titulado “Encontrando la direc-

ción de la emisora”. Segundo,

convertir el fichero a formato

wav llamándolo

audiodump.wav. El comando

mplayer

'mms://laemisora.wma' -ao

pcm pasa el flujo de audio al

dispositivo de salida de audio,

que almacenará los datos

como audiodump.wav. No se

reproducirá sonido mientras se

graba. Finalmente, hay que

convertir el fichero wav a MP3

usando el siguiente comando:

lame audiodump.wav

myradiostream.mp3 (Figura 2). Si se pre-

fiere trocear el fichero continuo de audio

en varias pistas, se puede usar una

herramienta como Audacity [10]. �

PRÁCTICO • Ripping Audio Streams

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

Figura 1: Streamtuner ofrece grabación MP3 con un entorno muy

fácil de usar.

Figura 2: Lame convierte el fichero wav a MP3.

[1] Descarga del código fuente de

Streamripper: http://sourceforge.net/

project/showfiles. php?group_id=6172

[2] La página de Streamtuner con el códi-

go fuente y los RPMs: http://www.

nongnu.org/streamtuner/

[3] El códec MP3 para Fedora Core 3:

http://dag.wieers.com/packages/

xmms/xmms-mp3-1.2.10-11.1.1.fc3.rf.

i386.rpm

[4] RealPlayer para Linux: http://www.

real.com/linux/

?rppr=rnwk&src=040104freeplayer

[5] Ficheros fuentes para Vsound y Sox:

http://prdownloads.sourceforge.net/

sox/sox-12.17.7.tar.gz?download

http:// www. zorg. org/ vsound/

vsound-0. 6. tar. gz

[6] Código fuente de Lame: http:// lame.

sourceforge. net/

[7] Ficheros Mplayer para Suse: http://

packman.links2linux.org/

?action=index

[8] Sitio web de MPlayer con los fuentes:

http://www.mplayerhq.hu/homepage/

design7/dload.html

[9] Sitio web Cutmp3 con los RPMs:

http://www.puchalla-online.de/

cutmp3.html

[10] Sitio web de Audacity: http://

audacity.sourceforge.net/

RECURSOS

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

Base de datos Tellico

PIEZA DECOLECCIONISTA

Tellico • PRÁCTICO

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

Tellico [1], antes conocido comoBookcase, se diseñó como unabase de datos para libros. En la

actualidad el programa no sólo ofrece asus usuarios una estantería virtual sinoque ayuda a organizar colecciones devideos, cómics, monedas y sellos. Inclusopodremos administrar nuestra bodega devinos con un poco de ayuda de Tellico.

Desde hace poco el programa ha intro-ducido una funcionalidad para definircolecciones por parte del usuario, lo quele proporciona una útil herramienta parapequeñas colecciones. La única restric-ción es que no soporta bases de datosrelacionales.

Tellico guarda la información enarchivos XML. Además de su propioformato, el programa admite unbuen número de formatos externos,facilitando la labor de migrar lasbases de datos existentes. La aplica-ción se refiere a las bases de datoscomo colecciones. La colecciónpuede contener cuantos registros sequieran, y los registros, cuantoscampos se deseen, igualmente.

En su DiscoInstalar Tellico es sorprendente-mente fácil. La página web del pro-

yecto alberga paquetes listos para usarpara Fedora, Suse, Slackware y Mandriva.Si optamos por compilar el programadesde su código fuente, necesitaremos elpaquete con el código, y al menos KDE3.1, la librería Qt versión 3.1, libxml2 ylibxslt y los correspondientes paquetes dedesarrollo. Seguimos los pasos habitualespara compilar e instalar el programa:./configure, make y make install.

ArrancamosLa primera vez que ejecutamos Tellico,el programa nos muestra una colecciónde libros vacía. Podemos empezar direc-

tamente aquí introduciendo los regis-tros de los libros (véase Figura 1). Elárbol de la izquierda nos muestra losregistros, que se organizan por autor.En la parte derecha, Tellico ofrece a losusuarios una lista de libros ordenadapor título, con un resumen del registroseleccionado en una ficha en la parteinferior derecha.

Para ayudarnos a llevar la cuenta,podemos organizar las entradas de lavista en árbol en función de diferentescriterios. En la ventana de listado se dala opción de definir los campos a nuestroantojo. Esto ahorra espacio y nos permi-

te apreciar los detalles principalesde un sólo vistazo. Para cambiarlos campos de la ventana listado,hacemos clic con el botón derechoen la cabecera de una columna yusamos el menú desplegable paradefinir qué columnas queremosque se muestren.

Para cambiar el agrupamientode los registros, hacemos clic conel botón derecho sobre el título deuna colección y seleccionamosGroup selction|Name of group enel menú. Podemos simplementefiltrarlo por grupo seleccionandoFilter by group en este menú.

Figura 1: Tellico crea automáticamente una base de datos

de biblioteca la primera vez que se ejecuta.

Linux nos ofrece una fantástica colección de servidores de bases de datos, pero muchos usuarios

únicamente buscan una sencilla aplicación de base de datos. Tellico viene a cubrir este nicho.

POR FRANK WIEDUWILT

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

Tellico alivia la ardua tarea de llenar labase de datos proporcionando una inter-faz gráfica para introducir la información.Para añadir una nueva entrada, seleccio-namos Collection|New Entry en el menú,o con el atajo de teclado [Ctrl]+[N]. Elcuadro de diálogo con varias pestañasnos permite introducir los datos de unnuevo libro (véase Figura 2). Si somosmuy detallistas podemos incluso añadiruna valoración e incluso una imagen dela portada.

Una vez hayamos terminado, pulsamosel botón Save Entry para añadir el libro ala colección de libros. Si necesitamosmodificar la entrada posteriormente, sim-plemente hacemos doble clic en la entra-da en la ventana de listado. Las otrasplantillas de bases de datos están igual-mente bien diseñadas, y pueden usarsesin ninguna modificación.

En Busca y CapturaNadie crea una enorme base de datossimplemente porque le divierte almace-nar información. Por lo que no sorprendeque el auténtico punto fuerte de Tellicono sea ir metiendo información, sinorecuperarla de nuevo. Podemos buscar encualquier colección por palabras clave,

sin estar restringidos a cadenas simples.Tellico soporta expresiones regulares, ade-más de consultas avanzadas.

Seleccionamos Edit|Search en el menúy tecleamos la consulta en el cuadro dediálogo que aparece. La máscara de con-sulta nos permite la opción de buscar entodos los campos y especificar si la bús-queda debe ser sensible a mayúsculas/minúsculas.

Los filtros permiten restringir el númerode registros mostrados como resultado.Para aplicar un filtro, seleccionamosSettings|Extended filters en el menú yrecopilamos nuestras condiciones para elfiltro en el cuadro de diálogo que aparece(véase Figura 3). La primera columna espara el campo, la segunda guarda la con-dición que deben cumplir y la tercera espara la palabra clave o expresión regularpara la que estamos filtrando. Podemosdefinir un total de ocho condiciones. Unavez hayamos terminado, pulsamos enApply, y Tellico nos mostrará los registrosque cumplen con nuestras condiciones enla ventana principal de listado.

Nuestra Propia Base deDatosAdemás de las bases de datos ya prefa-bricadas, Tellico proporciona la posibi-

lidad de definirnuestras propiascolecciones. Alpulsar sobre File |

New | New

user-defined

collection le indi-camos a Tellicoque genere unabase de datosvacía. Podemosentonces pulsar[Ctrl] + [U], oseleccionarCollection |

Collection fields

para abrir un cua-dro de diálogo

donde podemos definir los cam-pos (véase Figura 4).

Pulsamos New para crear unnuevo campo. Tecleamos entoncesel nombre del campo en el cuadrode texto Title y seleccionamos untipo de campo de la lista desplega-ble Type. La tabla 1 muestra unresumen de los tipos disponibles yel contenido del campo que acep-

tan. Podemos añadir una descripción enDescription, que Tellico guardará y mos-trará como pista cuando pulsemos elbotón derecho del ratón y seleccionemosWhat is this? del menú.

En la sección Format Options podemosespecificar si Tellico permitirá modificarel contenido de los campos después dehaberlos introducido.

Allow auto capitalization indica queTellico pasará a mayúsculas todos los nom-bres propios. Mientras que la opciónFormat as a title elimina los artículos delcomienzo del título y los añade al final. Porejemplo, Tellico convierte El Retorno de los

Duendes en Retorno de los Duendes, El.Esto hace más fácil ordenar el árbol por

título, y evita el problema de tener cientosde entradas que empiezan por El.Podemos indicar qué palabras puedenpasar al final del título en el cuadro deconfiguración: pulsamos en Settings |

Configure Tellico.Añadimos las palabras en el campo

Articles dentro de General Options. Laelección más obvia son los artículos defi-nidos y los indefinidos. Incluso podemosañadir prefijos de apellidos.

La opción Enable auto-completion habi-lita autocompletar palabras, con lo que sefacilita la introducción de datos: mientrastecleamos el programa añade contenidode entradas conocidas. La opción Allow

multiple values nos permite especificardos autores por libro. Ambos nombres semostrarán como entradas separadas en lavista en árbol. La máscara de entrada usael punto y coma como separador decarácter. Por último, con Allow grouping

se especifica si permitimos a Tellico queagrupe un campo en el árbol.

Importar y ExportarTellico admite un buen número de forma-tos a la hora de intercambiar datos conotros programas, como bases de datos yhojas de cálculo.

Además de los formatos Bibtex yBibtexml, que serán de interés para

PRÁCTICO • Tellico

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

Figura 2: Tellico proporciona al usuario un cui-

dado cuadro de diálogo para introducir los

registros.

Figura 3: Usamos este cuadro para definir filtros de

búsqueda en registros específicos.

Figura 4: Con este cuadro definimos los campos de nuestra propia base

de datos.

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

Tellico • PRÁCTICO

columnas correctas delarchivo CVS.

Mapear los campos esmuy sencillo. El progra-ma nos muestra unalista de campos en laparte inferior del cuadrode importación.Pulsamos en la cabecerade la columna, seleccio-namos Data field in this

column, elegimos elcampo requerido y pul-samos Apply. Si loscampos en la base dedatos de Tellico y en elarchivo CVS usan losmismos nombres, elprograma los mapeaautomáticamente. Al pulsar sobre OK seinicia la importación de datos.

Tellico esconde otro as en la manga: laposibilidad de llenar basesde datos directamentedesde fuentes en Internet.Para ello, seleccionamosEdit | Internet Search ytecleamos una palabraclave o un número ISBNen el campo Search.Podemos editar la lista deSearch Sources para indi-carle a Tellico en qué fuen-tes buscar la palabraclave. Si la búsquedaresultó correcta, podemosguardar los resultados enla base de datos pulsandoen Add entry.

La característica deexportación de datos es igualmente muyconfigurable. Para alojar una colección ennuestra propia base de datos, tendremos

en primer lugar que convertir nuestracolección en varios archivos HTML. Paraello, seleccionamos File | Export | Export

to HTML. En el cuadro de diálogo queaparece, podemos decidir qué registrosponer en la página HTML y elegir si prefe-rimos que los agrupe (véase Figura 6).

El resultado es un fichero HTML quecontiene los registros seleccionados, agru-pados de la misma manera que en la vistaen árbol. El programa únicamente añadeal fichero los campos que se muestran enla ventana de listado.

En cuanto al procesamiento en Latex,Tellico puede exportar los registros en for-mato Bibtex. Los usuarios del gestor delibros Alexandria para Gnome puedenintercambiar datos directamente con elprograma.

ConclusionesTellico es un sólido programa, muy senci-llo de utilizar. Se adapta para cualquiertipo de colección que no requiera accesossimultáneos de varios usuarios y no tengauna estructura particularmente complica-da. En nuestras pruebas, en las que impor-tamos una base de datos con más de 3.000registros de libros desde un fichero CVS,quedó patente que puede manipular fiche-ros mayores sin ningún problema.Trabajando en un equipo a 1 GHz, Tellicotardó menos de diez segundos en importarlos datos. �

bibliotecarios y fanáticos de los libros,Tellico también permite usar datos en for-mato CSV. Y prácticamente cualquier hojade cálculo permite crear o exportar enCSV (que viene de valores separados porcoma). Incluso la libreta de direcciones deKDE usa este formato para exportar con-tactos.

Para importar un archivo CSV aTellico, lo primero que necesitamos escrear una colección, definiendo los cam-pos de los datos que vayamos a importar.Cuando hayamos acabado, selecciona-mos File | Import | Import CSV data en elmenú, y exploramos hasta seleccionar elarchivo origen. En este momento apare-cerá el menú de importación (véaseFigura 5).

Podemos habilitar o deshabilitar laopción First row contains field titles

dependiendo de si la primera línea delarchivo CVS contiene un registro con losnombres de los campos.El carácter que separalas entradas en el CVS esel Delimiter. Aunque elpropio nombre CVSdebería implicar quesólo se usan comascomo separadores, lamayoría de los progra-mas tienen la opción deseleccionar el carácterde separación. Estotiene sentido si la propiainformación incluyecomas, como en los con-tactos: Apellidos,

Nombre. La parte infe-rior de la ventana deimportación muestra una vista previa delos resultados, y permite verificar sihemos asignado los campos en las

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

Figura 6: Podemos incluso publi-

car nuestros datos en Internet.

Tellico tiene una función que

permite exportar nuestras bases

de datos a un fichero HTML.

Tipo de dato ContenidoSimple text Texto simple de cualquier longitud sin retorno de carroParagraph Texto de cualquier longitud con retornos de carroURL Enlaces a archivos locales o documentos en InternetChoice Lista con varias entradas, pero con selección únicaNumber Campo para enteros de cualquier tamañoImage Gráfico de cualquier formato soportado por KDE. Tellico guarda la imagen en

la base de datosCheckbox Valor Si/NoDate Fecha en formato KDETable Lista con ilimitado número de elementosTable (2 Columnas) Lista a dos columnas con ilimitado número de elementos. Tellico sólo agrupa

los de la primera columnaDependent Toma valores de otros campos, permite combinaciones de valores

Tabla 1: Tipos de datos en Tellico

Figura 5: Tellico importa ficheros CVS entre otros formatos

[1] Tellico: http://www.periapsis.org/

tellico/

RECURSOS

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

El API de Google Maps

GUARDANDO LAS DISTANCIAS

El API de Google Maps

GUARDANDO LAS DISTANCIAS

42

PRÁCTICO • GMaps

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

Los ingenieros de Google nos hanpreparado un API desarrollada enJavaScript (o ECMAScript[1]) para

que podamos diseñar programas queaccedan a los planos y fotografías porsatélite de la Tierra. Estasaplicaciones se podránincrustar en nuestras pági-nas Web de manera senci-lla y directa y se ejecutarándesde el navegador delusuario. Es decir, es elnavegador (Firefox, IE,Opera…) el encargado deejecutar las aplicacionesque diseñemos, con lo queno necesitaremos ningunainfraestructura particulardesde el lado del servidor.Como ejemplo y presenta-ción del API hemos pensa-do desarrollar un programatal que, dado un plano ofotografía podamos dibujara base de clicks del ratónun trayecto o recorrido paraluego indicarnos la distan-cia en kilómetros de dichocamino. Esta puede ser la base para ¿unpodómetro digital?

La FirmaNosotros podemos usar el API siempreque cumplamos unos requisitos estable-

cidos por Google[2], que básicamenteson: poner nuestros desarrollos accesi-bles de manera libre, no sobrepasar unnúmero medio de consultas al día y noocultar el logotipo de Google en los

sitios donde éste aparez-ca. Antes de poder usar elAPI necesitaremos obte-ner una firma que nosidentifique como usuario.Desde [3] podremos crearuna de estas firmas siem-pre y cuando tengamosuna cuenta en Google.Con la cuenta de Gmail essuficiente, pero si nosomos usuarios de esteservicio podremos crearuna nueva cuenta desdelos enlaces indicados enla dirección anterior.Cada firma estará asocia-da a un usuario y a unaURL de acceso. Si no dis-ponemos de una direc-ción Web donde alojarnuestros desarrollos perotenemos el servidor

Apache instalado de manera local,podremos dar de alta la dirección http://

localhost para hacer nuestras pruebas.Hay que tener cuidado a la hora de indi-car la dirección desde donde se accederáa nuestros programas ya que si nos

equivocamos o no indicamos de maneracompleta la dirección donde se aloja lapágina Web, no podremos acceder a losservicios ofrecidos por este API. Esimportante escribir la dirección comple-ta, incluyendo los puertos y directorios.Yo, por ejemplo, para hacer las pruebasen mi ordenador portátil tengo elApache instalado en el puerto 8080 y hecreado un directorio llamado maps

donde voy a alojar mi página Web. Ladirección sobre la que genero la firmasería, por tanto:

http://localhost:8080/maps/

Hay que destacar que podremos creartantas firmas como necesitemos. Unavez aceptados los términos del contratoobtendremos una larga cadena alfanu-mérica que guardaremos en un ficheropara su posterior uso.

El Vuelo del FénixComo primer ejemplo vamos a usar lapágina HTML mostrada en el Listado 1.En la documentación oficial del API [4]se recomienda el uso del XHTML en vezdel HTML. Las razones están en la por-tabilidad que proporciona este nuevoestándar. Los documentos XHTML sedeclaran por medio del DOCTYPE mos-trado en la línea 1. También se reco-mienda incluir la línea 2 y de la 5 a la 9

Figura 1: El control largo

de la izquierda correspon-

de a GLargeMapControl, el

mediano de la derecha es

GSmallMapControl y el

pequeño es

GSmallZoomControl.

Recientemente Google nos ha sorprendido con

dos anuncios. El primero es la incorporación de

imágenes por satélite en su servicio Google

Maps y el segundo es la publicación del API de

libre acceso a estos mapas e imágenes para el

desarrollo de aplicaciones Web.

POR ALBERTO PLANAS

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

GMaps • PRÁCTICO

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

para que el navegador Internet Explorerpueda mostrar correctamente algunos delos efectos que proporciona la libreríaJavaScript de Google Maps (en particularlas líneas de trayectos explicadas másadelante en el artículo).

Necesitaremos incluir el ficheroJavaScript que contiene el código delAPI, para ello usaremos un comandosimilar al de la línea 10 del Listado 1.Tenemos que cambiar en...&key=XXXXX< las equis por la firmao clave generada por Google hace unosinstantes. De esta manera quedaremosidentificados y podremos empezar a lla-mar a las funciones proporcionadasdesde el servidor de Google.Curiosamente todo el XHTML de esteprimer ejemplo queda relegado al de laslíneas de la 27 a la 29. Es ahí donde deci-mos que, tras cargar la página HTML, elnavegador debe ejecutar la funciónJavaScript onLoad definida en la línea14. En la línea 28 encontramos un<div> de 500x500 píxeles con identifi-cador map (dentro de un momento vere-mos para qué se utiliza ésta etiqueta).

En la función onLoad es donde iniciali-zamos el mapa. Como ya hemos comen-tado, todo el API proporcionado porGoogle está escrito en JavaScript y quedicho código se ejecutará en el navega-dor Web del usuario. No todos los nave-gadores proporcionan la misma versiónde JavaScript ni las mismas funcionali-dades, por lo que aparecen ciertasincompatibilidades entre dichos navega-dores. Para asegurarnos que nuestro pro-grama se ejecutará en los navegadores

soportados por el API, realiza-remos la llamada a la funciónGBrowserIsCompatible()

(línea 15). Si estamos usandoFirefox, Safari, Opera o IE 5.5(o superior) entonces no ten-dremos ningún tipo de proble-ma. En la siguiente línea crea-remos un objeto del tipoGMap y le pasaremos al cons-tructor el objeto <div> cuyoidentificador sea map. Ésteobjeto HTML será usado porGMap para insertar un mapadel tamaño asociado a dichaetiqueta. GMap ofrece uninterfaz que puede ser consul-tado en la documentación ofi-cial[3] (también comprobare-mos que hay diversos cons-

tructores para este objeto), pero ya en lalínea 17 vemos que podemos hacer lla-madas al método addControl(). Lo usa-mos para añadir diversos controles almapa que permitirán modificar su com-portamiento. El mapa puede ser despla-zado con el ratón presionando simple-mente el botón izquierdo y arrastrandoel cursor, pero también podemos usar uncomponente asociado al mapa que ade-más de desplazarlo permitirá cambiar elnivel de zoom. Este componente es elque añadimos en la línea 17 del Listado1, que corresponde al situado en laesquina superior derecha en la Figura 1.Podemos jugar con el código cambiandoesta línea por:

map.addControl(newU

GLargeMapControl());

De esta manera lograremos incluir uncontrol de posicionamiento y de zoomdiferente. Hay otros dos tipos de contro-les que podemos añadir: un selector detipo de mapa y un medidor de escala enKm y Millas. De estos dos el más impor-tante es el selector de mapas, que seincluye en la línea 18. Hay tres tipos demapas: el normal, la fotografía del satéli-te y una sobreimpresión del primerosobre el segundo. Un ejemplo de cadauno de ellos lo podemos encontrar en lasFiguras 2 a la 4. Por ahora los mapas clá-sicos donde aparecen los nombres de lascalles y direcciones sólo están disponi-bles para EE.UU, R.U y Japón, con lo queno resulta de ninguna utilidad en España(a ver si los chicos de Google se ani-

Figura 2: Mapa de una zona de Palo Alto.

01 <!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0

Strict//EN"

"http://www.w3.org/TR/xhtml1/D

TD/xhtml1-strict.dtd">

02 <html

xmlns="http://www.w3.org/1999/

xhtml"

xmlns:v="urn:schemas-microsoft

-com:vml">

03 <head>

04 <title>Ejemplo 1 -

test1.html</title>

05 <style type="text/css">

06 v\:* {

07

behavior:url(#default#VML);

08 }

09 </style>

10 <script

src="http://maps.google.com/ma

ps?file=api&v=1&key=XXXXX"

type="text/javascript"></scrip

t>

11 <script type="text/javas-

cript">

12 //<![CDATA[

13

14 function onLoad() {

15 if

(GBrowserIsCompatible()) {

16 var map = new

GMap(document.getElementById("

map"));

17 map.addControl(new

GSmallMapControl());

18 map.addControl(new

GMapTypeControl());

19 map.addControl(new

GScaleControl());

20 map.centerAndZoom(new

GPoint(-122.1419, 37.4419),

4);

21 }

22 }

23

24 //]]>

25 </script>

26

27 <body onload="onLoad()">

28 <div id="map"

style="width: 500px; height:

500px"></div>

29 </body>

30 </html>

Listado 1: test1.html

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

man). En la línea 20 centramos la ima-gen especificando la latitud, longitud ynivel de zoom. Para este ejemplo hemos

escogido las coordenadas de Palo Alto,California. Hay que tener cuidado alindicar las coordenadas del punto en el

que queremos centrar el mapa, primerohay que indicar la longitud y luego lalatitud. Generalmente encontraremos las

PRÁCTICO • GMaps

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

01 <!DOCTYPE html PUBLIC

"-//W3C//DTD XHTML 1.0

Strict//EN"

"http://www.w3.org/TR/xhtml1/DT

D/xhtml1-strict.dtd">

02 <html

xmlns="http://www.w3.org/1999/x

html"

xmlns:v="urn:schemas-microsoft-

com:vml">

03 <head>

04 <title>Calcular

distancias</title>

05 <style type="text/css">

06 v\:* {

07

behavior:url(#default#VML);

08 }

09 </style>

10 <script

src="http://maps.google.com/map

s?file=api&v=1&key=XXXXX"

type="text/javascript"></script

>

11 <script

type="text/javascript">

12 //<![CDATA[

13 // Puntos del trayecto

(GMaker)

14 var points = new Array;

15 // Ultima linea dibujada

16 var polyLine;

17 function onLoad() {

18 if

(GBrowserIsCompatible()) {

19 var map = new

GMap(document.getElementById("m

ap"), [G_SATELLITE_TYPE]);

20 map.addControl(new

GSmallMapControl());

21 map.addControl(new

GScaleControl());

22

GEvent.addListener(map,

'moveend', function() {

23 var center =

map.getCenterLatLng();

24 var latLngStr = '('

+ center.y + ', ' + center.x +

')';

25

document.getElementById("latlon

g").innerHTML = latLngStr;

26 });

27

GEvent.addListener(map,

'click', function(overlay,

point) {

28 if (overlay) {

29 removeOverlay(map,

points, overlay);

30 } else if (point) {

31 addOverlay(map,

points, new GMarker(point));

32 }

33 polyLine =

drawLine(map, points,

polyLine);

34 var distance =

calcDistance(points);

35

document.getElementById("distan

ce").innerHTML = distance + "

Km"; 42. });

36

37 map.centerAndZoom(new

GPoint(-4.48333, 36.66667), 4);

38 }

39

40 function drawLine(map,

points, lastLine) {

41 var p = new Array();

42 for (var i = 0; i <

points.length; i++) {

43 p.push(new

GPoint(points[i].point.x,

points[i].point.y));

44 }

45 var newLine = new

GPolyline(p);

46

47 if (lastLine) {

48

map.removeOverlay(lastLine);

49 }

50

map.addOverlay(newLine);

51

52 return newLine;

53 }

54 function addOverlay(map,

points, overlay) {

55

map.addOverlay(overlay);

56 points.push(overlay);

57 }

58 function

removeOverlay(map, points,

overlay) {

59

map.removeOverlay(overlay);

60 var oi = -1;

61 for (var i = 0; i <

points.length; i++) {

62 if (points[i] ==

overlay) {

63 oi = i;

64 break;

65 }

66 }

67 points.splice(oi, 1);

68 }

69 function

calcDistance(points) {

70 var distance = 0.0;

71 var p1 = points[0];

72 for (var i = 1; i <

points.length; i++) {

73 var p2 = points[i];

74 var lat1 =

p1.point.y * Math.PI / 180.0;

75 var lon1 =

p1.point.x * Math.PI / 180.0;

76 var lat2 =

p2.point.y * Math.PI / 180.0;

77 var lon2 =

p2.point.x * Math.PI / 180.0;

78 distance += 6378.7 *

Math.acos(Math.sin(lat1) *

Math.sin(lat2) + Math.cos(lat1)

* Math.cos(lat2) *

Math.cos(lon2 - lon1));

79 p1 = p2;

80 }

81 return distance;

82 }

83 }

84 //]]>

85 </script>

86 <body onload="onLoad()">

87 <div id="map"

style="width: 500px; height:

500px"></div>

88 <div id="latlong"></div>

89 <div id="distance"></div>

90 </body>

91 </html>

Listado 2: distancia.html

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

ecuador y la longitudel ángulo que hayentre dicho punto yel meridiano cero.Sabiendo las coor-denadas de dospuntos sobre lasuperficie de unaesfera no podremoscalcular la distanciaque los separa, necesita-mos otro dato: el radio dedicha esfera. Si consideramosque la tierra tiene unos6378.7 Km de radio medio (latierra no es una esfera perfec-ta) entonces podremos usarla geometría esférica para cal-cular dichas distancias. Haymuchas formulas que permi-ten este cálculo. Yo recomien-do ver algunas de las expues-tas en [5]. La que con másfrecuencia he visto emplearrequiere que pasemos prime-ro los grados de la latitud ylongitud a radianes, paraluego aplicar la siguiente fór-mula:

d = 6378.7 *U

acos(sin(lat1)U

* sin(lat2) + cos(lat1)U

* cos(lat2) * cos(lon2 -U

lon1))

No es necesario que nosdetengamos mucho más enesta ecuación, ya que su usopuede examinarse en la fun-ción calcDistance() delListado 2. De todas maneras,

desempolvando los viejos libros de trigo-nometría la podremos deducir fácilmente(u otra equivalente).

Analizando el código veremos sutilesdiferencias con respecto al primer ejem-plo. La primera es que en la llamada delconstructor GMap pasamos un paráme-tro extra (línea 21). Es un array de unsolo elemento. Lo usamos para indicarque sólo queremos que se muestre elmodo de satélite y así poder quitar losbotones de selección de modo de visio-nado, que no tienen ninguna utilidad enla península. El API de Google permiteasociar funciones a una lista de eventospreestablecidos, de esta manera podre-mos modificar el comportamiento del

siste-ma ante la pulsa-ción del ratón en determinada zona delmapa, cuando se produce un desplaza-miento, se realiza un zoom sobre elmapa o se añade una marca … La listacompleta de eventos soportados puedeconsultarse en la documentación. Paranuestro programa necesitaremos inter-ceptar dos eventos, uno cuando terminade realizarse un desplazamiento parapoder tomar las nuevas coordenadas delcentro del mapa y mostrarlas al usuario.El otro es cuando se realiza una pulsa-ción de ratón sobre el mapa, de estamanera podremos añadir y quitar marcasque definan el trayecto que deseamosmedir. El API de Google Maps permitediversas maneras de interceptar eventos,pero nosotros engancharemos nuestrasfunciones de la siguiente manera:

GEvent.addListener(map,U

'click', function(overlay,U

point) {

map.recenterOrPanToLatLngU

(point);

});

Usando el método addListener() de laclase GEvent deberemos indicar el even-to que deseamos interceptar y la funciónque lo tratará. En este caso estamosinterceptando la pulsación de ratónsobre el mapa (evento click). La funciónde este evento en particular puede reci-bir dos parámetros: el overlay o marcasobre la que hemos pulsado y un puntoque contiene las coordenadas exactas dela pulsación. En la línea 25 intercepta-mos el evento movend que se producirácada vez que finalicemos un desplaza-miento. De todas maneras el eventoimportante se intercepta en la línea 35del Listado 2. Añadiendo nuestro propio

coordenadas de las zonas de interés enorden inverso: latitud, longitud.

Después de esta introducción pasare-mos a ver el programa para calcular lasdistancias. Éste usa algunas característi-cas avanzadas como eventos y marcas,pero comparte con el primero la estruc-tura básica. El programa completo lopodemos ver en el Listado 2.

EsferaCualquier punto sobre la superficie de latierra puede ser localizado usando dosnúmeros: la latitud y la longitud. Cadauno se expresa en grados, ya que lo queestamos es midiendo ángulos. La latitudindica qué ángulo hay entre el punto y el

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

Figura 4: Sobreimpresión del mapa con la imagen por

satélite. Podemos ver los nombres de las calles sobre la

verdadera calle.

Figura 3: Fotografía de satélite de la misma zona.

GMaps • PRÁCTICO

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

mos usar de manera directalos estándares del API. Unamarca se crea y se posicionaen el mapa de la siguientemanera:

var m = new GMarker(newU

GPoint(lon1, lat1));

map.addOverlay(m);

Deberemos crear una marcalocalizada en una coordenadadeterminada, que luego añadi-remos al mapa usando elmétodo addOverlay() de laclase GMap. Este es el mismométodo que usaremos paradibujar el recorrido dibujado,solo que en vez de añadir unobjeto GMarker usaremos unGPolyline:

var p = new Array;

p.push(new GPoint(lon1, lat1));

p.push(new GPoint(lon2, lat2));

map.addOverlay(newU

GPolyline(p));

Esto es justo lo que hacemos en las fun-ciones addOverlay() y drawLine() denuestro código. Un ejemplo de un trayec-to dibujado de esta manera es el quepuede verse en la Figura 5. Una vezdeterminado el trayecto (o parte de él)podremos calcular la distancia recorridausando las fórmulas expuestas un pocomás arriba. Sencillo ¿verdad?

El JuradoUtilizando no más de cuatro objetos yocho métodos diferentes hemos sidocapaces de crear un programa capaz de

calcular distancias de trayectos dibu-jados de manera interactiva por el

usuario desde el navegador. Eso,en mi opinión, es un indicador dela calidad de este API. Es senci-llo generar aplicaciones innova-doras e interesantes usandoalgo que hasta hace poco eraextremadamente caro de con-seguir y que requería grandesconocimientos de matemáticas,

física y navegación. El API deGoogle Maps proporciona otro

conjunto de objetos para el accesoasíncrono de datos XML por medio

de JavaScript (AJAX[6]), con lo que

podremos tener almacenado en una basede datos grandes cantidades de coorde-nadas terrestres y ser dibujadas demanera eficiente desde el navegadorWeb del cliente. Los usuarios de esta APIya han empezado a desarrollar aplicacio-nes que utilizan estas y otras interesan-tes funcionalidades ([8], [9], [10]).También encontramos objetos que per-miten generar pequeños carteles que sedespliegan ante un evento de pulsación(o cualquiera así establecido). Son muyútiles para comunicar algún comentarioal cliente (¿una explicación sobre algúndetalle del monumento al que apunta?¿quizás una explicación al usuario sobreeste punto del recorrido para llegar a lami empresa?)

Hay que indicar que el API está en faseBeta, es decir, es susceptible de cambiosincluso mientras estamos desarrollandonuestra aplicación. Podemos seguir la evo-lución de estos cambios, la aparición denuevas funcionalidades o el intercambiode aplicaciones y experiencias desde elgrupo de discusión de Google Maps[7].Por favor, no olviden de publicar en estegrupo la aplicación que han desarrolladopara que todos podamos disfrutar de suingenio y nos sirva de inspiración. �

gestor de pulsaciones del ratón, podre-mos permitir al usuario la colocación dediversas marcas que iremos almacenan-do en un array. Si volvemos a pulsarsobre una de estas marcas deberemos deeliminarla tanto del mapa como delnuestro array. De esta manera tan simpleestaremos definiendo una trayectoriaque podremos dibujar mediante unalínea de color azul.

Tanto las marcas como las líneas sondenominadas en la documentación ofi-cial de Google Maps overlays. Cada over-lay es un objeto sobreimpreso en elmapa. Aunque podemos definir nuestrospropios iconos para las marcas (denuevo remito a la documentación para

ver el proceso),pode-

PRÁCTICO • GMaps

Figura 5: Trayecto de 0.77 Km dibujado sobre el mapa.

Podemos añadir y quitar tantas marcas rojas como de-

seemos para dibujar un camino diferente.

[1] ECMA-262 http://www.

ecma-international.org/publications/

standards/Ecma-262.htm

[2] Términos de uso http://www.google.

com/apis/maps/terms.html

[3] Google Maps API http://www.google.

com/apis/maps/

[4] Documentación del API http://www.

google.com/apis/maps/

documentation/

[5] Distancias http://www.

meridianworlddata.com/

Distance-Calculation.asp

[6] AJAX http://en.wikipedia.org/wiki/

AJAX

[7] Grupo de discusión para GoogleMapshttp://groups-beta.google.com/

group/Google-Maps-API

[8] Monumentos en Paris http://www.

kahunablog.de/gmaps.

php?map=paris

[9] WikiMapa http://www.wikyblog.com/

Map/Guest/Home

[10] Tráfico en el Reino Unido http://www.

gtraffic.info/

RECURSOS

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

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

Anonimato y privacidad en las redes P2P

REDES LIBRES

Redes anónimas • PRÁCTICO

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

Referirse a redes de Pares “P2P” essinónimo de hablar de una de lasprincipales razones de acerca-

miento de la gente a Internet. Al igualque la mayoría de las conexiones en lared, se basa en interacciones directasentre las diferentes máquinas que parti-cipan en este fluir de cantidades ingentesde información.

Pero, al igual que cualquier otra inter-acción con la red, al operar en las redesde pares, vamos dejando huellas, peque-ñas cantidades de datos que permiten aentidades privadas o gubernamentalesseguir la pista a toda transacción que serealice. A diario se llevan a cabo accio-nes de investigación para transaccionesde usuarios perfectamente legítimas enla red que en el mundo “real” exigiríanuna orden judicial o directamente viola-rían el derecho de la intimidad de losciudadanos.

Y hay que desterrar el mito de que enla red nadie sabe quien eres. Todo lo quese hace queda registrado en algún lugar.Sólo hay que tener permiso para recabarla información.

Falacias sobre elAnonimato en la RedTodo el mundo que posee conexión aInternet carece de anonimato en su nave-

gación por la red, para ello desmentiréalgunas ideas erróneas para la gente quepiensa que posee anonimato en la red.• Yo no tengo contrato con un pro-

veedor, me conecto mediante

modem a un proveedor gratuito,

por lo que nadie sabe quien soy.

Falso: al hacerlo usas una conexión tele-fónica que identifica unívocamente aldueño de la línea.• Yo no tengo IP fija, mi provee-

dor me da una distinta cada vez

que conecto, por lo que nadie

puede saber quién soy

Falso: tu proveedor guarda la informa-ción de cuál es la IP que usas en cada

momento e información relativa a suuso.• El uso de proxies anónimos

como Anonymizer me permite

navegar anónimamente

Falso: este tipo de servicios lo que consi-gue es concentrar un número alto deusuarios que desean anonimato en unúnico punto; centralizar a estos usuarioses una de las mayores trampas, puesfacilita el trabajo de las instituciones quedesean saber quién y para qué requiereanonimato.

En el modelo actual de comunicacióntodo se basa en “conexiones directas”;veamos en qué consisten y cuáles son

Las “redes libres” son el resultado

tecnológico de la necesidad de un

modelo de comunicación en Internet

que no sea sensible a la censura, y

que pueda mantener el anonimato y

la privacidad de cada uno de sus

componentes.

POR DAVID GASCÓN

Figura 1: Conexiones directas entre cliente y servidor.

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

los problemas que conllevan a la hora depensar en términos de anonimato y pri-vacidad.

Todo el mundo sabe quieneresComencemos con un ejemplo: Cuandoel nodo A quiere adquirir un servicio delnodo B, genera una petición que lleva ladirección donde tiene que dirigirse, eneste caso, la IP y puerto del nodo B, y ladirección y puerto que especificandónde se ha de devolver la informaciónal nodo A.

En el camino intermedio entre el nodoA y el B, son los protocolos como TCP/IP y UDP/IP los que se encargan delcorrecto enrutado de la informaciónhasta el destino, pero siempre usandolas direcciones IP de ambos clientes.

Únicamente con la información queguarda esa petición podemos identificarquién está haciendo uso del servicio, ycuando digo “quién” me refiero a la per-sona que tiene contratada el servicio deacceso a Internet, pues los Servidores deInternet (ISPs) guardan una referenciacompleta (por ley) de los accesos quesus usuarios hacen cada vez que reali-zan una petición a la Red.

A su vez, el servidor que ofrece el ser-vicio almacena la petición que hizo elnodo A, con la posibilidad, dependiendodel servicio, de que se guarde informa-ción del uso del mismo como las páginasque visitó, los ficheros que descargó oen qué sala de chat estuvo hablando.

La Figura 1 refleja el modelo que aca-bamos de ver sobre las conexiones direc-

tas entre máquinas. En ella vemos refle-jada cuál es la información necesariapara poder acceder a los servicios deuna máquina en la red y qué otras pue-dan mantener conexiones con nuestronodo.

Como se puede ver, en el paso inter-medio, relegamos en protocolos comoTCP/IP para llegar al nodo final a través

de las distintas máquinas especializadasen enrutado de datos a través de la red.

En este modelo únicamente son los rou-

ters los que se encargan de mover la infor-mación y hacer que llegue al destino.

Vemos cómo los nodos clientes hacenpeticiones a un servidor, mientras entreellos realizan intercambio de ficherosmediante una plataforma P2P. Podemosobservar cómo las peticiones estánhechas usando las direcciones IP realesde origen y destino. En dicha figura ade-más se ve cómo el servidor se encarga decentralizar las peticiones de los clientes yservirlas.

Este es un modelo sensible a la censu-

ra, ya que valdría con eliminar la máqui-na servidora para privar a todos losusuarios de la información y serviciosque está ofreciendo, y con controlar lasmáquinas enrutadoras para controlar eltráfico de entrada o salida a una determi-nada red.

La idea que ha rodeado a Internetdesde sus inicios es la eficiencia de lascomunicaciones, sin embargo estamisma topología y forma de funcionarha hecho que países como China seancapaces de censurar cualquier tipo deinformación externa, ya que todas laspeticiones pasan por sus máquinas deenrutado antes de llegar al destino, y esaquí donde se pueden rechazar lascomunicaciones de los nodos con elexterior de China.

Internet hoy en día es una red que nonos asegura el anonimato ni la privaci-dad. Además la información y los servi-cios están centralizados en máquinasconcretas con lo que, para cortar esafuente de comunicación es suficiente coneliminar la comunicación de esas máqui-nas con el resto de la red.

Por todas estas razones nacieron lasredes anónimas, las cuales me gustadenominar “Redes Libres” ya que devuel-ven a sus usuarios la posibilidad demoverse libremente por ellas y acceder a

la información de forma que nadiepuede ejercer control sobre ellos o sobrela información que se está transmitien-do. Veamos en qué consisten.

Una nueva topología de laRedAntes de empezar con los entresijos deesta nueva topología de red, me gustaríaaclarar algunos conceptos que harán queel lector entienda mejor algunas de lasdecisiones tomadas para su implementa-ción.

Lo primero es reafirmar que el modeloactual es sensible a la censura, ya que lasconexiones directas son la mejor manerade conseguir redes eficientes. El modelode hoy en día es un modelo donde losalgoritmos de enrutado buscan un solopropósito: mover información de lamanera más rápida minimizando almáximo las latencias entre petición yservicio.

Como contrapartida, las redes que pre-sento, no son tan eficientes como lasactuales, ya que tienen que arreglárselaspara dotar a cada uno de los nodos deanonimato y privacidad partiendo delsistema de conexiones actuales entrenodos. Ello se conseguirá gracias a unnuevo factor que cambia por completolos modelos actuales de enrutado dedatos; desde ahora podemos decir quecada servidor es un Nodo y cada Nodo es

un Servidor.

PRÁCTICO • Redes anónimas

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

Figura 2: Conexiones indirectas entre nodos de la red libre.

Figura 3: Estructura general de los mensa-

jes.

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

sentido dentro de la red libre. Este identi-ficador es único para cada nodo y esdiferente en cada sesión que iniciamosen la red.

El nodo inicial lanza una petición asus nodos hermanos. Para ello encapsulala información incluyendo los IDs de ini-cio y final dentro del cuerpo del mensaje(al igual que si empaquetara informaciónpara ser enviada). Después, encima deesa información, añade el resto de cabe-ceras necesarias para que el transportehacia el nodo hermano sea exitoso.

El comportamiento general de un nodoante la llegada de un mensaje es:• Primero mira si el ID destino

coincide con el suyo• Si es así, responde al

servicio y lanza la res-puesta a sus herma-nos con la direcciónde destino el ID delnodo origen.

• Si no es esa ID vuelvea lanzar la petición atodos sus hermanos deforma que continúe sucamino en busca del nodocuya ID coincide con labuscada.

En la Figura 2 se puede ver un ejem-plo de cual es la información que van ausar a la hora de llevar a la práctica elalgoritmo de enrutado de las redeslibres. Como se puede observar nunca se

revela la IP del origen o deldestino a los nodos interme-dios de la red, sino que se usaun identificador (ID), lo quenos va a permitir que nadiepueda conocer quién hace lapetición o quién la responde.

Asuntos PrivadosHasta ahora hemos hablado de“anonimato” en la red; sinembargo estas plataformas tam-bién nos proporcionan privaci-

dad o, lo que es lo mismo, además de queno sepan quién manda algo, que ignorenqué es lo que se está mandando por la reda no ser que sean ellos mismos los desti-natarios. Esto se consigue mediante el usode los sistemas de cifrado.

La forma más segura consiste enaplicar variascapas decifrado a lainforma-ción queviaja porla red, deformaquesólo el

En las Redes Libres todas las máquinastienen un papel dual:• Como Cliente: Hacer peticiones

a la Red, y gestionar las res-puestas.

• Como Servidor: Enrutar losdatos que nos mandan otrosnodos y que no son para nos-otros.

Esto hace cambiar la perspectiva quehemos tenido hasta el momento, puesahora todos nosotros como nodos de lared tenemos la obligación de participaren el enrutado de la información denuestros nodos hermanos de forma quese puedan crear las capas de abstracciónnecesarias para conseguir el anonimato,ya que como consecuencia inicial de estemétodo la única forma de poder “seguirla información” sería pinchando todoslos nodos de la red, lo cual es una tareaimposible que hace que el modelo actualconsiga su propósito.

A primera vista, si se está familiariza-do con los protocolos de transporte TCP/IP y UDP/IP, podríamos pensar que losnodos “enrutadores” podrían conocerigualmente la dirección origen y destino.Sin embargo esto no es así, ya quehemos introducido una capa de abstrac-ción entre la petición y el contenido de lacapa de transporte de las tramas.

Desde el nodo inicial que origina lapetición se sitúan como dirección inicialy final identificadores que sólo tienen

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

Redes anónimas • PRÁCTICO

Figura 4: Sistema de búsqueda de ficheros manteniendo la privacidad de la información buscada.

Figura 5: Cifrado de la información enviada.

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

forma que obtengamos “passphrases”para el cifrado.

Veamos un ejemplo de esta última idea(ver Figuras 4 y 5). Supongamos quequeremos buscar un archivo llamado“1.mp3”. Lo primero que vamos a haceres calcular el hashing del nombre delfichero mediante el algoritmo elegidopara ello (MD5, RSA, ElGamal, etc), porejemplo, Hash("1.mp3") == "a1Xag",este identificador del nombre del ficherohará que cuando hagamos la petición,sólo los nodos que posean ese ficherosepan lo que está buscando el nodo queinició el mensaje (el cual recordemos,nadie, excepto él mismo sabe quién es).

Una vez se establece la conexión entrelos nodos lo que se hace es usar la pala-bra clave original “1.mp3” como “pass-phrase” de cifrado, de forma que sólopueden descifrar la información el nodoinicial y el nodo final. Para este paso usa-mos un algoritmo de cifrado simétrico,de forma que el nodo origen puedatransformar los datos cifrados que le vanllegando a su forma original. Algunos delos posibles algoritmos que se puedenusar son: DES, AES, Blowfish …

La Figura 6 muestra un ejemplo real deuna de las plataformas de redes libres.En ella podemos observar ejemplos rea-les de hashing de nombres ficheros y deluso de Identificadores, dos de las piezas

claves en el funcionamiento de las redeslibres como hemos visto hasta elmomento.

Proyecto APEIRONDada la importancia de salvaguardar elderecho que tenemos a la libertad deexpresión y para luchar contra la crecien-te censura a la que se ve sometida laRed, hemos creado el proyecto APEIRON[1], como punto de encuentro para lagente que queremos luchar activamentepor ello.

En la sección de “Documentación”quien esté interesado puede encontrarinformación detallada sobre muchas pla-taformas de redes libres como Mute,Freenet, Gnunet, Konspire, etc. Cada unade las cuales difiere del resto por centrarsu desarrollo en alguna característicaconcreta de los modelos de transporte ydistribución de la información.

Mediante la lista de correo se puedeparticipar de forma activa, además deestar informado de los diferentes even-tos, charlas y talleres que vamos organi-zando por las diferentes universidades yferias tecnológicas. �

nodo destinatario del mensaje sea capazde descifrarlo.

Mediante la Figura 3 podemos hacer-nos una idea de los distintos niveles de“metainformación” que rodean a losdatos que se transmiten en una red libre.Lógicamente, al añadir capas extra seincrementa el tiempo de “análisis” decada una de las diferentes tramas, por loque se ve aumentada la latencia de latransmisión de las tramas por la red, asícomo el uso de recursos en cada uno delos nodos que participan de forma acti-va. Este es el precio que hay que pagarpara obtener la protección de la privaci-dad en red.

Hay muchísimas formas de conseguircifrado a través de la red.

Algunas de ellas sonel uso de claves

públicas, priva-das entre

nodos her-manos, oel uso dealgorit-mos dehashingcomoMD5

sobre laspalabras

clave de

PRÁCTICO • Redes anónimas

[1] Proyecto APEIRON: http://apeiron.

laotracara.com

RECURSOS

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

Figura 6: Ejemplo real de plataforma de redes libres: Mute.

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

Desarrollo de Programas en Basic con Gambas

INSTINTO BÁSICODesarrollo de Programas en Basic con Gambas

INSTINTO BÁSICO

Visual Basic aún tiene una amplia aceptación entre los seguidores de Windows, pero los usuarios de Linux

tienen pocas opciones para programar en el lenguaje Basic. Ahora en el mundo de Linux las tornas están

cambiando gracias a Gambas, un IDE gratuito para Linux basado en Basic. POR FRANK WIEDUWILT

Apesar de su larga historia, el len-guaje de programación Basic hasido siempre tema de controver-

sia. Visual Basic de Microsoft dispone deun dialecto del Basic aceptado por losusuarios de Windows. La comunidad deCódigo Abierto tuvo su opciones limita-daa a tan sólo unos pocos proyectosBasic marginales, como XBasic [1], peroel proyecto Gambas [2] ha ganado popu-laridad recientemente como un entornode desarrollo Basic para Linux potente yversátil. Con un interfaz que recuerda alde Visual Basic, Gambas [2] soporta eldesarrollo eficiente de aplicaciones conuna curva corta de aprendizaje. Dehecho, muchos creen que el dialectoBasic de Gambas es mucho más eficienteque el de Visual Basic.

El IDE de Gambas incluye un depura-dor para detectar errores, un editor gráfi-

co de formularios y un editor de menús.Su diseño modular significa que los des-arrolladores no están restringidos a untoolkit específico: Los programasGambas pueden ser diseñados con unaGUI Qt o GTK con tan sólo pulsar unbotón, aunque el módulo GTK está dis-ponible sólo como versión inestable.

En el DiscoSe puede encontrar el código fuente deGambas en el sitio web de Gambas [2],junto con información de cómo obtenerlos paquetes binarios para Debian,Fedora, Gentoo, Slackware, SuSE y otrasdistribuciones populares de Linux.

Para compilar la aplicación desde elcódigo fuente, se necesitan los paquetesde desarrollo de Qt, versión 3.2 o poste-rior, qt3-devel o libqt3-dev. Si se intentausar Gambas para desarrollar aplicacio-

nes específicas para KDE, se necesitaránlos paquetes de desarrollo de las biblio-tecas KDE, kdelibs3-devel o kde-devel.

Después de instalar los paquetes desoporte, hay que descomprimir el códigofuente de Gambas introduciendo tar -xjf

Gambas • DESARROLLO

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

Además de Gambas, Linux tambiéntiene otras dos variantes de Basic gratui-tas: HBasic [3], un entorno de desarrollocompleto, y el intérprete wxBasic [4].Además, los desarrolladores del comer-cial KBasic [5] han prometido un IDEcompleto VB-compatible en breve, aun-que una versión preliminar está a puntode salir. PowerBasic [6] y RealBasic sondos dialectos multiplataformas tambiéncomerciales- aunque no soportan el des-arrollo en Linux.

Basic en Linux

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

ficheros que conforman el proyecto. Lacaja de herramientas permite un accesofácil a los controles disponibles para elGUI, y la ventana de propiedades permi-te la modificación de la apariencia y delcomportamiento de la interfaz del pro-grama. Finalmente, el editor de códigofuente permite editar de forma directa elcódigo Basic.

Cuando se abre un formulario apare-cen dos ventanas, así que la pantallapuede que se llene rápidamente. Elentorno de desarrollo de KDE, KDevelop[7], soluciona este problema abriendolos elementos dentro de una ventanaprincipal; los desarrolladores ahorraríantiempo si Gambas gestionara el espaciode la pantalla de la misma forma.

FormulariosTodos los programas basados en GUInecesitan al menos una ventana o unformulario para aceptar las entradas delos usuarios y poder mostrar la salida.Para crear un formulario nuevo, hay quehacer clic con el botón derecho del ratónen la vista con forma de árbol de la ven-tana del proyecto y seleccionar New |Form en el menú desplegable. Hay queintroducir un nombre para el formularioen el cuadro de diálogo y especificar si sequiere que la ventana se abra automáti-camente cuando el programa se ejecute,seleccionado Startup class. Para comple-

tar el formulario, tan sólo hay que añadircontroles desde la ventana de la caja deherramientas (Figura 2).

Para añadir un widget a un formulario,primero hay que seleccionar el widget enla caja de herramientas y luego usar elratón para dibujar una caja del tamañorequerido dentro del formulario. Ahorase puede utilizar la ventana de propieda-des (Figura 1) para configurar el control,por ejemplo, asignando el nombre que elprograma usará para referenciar el con-trol. Los parámetros X, Y, Width yHeight permiten definir dónde apareceráel control dentro de la ventana. Se pue-den especificar el título, la fuente y eltamaño de la fuente junto con el color defondo y el activo.

Se puede añadir funcionalidad a unprograma Gambas simplemente añadien-do componentes. Gambas viene con loswidgets KDE y un conjunto de módulosbásicos para el acceso a bases de datos.Para usar estas características, hay queseleccionar Project | Properties en la ven-tana del proyecto y luego hay que pulsarclic en el elemento adecuado de la sola-pa Components.

Usando estas herramientas, un des-arrollador puede poner rápidamente unvisor HTML sencillo con tan sólo apun-tar y hacer clic con el ratón. En la caja deherramientas, hay que hacer clic en lasolapa KDE y seleccionar el iconoKonqueror. Arrastrando el elementoKonqueror con el tamaño deseado en elformulario y en la ventana de propieda-des, se introduce la URL del ficheroHTML y el navegador lo cargará.

Se puede usar el propio editor de códi-go fuente de Gambas como un elementodentro del programa que se está desarro-llando si se selecciona el componenteqb.qt.editor. Hay también unos cuantos

gambas-1.0.3.tar.bz2, luego tras entraren el directorio creado por el paso ante-rior se teclea ./configure para configurarlos ficheros makefiles. Tras teclear make

empieza el proceso de compilación. Unavez completado el proceso de compila-do, entrando como root, hay que instalarel programa con el comando make ins-

tall. Ahora ya se puede ejecutar el entor-no de desarrollo Gambas simplementetecleando gambas.

En la ventana de bienvenida hay queseleccionar New Project para que un asis-tente, tras unos pasos, cree un proyectonuevo.

Antes de nada hay que decidir si elproyecto estará basado en GUI o entexto. También se necesita especificar sise quiere que Gambas copie el códigodesde un proyecto existente. Hay queteclear el nombre del directorio del pro-yecto donde se almacenarán los ficherosdel código fuente. Si no se está familiari-zado con la programación en Gambas,probablemente se desee consultar algu-nos ficheros de ejemplo que sirvan deayuda para empezar.

Además del formulario en el que seestá trabajando, Gambas muestra tam-bién una ventana de proyecto, una cajade herramientas, una ventana de propie-dades y el editor de código (Figura 1). Lavista en forma de árbol de la ventana delproyecto proporciona una visión de los

DESARROLLO • Gambas

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

Figura 1: Gambas tiene un editor de código, una caja de herramientas, una ventana de propie-

dades y otros componentes útiles.

Las GUIs de Gambas y Visual Basic sonparecidas, así que los usuarios de VB notendrían problemas con la navegación.Desafortunadamente, hay más diferen-cias entre la sintaxis de Gambas y la deVisual Basic, por lo que los programado-res no podrán migrar los programas deVB sin prestarle atención. Esto es, elesfuerzo empleado en convertir proyec-tos simples sin los controles ActiveXserán aceptables.

Convirtiendo desde VisualBasic

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

Gambas • DESARROLLO

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

Menu

editor. El editorde menú soporta hasta

cuatro nieveles en la estructu-ra y permite asignar atajos de teclado eiconos a los elementos individuales.

Acceso a Bases de DatosUna de las características que hacen queVisual Basic sea muy potente es su fácilacceso a las bases de datos. Gambashace un buen intento por emular estafuncionalidad. En el momento de escri-bir este artículo, Gambas soportaMySQL, PostgreSQL y SQLite. ElDatabase manager se encuentra en elmenú de la ventana del proyecto bajoTools | Database manager… Se tieneque tener el componente qp.db para queel programa pueda acceder a una basede datos.

Para añadir una tabla nueva a unabase de datos existente, hay que invocarde nuevo el menú contextual y seleccio-nar Create table…. Los campos de labase de datos se definen en el lado dere-cho del cuadro de diálogo. La solapaData muestra una vista de la tabla dondese pueden añadir los datos directamente.Por último, el elemento Create Gambas

code

en elmenú desplega-

ble crea el códigofuente requerido para inicia-

lizar la base de datos del progra-ma.

Ayuda por todas partesGambas tiene un sistema de ayudaextensible con descripción para las pala-bras reservadas, una breve introduccióna la programación y una explicación delas diferencias entre Gambas y VisualBasic. La ayuda para las palabras reser-vadas también hace referencia a las dife-rencias entre Gambas y VB. La páginaweb de Gambas contiene un Wiki [8]con más ayudas de programación ysobre cómo convertir proyectos existen-tes en VB. �

módu-losexperi-mentales,tales comolos conjun-tos de exten-siones XML yQt. Se está tra-bajando en máscomponentes,como las extensio-nes GTK que secomentaron anterior-mente.

¡Y… Acción!Para hacer que los contro-les que se han añadidohagan algo, tan sólo hayque hacer doble clic en el ele-mento para que se abra el edi-tor de código fuente con el cur-sor en el punto apropiado paraintroducir el código. Ahora sepueden añadir los comandos quese deseen para que se ejecuten:para un botón, habrá que poner elcódigo que se desee que se ejecutecuando se pulse el botón.

Como el nombre sugiere, el editor demenú permite crear los menús. Para eje-cutar el editor, hay que pulsar con elbotón derecho del ratón en el formularioy seleccionar el elemento que pone

Figura 2: Gambas tiene una gran colección

de controles.

[1] XBasic: http://www.maxreason.com/

software/xbasic/xbasic.html

[2] Gambas: http://gambas.sourceforge.

net

[3] HBasic: http://hbasic.sourceforge.net

[4] WxBasic: http://wxbasic.sourceforge.

net

[5] KBasic: http://www.kbasic.de

[6] PowerBasic: http://www.powerbasic.

com

[7] KDevelop: http://www.kdevelop.org

[8] Gambas Wiki: http://www.binara.com/

gambas-wiki/bin/view/Gambas10/

WebHome

RECURSOS

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

Pistas y trucos para programar fácilmente Perl en Vim

PICANDO LO JUSTOEl editor Vim tiene algunos trucos para ayudarnos a reducir las pulsaciones de teclas. En el artículo de este

mes veremos cómo los programadores de Perl pueden ahorrar esfuerzos usando las técnicas de Vim.

POR MICHAEL SCHILLI

to de nuestra herramienta favorita. Unavez que hemos elegido el editor, lo mejorserá aprender todo lo que podamossobre él. Un uso efectivo del editor nosólo reduce el daño del síndrome deltúnel carpiano, sino que también nosayudará a obtener código más rápida-mente y con pocos errores tipográficos.

El editor Vim (VI Improved, mejorado)

tiene un cierto número de ventajas sobresu venerable predecesor Vi. A través delos años, Vim se ha extendido drástica-mente respaldado por un grupo incondi-cional de programadores. Es extremada-mente configurable y extensible a travésde plugins. De hecho Vim puede amol-darse a conveniencia para casi cualquiergusto o estilo de trabajo.

Datei erzeugt von Paul mit sf4.39

Puede que no haya otra decisiónmás importante en la vida de unprogramador que la elección de

un editor. Una vez que hemos optadopor Vi o Emacs, nos dedicaremos a amol-darnos a sus armas e intentaremos expri-mir hasta el ultimo gramo de rendimien-

DESARROLLO • Perl: Vim

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

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

Perl: Vim • DESARROLLO

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

cados de analizar como Perl. En lasFiguras 1a y 1b se puede apreciar cómo esmás fácil reconocer las estructuras decódigo con el resaltado por colores.

Por supuesto que, para esta funcionali-dad, será necesario que nuestra Xtermpermita el uso de colores. Si el resaltadode sintaxis no está habilitado por omisiónen Vim, la orden :syntax on la activará.Vim evalúa la extensión del archivo (.pl o.pm) e incluso la secuencia #!/usr/bin/perl

de la línea Shebang, para detectar el códi-go Perl y realizar el resaltado de acuerdo ala sintaxis de Perl. Cuando comenzamos aeditar un nuevo archivo que no tiene unaextensión especifica de Perl o una líneaShebang, se le puede indicar explícita-mente a Vim el tipo de archivo tecleando::set filetype=perl.

AtajosSi siempre programamos en el mismolenguaje, nos encontraremos tecleando

las mismas secuencias una y otra vez.Como defensor de Log::Log4perl, he per-dido la cuenta del número de veces quehe tecleado use Log::Log4perl qw(:easy);.Afortunadamente, Vim me ha ayudado aponer fin a esta practica.

La orden :abbreviate ul4p use

Log::Log4perl qw (:easy); <RETURN>

define a ul4p como un atajo. Cada vez quetecleemos el atajo en el modo de entradade texto y pulsemos algo como la barraespaciadora o la tecla del retorno de carro,Vim expandirá la cadena automáticamen-te y nos dará nuestra línea Log4perl. Elliteral <RETURN>, que se coloca al finalde la definición del atajo, simula la pulsa-ción de la tecla del retorno de carro y poreso añade un corte de linea. Si queremosparar el modo de entrada y pasar al modode órdenes, después de expandir un atajo,solamente hay que añadir <ESC>.

Otra forma de insertar secuenciasde texto largas en los atajos esleyéndolas de un archivo: :abb

ul4p<BACKSPACE><ESC>:r

~/.tmpl_l4p <RETURN>. Esta orden ledice a Vim que sustituya el atajo ul4p

con el contenido del archivo que se haindicado.

Macros de teclado

Vim guarda un archivo de configura-ción llamado .vimrc bajo el directorio deinicio del usuario y éste es un buen sitiopara almacenar los trucos que veremos acontinuación.

Las distribuciones de Linux no siemprevienen con la ultima versión de Vim, asíque no está de más que ejecutemos vim

--version para verificar qué versión tene-mos. Se necesita la versión 6.1 o posterior.Si tenemos una versión más antigua sola-mente tendremos que obtenerla de [2].

Resaltado de SintaxisEl resaltado de las palabras claves y lasestructuras en el código de los programases de gran ayuda para los irritados ojos dealguien que ha pasado montones de horasleyéndolas. Vim tiene un resaltado de sin-taxis excelente para diversos lenguajes deprogramación y asombrosamente seobtienen unos resultados muy precisoscon él. Incluso para lenguajes tan compli-

01 # Buscar 'sub'

02 /sub

03 # Comenzar a

04 # grabar la macro

05 qa

06 # Insertar una línea encima,

07 # Volver a modo órdenes

08 O<ESC>

09 # Insertar 20 '#'

10 20i#<ESC>

11 # Copiar línea

12 yy

13 # Bajar una línea

14 # Insertar la línea

15 # copiada abajo.

16 jp

17 # Parar la grabación de la

macro

18 q

19 # Buscar el siguiente 'sub'

20 n

21 # Reproducir la macro 'a'

22 @a

23 # ... repetir.

Listado 1: órdenes de Vim

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

marcas cada vez que añadamos unanueva función, lo hacemos definiendoun atajo de teclado para la tecla F, de lasiguiente manera: :map F o<ESC>

43i#<ESC>yyosub {<ENTER><ESC>

Pk$i. A partir de ahora, cada vez quepulsemos la tecla F, en el modo de órde-nes, Vim insertará una cabecera de fun-ción, cambiará al modo de entrada ycolocará el cursor a la derecha de él paradejarnos escribir el nombre de la nuevafunción.

El revoltijo de letras en la definicióndel mapa incluye otra vez el típico estilovi de órdenes con una sola tecla en elmodo de órdenes, que seguro que reco-nocerán los incondicionales de vi. El

número de marcas es una cuestión degusto. Hemos usado 43 en la definiciónanterior. Asignar las órdenes puede aho-rrar mucho tiempo y molestias cuandose trata de secuencias que se repiten,como por ejemplo las cabeceras de lasfunciones. Si les gusta, pueden utilizar lamisma aproximación para otras secuen-cias de texto que también se repitan,como por ejemplo, el código para recopi-lar parámetros de funciones como enmy(...) = @_;.

Otra tarea común es guardar el guiónen el que estamos trabajando pulsando:w e invocar perl -c script.pl, para com-probar la sintaxis del guión. La siguienteorden asigna las acciones de guardar y

Las Macros se pueden usar para repetirpasos de edición recurrentes que modifi-can múltiples áreas no continuas. LasFiguras 2a y 2b muestran tres cabecerasde función que queremos enmarcar conalmohadillas.

Se necesitan las siguientes órdenes:Primero utilizamos /sub para buscar sub;después comenzamos la grabación de lamacro a, dibujamos las almohadillasalrededor de la primera cabecera y para-mos la grabación de la macro. Luego pul-samos n para buscar el siguiente sub yreproducimos la macro pulsando@a. Enel Listado 1 se muestra una lista de lasórdenes.

Si lo preferimos, podemos añadir las

DESARROLLO • Perl: Vim

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

001 #!/usr/bin/perl -w

002 #############################

003 # ppitags-PPI-basado en ctags

004 # Mike Schilli, 2005

005 # ([email protected])

006 #############################

007 use strict;

008

009 use PPI::Document;

010 use File::Find;

011 use Sysadm::Install qw(:all);

012 use Log::Log4perl qw(:easy);

013

014 my $outfile =

015 "$ENV{HOME}/.ptags.txt";

016 my %dirs = ();

017 my @found = ();

018

019 find \&file_wanted,

020 grep { $_ ne "." } @INC;

021

022 blurt

023 join("\n", sort @found),

024 $outfile;

025

026 #############################

027 sub file_wanted {

028 #############################

029 my $abs =

030 $File::Find::name;

031

032 # Evita dirs erroneos

033 $File::Find::prune = 1

034 if -d and $dirs{$abs}++;

035

036 # Solo módulos Perl

037 return unless /\.pm$/;

038

039 my $d =

040 PPI::Document->load(

041 $abs);

042

043 unless ($d) {

044 WARN "Cannot load $abs" .

045 " ($! $@)";

046 return;

047 }

048

049 # Encuentra paquetes y

050 # todas las subrutinas nom-

bradas

051 $d->find(

052 \&document_wanted);

053 }

054

055 #############################

056 sub document_wanted {

057 #############################

058 our $package;

059 my $tag;

060

061 if(ref( $_[1] ) eq

062 'PPI::Statement::Package'

063 ) {

064 $tag =

065 $_[1]->child(2)

066 ->content();

067 $package = $tag;

068

069 } elsif(ref($_[1]) eq

070 'PPI::Statement::Sub'

071 and $_[1]->name()) {

072 $tag =

073 "$package\::"

074 . $_[1]->name();

075 }

076

077 return 1

078 unless defined $tag;

079

080 push @found,

081 $tag . "\t"

082 . $File::Find::name

083 . "\t"

084 . regex_from_node(

085 $_[1]);

086

087 return 1;

088 }

089

090 #############################

091 sub regex_from_node {

092 #############################

093 my ($node) = @_;

094

095 my $regex =

096 $node->content();

097

098 $regex =~ s/\n.*//gs;

099

100 while (

101 my $prev =

102 $node->previous_sibling()

103 ) {

104 last if $prev =~ /\n/;

105 $regex =

106 $prev->content()

107 . $regex;

108 $node = $prev;

109 }

110

111 $regex =~

112 s#[/.*[\]^\$]#\\$&#g;

113

114 return "/^$regex/";

115 }

Listado 2: ppitags

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

verificar la sintaxisa la tecla X enmodo de órdenes::nnoremap X :w

<Enter>:!perl -c

%<Enter>.Usando la orden

:noremap en vezde :map nos asegu-ramos que la “X”no sea evaluada sies que aparece enel lado derecho deotra expresiónasignada. Además,:noremap solamen-te expande la defi-nición en el modode órdenes. El sím-bolo % representael nombre delarchivo actual.

AutoformatoSi estamos compo-niendo un textolargo, por ejemplodocumentaciónPOD, probablemente nos llevará untiempo,como seis o siete intentos, antesde conseguir un buen aspecto.

Si continuamente estamos añadiendoy borrando pasajes, terminaremos conunos párrafos de aspecto andrajoso ydifíciles de revisar. Los procesadores detexto del estilo de Word, trabajan muyduro en segundo plano, reformateandocontinuamente el texto, pero los auténti-cos maestros pulen el filo ellos mismos.

Solamente necesitamos cuatro teclasen el modo de órdenes de Vim parahacer esto: {gq}. Primero, al pulsar {nos lleva al comienzo del párrafo actual,con la orden gq obtenemos el texto justi-ficado a la izquierda y por ultimo, } defi-ne dónde se aplica la orden: en este casoal final del párrafo.

El módulo Perl Text::Autoformat, delgran maestro Damian Conway, propor-ciona una aproximación muy elegante.Junto a la justificación a la izquierda, elmódulo comprende todo tipo de estilosinteligentes: por ejemplo, puede manejarlistas marcadas con > (las líneas segui-das de > se sangran de la misma forma)y maneja las comillas de los sangradosdel email usando > o > >, o inclusocorchetes, igual que lo haría un serhumano.

Para asignar la orden deformato,en el modo de órde-nes, a la tecla f, usamos :map

f !Gperl -Mtext::Autoformat

-e'autoformat' <RETURN>.Más tarde, durante la ediciónde un párrafo, simplementecambiamos al modo de órde-nes y pulsamos la tecla f conel cursor colocado en algúnlugar del pasaje de texto y eltexto se formateará automáti-ca y correctamente. Las figu-ras 3a y 3b muestran el textocrudo y formateado.

Si el tamaño predetermi-nado de 72 líneas es dema-siado ancho (o demasiadoestrecho) para nuestro gusto,tenemos la opción de cam-biarlo: :map f !Gperl

-Mtext::Autoformat -e'auto-

format

{right=>65}'<RETURN>

restringe el tamaño máximode línea a 65 caracteres.

Los usuarios experimenta-dos de Vim alegarán que f

está asignada por omisión en el modo deórdenes; llevando el cursor al siguientecarácter que haya, con fe nos colocará enla siguiente e del texto, por ejemplo. Sirealmente queremos usar esta función,deberemos elegir otra tecla, o incluso rea-lizar un atajo de teclado de dos caracteres:por ejemplo,:map !f espera que primeropulsemos ! en modo de órdenes, antes depulsar f.

SangradoLa discusión sobre qué está bien o quéestá mal al sangrar el código de los pro-gramas, no ha terminado. ¿Dónde seponen las llaves? ¿Hasta qué punto nece-sitamos sangrar el código anidado? ¿Sedeben utilizar espacios o tabuladores?

Como programadores todos tene-mos nuestras propias preferen-cias, Vim permite escogeruna opción.

El sangrado basado entabuladores es una cuestiónde gustos; muchos lo recha-zan por principio. Si activa-mos la opción :set expandtab,Vim convertirá los tabuladoresen espacios. Para establecer elnúmero de espacios por tabula-dor, usamos :set shiftwidth=4.

Pero no cometamos el error de utilizarexpandtab sin reflexionar acerca de loque estamos haciendo, de lo contrarionos encontraremos con una desagrada-ble sorpresa cuando editemos unMakefile. Los objetivos de Make estánseguidos por órdenes sangradas contabuladores, y reemplazarlos por espa-cios provocará un error de sintaxis. Paraevitar esto, dejaremos que Vim detecte eltipo de archivo, utilizando autocmd yconfigurando la opción expandtab sola-mente para los programas en Perl:

:filetype on

:autocmd FileType U

perl :set expandtab

Para localizar problemas como este, laorden :set list nos permitirá ver los carac-teres no imprimibles en Vim. Los tabula-dores se ven como ^I y el carácter de finde línea se muestra como un ‘$‘ azul.Con :set nolist volvemos al modo devisualización normal.

La opción shiftwidth que se mencionóanteriormente tiene otra función: Encombinación con la opción cindent sepuede usar shiftwidth para ahorrarnosun montón de pulsaciones. Siempre quetecleemos un condicional comoif($really) { y pulsemos retorno de carro,Vim sangrará la siguiente línea con losvalores definidos en shiftwidth y expand-

tab. Sin embargo, si pulsamos } y retor-no de carro, Vim pondrá automática-mente las llaves de cierre hacia fuera, alcomienzo de la línea. Como este funcio-namiento no es el adecuado para algu-nos tipos de archivos, habría que añadiruna orden autocmd que identifique pri-mero el tipo de archivo antes de estable-cer la opción: :autocmd FileType perl :set

cindent.Hay veces que

Perl: Vim • DESARROLLO

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

Figura 1a: Un trozo de código

Perl en VIM, sin …

Figura 1b: … y con el resaltado

de sintaxis activado.

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

variable $CVSVERSION y que esactualizada automáticamente porCVS. Además, Pod::Usage mues-tra un pequeño archivo de ayudasi se activa la bandera -h.

Por supuesto que habrá querellenar los huecos para que elguión crezca y se convierta enalgo práctico, pero el esqueletoserá de gran ayuda, ofreciendouna plantilla y un esquema dedocumentación, que son indis-pensables en cualquier guión.

Completando el textoEn el modo texto, Vim recuerdaautomáticamente las palabrasque hemos escrito y las completapulsando CTRL-n. Si definimosuna variable como nuestra

$GLOBAL_SUPER_VARIABLE; yla usamos mas tarde el el guión,no necesitamos reescribir elnombre; en vez de eso, solamen-te tenemos que escribir las pri-meras letras, pulsar CTRL-n ydejar que Vim lea nuestros pen-samientos.

Si hay más de una posibilidad deexpandir las letras que hemos tecleado,pulsamos CTRL-n varias veces hastaencontrar la que buscamos, con CTRL-p

volvemos a la palabra anterior. Estacaracterística nos permite ahorrar unmontón de tiempo y de pulsaciones.

EtiquetasLos programadores de C estarán familia-rizados con el programa ctags, que creaun archivo de etiquetas para Vim.Después de que ctags ha leído el archivo,el desarrollador solamente necesita colo-

car el cursor en algún lugar de la llamadaa la función y pulsar CTRL-], en el modode órdenes, para decirle a Vim que saltea la definición de función, sin importaren qué archivo está.

Por ejemplo, para decirle a Vim, enPerl, que vaya al archivo fuente paraLWP::UserAgent, si el cursor está enalgún lugar del texto LWP::UserAgent, en

no nos damos cuenta que unsegmento de código se ha desangrar, hasta que hemos ter-minado de ‘picarlo’. En estoscasos, colocamos el fragmentoentre llaves, como se ve en laFigura 4a, pasamos al modo deorden y pulsamos >i{, parasangrar bloque ‘interno’ con elvalor definido en shiftwidth

(Véase la Figura 4b).La opción :set smarttab

añade otra característica cuan-do usamos la opción expand-

tab: Pulsando la tecla de retro-ceso con el cursor colocadosobre el primer carácter de unalínea sangrada, envía la líneade vuelta al margen izquierdoy pulsando la tecla de tabula-dor vuelve a sangrar la linea,pero sin utilizar realmente lostabuladores.

Otra sugerencia: Para nave-gar de una llave a su pareja,solamente tenemos que colocarel cursor, en modo de órdenes,en la primera llave y pulsar elsímbolo del porcentaje (%). Esto hacemás fácil encontrar las llaves perdidas siPerl indica un error de sintaxis.

Si estamos usando un teclado america-no y necesitamos teclear con vi un carác-ter no estándar tal como un umlaut (Äpor ejemplo), lo podemos hacer con sólopulsar Ctrl-K A : en el modo de entrada.Para saber más acerca de cómo introdu-cir caracteres no estándar, introducimosla orden :digraphs para obtener una listade lo que está disponible.

Un buen comienzoLa herramienta tmpl desde [5] ofrece unbuen comienzo cuando queremos zam-bullirnos dentro de un nuevo guión enPerl: por ejemplo, $ tmpl -p cooltool crea-rá un nuevo archivo llamado cooltool.Como podemos ver en la Figura 5, elesqueleto del guión contiene unas cuan-tas líneas de cabecera, unos cuantosmódulos típicos, algún código para lasopciones de análisis del guión y visuali-zación de manpage. tmpl lee unos cuan-tos parámetros configurables, como elnombre del autor, del archivo .tmpl en eldirectorio de inicio del usuario.

El esqueleto cooltool ya tiene dos posi-bilidades: $ cooltool -v muestra la versiónactual del guión, que se guarda en la

DESARROLLO • Perl: Vim

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

01 version 6.0

02 :map !L iuse Log::Log4perl

qw(:easy);<RETURN>Log::

Log4perl->easy_init($DEBUG);<RETU

RN><ESC>

03 :map F o<ESC>43i#<ESC>yyosub

{<ENTER><ESC>Pk$i

04 map f !Gperl -MText::

Autoformat -e'autoformat{right

=>70}'^V^M

05 set backspace=2

06 set fileencodings=utf-8,latin1

07 set formatoptions=tcql

08 set helplang=en

09 set history=50

10 set hlsearch

11 set ruler

12 set shiftwidth=4

13 :autocmd FileType perl :set

cindent

14 :autocmd FileType perl :set

expandtab

15 set smarttab

16 :nnoremap X :w<Enter>:!perl -c

%<Enter>

17 :set tags=/home/mschilli/.

ptags.txt

18 :set iskeyword+=:

Listado 3: .vimrc

Figura 3a: Un listado con > y parte de un

mensaje de email, antes …

Figura 3b: … y después de formatearlo con

Text::Autoformat.

Figura 2a: El

editor de

macro en modo

de grabación.

Figura 2b:

Después el

usuario sola-

mente tiene

que reproducir

la macro dos

veces.

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

un programa en Perl, elusuario necesita hacerdos cosas. Antes denada, Vim debe com-prender que las palabrasclave de Perl puedenincluir los dos puntos;para hacer esto pode-mos teclear :set iskey-

word+=:. En segundolugar, Vim necesita ana-lizar el archivo de eti-quetas, el cual propor-ciona un índice de todoslos paquetes instalados,tal como se ve en esta orden :set

tags=/home/mschilli/.ptags.txt.Pulsar CTRL-], con el cursor colocado

en el nombre del módulo, nos llevará alcódigo fuente del módulo.Alternativamente, podemos facilitar elnombre del módulo como parámetro enel modo de órdenes, como en :tag

LWP::UserAgent. Si pulsamos CTRL-T

mientras estamos viendo el archivo delmódulo, volveremos a donde estábamos.La magia que hay detrás de esta funcio-nalidad está almacenada en el archivo deetiquetas .ptags.txt que puede crear elcódigo del Listado 2.

A pesar de tener un gestor de venta-nas, puede ser que necesitemos ver dosarchivos simultáneamente en una solaventana. Encararemos este problema deotra manera, ya que los usuarios de Vimno son del tipo de gente que utiliza unratón cuando sus manos están ‘picando’código.

Si pulsamos CTRL-W-], en vez deCTRL-], con el cursor dentro de una pala-bra clave, la ventana se dividirá en dosmitades, con el código de nuestro archi-vo en la mitad inferior y el código delmódulo que hemos referenciado en lamitad superior. Pulsando CTRL-WW sal-tamos entre los dos paneles. Tecleando laorden :quit en la ventana superior, cerra-remos

esa ventana, quedandosolamente el texto queestamos editando en laventana principal.Alternativamente, pode-mos utilizar la orden:only en la ventana infe-rior, para cerrar la ven-tana superior.

Se puede ver unasesión de Vim en laFigura 6, con un guiónde prueba que utiliza elmóduloLWP::UserAgent en la

ventana inferior, y elmétodo new() del códi-go fuente del módulo,en la superior.

Si no estamos segurosde cómo se escribe elnombre de un métodopodemos buscarlo, sola-mente tenemos queintroducir una expresiónregular. La orden tselect

buscará cualquier eti-queta que coincida y nosofrecerá una lista paraque la elijamos: :tselect

/^LWP. Esto permite alusuario seleccionar elnúmero que correspon-da con el módulo quenecesitamos desde elmenú, como se ve en laFigura 7.

Dame etiquetas¿Cómo creamos unarchivo ~/.ptags.txt?Para hacer esto, necesi-tamos leer los módulosque utiliza nuestra insta-lación local de Perl aintervalos regulares. Elguión mostrado en elListado 2 husmea entodas nuestras rutas @INC, escribe en

un array @ los directorios para ayu-darle a recordar dónde ha estado

para evitar volver a mirar enlos que ya ha visitado.

Otra opción para crearppitags sería utilizar el pro-grama ctags, que, en susversiones más recientes,maneja el código Perlrealmente bien. Pero lla-

mando ctags - R - f

~/.ptags.txt/usr/lib/perl5 no encontrarálas etiquetas que requieren un análisismás elaborado del código Perl más alládel modelo de simple coincidencia.

Para analizar fuentes Perl, lo que deverdad necesitamos es Perl, pues Perl esextremadamente difícil de analizar. Sinembargo, Adán Kennedy intentó loimposible y escribió recientemente unprograma “bastante bueno” de análisispara Perl; de hecho, el programa de aná-lisis es increíblemente bueno. El móduloPPI de CPAN incluye PPI::Document; sumétodo load() lee un módulo Perl, lo

reparte en fichas y lasalmacena como nodosen una estructura enárbol.

El guión ppitags utilizaFile::Find para analizarlos directorios en elarray global @INC dePerl. Para cada entradaque encuentra, File::Find

salta a la funciónfile_wanted. Si la entra-da es un directorio envez de un archivo, lalínea 34 actualiza elhush %dirs, para averi-guar si la trayectoria seha recorrido ya. Si es asíla línea 33 fija la variable$File::Find::prune a 1para indicarle aFile::Find que puede sal-tarse el resto del directo-rio y todo lo que hayabajo él. La línea 37 igno-ra cualquier cosa que nosea un módulo Perl ter-minado en pm.

La línea 40 analiza elmódulo Perl actual.Cualquier error que ocu-rra en este punto serámanejado por la línea 43

(en el momento de escribir esto, PPI noes perfecto) emite una advertencia y des-carta el módulo que no podrá manejar.

Después de analizar un módulo, lalínea 51 llama al método find() para elobjeto PPI::Document, avanzando a tra-vés de las fichas en las fuentes de Perl yllama a la función document_wanted

definida en la línea 56 para cada fichaencontrada.

La función comprueba si la ficha es del

Perl: Vim • DESARROLLO

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

Figura 4a: Un bloque entre lla-

ves y el cursor al comienzo del

bloque.

Figura 4b: La orden >i{ sangra el

bloque interno.

Figura 5: Vim en el modo de

ventana dividida: Un guión de

prueba en la parte inferior y el

código del módulo

LWP::UserAgent, con los guio-

nes utilizados, en la superior.

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

la línea que coincida con laficha requerida. En el caso desubprogramas, $node->con-

tent() devuelve tanto la cabece-ra como el cuerpo de la fun-ción. Esta es la razón por la cualla línea 98 quita todas las líneas,aparte de la primera, y las líneasde la 100 a la 109 retroceden deficha en ficha hasta que se alcanzael principio de la línea. Al final delbucle while, $regex contendrá lalínea fuente desde el comienzo de lalínea hasta la ficha. La línea 114 utili-za estos datos para generar una expre-sión regular del tipo de /^.../ con un anclapara el carácter de comienzo de línea. Laoperación buscar y substituir en la línea

112 asegura que no entreen conflicto ningúncarácter no estándar enel código Perl con losmeta-caracteres de laexpresión regular esca-pándolos con barrasinversas.

El guión ppitags creaun archivo ~/.ptags.txt

que contiene una lista enel formato de entradas atres columnas:Paquete/Subrutina [tab]

NombreFichero [tab]

ExpresiónRegular, queVim analizará con :set

tags= tal como se hadescrito anteriormente,permitiendo así quesalte elegantemente delas palabras claves alcorrespondiente códigofuente.

Es conveniente ejecu-tar ppitags una vez aldía como tarea del cron

para mantener al día~/.ptags.txt. Si se pre-fiere se puede extenderel guión para permitir aVim identificar nuestrasvariables our totalmente

cualificadas (del tipo$Text::Wrap::columns, por ejemplo) y sal-tar a sus definiciones dentro del códigofuente del módulo.

Almacenamiento permanenteCuando lanzamos Vim lee el archivo deconfiguración .vimrc de nuestro directorio

de inicio y enrealidad esto permite que los

usuarios ejecutemos una serie de órdenesantes de que Vim se ponga a trabajar.Después de retocar los ajustes predetermi-nados interactivamente, probablementequeramos guardar los cambios. En vez devolver a teclear las órdenes para añadirlasa nuestro archivo .vimrc, solamente tene-mos que teclear :mkvimrc para indicarle aVim que guarde la configuración actual en~/.vimrc.

Hay un ejemplo de configuración en [1]que contiene todas las configuracionesque hemos repasado en el artículo deeste mes. Recuerden, ¡ahorren tiempo‘picando’ para dedicarlo a pensar! �

tipo PPI::Statement::Package o un objetodel tipo PPI::Statement::Sub, esto es, unpaquete o una subdefinición en el códigode Perl.

Una definición package significa unalínea como package LWP::UserAgent;,que a su vez significa cuatro fichas en elmundo de PPI: package, espacio, el nom-bre del módulo y el punto y coma de cie-rre. Solamente el nombre del módulo esde interés para ppitags, que es el tercerhijo en el nodo, que pasó $_[1] a docu-

ment_wanted(). El método child()

comienza con el índice ihijo a 0, extraela cadena "LWP::UserAgent":$_[1]->child(2).

La línea 69 encuentra definiciones deltipo sub func { y extrae los nombres dela función y los métodospara permitir al meca-nismo de etiquetadoidentificar las estructu-ras tales comoLWP::Debug::trace ysalta a la localizacióndonde se define real-mente la función en elmódulo LWP::Debug.

Cuando se analiza unadefinición del paquete,ppitags almacena elnombre del paquetecomo el paquete actual,que se utiliza entoncescomo un prefijo paratodas las funciones ana-lizadas. Aunque estopodría fallar con defini-ciones de paquetes enbloques, no hay ningunadiferencia en el 99,9%de los casos.

La orden push en lalínea 80 empuja unanueva secuencia al finaldel array @found, quese compone de la etique-ta requerida (Paquete- oel nombre completo dela función cualificada),del nombre absoluto dela fuente, del nombre del archivo y deuna expresión regular, que localiza ladefinición del paquete o de la funcióndentro del archivo de las fuentes. Parahacer esto, la función define en la línea91 FF, regex_ from_node , componiendouna expresión regular compuesta detodos los caracteres del comienzo de la

DESARROLLO • Perl: Vim

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

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

linux-magazine.es/Magazine/

Downloads/10

[2] Página principal del proyecto Vim:http://www.vim.org/

[3] Steve Oualline, “vi IMproved – Vim”,New Riders, 2001

[4] Archivo de guiones de Mike: http://

perlmeister.com/scripts/

[5] Guión tmpl:http://perlmeister.com/

scripts/tmpl

RECURSOS

Michael Schilli

trabaja como des-

arrollador de soft-

ware en Yahoo!,

Sunnyvale,

California. Es el

autor de “Perl

Power” de la edi-

torial Addison-Wesley y se le puede

contactar en

[email protected]. Su pági-

na está en http://perlmeister.com/.

EL

AU

TO

R

Figura 7: Utilizando expresiones

regulares para buscar etiquetas;

si el usuario teclea /^LWP

obtendrá un ménu numerado por

entradas.

Figura 6: Una plantilla para un

nuevo guión llamado cooltool,

creada por el guión tmpl.

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

Imágenes satélite en Python

VIGILANTES DEL PLANETA¿Quién no ha querido alguna vez sentirse como esos informáticos de la NASA en su centro de control? Hoy

nos construiremos el nuestro y controlaremos el planeta y sus alrededores.

POR JOSÉ MARÍA RUIZ Y PEDRO ORANTES

Cada vez que vemos el lanzamien-to de un cohete todos quedamosasombrados ante la explosión del

despegue, la atenta mirada de todos esoscientíficos a los paneles de control, y lamonstruosa cifra que nos dicen que sehan gastado en el proyecto.

¿A donde van los impues-tos?Es entonces cuando surge la pregunta ¿yeso a mí en qué me repercute? Un díaestando en el despacho de la Rama delIEEE de Málaga tuve una conversación enla que me contaron que la mayor parte delos satélites emiten “al mundo” las imáge-nes y los datos que recogen. Es decir, si seposee el equipo necesario es posible reci-bir en tu propia casa imágenes fascinantesdel universo, de Marte o de la Tierra.

La temperatura del océano, imáge-nes meteorológicas, imágenes delcampo magnético del sol o de lasmisiones a Marte son enviadas cons-tantemente a la Tierra desde estosengendros espaciales. Y el efecto essiempre el mismo, el espectador esdeslumbrado por el presentador detelevisión con una imágenes increíblesmientras se escuchan acordes de sinte-tizador.

¿Acaso no son esas imágenes de domi-nio público? ¿Dónde puedo conseguirlas?En el presente artículo utilizaremosPython para crear un script CGI que nospermita recoger y mantener actualizadaslas imágenes que queremos en una espe-cie de “collage” o mural. Construiremosnuestro propio centro de control espa-cial.

Recoger las imágenesLo primero será encontrar las imágenes yreunirlas. Vamos a usar como ejemplocuatro imágenes de carácter científico.Se actualizan a distintos intervalos, demanera que podremos ver cómo evolu-

Python • DESARROLLO

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

Poco tiempo después de finalizar esteartículo apareció una noticia en Slashdot(ver Recursos [4]) hablando de una lla-marada solar de tal tamaño que iba aalterar las comunicaciones. Cuando sedan este tipo de eventos en muchos cen-tros de control de satélites los ingenie-ros cruzan los dedos para que sus satéli-tes no caigan ante la ola de viento solarque se origina. El lector puede apreciarla llamarada en la Figura 4.

Curiosidad

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

En la variable c almacenamos el objetoque representa la conexión realizada ypodemos enviar peticiones.

>>> c.request("GET","/issue/08")

>>>

Usamos el comando GET, con lo queestamos solicitando un objeto. El segun-do parámetro del método es la “ruta”hasta el objeto. Así que la URL que esta-mos solicitando es http://www.

linux-magazine.es/index.html. Es impor-tante que la ruta comience con una barra“/”, como si fuese la ruta de un ficherode una máquina. ¿Cómo sabemos si todoha ido bien?

>>> r = c.getresponse()

>>> print r.status,r.reason

200 OK

>>>

Con getresponse podemos conseguir unobjeto que representa los datos devuel-tos por la conexión. Este objeto tiene,entre otros, los atributos status y rea-

son que nos indican el estado, unnúmero con un significado especial, yla explicación del mismo. En este casotodo ha ido bien y por eso recibimos un“OK”. En caso contrario, si no existiesela ruta que pedimos habríamos obteni-do:

>>> r = c.getresponse()

>>> print r.status, r.reason

400 Bad Request

>>>

Ahora ya tenemos la página, solo tene-mos que leerla, usando el método read()

del objeto respuesta.

>>> print r.read()

<html>

<head>

<base href="http://www.U

linux-magazine.es/issue/08/" />

<title>Linux Magazine -U

Spamassasin, Hypermail,U

Encriptación GPG, SDL,U

...

Cuando hayamos finalizado debemoscerrar la conexión invocando el métodoclose() del objeto que representa la cone-xión, en este caso sería:

>>> c.close()

>>>

Para obtener las imágenes vamos a hacerexactamente lo mismo, abriremos unaconexión, pediremos la imagen, la alma-cenaremos en una diccionario y cerrare-mos la conexión.

Python Imaging LibraryNuestra idea original era realizar unmural o collage con las imágenes recupe-radas. Python no nos provee de unalibrería de tratamiento gráfico en su dis-tribución estándar. Eso no quiere decirque no exista tal librería, y no sólo exis-te, sino que además es muy potente yútil. Nos referimos a Python ImagingLibrary (ver URL [2] en el Listado deRecursos al final del artículo).

La librería PIL (Python Imaging Library)nos va a permitir tratar imágenes en unagran cantidad de formatos. Podremos con-vertirlas a otro formato, rotarlas, escalar-las, mezclarlas, etc. Aquel lector que hayatenido contacto con programas de mani-pulación gráfica, como por ejemplo GIMP(ver URL [3] en el Listado Recursos), com-prenderá la potencia de una librería conestas funcionalidades.

cionan las eventos que se registran.Puedes encontrar las URLs en Recursos[1].

Debemos descargar las imágenes yalmacenarlas dentro de nuestro progra-ma, haremos uso de la librería httplib

que es parte de la distribución estándarde Python. Esta librería nos permitiráhablar de tú a tú con un servidor webremoto sin tener que preocuparnos delos detalles de más bajo nivel. Esta con-versación la realizaremos usando el pro-tocolo HTTP. Este protocolo es bastantesimple y de él sólo necesitaremos unaparte mínima.

Cuando Tim Berners Lee realizó eldiseño original de la Web quiso que elprotocolo para pedir los documentosfuese lo más simple posible. HTTP sereduce a la recepción y el envío de infor-mación al servidor, eso y sólo eso. Secompone de varios comandos, pero losmás conocidos son GET, que podemostraducir como “tomar”, y POST, quepodemos traducir en este contexto como“enviar” o “mandar”. Así que tomamosdocumentos y enviamos información.

Una parte importante de HTTP es URL

que nos sirve para darle nombre a esosdocumentos. Todos estamos acostumbra-dos a tratar con urls, generalmente deltipo http://www.linux-magazine.es/

issue/08. La url se compone de: [protoco-

lo]://[maquina]/[ruta]/[objeto]. Vamos aver ahora porqué es tan importante quesepamos esto.

La librería httplib de Python estableceen un primer paso una conexión con elservidor remoto mediante el métodoHTTPConnection

>>> c = httplib.HTTPConnectionU

("www.linux-magazine.es")

>>>

DESARROLLO • Python

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

01 >>>mural =

Image.new('RGB',(600,480))

02 >>> im =

Image.open("daemon.jpg")

03 >>> im.thumbnail((300,200),

Image.ANTIALIAS)

04 >>> mural.paste(im,(0,0))

05 >>> mural.paste(im,(300,0))

06 >>> mural.show()

07 >>>

Listado 1: Ejemplo de usode PIL

Figura 1: La imagen original que vamoa a

modificar con PIL.

Figura 2: La imagen del pequeño demonio de

BSD rotado 45º con PIL.

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

Python • DESARROLLO

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

en el resultado hemos invocado el méto-do show() que mostrará el resultadomediante el programa xv (para cerrar xv

solo tenemos que pulsar “q”).Nosotros no buscamos rotar imágenes,

sino escalarlas. Las imágenes presentesen la web suelen ser de gran tamaño ynosotros queremos crear un mural de untamaño estático. Tendremos que adaptarlas imágenes descargadas para que que-pan en el mural.

Para hacerlo vamos a insertar lasimágenes en una mayor, pero haymuchas maneras de hacer esto. Lasolución que adaptaremos en nuestrocaso es la de dividir la imagen-mural entantos recuadros como imágenes vaya-mos a insertar. ¿Cómo sabremos la can-tidad de cuadrículas? Pues escogere-mos la menor potencia de 2 que seamayor que nuestro número de imáge-nes. No es muy complicado, por ejem-plo, si tenemos 7 imágenes, 8 (2 eleva-do a 3) será suficiente. Básicamentemultiplicaremos 2 por sí mismo hastaque sea mayor que el número de imá-genes que queramos mostrar.Gráficamente lo que haremos será irdividiendo en anchura y en altura laimagen en cuadrículas, en cada itera-ción se multiplicará por 2 el número decuadrículas. Con este método perdere-mos espacio en la imagen, pero al sertan sencillo no complicará mucho elcódigo.

Creemos el thumbnailPrimero creemos una imagen vacía, verListado 1. La Figura 3 muestra el resulta-do. Esta vez no cargamos ninguna ima-gen, sino que usamos el método new()

que necesita el tipo de pixel (‘RGB’ vienede Red->Rojo Green->Verde Blue->Azul, es uno de los formatos estándar)y el tamaño de la imagen medido enpixels. En nuestro caso hemos escogido600 pixels de ancho por 480 de alto(presta atención a los “()”, porque laresolución se expresa como una secuen-cia del tipo “(x,y)” ). Esta nueva imagenno contiene nada a excepción de undecepcionante fondo negro. ¡Vamos aponer algo de color!

Cogemos la imagen del “daemon” einvocamos el método thumbnail() queescala la imagen tanto vertical comohorizontalmente. Tenemos que pasarle eltamaño deseado como una secuencia, lanueva imagen tendrá un tamaño de

300x200 pixels. Puede aceptar un pará-metro adicional, en nuestro caso esImage.ANTIALIAS que debería mejorarla resolución de la nueva imagen.

A continuación usamos el métodopaste() de Image que nos permite“pegar” una imagen dentro de otra en lascoordenadas indicadas como segundoparámetro. Pegamos la imagen “dae-mon” dos veces, la primera en la posi-ción (0,0) del mural y la segunda en laposición (300,0). Podemos ver el resulta-do usando el método show().

El fichero de configuraciónLas URLs y la resolución deben ser recogi-das por el programa, pero ¿cómo? Existenvarias opciones, podríamos pasárselas alprograma cuando se ejecute. Las URLstienen el problema de ser bastante largasen ocasiones, así que la linea de comandopara ejecutar el programa puede ser engo-rrosa.

En lugar de eso vamos a usar un ficherode configuración. Cada vez que el progra-ma se ejecute leerá este fichero y recogerálos parámetros oportunos.

¿Qué forma tendrá el fichero? La últimatendencia es crear ficheros XML de confi-guración. Pero el XML puede ser demasia-do complicado si tenemos en cuenta quenuestro fichero de configuración puedeno tener más de 10 líneas. En UNIX la ten-dencia es la de usar el formato de “clave= valor” y ese es el que usaremos. Elfichero será como el que se muestra en elListado 2.

Leeremos cada línea del fichero, la divi-diremos usando el “=” y usaremos la pri-mera parte como clave en un diccionario,y la segunda como valor. Si ya existe laclave, usaremos una lista como valor con

Como no viene de serie con Pythondeberemos instalarla en nuestra distribu-ción o sistema operativo. Existen paque-tes RPM y DEB de la misma.

¿Cómo se trabaja con PIL? Puesmediante la manipulación de objetos dela clase Image. Esta clase es capaz dealbergar imágenes de casi cualquier for-mato, permitiéndonos manipularlas.Vemos un ejemplo. En la Figura 1 pode-mos ver la imagen original del ficherodaemon.jpg en mi equipo. Vamos a rotar-la 45 grados:

>>> import Image

>>> im = Image.openU

("daemon.jpg")

>>> img.rotate(45).show()

>>>

En la Figura 2 podemos ver el resultado.Hemos usado el método rotate() al quehemos pasado un ángulo de 45 grados, y

01 [tamaño]

02 horizontal = 800

03 vertical = 600

04

05 [imágenes]

06 url1 =

http://www-mgcm.arc.nasa.gov/M

arsToday/marstoday.gif

07 url2 =

http://www.sec.noaa.gov/sxi/cu

rrent_sxi_4MKcorona.png

08 url3 =

http://www.ssec.wisc.edu/data/

sst/latest_sst.gif

09 url4 = http://www.wetterzen-

trale.de/pics/D2u.jpg

Listado 2: collage.conf

Figura 3: Creamos una imagen vacía con PIL

y después colocamos otras imágenes en su

interior como mosaico.

Figura 4: Llamaradas solares que amenazan

con dejar fuera de combate a los satélites de

comunicadciones.

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

Cuando un método comienza con “__”se convierte en privado. Cualquier inten-to de hacer uso de ese método generaráuna excepción. Por tanto esos métodosno pueden ser invocados desde fuera delobjeto Collage. De esta manera Collage

sólo tiene un método accesible desde elexterior, generaCollage(). Se ha separadola generación de HTML de la del collagepara posibilitar las futuras extensionesdel objeto. Por ejemplo podríamos noquerer generar un fichero HTML sinoincorporar la imagen en un programa. Ental caso heredaríamos de Collage y crea-ríamos un nuevo métodogeneraCollage() que solo generase laimagen y la devolviese.

El método __generaHTML() genera elcódigo HTML de la página web. Unpunto a resaltar es que genera un mapa

sobre el collage, de maneraque sea posible pulsar sobrelas distintas imágenes que enél aparecen. Al hacerlo se car-gará la imagen a tamaño natu-ral. El mapa se genera reco-rriendo el diccionario de imá-genes. Cada entrada del dic-cionario contiene un objeto dela clase Imagen.

Imagen alberga la informa-ción de cada imagen descar-gada mientras el programa laalmacena. Se almacenan losdatos propios de cada ima-gen, como por ejemplo lascoordenadas que ocuparáfinalmente en el collage.

Como siempre, se esperaque el lector dedique algo de tiempo ajugar con el programa para adaptarlo asus necesidades o ideas.

ConclusiónLa complejidad de un programa Pythonno depende de la cantidad de líneas decódigo que contenga, sino más bien delnivel al que trabaje. En el programa deeste artículo hemos hecho uso intensivode librerías que han realizado accionesmuy complicadas por nosotros. Pythonposee una amplio abanico de librerías aexplotar, muchas de ellas con años dedesarrollo esperando a programadorescon ideas originales que poner en prácti-ca. �

los distintos valores comoentrada. Pero ¿por qué vamosa realizar nosotros el trabajoduro cuando alguien ya lo haresuelto?

Python trae en su distribu-ción estándar una librería quenos será de enorme utilidad.Alguien consideró oportunoelaborar un analizador dearchivos de configuración, sellama ConfigParser. Con ellapodemos extraer la informa-ción del archivo de configura-ción.

El archivo de configuraciónse compone de “Secciones” y“Opciones”. Cada sección con-tiene varias opciones, y losnombres de las secciones y opcionesdeben ser únicos. Por eso las URLscomienzan con “url1”, “url2” y “url3”.Pero esto no será un problema, vemoscómo funciona ConfigParser (ver Listado3). Como podemos apreciar en el ejem-plo, el uso de ConfigParser es muy senci-llo. Primero se crea el analizador, guar-dándolo en la variable config. Despuéscargamos con el método readfp() el fiche-ro de configuración; este método tambiénanaliza el fichero. A partir de ese momen-to podemos realizar preguntas al objetoalmacenado en config. Con sections()

obtenemos una lista de las secciones ycon options() de las opciones. Con esainformación ya podemos recoger losdatos necesarios usando el método get(),al que pasamos una sección y unaopción.

Ensamblemos las partesAhora ya tenemos:• Un sistema de configuración,

usando ConfigParser.• Un sistema para descargar las

imágenes, usando httplib.• Un sistema para manipular las

imágenes, usando PIL.Nos toca ahora unirlo todo para que gene-re la página que aparece en la Figura 5. Elresultado final se puede descargar de [5].

Crearemos una clase Collage con losmétodos• __cargaConf()• __descarga()• __totalXY()• generaCollage()• __generaImagen()• __generaHTML()

DESARROLLO • Python

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

[1] Gráficos que usaremos:

http://www-mgcm.arc.nasa.gov/

MarsToday/marstoday.gif

http://www.sec.noaa.gov/sxi/

current_sxi_4MKcorona.png

http://www.ssec.wisc.edu/data/sst/

latest_sst.gif

http://www.wetterzentrale.de/pics/D2u.

jpg

[2] Python Imaging Library: http://www.

pythonware.com/products/pil/

[3] The Gimp: http://www.gimp.org

[4] Noticia sobre llamarada solar enSlashdot: http://science.slashdot.org/

science/05/09/08/1933205.

shtml?tid=215&tid=14

[5] Listado del programa final de esteartículo:

RECURSOS

Figura 5: Nuestro panel de control espacial terminado y colocado en

una página web generada dinámicamente.

01 >>> config =

ConfigParser.ConfigParser()

02 >>> config.readfp(open('colla-

ge.conf'))

03 >>> config.sections()

04 ['tamaño', 'imágenes']

05 >>>

06 >>> config.options('imagen')

07 ['url1', 'url3', 'url2']

08 >>>

09 >>>

config.get('imagen','url1')

10

'"http://www-mgcm.arc.nasa.gov

/MarsToday/marstoday.gif"'

Listado 3: Uso deConfigParser

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

Estoy escribiendo este artículo

desde el Campamento LUG en

Wuppertal, Alemania, y la hora

es… - er, no tengo ni idea. Un tipo ama-

ble de la LUG Flensburg me ha dado una

botella de cerveza Flensburg y le he dado

las gracias…

Se ha hablado bastante acerca de NTP(Network Time Protocol) basado en lasincronización del tiempo y, de hecho,confieso que he escrito sobre NTP enotras ocasiones. Pero hoy, comentarécómo sincronizar la fecha del sistema sinNTP. ¡Arriba el telón y bienvenidos aHTPDate [1]!

Por supuesto, NTP es una herramientaa tener en cuenta si se necesita sincroni-zar el reloj del sistema a través de la red.Pero hay veces enlas que la sincroni-zación a través dela red es imposible.Por ejemplo, si lamáquina que nece-sita sincronizarestá oculta tras unbuen firewall mantenido por un adminis-trador paranoico que dice cosas como“¿NTP? Nunca escuché eso, así que¡debe ser algo malo!”.

HTPDate permite que HTTP puedaescaparse, utilizando el proxy en caso denecesitarlo. Esta herramienta utilizaTelnet en el puerto 80 para obtener una

página del servidor web (GET/HTTP/1.0). Muchos servidores proporcionaninformación adicional con el códigoHTML; como podría ser el número deversión del HTTPD, junto con la fechaactual y la hora:

HTTP/1.1 200 OK

Date: Sat, 07 May 2005 U

17:53:46 GMT

Server: Apache/2.0.53 (Linux)

X-Powered-By: PHP/4.3.10

He tenido que estornudar. Alguien me ha

preguntado si podría callarme, por favor.

Gracias otra vez.

Hay dos variantes de HTPDate: unaestá escrita en Perl y la otra en C. Vamos

a echarle un vistazo a la variante C, laversión 0.7.2, que está disponible comoun fichero tar o un paquete RPM.

Primeros PasosHTPDate es asombrosamente fácil deusar. Hay dos formas: modo interactivo ymodo servicio. En el modo interactivo,primero comprueba si está disponible elservidor para usarlo como fuente detiempo:

htpdate -d google.com U

web.de yahoo.com

La opción -d habilita el modo de depu-ración, que le indica a HTPDate quemuestre la salida de los tiempos y el

tiempo de respuesta, como se muestraen el Listado 1.

Alguien cercano parece que le gusta

Iron Maiden. Desafortunadamente, pare-

ce no haber oído hablar de los auricula-

res. Gracias de nuevo…

El valor en los paréntesis que siguena la marca de tiempo es el tiempo derespuesta. Como puede ver, el servidorde web.de proporciona una respuestamucho más rápida que los otros dos.Voy a apostar mi dinero en web.de yaque el tiempo de respuesta mostradopara web.de en el Listado 1 garantizaque web.de seguirá una señal de tiempomucho más precisa. Como se dice,HTPDate aceptará hasta 16 servidoresweb. Trabajando como root, ahorapuedo lanzar HTPDate en modo servi-cio (-D):

htpdate -D -x web.de U

[Server2 Server 3 ...]

El parámetro -x en el comando anteriorle indica a HTPDate que no se sincronicecon el tiempo de una vez, sino que lohaga gradualmente hasta obtener eltiempo correcto. Este método de sincro-nización gradual hace que las aplicacio-nes que necesiten una señal de tiemporegular, por ejemplo RRDTool, tenganuna mejor respuesta. �

65

La Columna de Charly • ADMINISTRACIÓN

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

[1] HTPDate: http://www.clevervest.com/

htp/development.html

RECURSOS

Bacula….….……………………….. 66

Una herramienta gratuita de backuppara la empresa

El Taller del Administrador………… 70

Herramientas para la documentación delínea de comandos

SYSADMIN

A pesar de las continuas interrupciones tan típicas de los encuentros de

LUG, nuestro intrépido columnista, Charly, nos revela cómo configurar

la hora del sistema a pesar de tener bloqueado el puerto NTP.

POR CHARLY KÜHNAST

El día a día del Administrador de Sistemas: HTPDate

LAS HORAS

01 google.com 07 May 2005 18:18:15 GMT (0.223) => -4

02 web.de 07 May 2005 18:18:15 GMT (0.023) => -4

03 yahoo.com 07 May 2005 18:18:19 GMT (0.188) => -3

04 #: 3, mean: -4, average: -3.667

Listado 1: htpdate -d

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

66

nombre de director. El director sabedónde hay que almacenar y dónde puedelocalizar los ficheros requeridos, si unusuario necesitara recuperar los ficherosperdidos. El director también conoce laplanificación, los clientes, la localizaciónde los almacenes y los detalles de los tra-bajos planificados, aunque lacopia de seguridad real selleve a cabo por los serviciossubordinados. El serviciodirector de Bacula tam-bién tiene la distinciónde ser el único serviciodel sistema Bacula quees capaz de comuni-carse con un usuariohumano.

El directoralmacena losdetalles de laconfiguraciónen un ficheroASCII (bacu-

la-dir.conf)con lasdescrip-

ción que confirma la regla es Bacula [1],una utilidad de copias de seguridad gra-tuita que ofrece una gran variedad decaracterísticas que normalmente estánasociadas a productos comerciales dealto precio.

Bacula no es una aplicación monolíti-ca sino que es un conjunto de varios ser-vicios junto con una interfaz de usuario.Los servicios tienen responsabilidadesestablecidas y utilizan la red para comu-nicarse. Este diseño distribuye la cargade trabajo con el control centralizado enla estación de trabajo del administrador,con las cuentas manipuladas por un ser-vidor de base de datos y el trabajo duro-es decir, la lectura y escritura de datos-manejado por un equipo de servicios deficheros del lado cliente y servicios dealmacenamiento en los servidores debackup. Por supuesto, se puede usar unaúnica máquina para múltiples funciones,lo que representa una arquitectura fácil-mente escalable y flexible (Figura 1).

Liderazgo CentralEl jefe a cargo del equipo formado porlos servicios recibe el

Hay políticas de backup de todaslas formas y colores. Las políti-cas baratas usan simplemente

scripts y en el peor de los casos invocana las herramientas nativas del sistemaoperativo (tar, dd, cpio). Estas solucio-nes están bien para las copias de seguri-dad locales con poco volumen de datos opara entornos con pocos clientes.

Las políticas de backup de preciomedio usan técnicas mucho más sofisti-cadas. Herramientas como rsync yAmanda son efectivas en muchos entor-nos, pero estas herramientas a menudorequieren las habilidades de scriptsavanzados y tienen algunas limitacionesocultas concernientes al tiempo, volu-men y soporte hardware.

Las herramientas a nivel empresarialeliminan muchas

de estas restric-ciones pero

normalmentetienen un

alto pre-cio. La

excep-

Mejores Copias de Seguridad con el Sistema de Backup Bacula

EL PODER DEL BACKUP

ADMINISTRACIÓN • Bacula

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

Cuando las tareas de backup llegan a ser demasiado complicadas para un script, la herramienta de backup

gratuita Bacula puede ser la respuesta. POR JENS-CHRISTOPH BRENDEL y MARC SCHÖCHLIN

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

ciones de los recursos estructuradasjerárquicamente. El nodo raíz de la jerar-

quía es un recurso que contiene la confi-guración para cada tarea específica.

Estas configuraciones de las tareas inclu-yen el tipo de tarea (backup, restore,verificación o administración), el tiempode ejecución o el nivel (para una copiade seguridad: completo, incremental odiferencial).

Para simplificar las cosas, la mayoríade los detalles están agrupados en subre-cursos, denominados directivas. Lascaracterísticas comunes de trabajos pare-cidos también pueden agruparse comorecursos JobDefs para formar una clasede tarea, que otras descripciones de tare-as pueden referenciar.

Esta solución simplifica el fichero deconfiguración y ahorra espacio.

Por ejemplo, el tipo de recursoSchedule define la planificación que eje-cuta tareas a intervalos específicos ysoportan casi cualquier clase de planifi-cación. El recurso FileSet lista los direc-torios y ficheros que se tiene planeadossalvar. Los directorios se manipulanrecursivamente, lo que quiere decir quela / nos permite especificar la forma mássimple y completa de backup, aunque

Bacula • ADMINISTRACIÓN

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

Bacula es sin duda el sistema de backupde código abierto que se puede usar enentornos a gran escala para cubrir lasnecesidades profesionales. La herra-mienta de backup es sin duda adecuadapara usarse con sistemas en producción,pero aún existen algunos elementos quedeberán mejorarse en futuras versiones:

* Seguridad: Actualmente, no haysoporte para los backups encriptadospor parte de los servicios. Dicho de otromodo, un atacante podría fisgonear eltráfico de la red local para acceder a losdatos que se estén salvando. Esto esespecialmente delicado en entornosdonde se manejen datos confidencialeso cuando un proveedor externo deseeofrecer servicios de backup. Como medi-da de seguridad se puede establecer untúnel SSH para encriptar la comunica-ción entre los servicios de ficheros y eldirector. En entornos Windows, almenos, sería interesante incluso instalarun antivirus. Las soluciones para esteproblema se están teniendo en cuenta eneste momento.

* Grandes Bibliotecas: Aunque variastareas de backup puedan ejecutarsesimultáneamente, todavía hay necesi-dad de mejorar el procesamiento enparalelo. Por ejemplo, un servicio de

ficheros no puede usar multiplexadopara proporcionar datos a múltiplesservicios de almacenamiento, aunqueesta configuración mejoraría el rendi-miento para grandes volúmenes dedatos. Los grupos de dispositivos quepueden asignar estáticamente variosdispositivos para una tarea concreta ypermitir que la tarea seleccione cual-quier dispositivo del grupo, no estásoportada actualmente. Tampoco haysoporte para asignar dinámicamentelos dispositivos no ocupados para lastareas pendientes. Esto hace que seadifícil que una biblioteca con múltipleslectores de cintas se ponga a máximorendimiento.

* GUI: Actualmente no se dispone deninguna interfaz gráfica. Aunque se hanintentado varias soluciones, no hanpasado de ser simples menús en forma-to texto. Por ejemplo, un administradorde ficheros para la selección basada enuna GUI o un calendario para ayudar aestablecer la planificación serían útiles.No hay ningún asistente de configura-ción que ayude a los administradores.Los gurús Unix experimentados puedeque no se preocupen por esto, pero hoyen día, la línea de comandos es todo unreto para los usuarios, que optarán porproductos que les proporcionen ayuda

en línea y la posibilidad de apuntar yhacer clic con el ratón.

* Backups Online: No se dispone demódulos para realizar backups online debases de datos. Tampoco hay forma dehacer backups de aplicaciones que ten-gan ficheros abiertos y los bloquee paraimpedir que accedan otros. El directorcompensa esto, en parte, permitiendoque se puedan ejecutar scripts tanto enel lado cliente como en el servidor ytanto antes como después de realizaruna tarea, lo que permite que se puedanparar y reiniciar las aplicaciones en cues-tión. Tanto las tareas de backup como derestauración pueden usar FIFOs comofuentes o destino de datos, es posiblemanejar datos de aplicaciones en ejecu-ción sin tener que acceder a los ficheros.Esto es una alternativa interesante, aun-que no puede reemplazar una soluciónde backup online completa.

* Extras: Los sistemas de backup comer-ciales proporcionan a los usuarios variosextras que Bacula no posee. Por ejemplo,los sistemas comerciales a menudo pro-porcionan el clonado de los soportes degrabación para mitigar los efectos de loserrores irrecuperables de lectura, asícomo de herramientas para gestionar larecuperación de sesiones interrumpidas.

El Futuro

Figura 1: Divide y vencerás: Bacula distribuye la funcionalidad de las copias de seguridad por

toda la red, pero utiliza un almacenamiento centralizado.

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

enlazan una aplicación activa con el bac-kup. Este nivel inusual de flexibilidadtiene un precio: la selección de fuenteses mucho menos intuitivo que dejar a unadministrador que seleccione los fiche-ros desde una interfaz basada en GUI.Una combinación basada en ambas solu-ciones sería ideal.

Inclusión de GruposOtra directiva de configuración define gru-pos de volúmenes y además se establecenindependientemente. Un grupo está for-mado por varias cintas de forma lógica,permitiendo de esta forma que puedanexceder la capacidad de una simple cintafísica. Cuando el backup llega al final deuna cinta, Bacula continúa con la tarea enla siguiente cinta disponible del mismogrupo. Esta solución permite reciclar cin-tas antiguas en el grupo después de unperíodo configurable de tiempo.

Los recursos de grupo están controla-dos por varias configuraciones. Porejemplo, el período de espera para lareutilización del soporte o el númeromáximo de ciclos de vida. Estas configu-raciones se aplican a todas las cintas delgrupo, los administradores no tienen queestablecer las preferencias para cadasoporte del grupo, aunque esta opciónestá disponible.

La asignación de las cintas a diferentesgrupos también ayuda a organizar lascintas por tipo de uso, evitándose lamezcla o incluso la sobreescritura de cin-tas usadas en copias completas o encopias incrementales. Se puede inclusodefinir grupos para clientes individuales,días de la semana, etc.

El cambio automático de cintas supo-ne que se dispone de una biblioteca de

ellas. Bacula soporta varios robots decintas, también llamados autocambiado-res o autocargadores con dispositivosDAT, VXA2, DLT, LTO y AIT.

La herramienta Mtx [2] que Bacula uti-liza para controlar las bibliotecas de cin-tas soporta incluso etiquetas de códigosde barras, que permiten al robot identifi-car una cinta sin tener que cargarla en ellector. En algunos casos (por ejemplo,cuando las cintas han sido colocadas amano en la biblioteca) las cintas tienenque ser realineadas a sus posiciones pre-vias. Si esto ocurre, el soporte de códigode barras, sin duda, valdrá la pena.

CatálogosCuando Bacula graba un fichero en unacinta, además, guarda detalles como sutamaño, sus atributos, su firma, la fechade la última modificación o la fecha y lalocalización de la copia en una base dedatos denominada catálogo. Este directo-rio es el tercer punto que hace queBacula sea diferente de los scripts, per-mitiendo la restauración de ficheros indi-viduales sin la necesidad de leer el archi-vo completo. Los ficheros que se deseanrestaurar pueden ser simplemente selec-cionados referenciando los metadatos,que incluyen la posición de los ficherosrequeridos en las cintas. No hay necesi-dad de leer la cinta secuencialmente decabo a rabo; por el contrario, Baculapuede posicionar la cinta (al menos alprincipio de la tarea). Además, el catálo-go almacena un historial de todas lastareas de backup.

Bacula puede usar cualquier base dedatos SQL para las tareas de gestión. Elpaquete incluye scripts de configuraciónpara PostgreSQL, MySQL y SQLite. Elsoporte de estas bases de datos SQLpopulares permite a los administradoreshacer copias de las bases de datos yacceder a ellas manualmente si las cosasempeoraran. Una pérdida o un catálogoinconsistente son algunos de los proble-mas más críticos que pueden afectar aun sistema de backup. Para mitigar elefecto de la pérdida del catálogo, elpaquete Bacula incluye scripts que alma-cenan el catálogo en un fichero ASCIIcuando una tarea se está realizando. Sialgo fuera mal, por lo menos, la versiónprevia se recuperará fácilmente.

Casualmente, se puede usar el directo-rio de Bacula para almacenar ficherosque realicen una detección sencilla de

probablemente prefiera excluir algunosdirectorios como /tmp o ficheros ocultoscomo .journal o .fsck.

El sistema de backup tan sólo traspasarála frontera del sistema de ficheros cuandose le indique explícitamente. La configura-ción por defecto lo mantiene en el sistemade ficheros actual para evitar el daño quepudiera ocasionar al entrar en bucles infi-nitos o salvar servidores de ficheros deforma inadvertida. Si se desea manteneresta medida de seguridad habrá que enu-merar cada sistema de fichero local que elcliente tenga montado para poder realizarun backup completo.

Desde luego, Bacula también soportatareas más complejas. Por ejemplo, sepuede referenciar a una lista externa deficheros, a expresiones de la shell oscripts que produzcan listas de copias deseguridad en tiempo de ejecución. Seentiende por comandos shell en línea alos caracteres de escape no estándar y alos espacios en blanco, los scripts son laopción más sencilla.

Imagínese que se quiere realizar unacopia de seguridad de todos los ficherosde configuración del directorio /etc y detodos los ficheros ocultos y directoriosen el directorio home del usuario jcb. Elsiguiente mini-script se encargaría derealizar la tarea de backup:

#!/bin/sh

find /home/jcb U

-maxdepth 1 -name ".*"

find /etc -name "*.conf

En el siguiente ejemplo, el FileSet sedefiniría como sigue:

FileSet {

name = "ConfigSet"

include {

Options {

signature = MD5

}

File = U

"|/etc/bacula/confbackup.sh"

}

}

Además de usar ficheros, listas o scripts,los administradores pueden especificardispositivos como entrada de datos (aun-que estos dispositivos tan sólo puedenser montados en formato de sólo lectu-ra). Y finalmente, el backup puede inclu-so leer datos desde fuentes FIFOs, que

ADMINISTRACIÓN • Bacula

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

Figura 2: GConsole no proporciona una GUI,

pero al menos facilita una consola gráfica

con varios menús que hace que no necesite

una ventana de terminal.

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

intrusiones con Tripwire o Aide. Dos fun-ciones integradas, que pueden ser ejecu-tadas independientemente de las carac-terísticas de backup o recuperación,están diseñadas para recuperar metada-tos para compararlos con los sistemas deficheros. Se pueden detectar modificacio-nes no autorizadas.

El EquipoPor supuesto, un director no es nadie sinsu plantilla. En Bacula, el directormanda sobre dos grupos de subordina-dos: uno o varios servicios de almacena-miento y varios servicios de ficheros.Estos últimos se ejecutan en el ladocliente y utilizan la red para suministrarlos datos a los servidores de almacena-miento. Es aquí donde los servicios dealmacenamiento se ejecutan, soportandocintas o bibliotecas. Si fuera necesario, elservicio de almacenamiento tambiénpuede hacer backups sobre discos y estopuede ser útil para las soluciones inter-medias de almacenamiento de las últi-mas copias en discos duros.

Los servicios de ficheros están disponi-bles para Linux, para la mayoría de lossistemas operativos basados en Unix(por ejemplo, Solaris, AIX, HPUX,FreeBSD e incluso MacOS X) y todas lasversiones de Windows. Esto más omenos elimina la necesidad del uso deSamba o NFS, aunque ambos estánsoportados.

¡Marcha Atrás!La recuperación de datos reinvierte elproceso de backup. Cuando se le dice aldirector que lo haga, el servicio de alma-cenamiento envía los ficheros solicitadosal servicio de ficheros, que se encarga dealmacenarlos en el cliente. Los ficherosno se restauran a sus posiciones origina-les; sino que se crea un nuevo árbol deficheros en un directorio especial. Laconfiguración de la tarea de recupera-ción puede especificar cual va a ser estedirectorio; por supuesto, el sistema deficheros tiene que tener el espacio sufi-ciente para almacenar dichos ficheros.Por defecto es /tmp/bacula-restores.

Se puede modificar este comporta-miento especificando el directorio raízcomo el destino de la recuperación. Estohace que los ficheros se restauren a suslocalizaciones originales. Una aclaraciónen este punto: Bacula no tiene una políti-ca de resolución de conflictos. Si un

fichero que se está restau-rando ya existe en el direc-torio de destino, dichofichero ni se protege ni serenombra, simplemente sereemplaza y esto puede serque no se desee.

Hay varias formas deseleccionar los ficheros quese desean restaurar. Todasellas pasan por recorrer unárbol de directorios virtualque contienen todos losficheros almacenados en lacinta. Se puede navegar poreste árbol usando los comandos UNIX típi-cos (cd, ls, pwd, …). Y habrá que utilizaralgunos comandos para marcar los ficherosy directorios que se desean recuperar (denuevo, una interfaz basada en GUI seríauna buena alternativa).

Como un servicio especial, Bacula per-mite combinar el último backup comple-to para un cliente y todos los backupsincrementales subsecuentes en estavista. Incluso se puede restringir la selec-ción a todos los ficheros que se hayansalvado antes o después de una determi-nada fecha.

Las versiones actuales de Knoppix [3]incluyen un servicio de ficheros de Baculay una consola, lo que hace que Bacula seamuy útil como una solución simple para larecuperación tras un desastre, suponiendoque se sepa cómo se tiene particionadocada disco que se haya salvado y tambiénse tengan, en una localización diferente,los ficheros de control de Bacula. Un CDde recuperación de Bacula, para intentarrecuperar un sistema después de un fallocompleto, no funcionará con los últimoskernels de Linux (2.6.x), aunque se estátrabajando en ello.

Designación deResponsabilidadesEl acceso a la consola de Bacula estágobernado por los permisos de ejecucióndel usuario: la aplicación no solicita a losusuarios que se autentiquen y no soportadiferentes niveles de privilegios para losusuarios. Sin embargo, se pueden confi-gurar variantes de la aplicación de laconsola tan sólo soporten tareas específi-cas o subconjuntos de comandos,FileSets, grupos de soportes o dispositi-vos. Esto permite a los administradorestener un margen para poder disponer deuna gestión de usuarios.

Esta técnica no es lo suficientementegranular como para permitir a cadausuario que pueda restaurar sus propiosficheros sin tener que pedírselo al admi-nistrador, pero permite delegar dentro deun grupo administrativo.

En muchos casos, el pedirle a unusuario que restaure datos es muchomás que un reto, ya que Bacula no dis-pone de una interfaz en la que se puedaapuntar y hacer clic. Herramientascomo Wxconsole y Gconsole proporcio-nan unos cuantos menús que eliminanla necesidad de memorizar y teclear loscomandos, pero aún así disponen deuna línea de comandos para poder eje-cutar comandos que no son posiblesllevarlos a cabo de otra forma. Laherramienta basada en Java JBacula[4], que es un proyecto separado, pro-porciona plantillas y utilidades quefacilitan la configuración del serviciode directorios.

ConclusionesLos administradores que no le tenganmiedo a la línea de comandos encontra-rán que Bacula es una herramienta muyútil, extremadamente flexible y concaracterísticas profesionales. Bacula con-tiene una buena documentación y seintegra fácilmente en entornos con siste-mas heterogéneos. �

Bacula • ADMINISTRACIÓN

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

[1] Sitio web de Bacula: http://www.

bacula.org

[2] Mtx para el control de Bibliotecas:http://mtx.badtux.net

[3] Knoppix con Bacula: http://www.

knopper.net/knoppix/index-en.html

[4] JBacula: http://jbacula.sourceforge.

net

RECURSOS

Figura 3: JBacula, un proyecto desarrollado independiente-

mente, ayuda a configurar el servicio de directorios.

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

70

La mayoría de los usuarios de Linuxterminan acudiendo a la línea decomandos tarde o temprano. Los pro-

gramas en línea de comandos suelen sermás flexibles y eficientes que su equivalentegráfica. Pero tiene también una desventaja:innumerables opciones y parámetros quenadie puede recordar. La lista de opcionesasociadas con cada comando crece y crece,con lo que se hace imprescindible para eladministrador una detallada y accesibledocumentación.

La documentación debería evitar ser com-pleja: las presentaciones sofisticadas defini-tivamente no son el tipo de referencia quenecesitamos para los desarrollos software, yla mayoría de los desarrolladores prefierenno perder tiempo acicalando su documenta-ción. Esas consideraciones pragmáticas hanconducido a distintas soluciones de docu-mentación en línea que representan diferen-tes compromisos entre legibilidad y facilidadde elaboración.

Páginas de ManualLas páginas de manual, o más brevementepáginas man, son el medio más comúnmen-te usado. Las páginas man son rápidas yfáciles de crear por el desarrollador, asícomo sencillas de mantener actualizadas. Dehecho, el entorno Linux incluye herramien-tas especiales que actualizan las páginasman haciendo referencia a los cambios en elcódigo fuente. Estas páginas son fáciles deinstalar y extremadamente amigables.

Una página man, como la mostrada en laFigura 1, es un documento único que cubreun tema específico, generalmente un coman-do. Los programas desarrollados específica-mente para esta tarea ayudan a los usuarios

Consejos desde dentro: Documentación en Unix y Linux

EL APUNTADOR

ADMINISTRACIÓN • Documentación

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

Los administradores de sistemas recurren frecuente-

mente a la documentación para obtener ayuda con

las opciones de línea de comandos poco conocidas.

En el artículo de este mes del Taller del Adminis-

trador, examinamos los programas y formatos

detrás de la documentación que leemos cada día.

POR MARC ANDRÉ SELIG

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

a encontrar y mostrarlas páginas man enuna línea de coman-dos, en una interfazgráfica de usuario o enuna web.

El formato de archi-vo subyacente de laspáginas man viene deRoff, un sistema deformateado de textoque se remonta aprincipios de los 70(véase el código fuen-te en el Listado 1). Enlos modos usados porlas páginas man, sólose contempla un for-mateado básico,como cabeceras,subrayado o enume-ración. Esta simplici-dad garantiza quecualquiera puedacrear una página mancon el mínimo esfuerzo.

Cualquier distribución reciente deLinux tiene un buen número de páginasman, incluso las más ligeras, dado queno necesitan mucho espacio. Además deesto, muchos programas vienen con suspropias páginas man. El proyecto LinuxDocumentation Project [1] tiene infor-mación adicional de temas básicos comolibc y el kernel.

Podemos recurrir a una página manpasándole el nombre de la página, gene-ralmente el nombre del comando, comoargumento del programa man: man

bash. Los front-end gráficos muestranalgunas vistas alternativas.

Navegar en la Jungla ManCada página man se asigna a una secciónespecífica: la Tabla 1 tiene resumen de lasocho secciones más importantes. Ademásde las secciones numeradas, existe unbuen número de secciones organizadaspor letra. Son, habitualmente, las letras n(de nuevo), l (local), p (público) y o (old,viejo). La mayoría de los sistemas Linuxcolocan las páginas man del lenguaje Tclen la n, por ejemplo.

Los manuales seguardan en directoriosdedicados al efecto [2]lo que facilita su bus-queda. Existe un direc-torio para cada sección:man1, man2, etc. Elarchivo/etc/manpath.config yla variable de entornoMANPATH, le indican aman dónde buscar ladocumentación.

La distribución de laspáginas a través de losdirectorios fue un afor-tunado cambio en losprimeros días de Unix.El sistema de archivosUFS de la época consi-guió un gran rendi-miento en encontrar laenorme cantidad dearchivos guardados enun directorio.

Dependiendo de la configuración, man

guarda las páginas formateadas (llama-das páginas cat) en directorios configura-dos al efecto. Esta solución elimina lanecesidad de formatear la página man lapróxima vez que un usuario la requiera,una obvia ventaja para equipos antiguoso de bajo rendimiento que no tienendemasiada potencia. Algunos sistemasmontan la partición /usr como de sólolectura para mejorar la seguridad. Eneste caso necesitaremos guardar las pági-nas cat bajo /bar.

En carpetas adicionales tendremospáginas man traducidas a otros idiomas.Por ejemlo, la página en inglés parachmod debería estar guardada en/usr/share/man/man1/chmod.1, mien-tras que la versión en alemán estará en/usr/share/man/de/man1/chmod.1.

¿Qué es Apropos?Si estamos buscando un comando especí-fico y no estamos seguros de haberencontrado el adecuado, los comandosapropos y whatis pueden ser nuestra sal-vación. apropos busca un determinadoargumento en las cabeceras de todas laspáginas man guardadas e incluso encuen-tra argumentos en subcadenas. whatis

usa un método similar pero sólo buscacoincidencias en palabras completas enlas cabeceras. Tanto apropos como whatis

usan una base de datos binaria para ace-

Documentación • ADMINISTRACIÓN

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

01 .TH man 1 "14 May 2001"

"2.3.19" "Manual pager utils"

02 .SH NAME

03 man \- an interface to the

on-line reference manuals

04 .SH SYNOPSIS

05 .\" The general command line

06 .B man

07 .RB [\| \-c \||\| \-w

\||\|\-tZT

08 .IR device \|]

09 .\"

10 [...]

11 .RI [\|[\| section \|]

12 .IR page \ .\|.\|.\|]\ .\|.\|.

13 .\"

14 [...]

15 .SH DESCRIPTION

16 .B man

17 is the system's manual pager.

Each

18 .I page

19 argument given to

20 .B man

21 is normally the name of a pro-

gram, utility or function.

22 The

23 .I manual page

24 associated with each of these

arguments is then found and

displayed.

25 .\"

Listado 1: Código Fuente de una Página Man

Figura 1: Las páginas man ofrecen al usuario una rápida y cómoda manera de visua-

lizar documentación.

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

Crear una página man es muy fácil. Elcomando Roff siempre empieza con unpunto. Las opciones requeridas le siguenen la misma línea. Existen un puñado deimportantes comandos de formateo paralas páginas man: .TH inicia una páginaman y requiere un título corto, el núme-ro de sección, la fecha, versión y títulolargo como argumentos.

Al mostrarse, esta información se colo-ca en la cabecera y en el pié de página..SH proporciona un subtítulo. .B es paranegrita, .I para cursiva (o subrayado,dependiendo del terminal). Una línea

vacía indica fin del párrafo, y tecleando.BR tendremos un retorno de carro.

Antes de precipitarnos a copiar unapágina man original y reemplazar sucontenido con el nuestro, una adverten-cia: los títulos (.SH) están normalizados.La primera sección, NAME, tiene un sig-nificado especial, ya que su contenido seanaliza por las bases de datos que sedescriben en los siguientes apartados.

El Tamaño Sí ImportaLa mayor ventaja de las páginas man sonpequeñas y simples. Sin embargo, lascosas se complican si el desarrolladornecesita documentar escenarios máscomplejos o paquetes de software. Porejemplo: las páginas man de los distintosshells, cada uno de los cuales describeun lenguaje de programación completocon todas sus herramientas e indicacio-nes, lo que significa realmente mucho.La página man de Bash comprende unas4.000 líneas (o 60 páginas impresas) y escualquier cosa menos intuitivo.

Perl muestra un posible método paraevitar una sobrecarga en la página man:dividirla en varias secciones, de maneraque el usuario pueda cargar las seccio-nes que necesite. Una página de bienve-nida proporciona ayuda para la navega-ción y una tabla de contenidos.

Sistema InfoEl sistema info es otra alternativa a lasobrecarga de una página man. En lugardel formato lineal adoptado por las pági-

lerar la busqueda de información.Dependiendo de nuestra distribución yversión de Unix, los comandos makewha-

tis y mandb son los responsables de crearel archivo de base de datos. Este comandose ejecuta con cron o anacron [3] a inter-valos regulares de tiempo para mantenerlos directorios actualizados.

Hágalo-Usted-MismoInternamente, man usa principalmentelas herramientas de Roff nroff o groff. Ensistemas GNU, nroof simplemente ejecu-ta groff para emular el comportamientodel comando original nroff. nroff se usapara la salida ASCII, mientras que laherramienta GNU puede manipular otrosformatos de archivo, como Postscript yHTML.

El siguiente comando convierte elcódigo de una página man a ASCII (aLatin 1 para ser más precisos), y usa elpaginador less para mostrar los resulta-dos: nroff -man manpage.1 | less

La opción -m especifica a la macro quénroff debería usar para interpretar el for-mato.

El paquete de macros an contiene lostípicos comandos de páginas man.Muchos sistemas Linux usan el paquetede macros extendido andoc en su lugar(es necesario teclear -mandoc para ejecu-tar andoc). Los siguientes comandosconvierten una página man a Postscript:groff -Tps -man manpage.1 > manpa-

ge.ps. La opción -T especifica el formatode salida deseado.

ADMINISTRACIÓN • Documentación

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

Figura 2: xman permite al administrador ver las páginas

man instaladas con un pulcro front-end. xman además

puede mostrar una lista de páginas man para una sección

específica.

Figura 3: Tecleando info en línea de comandos ejecutamos este sencillo siste-

ma de ayuda con formato de árbol.

Existen Front-Ends gráficos con soportede operaciones con ratón tanto para laspáginas man como para los sistemasinfo. Por ejemplo, xman es una interfazsimple pero cómoda. Los administrado-res pueden pulsar [Ctrl+S] para buscaruna página man. Alternativamente,podemos mostrar todas las páginasman en una sección específica, como semuestra en la Figura 2. Si preferimosusar nuestro navegador para explorar ladocumentación, podemos probarman2html. Existe una enorme coleccióndisponible en línea en [4], por ejemplo.

tkinfo muestra las páginas info en elescritorio, sin embargo, las funciones yapariencia se parecen al original (véaseFigura 3), que además tiene soportepara operaciones con ratón en Emacs,por ejemplo.

Front-Ends gráficos

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

¡Hazte con tus ejemplares atrasados!

#2

WWW.LINUX-MAGAZINE.ES

¡No esperes a quese agoten!

¡pídelos ya!

#3

#4

#6

#7

#8

#9

¡pídelos ya!

a go t a do

#5

#1

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

ADMINISTRACIÓN • Documentación

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

nas man, el sistema info usa una estructu-ra en árbol con menús y submenús paraorganizar el texto (véase Figura 3). Lasreferencias cruzadas adicionales que esténincrustadas en el árbol, permiten al usua-rio ir delante o atrás rápidamente entretemas relacionados. Un sistema de nave-gación bien diseñado facilita las cosas a lahora de navegar por la estructura.

Al usar un árbol para distribuir lainformación reflejamos la forma en laque la gente usa los ordenadores. Siempezamos a usar un nuevo lenguaje descript, por ejemplo, necesitaremos pri-mero una pequeña introducción, tras laque podremos pasar directamente a lainformación que necesitamos, saltándo-nos los temas innecesarios. Una estruc-

tura organizada y dispues-ta de manera clara es unagran ayuda.

Info y el UsuarioEl comando info permiteal usuario navegar en elsistema de información.Además de esto, los edito-res Emacs y XEmacs tie-nen modo de sistema denavegación en info (véaseFigura 4). En el caso mássencillo, el usuario querránavegar por las páginasinfo desde arriba hastaabajo. Pulsando la barraespaciadora avanzamospor el texto, y presionan-

do la tecla de retroceso regresamosatrás.

Los pasos de navegación alternativostienen más sentido cuando el texto seramifica en función de condiciones. Losmenús están etiquetados como *Menu, ynos proporcionan una visión general desus nodos subordinados. Podemos pul-sar [M] para pasar a un punto del menú.Es suficiente con teclear las primerasletras de la etiqueta del menú en elprompt y presionar [Tab] para completar.Si movemos el cursor hasta la entradadeseada y presionamos [Enter] obtendre-mos el mismo efecto.

Otros atajos son [N] (para ir a lasiguiente página), [P] (para ir a la páginaanterior) y [U] (para ir a la páginamatriz). Las etiquetas see apuntan a refe-rencias cruzadas. Podemos presionar [F]para seguirlas. Por último [L] nos mos-trará la última página vista.

Código Fuente del ArchivoInfoAntes de convertirlas en un formatocomprensible para el lector, los archivosfuente info (identificables por la exten-sión .texi) tienen un aspecto similar a undocumento TeX con algún etiquetadoadicional. Los comandos de TeX empie-zan por una barra invertida, \, mientrasque los comandos info usan una arroba(@.)

Para crear nuestros propios archivosinfo, necesitamos el paquete texinfo, quecontiene documentación detallada delformato texi (en formato info, por sus-puesto) entre otras cosas. Los archivos.texi pueden convertirse en archivos

.info utilizando el comando makeinfo.Los archivos residen habitualmente en/usr/info o /usr/share/info, al igual queel archivo dir, que ofrece una visióngeneral de los archivos info instalados ennuestro sistema. El lector de info mues-tra el archivo dir como una especie depágina inicial al ejecutarse.

De la misma manera podemos ejecutarTeX para convertir archivos texi a DVI, oconvertirlos a otros formatos como PDFy Postscript. TeX es capaz de leer archi-vos texi. El archivo realiza la llamada alpaquete de macros en la primera línea(\input texinfo), y esto permite a TeXinterpretar los comandos at que lesiguen. TeX devuelve un archivo DVI,junto con un cierto número de archivosíndice, como salida. makeinfo y compa-ñía leen los mismos comandos at queTeX, pero devuelven un documento info

para mostrarlo de manera interactiva enpantalla.

Leame’s, Cómo’s y FAQ’sA la hora de enfrentarse a la elección delas herramientas de documentación, eladministrador no debe olvidar la formamás simple de documentación. Losarchivos sólo-texto (típicamente llama-dos LEAME) se proporcionan con lamayoría de los programas y a menudocontienen información vital. Las distri-buciones de Linux sitúan estos archivosen /usr/share/doc/. Encontraremos unagran cantidad de archivos COMO en [1].Merece la pena visitarlo, ya que encon-traremos información para resolvernumerosas tareas criticas en Linux,como configurar tarjetas WLAN, quemarDVD’s o configurar LDAP. �

[1] The Linux Documentation Project:http://www.tldp.org

[2] Estándar en la jerarquía del sistemade archivos de páginas man: http://

www.pathname.com/fhs/pub/fhs-2.3.

html#USRSHAREMANMANUALPAGE

S

[3] Marc André Selig, “Cron, At,Anacron”: Linux Magazine 12/ 04, p.66. http://www.linux-magazine.com/

issue/49/

Admin_Workshop_Scheduling_with_c

ron_at_anacron.pdf

[4] Páginas man en la web: http://linux.

ctyme.com

RECURSOS

Figura 4: El editor Emacs permite a los usuarios navegar por

el sistema info. Si lo ejecutamos bajo X añadiremos el sopor-

te para ratón en los menús info.

Sección Descripción1 Ejecutables o comandos

shell2 Llamadas al sistema

(funciones del núcleo)3 Llamadas a librería (fun-

ciones en librerías del sistema)

4 Archivos especiales (generalmente en /dev)

5 Formatos de archivo y convenciones, v.g. /etc/ passwd

6 Juegos7 Paquetes de macros y

convenciones (como XF86Config, man)

8 Comandos de administración (como lsmod, ifup)

Tabla 1: Secciones Man

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

7171ISSUE 52 MARCH 2005W W W . L I N U X - M A G A Z I N E . C O M

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.

KTools: KPager 2 76

Si queremos una mejor visualización de los escritorios

virtuales, podemos probar Kpager2, un paginador

alternativo para KDE.

Metapixel 78

Una herramienta libre que crea atractivos fotomosai-

cos a partir de una colección digital de imágenes.

Desktopía 81

JWM es un gestor de ventanas para usuarios de Linux

que requieran una interfaz gráfica de usuario eficiente

y no les asuste lidiar con un editor de texto para con-

seguirlo.

Educación 84

Una reivindicación compartida por los profesores de

todo el mundo que utilizan software en sus clases es la

necesidad de un catálogo de recursos educativos.

Línea de comandos 89

Este mes echamos un vistazo a cómo crear y adminis-

trar cuentas de usuarios Linux desde la línea de

comandos.

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

Los usuarios de otras distribucionesnecesitarán compilar el programa desdeel código fuente, que está disponibledesde la página web de KPager2. Sesiguen los pasos habituales para compi-lar e instalar:

./configure && make U

&& su -c "make install"

La versión actual 0.6.0 deKPager2 no funcionará conla versión 3.4 de KDE,aunque los desarrolladoresestán trabajando intensa-mente en resolverlo. Si

tenemos KDE 3.4, aún podemos intentarusar KPager2: otro posible método es

deshabilitar temporalmente el kickertecleando killall kicker, y reiniciarlo conkicker. Después de hacer esto, no deberí-amos tener problemas para ejecutarKPager2 bajo KDE 3.4. Como alternativa,podemos lanzar el paginador tecleandoappletproxy /usr/kde/3.4/share/apps/kic-

ker/applets/kpager2.desktop en un termi-nal. Si hiciese falta modificar la ruta (siKDE 3.4 está instalado en /usr/local ennuestro sistema), el archivo kpager2.des-

ktop se encontrará en/usr/local/share/apps/kicker/applets. Sitenemos una versión distinta de KDE,podemos iniciar el paginador pulsandosobre Add | Applet en el menú desplega-ble del kicker.

Idas y venidasAl igual que con la herramienta paraconmutar escritorios por defecto de KDE,se añadirá una entrada para KPager2 enel menú de inicio. La aplicación mostra-rá una miniatura de cada escritorio,como se puede apreciar en la Figura 1. Alpulsar sobre cada icono se nos presenta-rá el escritorio correspondiente.

Pronto descubriremos algunas caracte-rísticas de KPager2 que no encontrare-mos en el escritorio por defecto de KDE.Por ejemplo, podemos arrastrar y soltarlas ventanas de la vista de una miniaturahasta otro escritorio. Al hacer doble clicen la miniatura de un escritorio se abreel menú mostrado en la Figura 2. Estemenú tiene una lista de las ventanas

76

LINUX USER • KTools: KPager 2

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

Un paginador alternativo a kicker

CONMUTARESCRITORIOS

Casi todas las interfaces gráficas deusuario bajo Linux muestranvarios escritorios virtuales. Los

gestores de ventanas más sencillos usanatajos de teclado para conmutar entre losescritorios. KDE, Gnome y otros gestoresmás avanzados como Enlightenment tie-nen además un paginador: una vista grá-fica miniaturizada de los escritorios quepermite que pulsemos sobre ellos paracambiar de escritorio. EnKDE tenemos el programakpager, que se sitúa nor-malmente como un appletbajo la barra de tareas deKDE. Si el paginador pordefecto no cumple con nuestras especta-tivas, tal vez deberíamos cambiarlo poruna herramienta más adecuada. Unaalternativa útil es el KPager2.

InstalaciónLa manera más fácil de integrar KPager2con Suse y Debian Linux es usar el escri-torio KDE. Existen paquetes KPager2para ambas distribuciones en [2] y [3].

Si queremos una mejor visualización de los escritorios virtuales, podemos

probar Kpager2, un paginador alternativo para KDE.

POR HAGEN HÖPFNER

Figura 2:El menú desplegable nos permite

cambiar a una ventana específica o incluso

ejecutar aplicaciones.

Figura 1:KPager2 en la

barra de herramientas.

En esta columna presentamos herra-mientas, mes a mes, que han demostra-do especial utilidad al trabajar con KDE,resolviendo problemas ignorados deli-beradamente, o algunas otras pequeñascosas que, como en la vida misma, unavez descubiertas se nos hacen impres-cindibles.

KTools

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

77

KTools: KPager 2 • LINUX USER

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

activas en el escritorio en cuestión.Pulsando en las entradas no sólo noslleva al escritorio, sino que se le indica aKPager2 que sitúe el foco en la ventanadeseada. El menú All Windows on

Desktop nos permite modificar las pro-piedades de todas las ventanas de unescritorio. Por ejemplo, podemos pasartodas las ventanas a icono de golpe.

Si hacemos clic en una ventana delpaginador, el menú desplegable nos ofre-ce simplemente la posibilidad de maxi-mizar o minimizar la ventana actual. Elmenú contextual tiene una entrada lla-mada Configure Virtual Desktops.Pulsando sobre ella aparece el cuadro deconfiguración de los escritorios virtualesde KDE. Desde aquí podemos decidircuántos escritorios vamos a tener enKDE. La entrada Run command nos per-mite iniciar programas.

Ajuste FinoKPager2 no sólo tiene más funcionalida-des, sino que también tiene gráficos másvistosos que el paginador de KDE. Porejemplo, nos proporciona una vista pre-via de cualquier ventana activa. Esto noes sólo un alarde visual, sino que pode-mos ver realmente lo que está pasandoen la ventana de Mozilla del escritorio 2mientras que estamos trabajando en elescritorio 1. El cuadro de diálogoConfigure KPager2 (véase Figura 3) nospermite configurar el nivel de soportegráfico necesario. Desplegamos el menúdel applet para acceder a este cuadro dediálogo.

El cuadro está dividido en cuatro sec-ciones: los iconos de la izquierda nos

ayudan a movernos entre las secciones.Podemos especificar el número de filasque KPager2 asigna a los escritorios vir-tuales a través de Number of rows dentrode General. Si no necesitamos el cuadropara iniciar programas en menú, pode-mos quitar la marca en el apartado Show

launcher para ocultarlo. Themes nos per-mite seleccionar el aspecto por defectode KPager2. Para modificar el aspectonosotros mismos, pulsamos en el iconoCustom para que aparezca el cuadro dediálogo Custom Layout (véase Figura 4).

En Windows podremos especificar elnúmero de ventanas que KPager2 debemostrar y qué aspecto deben tener. Lasección Type of window tiene tres opcio-nes. Pixmap indica a KPager2 que genereuna miniatura en la ventana y la muestreen el paginador. Por contra, con Icon semostrarán las ventanas con los iconospropios de los programas. Y para un sis-tema más simple podemos optar porPlain. Con esta opción se mostrarán lasventanas como simples cuadros. Ademásde todo esto, podemos configurar latransparencia y animaciones (enAnimation). Si habilitamos los efectosZoom o Zoom, shifted, KPager2 aumen-tará el tamaño del diagrama al posar elratón encima del paginador.

La Tercera DimensiónAdemás de las dos categorías de configu-ración comentadas hasta el momento,existen otras dos más en el cuadro: Keys

nos conduce a un cuadro de diálogodonde podemos modificar los atajos deteclado de KDE para conmutar entre losescritorios virtuales. Esta opción es muy

útil si usamos KPager2 con 3ddesktop.Este paginador externo mejora el procesode conmutación de escritorios añadiendoefectos 3D. Si dejamos los atajos de KDE,KPager2 y 3ddesktop no reaccionan antelos comandos para conmutar. El cuadrode configuración de KPager2 nos ofreceopciones para habilitar y deshabilitar elsoporte para 3D, e incluso podemosseleccionar un efecto tridimensional.KPager2 hará llegar este parámetro direc-tamente a 3ddesktop.

ConclusionesKpager2 tiene gran cantidad de buenascaracterísticas, así como la posibilidad deactuar como front-end para 3ddesktop,haciéndolo más útil que el paginador nati-vo de KDE. Si estamos buscando un pagi-nador con más funcionalidades y algo demás chispa, KPager2 merece ser probada.El precio a pagar es un ligerísimo incre-mento en el uso de la CPU. Si necesitamosejecutar el programa con la versión 3.4 deKDE, recomendamos visitar la página delproyecto, pues es probable que encontre-mos una versión más reciente de estaherramienta. �

[1] Página de KPager2 : http://www.

uni-weimar.de/~wolff3/software/

kpager2.html

[2] KPager2 para Suse Linux: http://

linux01.gwdg.de/~pbleser/

rpm-navigation.php?cat=/Utilities/

kpager2

[3] KPager2 para Debian: http://cerza.org/

~zack/files/debs/kpager2

RECURSOS

Figura 3:Configuración de KPager2. Figura 4:Configuración personalizada del Layout de KPager2.

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

parar la colección de imágenes digitales,también necesita Perl, pero de todas for-mas la mayoría de los sistemas Linux tie-nen Perl instalado. Tras desempaquetar,primero se ejecuta make, luego su -c

make install para que los ejecutables ylas páginas del manual estén en losdirectorios adecuados. Si se necesitacambiar la ruta de instalación, se puedeeditar el Makefile para establecer unPREFIX antes de realizar estos pasos.

Se necesita una colección de imágenesdigitales realmente grande para realizar unmosaico atractivo. Si la colección es dema-siado pequeña, Metapixell no tendrá sufi-ciente materia prima para reflejar los colo-res y la silueta del original. De hecho senecesitan unos cuantos miles de imáge-nes. El resultado no será espectacular conun par de cientos de imágenes.

Es probable que la colección esté for-mada por fotos de distintos tamaños, asíque será necesario adaptarlas, ya que esdifícil realizar un mosaico si las teselas[3] no son del mismo tamaño. El guiónPerl metapixel-prepare se encargará deesto. El guión espera que se le pase eldirectorio donde está la colección defotos y un directorio donde almacenarlas imágenes redimensionadas:

metapixel-prepare U

imagecollection U

mosaicpics

La opción -r (de recursivo) le indica alguión que busque en los subdirectorios.Si no se indica otra cosa, el guión ajusta-rá el tamaño de las imágenes a 120x120pixels. Si se prefiere trabajar con otrasdimensiones se pueden especificar losparámetros --width y --height. La herra-mienta va indicando el progreso del pro-ceso mediante una línea de puntos queaparecen en la pantalla.

Es importante observar que el guiónno sólo redimensiona las imágenes, yaque al mismo tiempo también las anali-za, determinando los valores de con-traste y color que ayudarán más tarde aMetapixel cuando monte el mosaico. Elguión coloca estos datos en el mismodirectorio, en un archivo denominadotables.mxt. Si se desea, se puede echarun vistazo al mismo. Es un archivo detexto en un extraño formato de tipoLisp. Si el guión de preparación falla oencuentra algún tipo de problema,habrá que establecer el indicador--debug para averiguar más sobre elasunto.

78

LINUX USER • Metapixel

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

Fotomosaicos con Metapixel

TESELA A TESELA

Seguramente habrán visto en algu-na ocasión algún póster de grantamaño realizado a partir de

pequeñas fotos para crear una imagenmayor [1]. Un fotomosaico utiliza fotospequeñas de la misma manera que unaimagen gráfica convencional utiliza lospixels. Necesitarán ver la imagen delfotomosaico desde una cierta distanciapara poder ver el efecto completo.

Por supuesto que pueden realizar elfotomosaico, uniendo las imágenesmanualmente, pero el proceso puede lle-gar a ser extremadamente difícil y consu-mir demasiado tiempo. Ahora, los usua-rios de Linux tienen a su alcance un sen-cillo programa que funciona desde lalínea de órdenes para que se encargue deesta faena. Metapixel [2] de Mark Probstexamina una colección de imágenes digi-tales y se encarga de realizar el fotomon-taje.

Preparando las herramien-tasEste programa es muy fácil de configurary solamente necesita las bibliotecas jpegy PNG, junto con los correspondientespaquetes de desarrollo. El guión, inclui-do en el paquete, que les ayudará a pre-

Si están buscando algo más que el convencional diseño de teselas, prueben Metapixel, una herramienta libre

que crea atractivos fotomosaicos a partir de una colección digital de imágenes. POR OLIVER FROMMEL

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

79

Metapixel• LINUX USER

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

Figura 1: El tipo de fotomosaico más simple, usando un dibujo de una flor como plantilla.

Figura 2: Una versión mejorada del fotomosaico usando más teselas de imágenes, mostrando de este modo más detalles de la imagen original

que sirve de plantilla.

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

Hay que ajustar las dimensiones paraque el producto final refleje lo que seintenta conseguir. Si se está imprimien-do un mosaico, se debe intentar conse-guir un formato de gran escala. Y estodictamina el tamaño de las imágenesen el ordenador. Si se quiere conseguirun formato de tamaño A3 (que en reali-dad es bastante pequeño) El mosaicodeberá tener un tamaño de al menos4000 pixels por 6000. Habrá que redi-mensionar la plantilla con la ayuda deGIMP. En este caso 33 teselas rellena-rán el mosaico en dirección horizontal.La figura 2 muestra un mosaico másatractivo basado en una plantilla conuna imagen más grande.

Superponiendo fotosSi no se pueden conseguir los resultadosque se están buscando, pese a tener sufi-ciente número de imágenes en teselas ya pesar de haber cambiado el tamaño dela plantilla, Metapixel aún tiene algunostrucos en la manga. Por ejemplo puedesuperponer las teselas sobre la imagenoriginal para conseguir una imagen másnítida, aún cuando las imágenes de lasteselas no se adapten correctamente.Esta opción se denomina, muy apropia-damente, --cheat.

Alternativamente, se puede elegir untipo diferente de mosaico, al cualMetapixel se refiere como “collage”. Estávariante permite que las teselas se sola-pen. Para crear un collage hay que indi-car --collage al ejecutar el programa:

metapixel U

--collage flor.jpg U

collage-flor.png U

--library mpix

El resultado de esta operación se puedeapreciar en la Figura 3.

Después de experimentar durante unrato, se deberían encontrar los ajustescorrectos para conseguir un mosaicoperfecto. Para mantener esa configura-ción, es posible almacenarla en elarchivo ~/.metapixelrc. Por ejemplo sepuede establecer el directorio que con-tiene la colección de imágenes utilizan-do la clave librarydirectory seguido delnombre del directorio entre comillas.Hay que poner las configuracionesentre paréntesis. Las fuentes del pro-grama incluyen un archivo de configu-ración de ejemplo.

Cuidado con las patentesSuponiendo que se dispone de una ima-gen grande, Metapixel nos ofrece atracti-vos fotomosaicos con muy poco esfuer-zo, pero tenemos que tener en cuentaque los fotomosaicos están afectados porel problema de las patentes [4]. Los foto-mosaicos están cubiertos por variaspatentes controladas por la compañíaRunaway Technologies [1]. Los detalles yaplicación de estas patentes puedenvariar dependiendo de la interpretacióny la jurisdicción. Como mínimo, no sepueden explotar comercialmente losresultados de Metapixel. Véase [5] paramás información sobre las patentes desoftware. �

Montones de puntosTras preparar la colección de imágenes,se puede pasar a la creación del mosaico.La forma más simple consiste en indicarun archivo de plantilla, el nombre delarchivo de salida y el directorio con lacolección de imágenes. El siguienteejemplo toma una imagen llamadaflor.png y crea un mosaico llamadomosaico-flor.png utilizando para ello lacolección de imágenes que está en mpix.

metapixel U

--metapixel flor.jpg U

mosaico-flor.png U

--library mpix

El indicador --metapixel le dice al progra-ma que cree un mosaico sin solapar lasimágenes. La Figura 1 muestra el resulta-do de esta orden.

Los resultados no deberían convencer-nos por completo, ya que la resoluciónes realmente burda. Para realizar unfotomosaico más atractivo se necesitaestablecer la relación de tamaño entre laplantilla y las imágenes individuales. Sila plantilla es realmente pequeña serádifícil reconocer el motivo y esto implicaque no se pueden utilizar demasiadasteselas. Por otra lado, si las imágenes delas teselas son demasiado pequeñas, seperderá el efecto mosaico. Aunque sereconozca fácilmente el motivo delmosaico, probablemente no se notaráque las teselas son imágenes individua-les.

LINUX USER • Metapixel

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

1] El termino “photomosaic” es unamarca registrada de RunawayTechnologies, Inc. La compañía tam-bién ha patentado su propio softwarepara fotomosaico y reclama unapatente sobre el “look and feel” delfotomosaico. http://www.

photomosaic.com/

[2] Metapixel: http://www.complang.

tuwien.ac.at/~schani/metapixel

[3] Tesela: http://es.wikipedia.org/wiki/

Tesela

[4] Patentes de Photomosaic: http://

www.photomosaic.com/rt/

patent-index.html

[5] Más sobre las patentes de software:http://swpat.ffii.org/

RECURSOS

Figura 3: Las teselas de imágenes superpuestas a modo de collage.

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

81

DeskTOPia: JWM • LINUX USER

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

Gestor de ventanas JWM

SIMPLE Y LIGERO

Si instalamos cualquiera de lasprincipales distribuciones deLinux, probablemente tendremos

por defecto un escritorio KDE o GNOME.Pero ninguno de estos dos pesos pesadosdestaca precisamente por su economíarespecto a recursos de memoria y CPU.Si nuestro equipo está algo justo de

potencia, puede que estemos buscandouna alternativa.

Una de las opciones es JWM (Joe’sWindow Manager) [1]. JWM (véaseFigura 1) recibe este nombre por su des-arrollador, Joe Wingbermuehle. Joe seencarga de que JWM no dependa deinnumerables librerías: restringe las

dependencias únicamente al sistema XWindow.

InstalaciónJWM no proporciona ningún paquete debinarios listo para usar, pero compilarJWM desde las fuentes es muy fácil, yaque apenas tenemos unos pocos requeri-

JWM es un gestor de ventanas para usuarios de Linux que requieran una interfaz gráfica de usuario efi-

ciente y no les asuste lidiar con un editor de texto para conseguirlo. Si crees que es la herramienta que

estabas buscando, sigue leyendo y descubrirás mucho más de JWM. POR HAGEN HÖPFNER

Gestor de ventanas JWM

SIMPLE Y LIGEROJWM es un gestor de ventanas para usuarios de Linux que requieran una interfaz gráfica de usuario efi-

ciente y no les asuste lidiar con un editor de texto para conseguirlo. Si crees que es la herramienta que

estabas buscando, sigue leyendo y descubrirás mucho más de JWM. POR HAGEN HÖPFNER

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

cuta al hacer esto, añadimos la líneasiguiente:

exec /usr/local/bin/jwm

al archivo .xinitrc de nuestro directoriode usuario. Si usamos un administradorde login con interfaz gráfica como KDMo GDM, podemos añadir una entradapara JWM en su menú.

Primeros PasosLa primera vez que ejecutamos JWMdeberíamos tener al menos nuestroarchivo propio de configuración, quedeberá incluir una entrada de menú paralanzar un terminal. La configuración glo-bal del sistema se sitúa en el directorio/usr/local/etc cuando instalamos JWM.Debemos copiar el archivo system.jwmrc

a nuestro directorio de usuario como

.jwmrc. Abrimos el archivo con un editorde texto y cambiamos el nombre de pro-gram xwsh en la línea 7 por el nombre denuestra terminal favorita, xterm o konso-

le por ejemplo.Después de estos pasos previos ya

podemos iniciar JWM por primera vezcon una configuración básica. En elborde inferior de la pantalla aparece unbandeja que incluye un menú, un pagi-nador, un indicador de carga de la CPU yun reloj. Más tarde JWM mostrará unalista de programas activos en el centro.

Puede que queramos seleccionar laentrada Terminal del menú para iniciar laaplicación que configuramos en nuestroarchivo de configuración. El aspecto de laventana son reminiscencias de FVWM[2]. La barra de título de la ventana inclu-ye botones para pasar a icono, maximizary cerrar la ventana. También incluye unicono a la izquierda que abre el menú conclic del botón derecho del ratón.

Configuración del MenúPodemos usar el menú para mover laventana a otro escritorio virtual o man-darlo a segundo plano en la misma ven-tana. Si preferimos no usar el ratón,JWM soporta atajos de teclado querecuerdan mucho a los de KDE. Porejemplo, [Alt]+[Tab] conmuta entre lasventanas del escritorio en uso, y presio-nando [Alt]+[F4] cerramos la aplica-ción.

Podemos editar el fichero de configu-ración para modificar JWM y ajustarlo anuestras preferencias, ya que la configu-ración estándar probablemente sólosatisface al desarrollador de JWM. Loprimero es configurar el menú para quesoporte las aplicaciones que hemos ins-talado en nuestro sistema.

El menú puede contener submenús,lanzadores de programas, líneas de sepa-ración y llamadas internas a JWM. Estasllamadas internas pueden ayudar acerrar JWM, por ejemplo. La versiónactual no soporta reiniciar el gestor deventanas a través del menú. Cuandohemos seleccionado esta entrada, JWMse colgaba. El Listado 1 es un ejemplosimple que da como resultado el menúmostrado en la Figura 2.

La primera línea indica a JWM quesigue la definición del menú. La siguien-te línea tiene una entrada para iniciarxternz. Además de la etiqueta mostradapara la entrada del menú

mientos que cumplir. Todo lo que necesi-tamos es el compilador gcc, y los paque-tes de desarrollo para libxpm y la inter-faz gráfica del escritorio. Si tenemosSuse 9.2, encontraremos los ficheros decabecera de X en xorg-x11-devel. Si tene-mos una distribución basada en XFree86en lugar de Xorg, encontraremos losarchivos de desarrollo en el paqueteXfree86-devel.

Desempaquetamos el código fuente dela página del proyecto, y nos vamos aldirectorio que se ha creado en este paso,jwm-0.21. Tecleamos a continuación./configure, make y su -c "make install"

para compilar el ejecutable y copiarlo a/usr/local/bin.

La manera más fácil de iniciar JWM esteclear en modo texto startx para cam-biar a modo de interfaz gráfica de usua-rio. Para asegurarnos de que JWM se eje-

LINUX USER • DeskTOPia: JWM

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

01 <RootMenu label="Start" icon="start.xpm">

02 <Program icon="konsole.xpm" label="xterm">xterm</Program>

03 <Menu icon="folder.xpm" label="Internet">

04 <Program icon="mozilla.xpm" label="Firefox">firefox</Program>

05 <Program icon="mozilla-mail.xpm"

label="Thunderbird">thunderbird</Program>

06 <Program icon="licq.xpm" label="Licq">licq</Program>

07 </Menu>

08 <Separator/>

09 <Restart icon="reload.xpm"/>

10 <Exit icon="exit.xpm"/>

11 </RootMenu>

12 <Icons>

13 <IconPath>$HOME/.jwm_pics</IconPath>

14 </Icons>

Listado 1: Menú de ejemplo con JWM

01 <Tray autohide="false">

02 <Font

antialias="true">-adobe-helvetica-*-r-*-*-12-*-*-*-*-*-*-*</Font>

03 <Width>500</Width> <!-- Tray width (Default 1024) -->

04 <Height>20</Height> <!-- Tray height (Default 28) -->

05 <Alignment>center</Alignment>

06 <Foreground>black</Foreground>

07 <Background>#DCDAD5</Background>

08 <ActiveForeground>black</ActiveForeground>

09 <ActiveBackground>#8899AA</ActiveBackground>

10 </Tray>

Listado 2: Configuración del panel

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

(label="xterm"), la línea también espe-cifica un icono - icon="konsole.xpm".Para que JWM pueda encontrar el icono,el archivo con la imagen deberá alojarseen la ruta de iconos, que es$HOME/ .jwm_pics en estecaso. El gestor de ventanassólo admite gráficos xpm.

Para usar los iconos queya tenemos instalados,podemos utilizar convert

para convertir los iconosPNG situados en /usr/share/icons al for-mato requerido y guardarlos en/home/username/.jwm_pics. La líneacon la cadena <Separator/ > añade unalínea de separación al menú.

El listado de ejemplo también cambiala etiqueta del botón del menú, que deinicio es JWM. La entrada label="Start"

en las definiciones del menú cambia laetiqueta a Start (véase Figura 3).

Tunear la BarraPodemos usar las entradas encajadasentre <Tray> y </Tray> en el archivo.jwmrc para modificar la apariencia,tamaño y color del panel, como se mues-tra en el Listado 2. La definición autohi-

de="false" en la línea 1 impide que labandeja se oculte en segundo plano.Podemos modificareste comportamien-to especificando

autohide="true" para que la barra seoculte automáticamente, salvo en casode que el ratón se sitúe en el borde infe-rior de la ventana. Con Font fijamos el

tipo de letra.Podemos usar la herra-

mienta xfontsel para des-cubrir la ciertamente críp-tica nomenclatura de lostipos de letra. Width defi-ne la anchura (mínimo320), Height la altura

(mínimo 8 puntos, máximo 128) yAlignment el alineamiento vertical de labarra, que puede ser left, center o right

(izquierda, centrado o derecha). Si fija-mos la anchura a 0, la barra ocuparátodo el ancho de la pantalla. Los valoresde color para Foreground y Background

puden pasarse como valores hexadeci-males, como en HTML, o bien especifi-cando el nombre de los colores. Elcomando showrgb | less nos indica losnombres reconocidos en nuestro siste-ma. La manera más fácil de encontrarvalores hexadecimales es usar programascomo el kcolorchooser.

Comodidad en el EscritorioPor defecto, JWM permite que el focosiga al cursor del ratón. Si preferimos

hacer clic para que cambie el foco, debe-mos cambiar sloppy por click en lasiguiente línea:

<FocusModel>sloppy</FocusModel>

Si cuatro escritorios virtuales no sonsuficientes para nuestras necesidades,podemos incrementar este número en lalínea<DesktopCount>4</Desktop-Count>.Debemos poner un valor entre 1 y 8.

JWM define algunos atajos de tecladopor defecto, no obstante, podemos incre-mentar esta lista definiendo nuestrospropios atajos.Debemos colocar estosatajos al final del archivo .jwmrc. Paradefinir un atajo de teclado necesitamosuna entrada con la siguiente sintaxis:<Key mask="Modificador"

key="Key">Acción</Key>.Modificadr pueden ser A para [Alt], Cpara [Ctrl] y S para [Shift]. Una líneacomo <Key mask="A"

key="F4">close</Key> en .jwmrc

cerrará una ventana al presionar[Alt]+[F4].

Para lanzar una aplicación con unatajo de teclado debemos especificarexec: como acción, seguido del nombredel programa. Por ejemplo, la siguientelínea <Key mask="C" key="T">exec:

xterm</Key> inicia xterm al presionar[Ctrl]+[T].

ConclusiónJWM es un gestor de ventanas ligero concaracterísticas soprendentemente conve-nientes. Si no tenemos miedo a configu-raciones en modo texto, podemos ajustarJWM fácilmente a nuestro gusto. ComoJWM se encuentra bajo un activo des-arrollo, probablemente alguien ya debeestar trabajando en resolver el problemaaparecido al intentar reiniciar el gestorde ventanas a través del menú.Estaremos atentos a la página del proyec-to JWM para una nueva versión que losolucione. �

DeskTOPia: JWM • LINUX USER

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

[1] Página de JWM: http://joewing.net/

programs/jwm/index.shtml

[2] Página de FVWM: http://www.fvwm.

org/

[3] Configuración de JWM: http://

joewing.net/programs/jwm/config.

shtml

RECURSOS

Figura 1: JWM es un versátil escritorio con gran cantidad de recursos.

Figura 2: El menú de inicio

definido en el Listado 1.

Figura 3: JWM con un botón de inicio modificado.

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

suele encargarse a un grupo de expertosla evaluación y selección de los mejoresrecursos, y como consecuencia es fácilque los profesores sólo jueguen unpapel pasivo en el proceso y, a falta derealimentación el trabajo acabe quedan-do obsoleto y muera de inanición. Ensegundo lugar la iniciativa, en los casosen que sea libre, suele ser de ámbitolocal (una comunidad autonómica, unauniversidad…), lo que impide que eltrabajo se reutilice y desarrolle encomunidades más amplias. Finalmenteno se han liberado herramientas espe-

cializadas verdaderamente útiles para lacatalogación e indexación de conteni-dos educativos; a la hora de la verdadacudimos a google para encontrar recur-sos y hacemos búsquedas como «teore-ma de pitágoras secundaria ejercicios»con la esperanza de que nos devuelvaalgo útil.

Google me devuelve unas seiscientaspáginas en castellano en las que apare-cen las palabras citadas, ¿era eso lo quenecesitaba, pueden nuestras adminis-traciones ahorrarse el dinero? Dejandopara otro momento el tema de la eva-

84

LINUX USER • Educación

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

Un catálogo de recursos educativos

GNU EDU

GNU Edu es un intento de romperestas barreras con una solucióninternacional y colaborativa,

con un motor de búsqueda que puedeutilizar palabras clave y objetivos edu-cativos mínimos y la posibilidad de quesean los profesores los que publiquenlos recursos y los acompañen de losmetadatos adecuados.

Todos conocemos recopilaciones deactividades educativas, todas las admi-nistraciones sienten la obligación decrear la suya propia. ¿Cuál es el proble-ma? En primer lugar la verticalidad;

Una reivindicación compartida por los profesores de todo el mundo que utilizan software en sus clases es la

necesidad de un catálogo de recursos educativos. Los abundantes pero tímidos intentos de creación se

enfrentan a varios problemas: utilizan herramientas y criterios de búsqueda no especializados y suelen cen-

trarse de forma restrictiva en los currícula locales. POR JUAN RAFAEL FERNÁNDEZ GARCÍA.

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

85

Educación • LINUX USER

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

luación de la calidad de los materiales(¿por expertos? ¿por los pares?), tene-mos claro que el hecho de que unaaraña de búsqueda haya indexado lapresencia de unas palabras no es prue-

ba del interés educativo deuna página (ni lo contrario),ni nos proporciona la infor-mación que necesitamos(¿qué curso de secundaria?,¿dónde se imparte?, se men-ciona la palabra «ejercicios»pero, ¿se trata de ejercicios,de programaciones o deapuntes?, etc.).

¿Un enfoque localista? Esrazonable pensar que puedehaber interés en lo que losprofesores franceses, ingle-ses o alemanes están gene-rando para sus clases; de

hecho ya intentamos comparar losresultados de los distintos sistemas edu-cativos en proyectos como los sucesivosestudios PISA [1], ¿por qué no conocercómo trabajamos? Pero es que ademásvivimos en una sociedad cada vez másplural y a nuestros centros educativosllega esa nueva forma de atención a ladiversidad que es el plurilingüismo. Sepide en los centros bilingües la creaciónde materiales, ¿por qué no aprovecharlo que existe?

¿Qué es GNU Edu?GNU Edu es un sistema de indexado derecursos educativos. Podemos examinaruna versión preliminar pero totalmentefuncional en [2] y el software está dis-ponible para su descarga (véase en cua-dro 1). Se trata como vemos de un pro-yecto de OFSET [3] desarrollado espe-cialmente por Odile Bénassy. Pretendeproporcionar la granularidad de la quecarecen los motores de búsqueda gene-ralistas para encontrar actividades deltipo «cómo usar escuadra y cartabónpara trazar un friso» sabiendo que larespuesta debe ser un ejer-cicio para utilizarlo enSegundo de ESO, y preten-de también romper la limi-tación a un currículumespecífico y ser una herra-mienta de colaboraciónentre los profesores.Veremos cómo.

GNU Edu es básicamenteuna base de datos mysql yuna interfaz php para con-sultarla y añadir recursos.Lo original de la estrategiaseguida por Odile ha con-sistido en la elección de los

campos de la base de datos.Amablemente me ha enviado un volca-do del estado actual de la misma, conrecursos disponibles para los sistemaseducativos francés y alemán, y pode-mos examinarlos.

Los datos están clasificados por nive-

les educativos (tienen datos Infantil ySecundaria obligatoria) y países y mate-

rias (Lenguaje en el corazón de los

aprendizajes y Descubrimiento del

mundo para Infantil y Matemáticas paraSecundaria), currícula (relativos a uncurso concreto, por ejemplo Primero de

ESO, en una ordenación legal concreta,puesto que se ha descubierto durante ladefinición del proyecto la gran variaciónde los currícula en un mismo país yentre países, con sorprendentes diferen-cias en las edades en que los alumnosaprenden la proporcionalidad o si pro-fundizan en la geometría por poner dosejemplos), hasta un total de diez enestos momentos. Estos currículos estándivididos en lo que llama capítulos,nuestras unidades temáticas (51 a díade hoy, véase la figura 1). Por ejemplopara matemáticas de Sixième (primercurso de Secundaria en Francia perocon alumnos que en España cursaríanpor edad Sexto de Primaria) recogecapítulos como «Longitudes, ángulosrectos, áreas», «Simetría axial I»,«Fracciones y porcentajes» o «Los sóli-dos».

Pero queríamos llegar a la originali-dad del enfoque de Bénassy: utilizandolos trabajos del Instituto deInvestigación sobre la Enseñanza de lasMatemáticas (IREM) de Picardía(Francia) y un minucioso proceso dedesmenuzación de las programacionesbásicas de Alemania, llega a establecer

Figura 1: Unidades temáticas en GNU Edu.

Figura 2: Desglose de items educativos.

En [8] podemos encontrar un archivocomprimido .tgz de la primera versiónpública de GNU Edu (1.0 beta). Porsupuesto el método que vamos a expli-car no será necesario cuando los paque-tes .deb o .rpm estén disponibles (pron-to, me comunican).

Si lo vamos a instalar en una máquinaDebian sepamos que depende de lossiguientes paquetes Debian: apache,php4, php4-pear, php-auth, mysql.

Es necesario además instalar el móduloPEAR Savant2 de [9] (para quien no losepa PEAR es un fondo de código PHPsimilar al CTAN de TeX o al CPAN deperl). En el momento de escribir esteartículo la versión estable es la 2.3.3, portanto haremos

# pear install U

http://phpsavant.com/Savant2-2.3.

3.tgz

Recomendamos (para poder convertir ladocumentación, en formatoreStructuredText, .rst, a html) instalarademás el paquete python-docutils.

Es necesario además crear dos bases dedatos, una para los recursos y otra inde-pendiente para la autenticación:

mysql -u root -p <database.sql

mysql -u root -p

<database_auth.sql

Y por supuesto es preciso darle conteni-do a las tablas: darse de alta y comenzara incorporar recursos.

Cuadro 1: Cómo instalarGnu Edu

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

Vemos que en último términoel sistema nos devuelve enlacesa los recursos indexados, coninformación de quién lo ha dadode alta en la base de datos, eltipo de recurso que es y de quésoftware depende, el idioma enque está disponible… estos cam-pos no son arbitrarios y aquíestá otro de los rasgos que hacenexcepcional la aplicación: sehace un gran esfuerzo por incor-porar la compatibilidad con losestándares educativos general-mente aceptados y en especialcon Dublin Core y Learning

Objects Metadata. Veremos losdetalles cuando aprendamos a introdu-cir nuevas fichas de recursos.

Podemos también aprovechar lapotencia de la base de datos en la quese basa GNU Edu y utilizarlo como un

motor de búsqueda a partir de las pala-

bras clave. Elijamos de nuevoSecundaria Obligatoria, Matemáticas yFrancés y pulsemos el enlace «AllKeywords» (todas las palabras clave).Ahora pulsando con el ratón sobre laspalabras clave que nos interesen podre-mos construir una búsqueda de recur-sos como la de la figura 7. Los itemsque nos devolverá podrán ser tanto enfrancés como en alemán gracias a lacorrespondencia establecida entre laspalabras clave (evidentemente cuandoexistan en castellano o en catalán tam-bién tendremos items en estos idio-mas).

Un opción más hubiera sido introdu-cir la palabras clave directamente en elrecuadro de búsquedas. Podemos hacerla prueba con una búsqueda como«construire bissectrice», que nosdevuelve una relación de items y variosrecursos educativos especí-ficos para el nivel educati-vo seleccionado.

¿Cómo se añadenrecursos?En primer lugar nos intere-sará darnos de alta en elsistema. GNU Edu nosenviará un correo con lacontraseña que nos servirápara conectarnos. Tenemosdos opciones, o accederinmediatamente al formu-lario que sirve para añadir

recursos (enlace «Quickly Add aResource») o seguir los pasos ya vistoshasta comprobar que el recurso no exis-te en la base de datos y sólo entoncesproceder a darlo de alta («AddResource»).

Analicemos el formulario (figura 8).Los campos que podremos rellenarserán los siguientes (sólo los que tienenun asterisco son obligatorios): título yautor o autores (pensemos que se espe-ra que sean los autores los que den dealta sus recursos); el formato en queestá el recurso, que evidentementedeberá ser libre y abierto (lo que quieredecir modificable por los usuarios); lalicencia, a elegir entre varias modalida-des de licencias libres; una descripcióndel recurso; el tipo de interactividad quese produce en su utilización (activa,expositiva o mixta); el tipo de recurso(ejercicio, exploración, actividad abier-ta, guía, recurso informativo, glosario,herramienta, evaluación); el nivel dedificultad y el software necesario parasu utilización; alguna nota y la url

donde encontrar el recurso (el proyectono implica la creación de un repositoriocentralizado); la versión y el estado(borrador, final, revisado, ilocalizable).Terminada de rellenar la ficha se pulsaen «Enviar» (botón Submit) y ya tendre-mos un nuevo recurso en la base dedatos.

Odile Bénassy nos da un ejemplo con-creto. Quería añadir artículos de lawikipedia francesa (http://fr.wikipedia.

org/wiki/Mathématiques_élémentaires).Para ello se conectó como usuaria nor-mal (no administradora) y dio de alta alautor «fr.wikipedia». Como de costum-bre seleccionó «Middle School»,«Mathematics» y «France» (ya estare-mos acostumbrados si hemos seguido

1032 items educativos (véase la figura2: «Calcular el área de un rectángulo»,«Conocer la fórmula del área de untriángulo» o «Reconocer un triánguloisósceles»). Pero además descomponeestos items en palabras clave (figura 3),de dos tipos: las palabras clave de

acción (como «escribir», «calcular»,«reconocer» o «conjugar») y las palabras

clave de concepto (por ejemplo «poema»o «verbo», «figura», «triángulo»…).Estas palabras claves, 1614, estarán tra-ducidas a todos los idiomas en los quese utilice GNU Edu y serán la base delproceso de búsqueda.

Uso de GNU EduHay varias formas de utilizar GNUEdu. En primer lugar podemos utili-zarlo como un catálogo simple, y pro-ceder de forma deductiva, de lo másgeneral a lo más concreto. Así comen-zaríamos por seleccionar el nivel edu-cativo (por ejemplo Secundaria obliga-toria, «Middle School») y seguidamen-te la materia (Matemáticas) y el paíscuya ordenación del sistema educativovamos a seguir (Francia o Alemaniapor ahora).

Nos aparece la imagen 4, donde senos ofrecen los currículos de los distin-tos años de la Educación SecundariaObligatoria francesa y seleccionaremosel de Sixième para ver los «Chapters»(Unidades Temáticas) de que se compo-ne. Marcaremos en la siguiente pantallalos «items» de qué Unidades queremosver y llegaremos por ejemplo a la figura5, donde sólo nos falta pulsar en elbotón «View ressources» para que el sis-tema nos devuelva los recursos ya inde-xados (imagen 6).

LINUX USER • Educación

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

Figura 4: Currículos de Secundaria en Francia.

Figura 3: Palabras clave para las búsquedas de recur-

sos.

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

los ejemplos). Puesto que los artículosde la wikipedia no están vinculados aningún programa educativo concreto noseleccionó ningún curriculum, sino quepulsó en el enlace «All Keywords».

Odile concreta más en su ejemplo: vaa dar de alta el artículo http://fr.

wikipedia.org/wiki/Distributivité

(mathématiques_élémentaires). Podría,como hemos dicho, utilizar «AllKeywords» o, como profesora de mate-máticas en activo, haber indicado a quécurrículum corresponde el artículo,

«5ème, Mathématiques au Collège(1998)» (segundo curso de SecundariaObligatoria), después seleccionar la uni-dad «Les Opérations» y finalmente«View Items».

Pero había elegido trabajar con pala-bras clave. ¿Cuáles serán útiles aquí?Las palabras clave de acción serán «con-naître développer factoriser», las deconcepto «égalité propriété règle». Bastapulsar con el ratón sobre ellas utilizan-do un navegador con javascript activa-do. Si nos equivocamos, una nueva pul-sación deshará la selección. De la pági-na de items (debemos seleccionar lositems con los que está relacionadonuestro nuevo recurso) pasamos a la derecursos y pulsamos en «Add resource».Rellena el formulario

01 Title : Distributivité

(mathématiques élémentaires)

02 Format : Text/HTML

03 License : GNU Free

Documentation License

04 Description : Un court art

cle définissant la propriété de

distributivité.

05 Interactivity Type :

Expositive

06 Learning Resource Type :

Information Resource

07 Difficulty : Low

08 Software Requirement : Web

Browser

09 Url_document: http://fr.wik

pedia.org

/wiki/Distributivité

(mathématiques_élémentaires)

10 Status: final

11 Author : fr.wikipedia

Ya tenemos el recurso fichado, y vincu-lado a determinados items. Si ahoraintroducimos «distributivité» o «règle»en el recuadro de búsqueda el sistemadebe encontrarlo.

¿Por qué estos campos? No voy aescribir aquí sobre metadatos y estánda-res educativos (ya me gustaría, ya, peroni es el momento ni disponemos delespacio necesario). Que no nos asustenni el número de campos disponibles(sólo los básicos son imprescindibles,

Educación • LINUX USER

Figura 5: Items educativos en GNU Edu.

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

También es necesariaesta ayuda en la incor-poración de palabrasclave e items de otrossistemas educativos.No existen en estemomento en ningunade las lenguas deEspaña ni para ningunade las concreciones denuestros sistemas edu-cativos autonómicos.

Finalmente, con laspalabras clave y lositems, será posible quelos profesores puedan incorpo-

rar nuevos recursos, valorarlos de formademocrática…

Por otro lado es evidente que sonnecesarias multitud de pequeñas mejo-ras para hacer la interfaz más amigable ypráctica. Pero el aspecto que en mimodesta opinión necesita más trabajo esel de la reutilización del trabajo yahecho a la hora de la introducción dedatos. Me refiero a poner en práctica lasventajas de los estándares LOM y DC. Enun futuro próximo, es bastante probableque iniciativas como la de la Comunidadde Madrid de estandarizar el formato delos paquetes de contenidos con su Guía

de publicación y empaquetado de conte-

nidos en Educamadrid [5] se extiendan.Durante unos segundos debo ponermetécnico, con perdón, para explicar mirazonamiento: está previsto que lasfichas de recursos sean exportablescomo XML y RDF. Pero la cabecera RDFde multitud de páginas web contiene yalos datos Dublin Core que buscamos; olos paquetes libres creados con herra-mientas libres como eXe [6] o Reload [7]contienen los metadatos que IMS necesi-

tamos, ¿por qué notomarlos directamentey no tener que volvera teclearlos? Pienso enuna araña que recorralas plataformas edu-cativas buscandopaquetes SCORM eindexando las activi-dades incluidas; unaaraña que visite losservidores WIMS yrecorra su índice y losficheros INDEX decada ejercicio omódulo…

En conclusión GNU Edu es un proyec-to en estado de nacimiento, aunque yaperfectamente utilizable. Se ha pensado(está en el documento de mejoras pre-vistas) en crear una red de bases dedatos autónomas pero interconectadas(mediante XMLRPC) con recursos edu-cativos libres. Creemos que esta idea esmuy interesante, porque permitiría unasolución distribuida y abierta al proble-ma de los repositorios educativos.

Y en el próximo número…Hemos analizado una aplicación en sumomento de presentación pública, cuan-do la documentación está naciendo ydiversos aspectos de su diseño todavíano han sido implementados. Volvemosahora al estudio de un programamaduro, la aplicación de geometría inter-actica drgeo, para el que existe algunadocumentación en la red; haremos unasíntesis de sus posibilidades didácticas.�

insisto) ni la lluvia de siglas de la justifi-cación: la idea tras los estándares eshacer una descripción abstracta detodos los aspectos del proceso educati-vo, hasta el último y más curioso deta-lle, y crear una serie de normas paraque el trabajo realizado con una plata-forma educativa pueda ser reutilizadocon cualquier otra. Simplemente reco-geremos que [4] nos muestra comotabla de correspondencias el esfuerzorealizado para cumplimentar los están-dares.

Problemas y desarrollosfuturosEmpecemos por lo obvio: es urgente lainternacionalización de la interfaz.¿Cómo? Según el modelo de GNU get-text (instale gettext-doc y lea el ejemplode internacionalización de código phpen doc/gettext-doc/examples/hello-php).Este punto ya está en la conciencia delequipo de desarrollo y es cuestión detiempo y de recursos. Por si no se hanentendido lo repetiré más claro: el pro-yecto necesita ayuda.

LINUX USER • Educación

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

[1] PISA: http://www.ince.mec.es/pub/

pubintn.htm

[2] GNU Edu: http://gnuedu.ofset.org

[3] OFSET: http://www.ofset.org

[4] Tabla de correspondencias estánda-res: http://www.ofset.org/articles/150

[5] Guía de publicación y empaquetadode contenidos en Educamadrid: http://

www.educa.madrid.org/portal/plan/

informacion/dcontenidos/

plan_dco_intro.jsp

[6] eXe: http://exe.cfdl.auckland.ac.nz/

[7] Reload: http://www.reload.ac.uk/

[8] Versión pública de GNU Edu: http://

gnuedu.ofset.org/download/

[9] Módulo PEAR Savant2: http://www.

phpsavant.com

RECURSOS

Figura 8: Formulario para añadir recursos.

Figura 7: Construcción de una consulta con palabras

clave.

Figura 6: Recursos hallados.

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

89

Línea de Comandos • LINUX USER

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

Administración de cuentas de usuarios en modo comando

¡ACCESO PERMITIDO!

Los sistemas multiusuarios separanmuy bien los espacios de trabajode los usuarios. Puede salvar sus

propios ficheros asignando los privile-gios de acceso adecuados. El paradigmatípico de Unix/Linux de tener cuentasseparadas para tareas administrativas(root) ayuda a prevenir la posibilidad deerrores de usuarios que podrían destruirel sistema.

El administrador del sistema, root, esel mandamás del sistema. Un usuarionecesita privilegios de root para ejecutarcomandos de configuración y adminis-tración de cuentas que veremos en esteartículo. Tras mostrar los ficheros deconfiguración más importantes, echare-mos un vistazo a las herramientas use-

radd, usermod y userdel, que nos permi-ten crear, administrar y borrar cuentas.

Múltiples UsuariosUna ojeada al fichero /etc/passwd

(Figura 1) muestra todo lo referente a lascuentas de usuarios del sistema. Ademásde las cuentas normales, verá que tam-bién hay entradas para usuarios como lpo mail, son los llamados pseudo-usua-rios creados por el sistema para asignarleprivilegios sobre determinados ficheros ydirectorios específicos del sistema. Por logeneral, las entradas en /etc/passwd sonde la siguiente forma:

petronella:x:1002:1002:U

Petronella Huhn,,,, U

Test-Account: U

/home/petronella:/bin/bash

Los campos separados por dos puntos,contienen las siguientes entradas:

*Nombre de usuario: El nombre que elusuario tecleará para entrar al sistema.

*Contraseña: Aquí es donde va la con-traseña encriptada, por defecto en lamayoría de los sistemas aparecerá una x,

indicando que la contraseña está almace-nada en el fichero /etc/shadow. Si elcampo está vacío, el usuario puede acce-der al sistema sin proporcionar ningunacontraseña.

*UID: Cada usuario en Linux se identi-fica de forma unívoca mediante unnúmero o UID (“IDentificación deUsuario”). Al usuario root se le asig-na el número 0; desde el 1 al 99 sereservan para cuentas del siste-ma.

*GID: Cada usuarios es miem-bro de uno o varios grupos, quese identifican mediante el llama-do GIDs (“IDentificación deGrupo”). *Información adicional:Una descripción del usuario, quepuede contener varias palabras(normalmente el nombre y apelli-dos del usuario, un número deteléfono, etc.).

*Directorio home: Para usuarios“normales”, normalmente, el directo-rio home es /home/nombre_usuario; lospseudos-usuarios tienen su directorio detrabajo (Por ejemplo, /var/spool/lpd parael usuario del demonio de impresión,lp).

*Shell: El intérprete de la línea decomandos a lanzar cuando el usuario seregistra en el sistema (normalmente/bin/bash).

Contraseñas en lasSombrasComo se dijo anteriormente, los siste-mas actuales tienden a utilizar contra-señas shadow. Estas contraseñasmejoran la seguridad del sistema eli-minando las entradas de las contra-señas encriptadas del /etc/passwd,que puede leerse globalmente ycolocándolas en /etc/shadow. (Elfichero shadow sólo puede serleído por el administrador). Una

Linux es un sistema multiusuario: la mayoría de los usuarios pueden trabajar en la misma máquina a la

vez en cuentas distintas. En la columna de este mes, echaremos un vistazo a cómo crear y administrar

cuentas de usuarios Linux desde la línea de comandos. POR HEIKE JURZIK

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

cuantos ficheros de configuración (porejemplo, para la shell). La mayoría de lossistemas le permiten proporcionar a losusuarios un entorno básico especificadoen el directorio /etc/skel (para el skele-ton).

Mientras Debian Linux sólo almacenaunos cuantos ficheros de configuraciónocultos (para varias shells) en el directo-rio skeleton, Suse añade un número deficheros y carpetas. La mayoría de lasherramientas que ayudan al administra-dor añaden cuentas de usuario automáti-camente copiando el contenido de /etc/

skel al directorio home del nuevo usuarioy asignando los permisos correspondien-tes.

Si decide añadir manualmente unacuenta de usuario editando los ficheros/etc/passwd y /etc/shadow, asegúrese decrear un nuevo directorio home, copie elcontenido del directorio skeleton alnuevo directorio home y modifique lospermisos de forma adecuada:

mkdir /home/newuser

cp -r /etc/skel /home/newuser

chown -R newuser:users U

/home/newuser

Para incluir los subdirectorios bajo /etc/

skel, cuando ejecute los comandos cp ychown, asegúrese de colocar el flag -r

para la copia recursiva y el flag -R paracambiar los permisos recursivamente.

users es el grupo por defecto para nue-vos usuarios en la mayoría de las distri-buciones; si este no es el caso de su dis-tribución, necesitará reemplazar laentrada users con el nombre correcto delgrupo.

Investigando useraddSi todo este trabajo manual es demasia-do confuso o le lleva mucho tiempo, use-radd es una herramienta rápida de lalínea de comandos que puede echarleuna mano. Varias distribuciones Linuxinstalan versiones con parámetros dife-rentes. Pero no se preocupe: indicaremoslas diferencias relevantes en este artícu-lo. Tecleando useradd o useradd -help leproporcionará una lista de parámetros.

Cada nueva cuenta necesita unIdentificador de Usuario (UID), quepuede definir mediante el flag -u UID.Asegúrese que el UID es único para cadausuario -si intenta asignar el mismo UIDdos veces, useradd protestará. Si omite la

identificación del usuario, useradd deter-minará el UID más alto en el rango nor-mal de usuario y lo incrementará en 1.

También puede especificar el paráme-tro -g para establecer el GID primario. Sinecesita hacer al usuario miembro decualquier grupo, añada la etiqueta -G y elnúmero del grupo apropiado. El fichero/etc/group le dice qué grupos existen enel sistema y qué GID tienen estos grupos.Vamos a suponer que quiere añadir unanueva cuenta al grupo users (p.e., GID100) y además al grupo cdrom, que tieneel GID 24. Las siguientes opciones loharían: -g 100 -G 24.

Por defecto useradd escoge un nombrepara el directorio home que refleje elnombre de usuario. Para especificarexplícitamente un directorio home dife-rente hay que especificar la opción -d

directorio. El parámetro -m le indica auseradd que cree el directorio home si noexiste y que copie el directorio skeletondesde /etc/skel al nuevo directorio home.-c le permite añadir información para elusuario - nótese que necesita colocaresta información entre comillas si contie-ne espacios en blanco. La línea decomando podría parecerse a:

useradd paky -u 501 U

-g 100 -m -s U

/bin/bash -c "Paky Cool"

El siguiente paso podría ser teclearpasswd paky y establecer la contraseñapara el nuevo usuario.

Por DefectoLa configuración por defecto hace queuseradd sea incluso más rápido. Estaconfiguración puede incluir detalles degrupos, de directorio home y skeleton; lagran ventaja para el administrador esque se pueden dejar todos estos detallesde la línea de comandos, suponiendoque se quieran mantener los parámetrospor defecto.

Para descubrir los parámetros pordefecto para useradd de Debian Linux yFedora Core, ejecútese la herramientacon la opción -D:

debian# useradd -D

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=

característica de las contraseñas shadowes que también almacenan la informa-ción sobre el último cambio de contrase-ña y ofrece un mecanismo de control ausuarios para cambiar sus contraseñas.

Los campos de las líneas en /etc/sha-

dow también se encuentran separadasmediante dos puntos. En estos camposse almacena la siguiente información:• Nombre de usuario: El nombre

de usuario (el mismo que en/etc/passwd).

• Contraseña: La contraseñaencriptada. Este campo nopuede estar vacío y esto signi-fica que los pseudos-usuarioscomo lp tendrán una entradacon un asterisco “*”. Para des-habilitar temporalmente unacuenta, todo lo que necesitahacer es colocar delante de laentrada de la contraseña unsigno de exclamación.

• Último cambio: La fecha delúltimo cambio de la contra-seña, medida en días desde01.01.1970.

• Edad Min. / Max.: Qué antigüe-dad tiene la contraseña antesde que el usuario la cambie.

• Aviso: ¿Cuántos días antes deque caduque la contraseñadebe avisarse al usuario?

• Período de gracia: Cuántotiempo se le debe permitir alusuario trabajar después de quesu contraseña caduque antes deque se le deshabilite su cuenta

• Validez: Fecha en la que caducala contraseña (medidas en díasdesde 01.01.1970).

• Vacío: El último campo estáreservado.

Nótese que sólo las primeras dos entra-das para el nombre del usuario y la con-traseña son obligatorias; el resto de cam-pos son opcionales. Una entrada típicapodría ser:

petronella:$1$RXbNLkU8U

$XULLOGFVs6LTxmSRqCS.P/:U

12872:0:99999:7:::

El Entorno BásicoCuando se crea una cuenta, es normalasignarle unos cuantos valores pordefecto a los usuarios. Además al crearun directorio home, podría añadir unos

LINUX USER • Línea de Comandos

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

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

SKEL=/etc/skel

Suse Linux 9.2 llama a esta opción --

show-defaults. Suse utiliza los paráme-tros por defecto para especificar otrosgrupos a los que se añadirán las nuevascuentas:

suse# useradd --show-defaults

...

GROUPS=video,dialout

Si desea que useradd utilice los paráme-tros por defecto simplemente teclee algocomo useradd < cuenta-nueva > .Téngase en cuenta que algunas distribu-ciones Linux esperan que se especifiquela opción -m si quiere crear un directoriohome y copiar el árbol de directoriosbajo /etc/skel a él.

Hay varias maneras de cambiar losparámetros por defecto. Se podría ejecu-tar un editor y modificar /etc/default/

useradd o podría usar la línea de coman-dos para definir los valores especificadosen los parámetros. Las distintas distribu-ciones usan diferentes soluciones paraeste problema. Los usuarios con Debiano Fedora pueden cambiar los parámetrospor defecto de useradd en la línea decomandos estableciendo el parámetro -D. Supóngase que necesita definir unashell diferente. En este caso se teclearía:

#useradd -D -s /bin/csh

La sintaxis para especificar una localiza-ción diferente para los directorios homees similar (-D -b /home2), y el comando

para especificar un grupo por defecto,diferente (-D -g 101).

En Suse Linux, de nuevo se necesitaespecificar --save-defaults en vez de -D.Téngase en cuenta que esta opción nofuncionará para todos los parámetros pordefecto, sino tan sólo para el directorioskeleton (como en --save-defaults -k /etc/

mi_skel) y la shell (por ejemplo, --save-

defaults -s /bin/csh. Los parámetros parala modificación del directorio home oGIDs mencionados en las páginas deayuda no aparecen en las versiones2.6.90 (Suse 9.2) y 2.6.96 (Suse 9.3),pero siempre se puede modificar /etc/

default/useradd.

Modificando una cuentaLa herramienta usermod permite lamodificación de las propiedades de unacuenta de usuario. usermod usa funcio-nes y parámetros similares a los de use-

radd. Por ejemplo, la siguiente línea pro-porcionará al usuario una shell diferente:

usermod -s /bin/csh huhn

La próxima vez que el usuario huhn seconecte al sistema, él o ella tendrá asig-nado una shell diferente.

Una de las características más prácti-cas de usemod es su habilidad para des-habilitar cuentas de usuario. Los admi-nistradores de Debian que deseen desha-bilitar una cuenta de usuario (temporal-mente) sin borrar realmente la cuenta,pueden teclear el siguiente comando:

usermod -L huhn

De nuevo, nótese que en Suse 9.2, estaopción se describe en la página de ayudapero realmente no está implementada.Un vistazo rápido al fichero /etc/shadow

nos dirá que la cuenta realmente ha sidodeshabilitada, ya que la hash de la con-traseña ahora comienza con un signo deexclamación:

huhn:!MjBhdgr.6XkE6:U

12575:0:99999:7:::

Esta entrada impedirá que el usuariohuhn pueda conectarse al sistema. Pararehabilitar la cuenta tecléese:

usermod -U huhn

¡Adios Usuario!Es tan fácil borrar las cuentas de usuariocomo crearlas. La herramienta que nece-sita para borrar una cuenta de usuario esuserdel. Hay una condición: que el usua-rio que se desea borrar no esté conecta-do al sistema o tenga un proceso ejecu-tándose en el momento de borrar lacuenta. Suponiendo que este no sea elcaso, se puede eliminar la cuente tecle-ando userdel paky. Si desea eliminar eldirectorio home al mismo tiempo, espe-cifique el parámetro -r para decirle auserdel que elimine los datos personalesde Paky.

ConclusionesAunque la mayoría de las distribucionestienen herramientas de gestión de usua-rios basadas en GUI, la línea de coman-dos es mucho más rápida a la hora derealizar los cambios si sabe lo que hayque hacer. Una vez que se tenga destrezaen el uso de la sintaxis de useradd, user-

mod y userdel, las tareas de gestión deusuario tan sólo requerirán unos cuantossegundos. �

Línea de Comandos • LINUX USER

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

Figura 1: El fichero /etc/passwd tiene detalles de los usuarios del sistema.

Heike Jurzik estu-dió alemán, inglése informática en laUniversidad deColonia,Alemania. Descubrió Linux en1996 y ha estado siempre fasci-nada con el alcance de la líneade comandos de Linux. En sutiempo libre podrá encontrar aHeike escuchando música celtao visitando Irlanda.

LAAUTORA

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

92

EVENTOS • aKademy 2005

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

Cumbre mundial de la comunidad KDE

AKADEMY 2005

La cumbre mundial de desarrolladores y usuarios de KDE, la ya célebre aKademy, reunió en la ciudad

andaluza de Málaga a más de 250 programadores, diseñadores y usuarios finales que trabajaron toda la sem-

ana para mejorar uno de los escritorios favoritos de Linux.

Este año el evento se dividió entres partes. Los días 27 y 28 tuvi-mos la serie de conferencias de

“Usuarios y Administradores de KDE”donde se abordó el uso y abuso de apli-caciones. Posteriormente, se pudo asistira las conferencias, charlas y talleresimpartidos por los más prominentesdesarrolladores del proyecto. Finalmentetodo el mundo se entregó a una maratónde programación, o hackfest, de cincodías y sus respectivas noches,aderezadas de mucho café gratuito.

Acto InauguralLa inauguración oficial de la aKademy2005 se celebró el sábado 27 a las nuevede la mañana en el salón de actos de laEscuela Técnica Supe-

rior de Informática. En el acto partici-paron José Angel Narváez Bueno, Vicer-rector de Investigación y Doctorado de laUniversidad de Málaga, FuensantaRamos Diputada del Servicio de Edu-cación y Nuevas Tecnologías de laDiputación de Málaga, María Gámez,delegada de la Cconsejería de Inno-vación, Ciencia y Empresa en Málaga dela Junta de Andalucía. Todosagradecieron que se hubiera elegidoMálaga como lugar para celebrar la cum-bre y destacaron la importancia del rolde los desarrolladores de software libreen el progreso hacia la sociedad de lainformación global.

Y por fin, le tocó el turno a los ver-daderos protagonistas de la función yMatthias “Kalle” Dalheimer, presidenteen funciones de KDE (más sobre estodespués) agradeció la labor desem-peñada por Antonio Larrosa, cabeza visi-ble de KDE en España, así como a losvoluntarios de la LiMA; la cual que elevento se materializase.

Las Conferencias

Till Adam se explayó sobre el softwarede colaboración Kolab [1], Aaron Seigo(quien se dedica ahora a tiempo com-pleto al desarrollo de KDE gracias almecenazgo de Trolltech) habló de lainfraestructura Kiosk (un sistema pararestringir las capacidades de KDE [2]),de diseño (recordemos que Seigo es unode los principales desarrolladores tras elproyecto Plasma [3]) y ofreció una diver-tida charla sobre Marketing para Geeks.

Mark Shuttleworth, el hombre tras losproyecto Ubuntu, Kubuntu y Edubuntu,también estuvo por Málaga y, a pesar deque se pretendía que nos hablara deKubuntu, acabó hablando del trabajocolaborativo y de los mecanismos quehabían establecido en Ubuntu para acep-tar y distribuir parches. Revelador.

Aparte del hombre de Canonical, otrasempresas como Novell, Trolltech y Nokiacompartieron con los asistentes susvisiones sobre los escritorios Linux en

Cumbre mundial de la comunidad KDE

AKADEMY 2005

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

93

aKademy 2005 • EVENTOS

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

general y KDE en particular. Pete Goodallpresentó el Novell Desktop. La conferen-cias inaugural para desarrolladores ycontribuyentes, el segundo módulo delevento, corrió a cargo de Elrik Chambe,Presidente de Trolltech. Chambe hablóde la evolución de la empresa, de lacada vez mayor aceptación de la tec-nología Qt (lo que permite a la empresanoruega financiar a un número cadavez mayor de desarrolladores de KDE)y de como KDE es el mejor ejemplo deproducto de éxito que pueden mostrara sus clientes. David Carsons de Nokia,por su lado, habló de la creación de unnavegador basado en Webcore/KHTMLpara dispositivos móviles. Cómo no.

HackfestDurante los últimos cinco días de laaKademy, se llevó a cabo una multi-tudinaria y desenfrenada orgía deprogramación, regada de café, sur-tida de palmeras de chocolate yaderezada de talleres y reuniones degrupos de desarrolladores conintereses afines.

Entre otras cosas, se celebrarontalleres y reuniones de trabajo sobremultimedia, PIMs y usabilidad, conun especial hincapié en el acercamientodel escritorio a personas con deficienciasvisuales.

A DestacarDurante el transcurso del evento,hubieron muchos momentos en las quenos quedamos boquiabiertos conalgunos de los logros del equipo dedesarrollo de KDE. Uno de las aplica-ciones presentadas que más gustaron alque suscribe fue Krita, un programa deretoque fotográfico que amenaza condesbancar a the GIMP como rey absolutodel diseño de gráficos bitmap.

Entre otras cosas, Krita tiene capaci-dad de utilizar los plugins de the GIMP,ofrece un interfaz más intuitivo (es decir,tan intuitivo como Photoshop) y susdesarrolladores han prometido soporteCMYK para la siguiente versión, cosaque los usuarios de GIMp llevan añosesperando.

Pero tal vez una de las ponencias másespectaculares fue la que corrió a cargode Zack Rusin. Todos quedamos alucina-

dos y alela-dos con el escritorio de Zack, desarro-llador de Trolltech, y sus ventanas detela, auténticas transparencias y widgetsvectoriales (que evitan el pixelado

cuando se aumentan) en un charla bauti-zada (apropiadamente) “Belleza y Magiapara desarrolladores de KDE” (podéisver un video en [4]).

Igualmente impresionante, pero deotra manera, fue la demostración de KurtPfeifle que nos enseño cómo FreeNXacelera las conexiones a escritoriosremotos. Si ya se ha probado VNC, sehabrá comprobado lo lento que puedellegar a ser. Con FreeNX, se consiguenvelocidades de respuesta decentesincluso sobre conexiones de alta laten-cia, dividiendo por dos el tiempo deespera. Según Pfeifle, la adopción de la

tecnologíaFreeNX puede acelerar la aceptación deKDE al proporcionar un excelentemecanismo para el soporte en tiemporeal.

ConclusiónÉste ha sido un evento interesantísimoy lleno de ideas y actos útiles. Por unlado se ha podido transmitir un pocola labor que se lleva a cabo en elproyecto y cómo afecta al hombre dela calle. Por otro hemos visto como las

necesidades del hombre de la callese acaban filtrando en lo que losdesarrolladores crean.

La interacción humana en carney hueso motiva a los creadores ypermite darle más sentido a nivelpersonal a la labor que llevan acabo. Tanto la aKademy, como suequivalente para Gnome, laGuadec, son imprescindibles paramantener la perspectiva y evitar lasensación de que se crea en mediodel vacío. �

RECURSOS

[1] Kolab: http://www.kolab.org/

[2] Artículo sobre Kiosk: http://developer.

kde.org/documentation/tutorials/

kiosk/index.html

[3] El proyecto Plasma: http://plasma.

kde.org/

[4] Video de Zack Rusin y su escritorio:http://vizzzion.org/stuff/xgl_wanking.

avi

[5] Proyecto FreeNX: http://freenx.

berlios.de/

[6] El editor gráfico Krita: http://www.

koffice.org/krita/

Sebastian Kugler

Sebastian Kugler

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

EVENTOS

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

LinuxWorld Conf. & Expo UKFecha: 5-6 Octubre

Ciudad: Londres, Reino Unido

Sitio Web:

www.linuxworld

expo.co.uk

OSWC 2005Fecha: 25-26 Octubre

Ciudad: Mérida, España

Sitio Web:

http://www.opensource-

worldconference.com

OSWC 2006Fecha: 15-17 Febrero

Ciudad: Málaga, España

Sitio Web:

http://www.opensource-

worldconference.com

Información de Contacto

DirectorPaul C. Brown

CoolaboradoresPaul C. Brown, Jose Manuel González Vida, JuanRafael Fernández, Pedro Orantes, José María Ruíz,Alberto Planas.

TraductoresPaqui Martín Vergara, Paul C. Brown, AntonioRueda, Víctor Tienda.

MaquetaciónSergio Hardasmal

Diseño de PortadaPinball([email protected])

Publicidadwww.linux-magazine.es/pub/

Para EspañaPaul C. [email protected]@linuxnewmedia.esTel.: (+ 34) 951 010 556Móvil.: (+ 34) 655 036 836Fax.: (+ 34) 951 010 516

Sergio Hardasmal [email protected].: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516

Para el Resto del MundoBrian Osborn [email protected]

Tel.: (+49) 6509 910 495Fax.: (+49) 6509 910 497

Director EditorialPaul C. Brown

Director de ProducciónSergio Hardasmal [email protected]

Subscripciones: www.linux-magazine.es/magazine/subs

Precios Subscripción España: 49,50 €Europa: 59,90 €Resto del Mundo - Euros: 79,90 €Resto del Mundo - Dólares U.S.A.: $ 94,90

Tel.: (+34) 951 010 556Fax.: (+34) 951 010 516 [email protected]

Linux MagazineLinux New Media Spain, S.L.Avda. Juan López Peñalver, 2129590 - Campanillas Málaga ESPAÑA [email protected].: (+34) 951 010 556Fax.: (+34) 951 010 516www.linux-magazine.es - Españawww.linux-magazine.com - Mundowww.linux-magazine.de - Alemania

Si bien se toman todas las medidas posibles paragarantizar la precisión del contenido de los artículos publi-cados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en larevista. Asimismo, Linux Magazine no compartenecesariamente las opiniones vertidas por suscolaboradores en sus artículos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupu-losamente para confirmar que está libre de virus y errores.

Copyright y Marcas Registradas © 2004 Linux NewMedia Spain, S.L. Linux New Media Spain S.L. prohíbela reproducción total o parcial de los contenidos deLinux Magazine sin su permiso previo y por escrito.Linux es una Marca Registrada de Linus Torvalds.

Impreso en Alemania

Impresión: Dierichs Druck + Media GmbH

Distribución: SGEL

Depósito Legal: MA-116-2005

ISSN edición impresa: 1576-4079

ISSN edición online: 1699-2237

Calendario de Eventos

Evento Fecha Ciudad Sitio Web

AbertLUG Introduction to Linux day 2 Octubre Aberdeen, Reino Unido www.aberlug.org.uk

LinuxWorld Conference & Expo UK 5-6 Octubre Londres, Reino Unido www.linuxworldexpo.co.uk

FUDCon London 5-6 Octubre Londres, Reino Unido http://fedoraproject.org/fudcon

5th GNOME Developer´s Summit 2005 8-10 Octubre Cambridge, MA, EEUU http://live.gnome.org/Boston2005

Black Hat Seattle 2005 Training 10-11 Octubre Seattle,WA, EEUU http://blackhat.com/html/bh-link/briefings.html

Linux/OPen Source Forum 2005 11-12 Octubre Estocolmo, Suecia www.linuxopensourceforum.com

IT Underground 12-13 Octubre Varsovia,Polonia www.itunderground.org/en

LinuxWorld Conference & Expo NL 13-14 Octubre Utrecht, Holanda www.linuxworldexpo.nl

hack.lu 2005 14-15 Octubre Kirchberg,Luxemburgo www.hack.lu

AUUG 2005 16-21 Octubre Sydney,Australia http://auug.org.au/events/2005/auug2005

piksel05 16-23 Octubre Bergen, Noruega www.piksel.no/piksel05

12th Annual Tcl/Tk Conference 24-28 Octubre Portland,Oregón,EEUU www.tcl.tk/community/tcl2005

Versteckte Computer Unkontrollierbare... 5-6 Noviembre Munich,Alemania www.fiff2005.de

International PHP Conference 2005 6-9 Noviembre Frankfurt,Alemania www.phpconference.com

LinuxWorld Conference & Expo NL 9-10 Noviembre Utrecht,Paises Bajos www.linuxworldexpo.nl

Comtec 2005 9-11 Noviembre Dresde, Alemania www.messe-comtec.de

LinuxWorld Conference & Expo Frankfurt 15-17 Noviembre Frankfurt, Alemania www.linuxworldexpo.de

linux.conf.au 2006 23-28 Enero Dunedin, Nueva Zelanda http://lca2006.linux.org.au

LinuxWorld Conference & Expo Australia 28-30 Marzo 06 Sydney, Australia www.linuxworldexpo.com.au

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

Más del 30% de descuento respecto al precio de portada: Consigue 12 números por 54’90 Euros y todos los DVDs ¡Gratis!

A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios para que renueves tu subscripción. Ésta se renovaráautomáticamente cada año. Recibirás una confirmación aproximadamente 30 días antes del final de tu periodo de subscripción, pero no serequiere que hagas nada para seguir suscrito.

¡No te pierdas Linux Magazine nunca más! La subscripción te asegura que recibas los conocimientos Linux de más alta calidad en tu domiciliocada mes.

Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el preciode todos los números que no hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.

Linux Magazine es algo más que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre.Suscribiéndote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre allá donde haga falta.

095-096 SuscripcionesV3_ok 10/9/08 8:08 pm Página 95

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

095-096 SuscripcionesV3_ok 10/9/08 8:08 pm Página 96

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

LINUX LOCAL

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

Andalucía

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Gesinfo [email protected] www.gesinfoweb.com � � � � � �

BitRock [email protected] bitrock.com � � � � � �

Properly Software [email protected] www.properly.es/site � �

LINUX LOCALLeyenda

1.- Hardware

2.- Software / Desarollo

3.- Formación

4.- Soporte / Consultoría

5.- Servidores

6.- Redes

7.- Migración

8.- Hospedaje

Cataluña

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

IWS [email protected] www.iws.es � � � � � �

Madrid

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Mono::labs [email protected] www.monolabs.com � � � � � �

Datum [email protected] www.datum.ws � � � � � �

Linux Local es tu directorio de servicios y empresas de Linux cerca de ti.

¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuen-

tra quién ofrece qué y dónde. El directorio se divide en regiones autóno-

mas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Uti-

liza la leyenda de la derecha para encontrar la empresa que ofrece el servicio

que precises.

Linux Local es tu guía de servicios Linux.

¿Por qué no está su empresa eneste directorio?

LINUX MAGAZINE llega a miles de empresas, profesionales y usuarios cada mes.Si tiene servicios o productos Linux que ofrecer ¡Llámenos!

Tlf.: +34 951 010 556Fax: +34 951 010 516

[email protected]

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

98

PRÓXIMO NÚMERO

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

NÚMEROPRÓXIMO

A LA VENTA: NOVIEMBRE 2005

MUNDO MÓVILLa época en que los ordenadores eran unos ladrillosque se aposentaban sobre la mesa de cada cual hapasado a la historia. Día a día aumenta el número deusuarios que se conectan al mundo con ordenadoresportátiles y dispositivos inalámbricos cada vez máspequeños y cada vez más potentes. Sin embargo, losproblemas derivados de la informática móvil plan-tean una serie de retos únicos e intrigantes.

El mes que viene, en Linux Magazine, examina-mos cuáles son esos retos y apuntamos maneras desuperarlos. Primero veremos cómo estar conectadossiempre a la red con GPRS y un móvil relativamentereciente. A continuación, seguimos con intercone-xiones ordenador-móvil viendo cómo podemos con-trolar nuestro móvil con Gammu y Wammu, lo quenos permitirá monitorizar llamadas entrantes ymensajes SMS desde nuestro equipo.

Asimismo veremos cómo crear perfiles que nospermitirán movernos de un entorno de red a otrocon el mínimo de molestias con SCPM. Y siguiendoen la misma vena, vemos una utilísima aplicaciónescrita en Perl que nos permite seleccionar visual-mente la red inalámbrica a la que queramos conec-tarnos entre todas las que se encuentran en elentorno.

La vida es Móvil, la vida es Linux Magazine.

BEAGLEÚltimamente se habla muchode un nuevo paradigma deescritorio, un escritorio másfuncional y utilizable. Beaglees una herramienta diseñadapara el nuevo escritorio. Bea-gle nos permite buscar docu-mentos en nuestro disco durocomo si de un buscador deInternet se tratase. El mes que

viene revelamos dónde seesconden las cosas gracias aeste sabueso.

GENTOOGentoo es un sistema Linuxpoderoso y flexible que puedeadaptarse a medida y perfecta-mente a tu entorno de trabajo.En Linux Magazine 11 vere-mos cómo instalar y adminis-

trar software con el sistema depaquetes Portage de Gentoo.

DESARROLLO En nuestra sección dedicada aPerl, estudiamos unapequeñas muestra del enormeabanico de métodos que exis-ten para el análisis de XML yvemos cual es la mejor her-ramientas para cada tarea.

SYSADMINEl Servidor X es el motor tras el sistema de ventanasde Linux. En el número 11 de Linux Magazine vere-mos algunos trucos para adaptar la configuración delas X para usos especiales.

¿Cómo de segura es tu red? Lo descubrirás ennuestro artículo donde los expertos analizan medi-das de protección contra el secuestro TCP.

NÚMERO

Diciembre 2005: Número 11

PRÓXIMO

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

¡Hazte con tus ejemplares atrasados!

#2

WWW.LINUX-MAGAZINE.ES

¡No esperes a quese agoten!

¡pídelos ya!

#3

#4

#6

#7

#8

#9

¡pídelos ya!

a go t a do

#5

#1

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