Está en la página 1de 100

SDL

LINUX MAGAZINE NMERO 01

Programacin de Juegos bajo Linux

Konversation
El cliente IRC ms fcil de utilizar

Edicin en Castellano

La nueva versin de Fedora en DVD


NMERO 1 P.V.P 4,95

Configura, Vigila y Explota

REDES
Herramientas de configuracin y monitorizacin Configuracin relajada con DHCP p16 Impresin en red con CUPS y SAMBA p23
p13

Redes

Enrutado Linux
Cmo dar acceso a Internet a toda una red domstica con una sola conexin p68

Herramientas Linux

Correo Seguro
Servidores y clientes de correo con TLS para transmisin encriptada de mensajes p60

DHCP

CUPS/SAMBA

Fedora Core 3
Te traemos lo ms nuevo de Red Hat Fedora para tu PC p96

TLS/SMTP

Fedora Core 3

MediaWiki

Portales Enrutamiento

MediaWiki
Wikipedia

8 413042 594505

p54

Cmo instalar y administrar un wiki con el motor wiki PHP que se esconde tras la

Esas Patentes
Despus de las patentes de software qu planean para nosotros el gobierno europeo? Echa un vistazo al futuro de la mano de Paul C. Brown

Konversation

00001

p95

WWW.LINUX- MAGAZINE.COM.ES

Linux va a CeBIT
Muestre sus productos y servicios en la seccin especial dedicada a Linux en CeBIT 2005: Por cuarto ao consecutivo, un gran nmero de compaas y proyectos de cdigo abierto van a presentar sus soluciones de software, productos y servicios en LinuxPark. En CeBIT 2005, LinuxPark ser de nuevo el punto de visita obligatoria para lo directivos TI, especialmente aquellos provenientes de las PYMEs y de la administracin pblica. Slo hay un sitio en CeBIT con toda la informacin sobre las tecnologas de cdigo abierto ms novedosas y como explotarlas de manera efectiva: LinuxPark. Su empresa tambin puede beneficiarse enormemente de esta plataforma, ideal para la promocin de sus soluciones de cdigo abierto.

La solucin perfecta para su presencia ferial:


Comunquese directamente con una gran variedad de clientes potenciales Annciese en un campaa promocional anterior a la feria de gran envergadura Realice su propia presentacin en el LinuxForum Aprenda de ponentes de primera categora Consolide sus relaciones con la comunidad Linux internacional Benefciese del contacto con socios y patrocinadores de reconocido prestigio en el sector A su disposicin: paquetes feriales todo incluido desde 4 m2

Consiga ms informacin en +49 (0) 26 02 16 01374 profair@abresch.de

Patrocinado por:

Presentado por:

Bienvenidos

EDITORIAL

Bienve^H^H^H^H^H^H
Estimado Lector de Linux Magazine Iniciamos una nueva andadura con No! Tacha eso! No puedo caer en el topicazo de nueva andadura, flamante revista y recin estrenada publicacin. Todo es cierto - al menos en castellano, pero hete que Linux Magazine, o ms bien, su publicacin hermana y homnima alemana, Linux Magazin, lleva ms de diez aos en el mercado, siendo la revista de Linux ms antigua de Europa y la segunda del mundo. Linux New Media publica revistas de Linux en media docena larga de pases, incluyendo sitios tan dispares como Polonia, Brasil y Estados Unidos. Cuenta con un completo catlogo de revistas dirigidas a usuarios, desarrolladores y administradores a distintos niveles y lleva aos patrocinando grupos, eventos y proyectos en el mbito del Software Libre. As que, en vez de andaduras, flamancias y estrenos, sera ms apropiado hablar de ya era hora! o, incluso, a qu narices estabais esperando?. Pero ya estamos aqu. Y, s, Linux Magazine es nueva, es flamante y estamos de estreno. Adems viene cargadita de cosas interesantes. Para empezar tenemos la seccin especial de Portada, donde analizamos y nos explayamos sobre la creacin y configuracin de redes y servidores. Los programadores pueden seguir nuestros artculos sobre C/C+ + y las tres Ps (Perl, Python y PHP), adems de otros temas que capten nuestra atencin, en la seccin de Desarrollo. Si administras un sistema, te interesar la seccin SysAdmin con los mejores trucos y los artculos en ms profundidad para el profesional ms exigente. Para el usuario final, tenemos la seccin Linux User, donde se puede aprender a configurar y utilizar aplicaciones, se bucea en las procelosas aguas de la lnea de comandos (con manguitos, aro y vigilante socorrista, no os creis), iniciamos al lector en la programacin (no perderse el curso de XUL desde cero!) y vemos la aplicacin de Linux y el Software Libre en el campo de la educacin. Y poco ms: Noticias del mundo Linux, noticias empresariales, relacin de inseguridades, relacin de eventos mundiales, relacin de proyectos, recursos, enlaces y un DVD. S seores y seoras, regalamos con este nmero un DVD que contiene la ltima versin de la distribucin Fedora: la Core 3. Para que nadie se lleve a engao, expliquemos lo del DVD: incluiremos un DVD cada 3 meses. El precio habitual de Linux Magazine es de 4,95 ?, pero los meses que salgamos con DVD, Linux Magazine valdr 5,95 ?. Y por qu no sals todos los meses con DVD y acabamos? os preguntaris. Pues por que la mayora de vosotros tenis acceso a Internet verdad? Y muchos incluso banda ancha o alguna manera de acceder a ella (trabajo, universidad, el vecino del quinto). Seguramente la mayor parte de vuestro software lo consigis de ah. Por tanto para qu vamos a inflar el precio de la revista con un DVD cada mes de dudosa utilidad? Preferimos mantener bajo el precio la mayor parte del tiempo y slo incluir un DVD cuando exista algo que realmente valga la pena grabar en l. Claro que siempre podis conseguir los DVDs gratis qu cmo? Pues suscribindote. Es fcil: 12 nmeros de Linux Magazine con todos los DVDs por 49,50 ?. Si no te convence, ponnos a prueba. Por poco ms de lo que vale un ejemplar, por 5 ? para ser exactos, conseguirs tres nmeros de Linux Magazine y el correspondiente DVD. Cinco mortadelos! No es que sea para pensrselo mucho. Otra cosa a seguir es nuestra web, www.linuxmagazine.es, donde publicaremos paulatinamente TODOS LOS CONTENIDOS de nmeros atrasados de Linux Magazine para su libre descarga en formato PDF. No, no
Nos sentimos orgullosos de nuestros orgenes como publicacin, que se remonta a los primero das de la revolucin Linux. Nuestra revista hermana, la publicacin alemana Linux Magazin, fundada en 1994, fue la primera revista dedicada a Linux en Europa. Desde aquellas tempranas fechas hasta hoy, nuestra red y experiencia han crecido y se han expandido a la par que la comunidad Linux a lo ancho y largo del mundo. Como lector de Linux Magazine, te unes a una red de informacin dedicada a la distribucin del conocimiento y experiencia tcnica. No nos limitamos a informar sobre el movimiento Linux y de Software Libre, sino que somos parte integral de l.

estamos locos. Nos debemos a la comunidad. Sin la comunidad ni existira Linux, ni Linux Magazine, ni lectores de revistas de Linux, ni nada de nada. Por tanto, de donde se coge hay que devolver y agradecidos de poder hacerlo. Adems, a mayor difusin de cultura Linux, mayor nmero de usuarios de Linux. A mayor nmero de usuarios de Linux, ms lectores. Ja! Es una ecuacin infalible. Nuestra web tambin ofrece foros, ofertas, noticias actualizadas al minuto, contenidos extra y una va de comunicacin entre nuestros lectores -vosotros- y la redaccin -nosotrosinmediata y muy fcil de utilizar. As que, ya sabis, aqu estamos, hemos llegado, bienvenidos a Linux Magazine y que lo disfrutis.

Paul C. Brown Director

www.linuxmagazine.com.es

Nmero 01

LINUX MAGAZINE

Contenido

NOTICIAS

13

Herramientas de Red

Software ................................................................................................6 Negocios ................................................................................................8 Linux .........................................................................................................9 Inseguridades


PORTADA
..................................................................................10

Especial Redes ..................................................................................12 Herramientas de Red ..................................................................13


Todas las herramientas Linux necesarias para la monitorizacin de redes.

Las mquinas conectadas a la red ofrecen enormes beneficios, pero aaden responsabilidades. Desde el momento en que conectamos nuestra mquina a la red debemos no solo conocer todo acerca de nuestra mquina, si no tambin sobre la forma en que sta se comunica con el mundo exterior. Las herramientas estndar de Linux nos pueden ayudar.

Redes relajadas con DHCP ......................................................16


DHCP para la autoconfiguracin de clientes de red.

16

Redes Relajadas

Cambio de perfile con SCPM

.................................................21

Mantenimiento dos configuraciones red en una misma mquina.

CUPS sobre SAMBA ......................................................................23


Proporciona impresin en red para clientes Linux, Windows y Mac.

Aadir mquinas a una red implica un trabajo extra de configuracin. Una solucin centralizada que use un servidor DHCP para asignar las direcciones IP y otros parmetros a las mquinas clientes nos quitar un motn de dolores de cabeza a la hora de administrarlas.

DESARROLLO

La librera SDL ..................................................................................28


Aprendemos a utilizar SDL en este taller de programacin de juegos.

Interfaces

............................................................................................33

28

SDL: Juegos Bajo Linux

Con curses podemos desarrollar interfaces de texto rpidos y eficientes

SDL significa Simple DirectMedia Layer y es una API


multi-plataforma para programar aplicaciones multimedia, como los juegos. Aporta una base estable sobre la que los programadores pueden trabajar, sin preocuparse de cmo se encargar el hardware de renderizarlo o incluso qu hardware lo ejecutar.

Cartas a medida .............................................................................38


Perl puede generar cartas y sobres personalizados para envos masivos en formato PostScript.

La API Pear

.........................................................................................42

PEAR proporciona una API para la conexin a bases de datos que evita el cdigo redundante.

Introduccin a Python ..............................................................48


Python es un lenguaje todoterreno, til tanto en scripts web como en grandes aplicaciones.

Nmero 01

www.linuxmagazine.com.es

Contenido

LINUX MAGAZINE

54

MediaWiki
Los mejores trucos y consejos del SysAdmin.

SYSADMIN

La enciclopedia libre Wikipedia usa el motor Mediawiki para recopilar un enorme base de datos de conocimiento. Si desea estrenar su propio wiki, este software basado en PHP es una buena eleccin que facilita una funcionalidad abundante y llena de potencia.

La Columna de Charly ................................................................53 Colaboracin Online ...................................................................54


Instalamos y configuramos MediaWiki, el motor wiki tras la popular Wikipedia

Correo Seguro .................................................................................60


Servidores seguros de correo con TLS

La Caja Negra ...................................................................................62


Controla tu sistema con Syslog NG.

LINUX USER

74

Programacin XUL

Los desarrolladores de Mozilla crearon el lenguaje XUL para proporcionar un mtodo sencillo y potente para escribir interfaces web de gran atractivo y funcionalidades extraordinarias. En esta serie aprendemos las bases de la programacin orientada a web con esta poderosa herramienta.

Portales de Enrutamiento

.....................................................68

Con una sola mquina Linux conectada a Internet, podemos proporcionar acceso al exterior a toda una red.

Desktopia: Panelizer

..................................................................70

Dota un gestor de ventanas minimalista de un panel de control con Panelizer.

Aplicaciones: Konversation

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

El cliente IRC ms sexy para KDE.

Curso de Programacin: XUL (I) ..........................................74


Un lenguaje sencillo para programar interfaces web.

Educacin: WIMS

..........................................................................79

Generacin de exmenes personalizados con WIMS.

96

Tipografa con LaTeX (I) ............................................................84 DVD Linux Magazine: Fedora Core3
Documentos de aspecto profesional con LaTeX.

Durante aos, Red Hat fue con diferencia la distribucin Linux ms popular, slo siendo ensombrecida por Debian. Pero mientras ste ltimo era el preferido de la comunidad hacker y favorito de los que escogan el camino de hgaselo-usted-mismo, Red Hat era el favorito de los usuarios buscando productividad inmediata, de la empresa y de aquellos que queran entrar ms suavemente en el mundo Linux. Fedora es la distro heredera de Red Hat y Linux Magazine te lo trae en DVD.

COMUNIDAD

Proyectos

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

Eventos .................................................................................................94 Contacto ..............................................................................................94 Humor ...................................................................................................95 DVD: Fedora Core3 .......................................................................96 Prximo Nmero ..........................................................................98

www.linuxmagazine.com.es

Nmero 01

NOTICIAS

Software

Software
I En el Futuro jugamos a Croquet
Qu pasara si diseramos un sistema operativo e interfaz de usuario con los conocimientos que tenemos hoy en da, hasta dnde podramos llegar? La respuesta posiblemente sea hasta el campo de croquet ms cercano. OpenCroquet es un proyecto que implementa un nuevo concepto de sistema operativo, el desarrollo del cual viene liderado Alan Kay, el hombre que nos dio el porttil, la programacin orientada a objetos y el interfaz de ventanas tan popular hoy en da. El proyecto pretende implementar un sistema operativo e interfaz totalmente novedoso que unifica las ltimas tecnologas 3D con la ubicuidad de las redes en un todo que slo se puede calificar, ahora s, como ciberespacio. En la superficie, OpenCroquet podra parecer similar al proyecto Looking Glass de Sun (http:// wwws.sun.com/ software/looking_ glass/). Sin embargo, va ms all que aquel al no limitarse al aspecto visual, permitiendo, entre otras cosas, que usuarios compartan espacios de otros simplemente cruzando un portal y puedan trabajar conjuntamente en un mismo documento o compartir su tiempo de ocio a travs de avatares igualmente tridimensionales. De momento, OpenCroquet funciona utilizando como base Squeak, una implementacin de Smalltalk (otro invento de Kay) orientada a la educacin y, por tanto, se puede utilizar en todas las plataformas que soporten el interfaz del ratoncito (Linux, Windows y Mac). Se preve que futuras versiones de OpenCroquet funcionarn como verdaderos sistemas operativos y no requerirn ms software que el que traigan consigo. Las exigencias del hardware bsico son muy discretas: OpenCroquet funcionar perfectamente con un Pentium II a 450 Mhz siempre y cuando venga equipado con una potente tarjeta grfica compatible con OpenGL. Visita el enlace de ms I abajo para ms informacin. http://www.opencroquet.org.

I Palabras Calientes
No, no se trata de otro servicio 906 (o sea cual sea el prefijo utilizado para hablar con seoritas de dudosa moral hoy en da), sino el ltimo invento de Linspire, antes conocido como Lindows. Los linuxeros ms recalcitrantes podrn decir lo que quieran de esta distro, pero los impulsores detrs del sistema, con su CEO Michael Robertson a la cabeza, son un hervidero de ideas. sta vez llevan la experiencia Google hasta la ensima potencia. Si bien Google parece haberse concentrado mucho en la plataforma Windows ltimamente, con su barra para MSIE, su escritorio solo-Windows y dems, los nicos que podrn disfrutar de Hot Words, una manera de buscar en Google, son los usuarios de la Linspire Internet Suite (LIS). Hot Words funciona convirtiendo cada palabra que aparece en la navegador en un trmino de bsqueda potencial. Lees sobre paellas valenciana y te gustara saber ms? Con un clic aparece un men contextual que te permite buscar en Google utilizando paella como la palabra clave, o consultar noticias sobre paellas o incluso comprar paellas en Froogle, el buscador de productos de consumo de Google Bueno, ejem, tal vez no sea un buen ejemplo, pero ya pillis la idea. LIS se basa en el motor de anlisis Gecko, el mismo utilizado por Mozilla y Firefox, pero, segn Robertson, se han realizado muchos cambios y mejoras para poder ofrecer funcionalidades extra e incluso integran Hot Words en el cliente de correo. Otros productos salidas de la factora Linspire son PhoneGaim que permite realizar llamadas de voz sobre IP de cliente Gaim a cliente Gaim y MailMinder, un servicio integrado en el cliente de correo de LIS que permite que mensajes recordatorio se enven en una fecha determinada. Visita el enalce al pie I para ms informacin. http://info.linspire.com/suite.html

Nmero 01

www.linuxmagazine.com.es

Software

NOTICIAS

I (Otro) Linux de Bolsillo


Puedes ir por ah con Linux en un CD, puedes ir por ah con Linux en un disquete Y ahora puedes ir por ah con Linux en un pendrive, siempre y cuando cuentes con ms de 128 Megabytes de espacio. Lo que es ms: ni siquiera tendrs que rearrancar. La gente de MetroPipe (http://www.metropipe.net) ha colocado en su sitio web una distribucin completa que funciona desde cualquier dispositivo USB con capacidad de lectura y escritura. La distribucin, llamada Virtual Private Machine se puedes llevar en un pendrive, se puede llevar en un USB Watch e incluso se puede llevar en un iPod. Te sientas a un ordenador corriendo Windows? No hay problema. Enchufa tu dispositivo USB a cualquier puerto, haz clic en el icono que aparece y se cargar un entorno completo Linux listo para ser utilizado. Sin cerrar Windows, sin rearranques, sin problemas. Si el sistema subyacente, sea Windows o Linux (para Mac en breve), tiene conexin a Internet o una red local,

podrs utilizarla sin tocar un solo fichero de configuracin. Y cuando te vayas, todos los cookies, ficheros y logs estarn en tu pendrive, no en el ordenador cliente, que queda tal como estaba, limpio de polvo y paja. La distro VPM se encuntra disponible en el enlace al pie. I http://www.metropipe.net/ ProductsPVPM.shtml.

I PubSub no es para ir de copas


Firefox vuelve a demostrar su implantacin en el mercado de los navegadores. Esta vez nos dan PubSub, una barra lateral que nos permitir navegar blogs, grupos de noticias y resmenes RSS. La barra se instala en la parte izquierda del navegador y permite monitorizar en tiempo real cambios de webs de noticias, grupos de noticias de usenet y ms de tres millones de weblogs. Los nuevos elementos aparecen en la barra y podemos expandir la noticia en la ventana principal del navegador simplemente pulsando en el enlace. Nada ms instalar PubSub, podemos acceder al servicio cerrando y rearrancando el navegador y, a continuacin, escogiendo de View/Sidebar/PubSub Sidebar. En una primera instancia, se nos ofrece informacin genrica (mucha informacin sobre la carrera presidencial americana, mucho Bush, mucho Kerry, etc.), pero podemos configurar la barra que muestre la informacin que nosotros deseemos abriendo una cuenta en PubSub.com. Podemos escoger que nos sirvan informacin de varias fuentes y, a travs de una formulario, especificamos las palabras claves que se han de utilizar para filtrar las noticias y confirmamos nuestra suscripcin pulsando en un enlace remitido por correo electrnico. Seguidamente, cambiamos los Options and Settings en la barra para incluir la direccin de correo electrnico que utilizamos para suscribirnos y la contrasea que PubSub nos enve. Con desconectar y volver a conectar al servicio, aparecern las cuentas que hemos habilitado. A los pocos minutos, la barra empezar a llenarse de noticias a medida que se producen a lo largo y ancho del blogsphere, Usenet y web. Para aquellos que les va este tipo de cosas, PubSub tambin se encuentra disponible para MSIE. Descarga la barra del I enalce de ms abajo. http://www.pubsub.com/ sidebar-firefox.php.

I El Access de OpenOffice
La nueva versin de OpenOffice, nmero 2.0, integrar una aplicacin similar a MS Access, para aquellos que lo echen de menos. La nueva aplicacin ser ms visible que la implementacin actual (accesible a travs de Tools/Data Sources) ya que se colgar del men Files/New, el mismo sitio de donde se accede a la creacin de otros formatos de documentos en OpenOffice. Los documentos creados con Base, que as se llama el programa, podrn guardarse en el lugar elegido por el usuario y utilizarn un formato especfico de OpenOffice. Sin embargo, la integracin existente con otras bases de datos, que permite acceder a datos guardados bajo formatos como MSAccess, Oracle, dBase y MySQL, se seguir conservando. Los paquetes generados con Base integrarn fuentes de datos, formularios, consultas e informes, en un mismo paquete de manera similar a como lo hace Access. Para la fuente de datos, el equipo de OpenOffice se ha decantado por HSQLDB, un motor de bases de datos basado en Java que se integra perfectamente con la implementacin gratuita del lenguaje, Kaffe. HSQLDB destaca por su pequeo tamao, rapidez y la posibilidad mantener los datos en memoria I durante la ejecucin. http://dba.openoffice.org/miscellaneous/ dba20.html

www.linuxmagazine.com.es

Nmero 01

NOTICIAS

Negocios

Negocios
I Novell vs. Ballmer
En un documento hecho pblico a los medios el 28 de octubre pasado, el vipresidente de Novell, John Hogan y el senior business analyst, Barret Coakley desmontan una a una las aseveraciones difundidas por Steve Ballmer, CEO de Microsoft en un email enviado a clientes y socios de la compaa el 27 de octubre en el que Ballmer aseguraba que Windows es ms barato, ms rpido y ms seguro que Linux. Entre otras cosas, se cuestiona la independencia de los anlisis y la metodologa utilizada. Segn revela el documento de Novell, se utilizaron en las pruebas formatos propietarios de MS que Linux tena que emular con SAMBA, ingenieros de Redmond realizaron ajustes en el sistema operativo de prueba de MS para optimizar los resultados de Windows y, sin embargo, no se realiz ninguna optimizacin en el sistema Linux. Asimismo. Hogan y Coakley acusan a Ballmer de ser demasiado selectivo con algunos de los datos publicados en un estudio de The Yankee Group titulado Linux, UNIX and Windows TCO Comparison aparecido en abril de este mism ao. Ballmer no cita ninguno de los muchos apartados donde se habla positivamente de Linux, y en especial decide omitir la conclusin, donde se dice literalmente: El estudio de TCO (Total Cost of Ownership) encontr que Linux ofrece sin lugar a dudas ahorros en costes, economa en el escalado y ventajas tcnicas, tal y como pueden atestiguar muchos usuarios satisfechos. Sin embargo, los ahorros en costes no son automticos. No se obtienen sin sus debidas diligencias y no se aplican necesariamente a todos los entornos. En ltima instancia, el TCO y ROI (Return On Investment) puede ser ms bajo, igual o ms alto que los de UNIX o Windows dependiendo de las circunstancias de explotacin corporativa individuales. Otros aspectos tratados son los de la seguridad, falta de personal cualificado y falta de soporte, todos y cada uno de ellos desmantelados por los ejecutivos de Novell. Concluyen que Ballmer a descontextualizado y manipulado la informacin ofrecida por estudios independientes con el fin de influenciar las I decisiones de sus clientes.

I Hispafuentes y Ceres
La empresa de software libre espaola Hispafuentes y la Fbrica Nacional de Moneda y Timbre-Real Casa de la Moneda han desarrollado conjuntamente drivers para tarjeta criptogrfica Ceres. Esta tarjeta abre las puertas a la administracin electrnica y permite acceder a todos los servicios que, como la Agencia Tributaria entre otros, admiten certificados digitales emitidos por la FNMT que garantizan la autenticacin, integridad, confidencialidad y no repudio en las comunicaciones en redes abiertas. Hasta hoy, esta tarjeta slo era soportada por plataformas Windows de Microsoft, pero, cosa a la que nos tiene acostumbrados la administracin, a partir de ahora, y gracias a Hispafuentes, todos los usuarios de Linux que utilicen navegadores basados en Mozilla (Mozilla, Firefox, Netscape, Galeon, etc.), podrn beneficiarse de las ventajas de realizar gestiones autentificadas a travs de Internet. La solucin se basa en Opensc, una librera para trabajar con tarjetas inteligentes. La versin desarrollada por Hispafuente y la FNMT-RCM en conjuncin con HispaLinux, aporta soporte para tarjetas del tipo PKCS#11, PKCS#15 y manejo de claves y certificados con las tarjetas Ceres de FNMT-RCM, lo que, a efectos prcticos, abre las puertas de la Administracin Electrnica de par en par para los usuarios de GNU/Linux. El driver se puede bajar de https:// software-libre.org/projects/opensc-ceres/I

I eBay: Open Source a Subasta


El fundador de eBay y filntropo Pierre Omidyar acaba de de tomar una decisin importante en su carrera como benefactor de la humanidad: a partir de ahora, su fundacin, anteriormente Omidyar Foundation, cambia de nombre y se convierte Omidyar Network. El cambio es importante -y caro-, ya que con el cambio, el empresario deja de invertir exclusivamente en organizaciones sin nimo de lucro y abre las puertas a la ayuda a empresas con fines comerciales. Desde junio, la nueva organizacin a invertido en varias reas, incluyendo microfinanzas, cdigo abierto, propiedad intelectual, votacin y software social, todo con el nimo de mejorar a los ms desfavorecidos en el mundo. De entrada, esto va a suponer a renunciar de millones de dlares en exenciones fiscales, pero segn, Omidyar, [nos preguntamos] si eBay es un tan buen ejemplo de como la gente descubre su poder individual, entonces, tiene sentido como fundacin poder invertir en algo como eBay?. De momento, entre otras organizaciones, se han asociado con Sourceforge para apoyar y financiar proyectos de software libre. Ms informacin en http://www. I omidyar.net/.

I SCO on the Rocks


Las acciones del grupo SCO han cado en picado en estos ltimos meses. El lunes 25 de octubre, sus acciones cerraron a 3,01 dlares por accin, lo que supone una cada de un 83% con respecto a enero de ste mismo ao, cuando sus valores cotizaban a 18,19 dlares. La empresa de Darl McBride ha visto como el volumen de negocio para su sistema operativo Unix ha descendido de 7,3 millones de dlares a poco ms de 670 mil dlares en un ao. Los observadores financieros achacan esta mala racha a la erosin de la imagen de SCO debido a lo que parece ya una batalla legal perdida I contra IBM.

Nmero 01

www.linuxmagazine.com.es

Noticias

NOTICIAS

Noticias
I Lexmark lo intenta Fallaaaa!
En la eterna partida entre usuarios y consumidores contra corporaciones con afanes abusivos monopolsticas, el equipo de los consumidores acaba de marcar un importante tanto. Ya se sabe que slo hace falta que una empresa aulle Propiedad Intelectual! para que un ejrcito de abogados sin nada mejor que hacer salga arrastrndose de debajo de las piedras, presto a defender la compaa, el sistemas capitalista y la civilizacin moderna tal y como lo concebimos ante la salvaje horda de piratas, usurpadores de copyright y Pedosperos varios que andan a la bsqueda de la destruccin del mundo. En este caso, fue la compaa fabricante de impresoras Lexmark y el artculo de consumo origen de la controversia, un cartucho de toner? Pues s, amiguitos y amiguitas, un cartucho de toner. En el 2003, el Lexmark tuvo la genial idea de dotar a sus cartuchos de un chip que implementaba tecnologa DMCA (el que se utiliza habitualmente para evitar la reproduccin de medios pirateados e implementado en el sistema Palladium de Microsoft) para evitar que terceras partes creasen clones de sus cartuchos. Como es bien sabido, existe toda una industria dedicada a producir versiones ms baratas de consumibles de impresora originales, aportando, de paso, una buena y necesaria dosis de competitividad al sector. Uno de los jugadores de dicha industria, Static Control Components, ni corto ni perezoso, le aplic la ingeniera inversa al chip y a las pocas semanas estaba vendiendo su propia versin, el Smartek, a fabricantes de toner para que la incorporasen a sus cartuchos. Cmo viene siendo habitual, cuando una empresa no puede hacer nada en el campo de batalla del mercado, pues se pleitea y punto. Lexmark hizo lo propio y arrastr a SCC a los tribunales. En un principio, Lexmark pareci ganar el tanto, cuando un juez, a principios del 2003, fall en favor del fabricante de impresoras. Pero al final ha prevalecido el sentido comn y en un nuevo fallo de octubre del 2004, otro tribunal invalida el primer dictamen, alegando que no es de recibo colocar dispositivos de DMCA en algo que no sea un producto con copyright. En concreto, el fallo reza: Debemos dejar bien claro que en futuro, empresas como Lexmark no pueden utilizar tecnologas DMCA en conjuncin con leyes sobre copyright para crear monopolios de bienes manufacturados para s mismos. I men.

I Creciendo Juntos
A estas alturas de siglo ya todo el mundo est familiarizado con el estudio de Andago donde se nos cuenta que el uso del software libre ha aumentado un 39% en Espaa a lo largo del ao pasado. Esto no debe sorprendernos, mxime cuando incluso un medio de comunicacin mayoritario basan una campaa en regalar un CD con Linux a sus lectores. HispaFuentes, por su lado, se suma a la mocin con su propio estudio donde se afirma que para el 2007 el 25% de los ordenadores a nivel mundial corrern una versin u otra de Linux. El estudio basa sus conclusiones en la tasa de crecimiento anual, que sita a Linux como sistema operativo de mayor crecimiento con un ndice de expansin del

16,6%. Le siguen en segundo lugar Windows (por supuesto) con una tasa de crecimiento del 10,5% y el farolillo rojo lo componen otros Unices que ven descender su implantacin a un 4,5% anual. En lo que se refiere a servidores, la cuota de mercado ser del 58,8% para Windows (55,1% en el ao 2002), del

I OpenBSD 3.6
A primeros de noviembre se liber la nueva versin de OpenBSD, la popular versin de Unix BSD de cdigo abierto, para su descarga o pedido en CD. Aparte de parches y mejoras varias, esta nueva versin soporta SMB en plataformas i386 y AMD64, se ha depurado el servidor y clientes DHCP y se han implementado nuevos demonios para vigilar la conexin de nuevos dispositivos. Asimismo, se ha ampliado el catlogo de drivers, con nuevos interfaces para dispositivos inalmbricos, Ethernet sobre USB, puentes PCI-ISA y sensores varios. En el apartado de mejoras, se ha mejorado el rendimiento y seguridad en NFS. El catlogo de software incluye portes para ms de 2700 aplicaciones y ms de 2800 paquetes precompilados. Para ms informacin, dirigirse a http://www.openbsd. I org/es/36.html. 32,7% para Linux (23,1% en 2002) y del 5,7% para Unix (11% en 2002), lo que indica que la implantacin de Linux afectar bastante ms a Unix que al sistema operativo de Microsoft con su incremento de popularidad. Otra seal de la gradual e imparable implantacin de Linux en el mercado mundial son las cifras que se refieren al incremento de volumen de negocio. El estudio seala que crecer de 280 millones de dlares (cifra registrada en el 2003) a un apabullante 3.000 millones de dlares en el I 2008.

www.linuxmagazine.com.es

Nmero 01

NOTICIAS

Inseguridades

Inseguridades
I CUPS
El Common UNIX Printing System (CUPS) es un sistema de impresin. lvaro Martnez Echevarria inform de un error en la versin del Protocolo de Impresin de Internet (Internet Pinting Protocole o IPP) en versiones de CUPS antertiores a 1.1.21. Un atacante podra enviar un paquete cuidadosamente escrito al puerto IPP, lo que podra provocar que CUPS dejara de escuchar en ese puerto y desencadenar un ataque de denegacin de servicio. Para poder explotar este error, un atacante tendra que tener la capacidad de enviar un paquete UDP al puerto IPP (por defecto, 631). El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http:// cve.mitre.org) ha asignado el nombre I CAN-2004-0558 a este problema. Referencia Debian: DSA-545-1 Referencia Gentoo: GLSA 200410-06/cups Referencia Mandrake: MDKSA-2004:097 Referencia Red Hat: RHSA-2004:449-17 Referencia Slackware: SSA:2004-266-01 Referencia Suse: SUSE-SA:2004:031

I getmail
getmail es un sustituto fiable de fetchmail que soporta Maildir, Mboxrd y envo de MDAs externos. David Watson descubri

una vulnerabilidad en getmail cuando se configura para correr como root y enva correo a ficheros maildir/mbox de usuarios locales no de confianza. Un usuario local malicioso podra explotar una condicin de carrera, o un ataque symlink similar y dotar a getmial con la capacidad de crear o sobrescribir ficheros en cualquier directorio en el sistema. No se debe ejecutar getmail como usuario privilegiado ni, en la versin 4, utilizar un MDA externo con privilegios de usuarios y grupos explcitamente configurados. Todos los usuarios de getmail deben actualizar a la I ltima versin. Referencia Debian: DSA-553-1 Referencia Gentoo: GLSA 200409-32/getmail Referencia Slackware: SSA:2004-278-01

I Mozilla
Mozilla es un navegador web de cdigo abierto, un cliente de correo y grupos de noticias avanzado, cliente IRC y editor de HTML. Se han descubierto recientemente varios errores en la suite. Jesse Ruderman descubri un error de scripting multidominio en Mozilla. Si a un usuario se le engaa para que arrastre un enlace de Javascript hasta otro marco o pgina, se dota al atacante de la capacidad de hurtar o modificar informacin sensible de ese sitio. Adems, si a un usuario se le engaa para que arrastre secuencialmente dos enlaces a otra ventana (no marco), se le dota al atacante de la capacidad de ejecutar comandos arbitrarios. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http://cve.mitre.org) ha asignado el nombre CAN-2004-0905 a este problema. Gael Delalleau ha descubierto un desbordamiento de entero que afecta le cdigo que maneja BMP dentro de Mozilla. Un atacante podra utilizar un fichero BMP cuidadosamente manipulado para provocar un cuelgue del programa o que ejecuta cdigo arbitrario cuando se visualizase el archivo. El CVE ha asignado el nombre CAN-2004-0905 a este problema. Georgi Guninski ha descubierto un desbordamiento de bfer basado en pila en las rutinas de muestra de vCard. Un atacante podra crear un vCard cuidadosamente manipulado que podra hacer que Mozilla se cuelgue o ejecute cdigo arbitrario cuando se muestra. El mismo

Polticas de seguridad de la Distribuciones Mayoritarias


Distribuidor
Debian

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

Comentario

Gentoo

Mandrake

Red Hat

Slackware

Suse

Los avisos de seguridad actuales se incluyen en la pgina de inicio. Los avisos se proveen como pginas HTML con enlaces a los parches. Los avisos tambin incluyen una referencia a la lista de correo. Info: http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para Foro: http://forums.gentoo.org/ la lista Gentoo en el sitio web de Lista: http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la Referencia:GLSA: 1) pgina principal. Los avisos se presentan en HTML con cdigos para fusionar las versiones corregidas. Info: http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web Lista: http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionadas con Referencia:MDKSA: 1) la seguridad. Entre otras cosas,incluye de avisos seguridad y referencias a las listas de correo. Los avisos son pginas HTML, pero no contienen enlaces a los parches. Info: http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad Lista: http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A Referencia:RHSA- 1) continuacin los problemas para cada versin de Red Hat se agrupan. Los avisos de seguridad se proveen como una pgina HTML con enlaces a los parches. Info: http://www.slackware.com/security La pgina de inicio contiene enlaces al Lista: http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. Referencia:[slackware-security] 1) No existe informacin adicional sobre seguridad en Slackware. Info: http://www.suse.de/en/private/support/ Ya no existe un enlace a la pgina de security/index.html seguridad tras un remodelado en el sitio Parches: http://www.suse.de/en/private/ web de SuSE. Existe informacin en la download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de Referencia:SUSE-SA 1) seguridad para versiones individuales de SuSE Linux se muestran de color rojo en el sitio de actualizaciones generales. Contiene una corta descripcin de la vulnerabilidad que el parche soluciona.

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

10

Nmero 01

www.linuxmagazine.com.es

Inseguridades

NOTICIAS

autor ha descubierto otro desbordamiento de bfer basado en pila en el mdulo de Envo de Pgina. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http://cve.mitre.org) ha asignado el nombre CAN-2004-0902 a este problema. Wladimir Palant ha descubierto un fallo en la manera en que Javascript interacta con el portapapeles. Un atacante tiene la posibilidad de utilizar cdigo malicioso de Javascript para robar datos sensibles que han sido copiados al portapapeles. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http://cve.mitre.org) ha asignado el nombre CAN-2004-0908 a este probleI ma. Referencia Red Hat: RHSA-2004:486-18 Referencia Slackware: SSA:2004-266-03 Referencia Suse: SUSE-SA:2004:036

tambin descubri un desbordamiento de entero en el decodificador de imgenes ICO. Un atacante podra crear un fichero ICO cuidadosamente manipulado que hiciera que una aplicacin enlazada con gtk2 se cuelgue cuando la vctima abriese I el fichero (CAN-2004-0788). Referencia Debian: DSA-549-1 Referencia Red Hat: RHSA-2004:466-12 Referencia Slackware: SSA:2004-266-02 Referencia Suse: SUSE-SA:2004:033

alizar sus sistemas para incluir los paquetes nuevos que solucionan este problema. Los nuevos paquetes contienen un parche retroactivo que no es vulnerable a este tipo de ataques de denegacin de serviI cio. Referencia Red Hat: RHSA-2004:451-05

I XFree86
XFree86 es una implementacin de cdigo abierto del sistema de ventanas X. Aporta una funcionalidad bsica de bajo nivel para la que estn diseadas los interfaces grficos de usuario (GUIs) completos tales como Gnome o KDE. Durante una auditora de cdigo fuente, Chris Evans descubri varios fallos de desbordamientos de pila y un desbordamiento de entero en la librera libXpm de X.org utilizada para decodificar imgenes XPM (X PixMap). Un atacante que supiera aprovechar este problema, podra crear un fichero XPM cuidadosamente manipulado que hara que una aplicacin enlazada con la mencionada librera se colgase y ejecutase cdigo arbitrario si el fichero es abierto por la vctima. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http://cve.mitre.org) ha asignado los nombres CAN-2004-0687 , CAN-2004-0688 y CAN-2004-0692 a estos problemas de seguridad de XFree86. Se descubri un fallo en el X Display Manager (XDM). XDM abra un socket TCP chooserFd, an si el parmetro DisplarManager.requestPort estuviera establecido como 0. El efecto de esta situacin es que permita el acceso de usuarios autorizados al ordenador a travs de X, an si el administrador del ordenador hubiera configurado XDM para rechazar conexiones. Aunque XFree86 versin 4.3.0 no era vulnerable a este problema, Red Hat Enterprise Linux 3 contena un parche retroactivo que introduca el error. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http://cve.mitre.org) ha asignado el nombre CAN-2004-0419 a este I problema. Referencia Debian: DSA-561-1 Referencia Gentoo: GLSA 200409-34/X Referencia Mandrake: MDKSA-2004:099 Referencia Red Hat: RHSA-2004:478-13 Referencia Suse: SUSE-SA:2004:034

I OpenOffice.org
OpenOffice.org es un conjunto de aplicaciones para la productividad ofimtica que incluye programas de escritorio, como procesadores de texto, hoja de clculo, administrador de presentaciones, editor de frmulas y un programa de diseo. La empresa Secunia Research inform de un problema derivado de la manipulacin de ficheros temporales en OpenOffice.org. Un usuario local malicioso podra utilizar este fallo para acceder a los contenidos de los documentos abiertos de otro usuario. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http://cve.mitre.org) ha asignado el nombre CAN-2004-0752 a este problema. Se aconseja a todos los usuarios de OpenOffice.org que actualicen sus programas con los paquetes de actualizacin de OpenOffice.org que contienen un parche retroactivo para corregir I este problema. Referencia Mandrake: MDKSA-2004:103 Referencia Red Hat: RHSA-2004:446-08

I gtk+
El paquete gtk2 contiene el kit de herramientas de the GIMP (GTK+), una librera para la creacin de interfaces grficos de usuario para el sistema de ventanas X. Durante las pruebas de un fallo anteriormente corregido en QT (CAN-2004-0691), se descubri un error en el procesador de imgenes BMP de gtk2. Una atacante podra crear un fichero BMP cuidadosamente manipulado que podra provocar que una aplicacin entrase en un bucle infinito y no respondiese a las entradas del usuario cuando fuese abierto por la vctima. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE - http:// cve.mitre.org) ha asignado el nombre CAN-2004-0753 a este problema. Durante una auditora de seguridad, Chris Evans descubri un desbordamiento de pila en el decodificador de imgenes XPM. Una atacante podra crear un fichero XPM cuidadosamente manipulado que podra hacer que una aplicacin enlazada con gtk2 se cuelgue o posiblemente ejecute cdigo arbitrario cuando la vctima abra el fichero. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE http://cve.mitre.org) ha asignado los nombres CAN-2004-0782 y CAN-20040783 a este problema. El mismo autor

I SpamAssassin
SpamAssassin aporta maneras de reducir correos electrnicos comerciales no solicitados (SPAM) en las bandejas de correo entrante. Se ha encontrado un error de denegacin de servicio en versiones inferiores a 2.64. Un atacante malicioso podra crear un mensaje de tal modo que provocara que SpamAssassin dejara de responder. Este ataque de denegacin de servicio podra provocar que SpamAssassin deje de remitir y filtrar correo. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE http://cve.mitre.org) ha asignado el nombre CAN-2004-0796 a este problema. Los usuario de SpamAssassin debern actu-

www.linuxmagazine.com.es

Nmero 01

11

PORTADA

Especial Redes

Los Qus y Cmos de la Administracin de LANs

La Enredadera
El ordenador sin conexin es una especie en vas de extincin. Es casi imposible hoy en da concebir una mquina que no tenga conexin a Internet o a una red local. Estos ltimos, con o sin acceso a Internet, agilizan el trabajo en las empresas y ofrecen oportunidades sin lmites para el ocio. POR PATRICIA JUNG
l correr de aqu para all con disquetes era una cosa comn hace escasamente pocos aos. Puede que el lector recuerde haber utilizado floppys para difundir hojas de clculo, transportar el ltimo captulo de la tesis desde el centro de clculo de la facultad hasta el ordenador en el departamento o para compartir los ltimos cotilleos entre amigos y compaeros. En la actualidad, los libros de cocina estn siendo exiliados de su recinto tradicional, siendo sustituidos por porttiles; el equipo de msica es un sencillo cliente que recoge MP3s del servidor alojado en el trastero y no hace falta ni mencionar que la mayor parte de las comunicaciones que se real

izan en las empresas se hacen por va electrnica. Si bien la mayor parte de las oficinas estn cableadas, los LANs inalmbricos hacen su agosto en los despachos y redes domsticas. Y una vez organizado el aspecto fsico de la red, es hora de ponerse serios con el software. Cada mquina en la red necesita una direccin nica, ha de conocer en que red reside y debe saber a que mquina se ha de dirigir en el caso de que necesite enviar datos ms all de los lmites de la red local, al gran mundo mundial de por ah fuera.

taja de que se encuentran disponibles en casi cualquier distribucin . Y una vez que se tiene la red montada y en funcionamiento, se pueden empezar a asignar tareas a mquinas individuales para el beneficio de toda la red, como, por ejemplo, estableciendo una mquina como servidor DHCP o de impresin. I

COVER STORY
Herramientas de Red .........13
Desde el momento que conectamos una mquina a una red, no slo se exige saber como funciona aisladamente, sino como se comunica con el mundo exterior. Las herramientas estndar suministradas con Linux pueden ayudarnos a ello.

Cuestin de Planteamientos
Las opciones son o meticulosamente configurar todas y cada una de las mquinas o montar un servidor especial que se encargue del trabajo sucio. El esfuerzo extra inicial que supone la segunda solucin, suele tener su recompensa a medio y largo plazo, especialmente si la red tiende a seguir creciendo y se hacen necesarios cambios en la configuracin. Adase a la mezcla un par de porttiles que se conectan aqu y all y uno llega a apreciar una distro moderna que suministra herramientas que facilitan la configuracin de cambios de topologa, como SCPM de SuSE. Las nuevas configuraciones tienden a tener problemas en sus infancias. En tal caso, las herramientas estndar de Linux pueden ser de una gran ayuda. Aunque es habitual sentirse incmodos con las herramientas estndar en un principio, tienen la ven-

Servidores DHCP................16
La adicin de nuevas mquinas a una red significa ms trabajo de configuracin. Una solucin centralizada que utilice un servidor DHCP que se encargue de la asignacin de direcciones IP y otros valores a los clientes, cura eficazmente el dolor de cabeza administrativo.

SCPM...................................21
El cambio del entorno operacional de una sola mquina entraa mucho trabajo de configuracin. SCPM le facilita la vida a los usuarios de SuSE al mantener una base de datos de perfiles con distintas configuraciones.

CUPS: Impresin en Red ....23


La comparticin de una impresora entre mltiples usuarios puede ayudar a ahorrar dinero y recursos. Podemos conectar impresoras a un servidor CUPS para dar acceso incluso a clientes de Microsoft o Apple.

RECURSOS
[1] Gua de Interfaz Humano de Gnome: http://developer.gnome.org/projects/ gup/hig/ [2]Freedesktop.org http://freedesktop.org/

12

Nmero 01

www.linuxmagazine.com.es

Herramientas Red

PORTADA

Introduccin a Herramientas de Red

Linux en Red
Las mquinas conectadas a la red ofrecen enormes beneficios, pero aaden responsabilidades. Desde el momento en que conectamos nuestra mquina a la red debemos no solo conocer todo acerca de nuestra mquina, si no tambin sobre la forma en que sta se comunica con el mundo exterior. Las herramientas estndar de Linux nos pueden ayudar. POR NICO LUMMA
n ordenador sin conexin al mundo exterior parece un paso atrs. Si bien los distribuciones de Linux de hoy en da soportan normalmente la instalacin de componentes de red, los administradores han de asumir su parte de responsabilidad y, en algunos casos, su formacin puede no haber cubierto tcnicas de redes. En estos casos lo lgico es obtener el mayor conocimiento posible sobre lo que necesita un ordenador para conectarse a una red. Una red puede no responder o una mquina aislada (por ejemplo un servidor Web) puede no estar accesible. Los principales distribuidores de Linux disponen de herramientas que controlar estas situaciones.

Fundamentos de redes
El componente bsico de Internet y de numerosos sistemas de red local es el TCP/IP. Es una combinacin del Protocolo de Control de Transmisiones y el Protocolo de Internet, especificando como se comunican e intercambian datos los ordenadores en una red.

GLOSARIO
DNS: los servidores DNS contienen bases de datos que se pueden usar para emparejar direcciones IP con nombres de Internet (y viceversa). Buscan en sus bases de datos para responder consultas enviadas por buscadores y aplicaciones de Internet desconocidas por sus usuarios. Un usuario que escribe www.google.com est realmente formulando una consulta cuya respuesta es la direccin IP 216.239.39.99. Es con esta direccin con el que el buscador abrir realmente la conexin.

Como un navegador Web no necesita saber si la informacin se transmite mediante componentes inalmbricos o mediante lneas FDDI, ni las lneas FDDI necesitan saber si los bytes que transporta corresponden a ficheros HTML, Figura 1: Los numerosos datos de obtenidos por ip addr incluyen MP3s o vdeos, los experinformacin crtica de la direccin IP actual e inet indica la mstos en redes utilizan un cara de red. modelo basado en capas para describir las redes de ordenadores. Al margen de que cada el usado, por ejemplo, por los canales de capa se apoya en la capa subyacente, las Real Audio. capas son independientes entre s. En la siguiente capa es donde las cosas La capa aplicacin, como su propio empiezan a ponerse interesantes. Aqu nombre indica, define como las aplicaes donde los paquetes de informacin ciones como buscadores o programas de (independientemente de su contenido) correo hablan con servidores Web o de son puestos en un cable e intentan buscorreo. El medio por el cual ocurre esto car la mejor ruta a su destino. Cada depende de cada aplicacin. Por ejembloque contiene la direccin de su remiplo, el Protocolo de Trasferencia de tente y de su receptor. Cuando se sirve Hipertexto, HTTP, es usado para Webs, una pgina, los paquetes de informacin mientras que el Protocolo de Transferenpueden utilizar rutas distintas. Tras acepcia de Ficheros, FTP, es usado tar los paquetes, el receptor debe habitualmente para la descarga de asegurarse de que los paquetes se ficheros. pueden reorganizar en el orden correcto. La capa de transporte est por debajo Al margen del propio Protocolo de Interde la capa de aplicaciones. Esta capa net, la capa de red contiene otros establece las conexiones entre ordeprotocolos como el Protocolo de Control nadores, permitindoles el intercambio de Mensajes de Internet, ICMP, para el de datos. TCP proporciona un canal de control de mensajes (por ejemplo, de garanta (para protocolos de aplicaciones error), el Protocolo de determinacin de como HTTP, SSH, POP o SMTP), aseguDirecciones, ARP, que confronta direcrando que los bloques de informacin ciones IP con direcciones de hardware que fallen son retransmitidos. El Proto(MAC) y, su homlogo, el Protocolo de colo Datagram (UDP) es otro protocolo Inversin de Direcciones Determinadas importante a este nivel que puede trans(RARP). mitir bloques de informacin, pero con La capa inferior del modelo OSI es la perdidas de paquetes. Este protocolo es capa Fsica. A este nivel estamos intere-

www.linuxmagazine.com.es

Nmero 01

13

PORTADA

Herramientas Red

Figura 2:ip route proporciona informacin IP ms clara.

Figura 3: La mquina receptora, 192.168.1.1, respondi a los 5 pings enviados.

sados en la transmisin de bits y la estandarizacin de de la negociacin de protocolos con interfaces elctricas, mecnicas y de sealizacin. Esto incluye los estndares RS-232 y X.21. Los componentes de red son identificados mediante su direccin IP. TCP puede retransmitir paquetes asegurando que el receptor dispone del conjunto completo de paquetes. El protocolo de aplicaciones en el nivel superior depende de este servicio. Sin un conocimiento bsico de estas capas, muchas de las herramientas de red no tendran mucho sentido.

Comprobacin del estado


Antes de comenzar a analizar el trfico de red es importante comprobar que nuestro ordenador est utilizando la red adecuadamente. Dicho de forma sencilla, cada mquina necesita una direccin IP nica para ser capaz de comunicarse con otras mquinas en la red. La direccin de la puerta de enlace permite que los paquetes de datos destinados al exterior abandonen la red local. El comando ip proporciona detalles de la configuracin actual. Los sistemas

antiguos puede que solo tengan los comandos ipconfig y route, que proporcionan la misma informacin, pero en un formato distinto. Es posible que si el sistema no puede localizar estos comandos sea por que estn instalados en /sbin, que no es una ruta habitual de bsqueda. Si ste es el caso, simplemente debemos aadir la ruta completa (por ejemplo, /sbin/ip). La opcin addr indica al comando ip que debe mostrar los detalles de nuestro adaptador de red. Si queremos indicar el nmero de adaptador debemos incluir la lnea eth0 para la primera tarjeta de red, eth1 para la segunda y as sucesivamente. Esto mostrar nuestra direccin IP (192.168.1.245 en la Figura 1), la mscara de red (/24), la direccin de difusin (192.168.1.255) y el nombre del interfaz de la red, eth0. Los datos obtenidos con el comando ip route son ms sencillos de leer (ver Figura 2). La primera lnea muestra la red (la direccin de la red en nuestro ejemplo es 192.168.1.1), la mscara de la red /24, el interfaz de la red y finalmente el origen de los datos (src significa origen), o sea, la direccin IP (192.168.1.245). La segunda lnea muestra la puerta de

enlace por defecto 192.168.1.1. Si aqu no aparece informacin crtica como la direccin IP o la puerta de enlace puede explicar que nuestro ordenador no se comporte en la red como debiese. Si ste es el caso, debemos ejecutar la herramienta de configuracin de nuestro distribucin (por ejemplo YaST for Suse) y comprobar nuestra configuracin.

Ping-Pong
ping es una herramienta de anlisis de redes muy simple y tremendamente prctica. Transmite un paquete de datos ICMP desde nuestro ordenador a un objetivo, mostrando el tiempo que la respuesta tarda en llegar devuelta a nuestro ordenador (suponiendo que el receptor responda). La parte final nos muestra el nmero de paquetes ping transmitidos (cinco en la Figura 3), cuantas respuestas obtuvimos (cinco de nuevo) y cuanto tardo el proceso (4002 milisegundos). Si algn paquete se pierde es mostrado en la seccin packet loss. Si el receptor no se puede alcanzar no ocurre nada durante un rato, puesto que ping espera respuestas. ping nombredehost lanza un ping hacia el receptor hasta que presionamos [Ctrl-c]. En su

Figura 4:traceroute muestra la ruta hasta linux-magazine.com.

Figura 5:mtr combina los resultados de traceroute y de ping.

14

Nmero 01

www.linuxmagazine.com.es

Herramientas Red

PORTADA

Figura 7: Cuantos paquetes van y vienen desde qu direccin?

Figura 8:iptraf proporciona estadsticas de red detalladas.

lugar podemos especificar ping -c 10 nombredehost para transmitir solo 10 pings.

Para mayor precisin


prueba tcpdump, la herramienta de anlisis de redes ms verstil que existe. La mayora de los distribuciones nos proporcionarn un paquete listo para usar. Si no es el caso, podemos descargar uno desde [1] (sin olvidar el archivo libpcap requerido) y compilar la herramienta nosotros mismo. Necesitamos privilegios de administrador para utilizar esta herramienta puesto que habilita el modo promiscuo de nuestra tarjeta de red permitindole leer cualquier bloque de datos que aparezca en nuestra red local. Esto puede permitir a un usuario leer las contraseas de otras personas. tcpdump nos va a mostrar cualquier paquete de datos que nuestra tarjeta de red vea.
11:56:27.833598 192.168.1.245 .ssh > 192.168.1.20.39258: P 1392512:1392720(208) ack 1201 win 9120 <nop,nop,timestamp 2599771999 1711932971> (DF) [tos 0x10]

Quin va?
Tiene sentido la instalacin de herramientas especializadas que nos eviten perdernos. iptraf es un ejemplo. Nos dice exactamente que est ocurriendo con nuestra tarjeta de red, que protocolos est utilizando actualmente y con que mquinas se est comunicando. Escribiendo [q] [Intro] se cierra esta herramienta. El men principal (Figura 6) contiene un monitor de trfico IP (ver Figura 7) que nos muestra el trfico de entrada y salida, permitiendo encontrar los puntos donde las transiciones ocurren. Por otro lado, el interfaz de estadsticas detallado (ver Figura 8) no nos muestra que mquinas estn intercambiando datos, pero analiza los flujos de trfico por protocolos. Esto nos proporciona informacin muy valiosa sobre el rendimiento e indica cuellos de botella. Por ejemplo, si hay ms salidas que entradas, podemos suponer que alguien est descargando algo desde nuestra mquina. Por supuesto que podramos decir mucho ms acerca de iptraf y las otras herramientas mencionadas en este artculo. Pero si deseas enriquecer tus conocimientos en esta rea no hay alternativa a los conocimientos bsicos de I redes.

Rutas
Si bien ping simplemente nos informa de la respuesta de nuestro objetivo, traceroute (normalmente: /urs/sbintraceroute) nos indica la ruta que los paquetes de datos han seguida hasta la mquina de destino (ver Figura 4). Los asteriscos (***) indican un error en la ruta o que un cortafuegos no ha permitido el paso a este tipo de paquetes IP. Por cierto, podemos especificar la opcin -n con el fin de no mostrar el nombre de equipo. mtr hostdestino (normalmente: /urs/ sbin/mtr) nos proporciona una imagen clara (ver Figura 5) de por dnde pasan nuestros paquetes mientras no presionamos [q]. La herramienta descubre que ocurre con los paquetes de datos en cada cambio en la ruta. Por tanto, mtr puede ser considerado como una combinacin de ping y traceroute.
mtr -c 10 -reportU <I>hostdestino<I>

Indica a mtr que deje de transmitir tras 10 pings y luego informe de sus hallazgos. La columna HOST indica exactamente donde esta el paquete de datos; LOSS indica el porcentaje de paquetes perdidos; RCVD y SENT informan del nmero de paquetes que fueron recibidos y enviados; y las columnas BEST, AVG y WORST indican cuanto tiempo tardaron los paquetes.

Podemos ver que 192.168.1.245 ha enviado un paquete de datos ssh a la mquina 192.168.1.20. Escribe
tcpdump -i eth0 port 80

y nos mostrar los datos del puerto 80, que es el que la mayora de los buscadores Web usan. Por otro lado, tcpdump nombrehost nos mostrar el trfico de red del host destino.

RECURSOS
[1] tcpdump: http://www.tcpdump.org/

www.linuxmagazine.com.es

Nmero 01

15

PORTADA

DHCP

Un servidor DHCP para una red de rea local

Redes sin Estrs


Aadir mquinas a una red implica un trabajo extra de configuracin. Una solucin centralizada que use un servidor DHCP para asignar las direcciones IP y otros parmetros a las mquinas clientes nos quitar un motn de dolores de cabeza a la hora de administrarlas.
POR MICHAEL RENNER

o importa si se est trabajando diario se encuentran con problemas de nombres, usar diferentes mscaras de para una empresa, si se est cuando el nmero de mquinas conecred o incluso asignar una direccin IP organizando una party en el tadas a la red crece de forma continua. diferente al router para acceder a redes campus, si se est montando una red en Cada IP slo puede ser asignada a una pblicas), implicar reconfigurar de un complejo turstico o simplemente te mquina para evitar conflictos en la red. forma manual cada mquina. estas montando una red en tu propia Incluso suponiendo que se mantenga Los usuarios de ordenadores porttiles casa, configurar de forma individual cuidadosamente las asignaciones IP (y tambin tienen que saber cmo y dnde cada mquina de la red implica trabajo uno sepa donde est la lista), si se quiere realizar los cambios oportunos para extra. Desde luego, un administrador de reestructurar la red (aadir un servidor conectarse a la red. Para ser honestos: sistemas puede asignar direcSabes cmo configurar los ciones IP, mscaras de red, parmetros de red en un Listado 1: Un simple, pero completo puerta de enlace por defecto y MacOS 7.6? y quieres admitir dhcpd.conf el nombre del servidor. Pero que sabes como configurar la 01 default-lease-time 3600; intenta hacer esto mismo con red en Windows 98? El Proto02 max-lease-time 14400; un grupo de gente con distincolo de Configuracin 03 tos niveles de conocimiento y Dinmico de Hosts (DHCP) 04 subnet 192.168.2.0 netmask 255.255.255.0 { empezarn a surgir los problenos proporciona la respuesta. 05 range 192.168.2.50 192.168.2.69; mas. Para usar DHCP se necesita 06 option domain-name-servers 194.25.2.129; Incluso los administradores configurar una mquina como 07 option broadcast-address 192.168.2.255; de redes ms experimentados servidor DHCP. Una vez hecho 08 option routers 192.168.2.1; y que llevan aos adminisesto, esta mquina ser la 09 } trando redes en su trabajo responsable de establecer los

GLOSARIO
Direccin IP: Cada mquina de red se identifica con una nica direccin IP de 32 bits. Para que sea legible se usa la notacin punto decimal, donde cada segmento de la direccin es un nmero entre 0 y 255. Adems de la direccin IP oficial que asegura un acceso global, hay un rango de direcciones que se han reservado para su uso en redes privadas. Mscara de red: La mscara de red se usa para definir los lmites de segmento las subredes dentro de una red ms amplia . Las mquinas usan mscaras de bits para averiguar a qu subred pertenece a partir de la direccin IP. En el cuadro 1 se muestra un ejemplo.

16

Nmero 01

www.linuxmagazine.com.es

DHCP

PORTADA

parmetros de configuracin de la red de las dems mquinas que tengamos conectadas dentro de nuestra red. Adems de los parmetros tradicionales, se puede hacer que el servidor de DHCP establezca parmetros especficos para nuestra red de rea local, por ejemplo, estableciendo un servidor de fecha/hora o incluso el nombre de un servidor WINS.

de DHCP ISC, dhcpd como hace casi todo el mundo. Si realmente deseas compilar el cdigo tu mismo, el cdigo fuente est disponible en [1]. La mayora de la gente se conforma con instalar el paquete de la distribucin. Los usuarios de Debian pueden teclear algo como lo siguiente:
apt-get install dhcp

Los usuarios de otras distribuciones encontrarn el paquete RPM apropiado en el CD o Cmo aplicamos esto en un Figura 1: A partir de la MAC se puede trazar un mapa de direcciones MAC de DVD de su distribucin. Si no caso real? Veamos una fabricantes de tarjeta. es as, se puede una bsqueda pequea red privada. En este en http://rpmfind.net/ con el caso privada significa que y un solo servidor trmino debera devolver paquets para la red usa un rango de direcciones IP priLa mquina que asignar las IPs necesita nuestra distro o una independiente de vado. Para evitar confusiones, estas , como es lgico, un programa servidor plataforma DHCP. direcciones funcionan en nuestra red DHCP. Por desgracia, no existen demasiPara continuar con la instalacin, buslocal pero no en Internet. adas implementaciones gratuitas de este caremso en nuestras mquinas el Las redes privadas realmente grandes tipo de servidor, por tanto, para ilustrar archivo de configuracin dhcpd.conf en (las denominadas de clase A) tienen raneste artculo, optaremos por el servidor el directorio /etc/. El archivo est bien gos de IP asignados que van desde la 10.0.0.0 hasta la 10.255.255.255. Para redes de tamao medio se usan las de Tabla 1: Configuracin dhcpd Entrada Parmetro Significado clase B cuyo rango para redes privada default-lease-time Tiempo en segundos Especifica el periodo vlido de los valores asignados. El cliente tiene van desde la 172.16.0.0 hasta la que volver a solicitar la direccin IP dentro de este periodo. Si no lo 172.31.255.255. Pero si la red es algo hace, la direccin puede ser asignada a otra mquina. ms modesta entonces podremos utilizar max-lease-time Tiempo en segundos Especifica el mximo valor del periodo de asignacin. Si el cliente las 65023 direcciones disponibles entre solicita un tiempo excesivo,este parmetro establece el mximo 192.168.0.0 hasta la 192.168.255.255. valor. Para las pequeas empresas y los subnet Direccin de red Segmento de red al que aplicar la configuracin (Vase el Cuadro 1) usuarios domsticos, las redes de clase C netmask Mscara de red Mscara para este segmento de red (Vase el Cuadro 1) se ajustan de forma adecuada. Voy a range Mxima y mnima El rango de direcciones IP a asignar por el servidor DHCP. direccin IP usar las direcciones que tengo en mi fixed-address Direccin IP o nombre de host Una direccin de red para ser asignada de forma permanente. casa para este ejemplo. Tengo asignada filename Nombre de archivo Imagen de boot para un cliente especfico (Vase la seccin la direccin 192.168.2.0 a la red (esto es Tcnicas avanzadas de DHCP). til si se pretende montar una red con hardware ethernet Direccin MAC Direccin hardware del cliente. los vecinos).

Muchas mquinas

GLOSARIO
Servidor de nombres: Un servidor de nombres de dominio proporciona la traduccin de los nombres de hosts simblicos (por ejemplo linux-magazine.com) a una direccin ip (por ejemplo 62.245.157.219) y viceversa. DNS es un sistema de base de datos jerrquico distribuido que no requiere que cada servidor de nombres conozca cada nombre de host, sino que permite a una mquina consultar a otras mquinas. Puerta de enlace por defecto: Es un router en una red local al que se le envan los paquetes cuyo destino no tiene una direccin de red local. Servidor de Fecha/Hora: Proporciona la fecha y hora correctas en una red. El tiempo oficial en el Reino Unido es medido desde la lnea del meridiano de Greenwich. En Espaa, se pueden utilizar los servidores hora.oxixares.com y slug.ctv.es. Adems de estas fuentes, hay un gran nmero de servidores de fecha/hora, ms o menos precisos, en la Web. WINS: Es el Servidor de Nombres de Internet de Windows, que relaciona los nombres NetBIOS de las mquinas con sus direcciones IP. Un servidor WINS es un servidor de nombres de propsito especial. Si se tiene un gran nmero de mquinas Windows en la red, el servidor WINS puede impedir que se produzcan broadcasts no previstos. El proyecto Samba proporciona soporte para WINS. Broadcast: El broadcast se usa para alcanzar mltiples hosts sin necesidad de saber nada de ellos. Una broadcast ahorra ancho de banda en el caso de necesitar comunicar con un gran nmero de mquinas, pero tpicamente, este tipo de transmisin produce sobrecarga en la red y debe ser evitado.

www.linuxmagazine.com.es

Nmero 01

17

PORTADA

DHCP

documentado, as que, siguiendo las instrucciones proporcionadas por el mismo programa, deberamos ser capaces de modificar los valores de los prximos ejemplos de manera que reflejen nuestro propio entorno. Conviene tomarse un rato para pensar en el nmero de mquinas que necesitamos mantener al mismo tiempo en la red. Si estamos organizando una party, un centro de asistencia tcnica al cliente, o similar, ser un nmero bastante grande. Para una red domstica tpica tendremos menos de diez mquinas. El ejemplo en el Listado 1 es para un red considerada pequea, ya que supone que no ms de 20 mquinas van a estar conectadas a la red al mismo tiempo.

Queremos que el servidor dhcpd asigne IPs en el rango 192.168.2.50 hasta 192.168.2.60. Tambin vamos a hacer uso de un domain-name-server para establecer un servidor de nombres y routers para especificar la puerta de enlace. Si no se tiene un servidor de nombres en la red, usaremos el proporcionado por el proveedor de Internet (ISP). Fijmonos en las llaves que encierran la definicin del segmento de red. Cada entrada en el archivo de configuracin debe terminar con un punto y coma.

El resto de las entradas son usadas por el servidor dhcpd para su propio uso interno. Vase la Tabla 1.

Asignaciones permanentes
Si se desea usar DHCP en la red, suele haber siempre unas cuantas mquinas que necesitan una IP esttica. Despus de todo, no tiene sentido tener que adivinar la direccin del router o del servidor multimedia para poder acceder a l. El archivo /etc/dhcpd.conf se usa para las asignaciones de las mquinas clientes. dhcpd evala la direccin MAC, que es nica, para ser capaz de identificar y asignar las direcciones correctas a cada mquina que la solicite. La direccin MAC est impresa en los adaptadores de red PCMCIA y en los conectores USB Wireless. Si no se es capaz de leer la etiqueta del NIC, se puede consultar la direccin MAC con ifconfig para los sistemas operativos basados en UNIX o ipconfig para los de Microsoft. El listado 2 muestra un ejemplo de una mquina Linux cuya

Libremente configurable
De forma genrica, podemos decir, que existen dos clases de entradas en el archivo de configuracin: las que empiezan por la palabra clave option y el resto. Las opciones (ver Tabla 2) son pasadas a las mquinas clientes desde el servidor DHCP. Si las mquinas clientes pueden o no utilizar esta informacin, depender del sistema operativo que se tenga instalado. Los administradores podran querer definir scripts donde esta informacin sea procesada.

Direccin IP, mscara de red y direccin de red.


aAdems de la direccin IP, la configuracin de un dispositivo de red consta de la direccin de broadcast y de la mscara de red. La mscara de red se usa para subdividir la red en subredes ms pequeas. Para comprender la relacin entre la direccin IP y la mscara de red, se necesita inspeccionar los bits a bajo nivel. Para ello, se toman cada uno de los nmeros decimales que aparecen entre los puntos y se escriben en su representacin binaria equivalente: 255=1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+ 1*2^1+1*2^0 As pues, la mscara 255.255.255.0 en formato punto decimal se convierte en la mscara de red en binario: 11111111.11111111.11111111.00000000 Desde luego, esto no representa mucha complejidad matemtica, ya que se pueden pasar los nmeros de una base a otra fcilmente. Los 24 unos son interesantes, la red es referenciada como /24 (barra 24). Aplicando la misma tcnica, podemos ver que la direccin IP 192.168.2.3 equivale a: 11000000.10101000.00000010.00000011 La direccin de red es el resultado de aplicar la operacin AND a nivel de bits entre la direccin IP y la mscara de red. Esta operacin deja un 1 si la IP y la mscara son 1: 11000000.10101000.00000010.00000000 La direccin de red en formato punto decimal es 192.168.2.0 Como la direccin IP cero est reservada para la propia red y hay otra direccin reservada para broadcast ( tpicamente .255), la red del ejemplo puede albergar hasta 254 mquinas.

Listado 2: Usando ifconfig para descubrir la direccin MAC


01 renner@lyra:~$ /sbin/ifconfig eth0 02 eth0 Link encap:Ethernet HWaddr 00:02:2D:34:90:85 03 inet addr:10.32.130.79 Bcast:10.32.135.255 Mask:255.255.248.0 04 UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 05 RX packets:15695 errors:0 dropped:0 overruns:0 frame:0 06 TX packets:10988 errors:204 dropped:0 overruns:0 carrier:0 07 collisions:0 txqueuelen:100 08 RX bytes:5201433 (4.9 MiB) TX bytes:1559490 (1.4 MiB) 09 Interrupt:10 Base address:0x100

Tabla 2: Valores Clientes


Entrada (sin option) routers domain-name-servers host-name ntp-servers netbios-node-type Parametro IP o nombre de host Nombre de host IP o nombre de host 1,2,4,or 8 (recomendado) Significado Router o puerta de enlace para acceder a Internet. Nombre del host cliente. Servidor de tiempo para sincronizar el tiempo. Resolucin de nombres de Windows. 1 significa broadcast,2 unicast, 4 modo mixto (primero broadcast, luego intenta unicast) y 8 modo hbrido,primero unicast antes de intentar broadcast. Servidor WINS para la resolucin de nombres de Internet de Windows. Nombre del dominio de la red. Nombre del dominio NIS. Servidor NIS. Mscara de red del segmento de la red. IP o nombre de host Servidor de Nombre de Dominio.

netbios-name-servers domain-name nis-domain nis-servers subnet-mask

Nombre de host Nombre de dominio Nombre de dominio IP o nombre de host Mscara de red

18

Nmero 01

www.linuxmagazine.com.es

DHCP

PORTADA

Figura 2: Habilitando el cliente de DCHP en Mandrake.

Figura 3: MacOS X soporta DHCP.

direccin MAC o de hardware es 00:02:2D:34:90:85. Suponiendo que el servidor DHCP ha asignado a esa mquina una direccin IP arbitraria; dhcpd mantiene un registro de direcciones asignadas y periodos de asignacin en /var/lib/dhcp/dhcpd.leases. Otra opcin sera hacer un ping a todos los hosts de la red para provocar una respuesta de los mismos. Una vez realizado, con el comando arp -a se puede averiguar los hosts y sus direcciones MAC (Ver listado 3). Primero hay que hacer ping, ya que la tabla arp est formada por todas las direcciones MAC de todos los hosts conocidos dentro de la red, incluyendo slo las direcciones de aquellas mquinas que se han comunicado recientemente con su ordenador.

tratando de buscar. En algunos casos puede ser til referirse a una base de datos especial [2] que relacione las direcciones MAC asignadas a cada fabricante de tarjetas de red (ver Figura 1), cosa que acelera la identificacin. Despus de descubrir la direccin hardware, se puede aadir la direccin

IP esttica que la relacione en el archivo de configuracin dhcpd:


host lyraA{ hardware ethernetU 00:02:2D:34:90:85; fixed-address lyra.mtr.mynet; }

Listado 3: Usando ping y arp para descubrir la direccin MAC


01 02 03 04 05 06 07 08 09 10 11 12 renner@lyra:~$ ping -c3 192.168.2.0 PING 192.168.2.0 (192.168.2.0): 56 data bytes 64 bytes from 192.168.2.1: icmp_seq=0 ttl=64 time=0.2 ms 64 bytes from 192.168.2.52: icmp_seq=0 ttl=64 time=3.5 ms (DUP!) 64 bytes from 192.168.2.53: icmp_seq=0 ttl=64 time=4.2 ms (DUP!) 64 bytes from 192.168.2.62: icmp_seq=0 ttl=64 time=4.7 ms (DUP!) [...] renner@lyra:~$ /usr/sbin/arp -a ? (192.168.2.1) at 00:03:E3:00:18:F1 [ether] on eth0 ? (192.168.2.52) at 00:30:05:55:02:ED [ether] on eth0 ? (192.168.2.53) at 00:0C:6E:1F:32:C4 [ether] on eth0 ? (192.168.2.62) at 00:30:05:55:03:7F [ether] on eth0

Pero, Qu direccin MAC elegimos?


Sin embargo, an se necesita averiguar que direccin MAC es la que estamos

GLOSARIO
Unicast: Cada cliente recibe una copia de un fichero de un servidor. Las conexiones punto a punto de este tipo son fciles de configurar, pero producen una gran carga en el servidor si hay un gran nmero de clientes en la red. NIS: Es el Servicio de Informacin de la Red, que proporciona la distribucin de las configuraciones en la misma. Un servidor NIS central suministra informacin sobre los nombres de usuarios, las contraseas, los directorios home, las asignaciones a grupos y los nombres de hosts. El servidor NIS completa las entradas en los ficheros de configuracin en las mquinas clientes, por ejemplo, /etc/passwd, /etc/groups o /etc/hosts. Un archivo llamado /etc/nsswitch.conf especifica si el servidor NIS debe suministrar informacin para los archivos de configuracin y, si es as, que clase de informacin. Un servidor DHCP proporciona detalles del servidor NIS de la red local. Direccin MAC: O Control de Acceso al Medio, o de manera ms simple, la direccin Ethernet, es un nmero hexadecimal de seis bytes. La direccin MAC est grabada dentro de cada dispositivo Ethernet y permite que el dispositivo pueda ser identificado de forma unvoca. Imagen Boot: Es un kernel de Linux o Unix que puede ser descargado de la red y ejecutado. Se usa en sitios donde las mquinas no tienen discos y que montan el directorio raz del sistema (/) a travs de la red. Las imgenes de boot en la red permiten instalar grandes nmeros de ordenadores sin la necesidad de usar CDs, floppies,

www.linuxmagazine.com.es

Nmero 01

19

PORTADA

DHCP

Listado 4: Asignacin de una imagen de Boot


01 host indy { 02 filename "indy_r4k_tftpboot.img"; 03 hardware ethernet 08:00:69:08:58:40; 04 fixed-address 192.168.2.12; 05 server-name "cassiopeia.mtr.mynet"; 06 option host-name "indy"; 07 option domain-name "mtr.mynet"; 08 option domain-name-servers 192.168.2.53; 09 option routers 192.168.2.1; 10 }

tftp dgram udpU wait nobody /usr/sbin/tcpdU /usr/sbin/ in.tftpd /boot

Conclusin
No hay una gran seleccin de programas clientes de DHCP en Linux. Uno de ellos es pump, que es muy popular dentro de las mini-distribuciones debido al poco tamao que ocupa. Las alternativas, que ocupan ms espacio, son dhcp-client y dhcpcd. Sin embargo, apesar de pesar ms, tienen ms funcionalidades, como la habilidad de ejecutar scripts despus de completar la configuracin. Existe un problema de compatibilidad entre los paquetes antiguos de dhcp y el kernel 2.6. Esta combinacin funcionar, pero el script /sbin/dhclient comprobar la versin del kernel para dhcp-client. Sin embargo, como no reconoce el kernel 2.6, en este punto se parar. Como DHCP slo necesita distinguir entre el kernel 2.0 o posterior, se puede fcilmente modificar el script para que reconozca la versin 2.6 como un kernel vlido:
2.[123456].*) exec /sbin/dhclient-2.2.xU -q "$@" ;;

Si la mquina tiene mltiples NICs (p.e.: una mquina con una tarjeta LAN Wireless adicional), se le puede asignar el mismo nombre de host a ambas direcciones MAC:
host lyraB{ hardware ethernetU 00:80:C7:C1:3D:76; fixed-address lyra.mtr.mynet; }

En algunos casos, incluso se puede intercambiar las NIC mientras la mquina est funcionando sin interrumpir una conexin existente. En vez de un nombre de host, que requiere para funcionar la capacidad de resolver nombres, se puede asignar una direccin IP.

Las distribuciones que usan el sistema moderno xinetd, en vez del superservidor inetd, deberan tener en /etc/ xinetd.d/tftp un archivo como el mostrado en el Listado 5. Un nico servidor DHCP puede mantener mltiples segmentos de redes al mismo tiempo. Para permitir esto, hay que crear mltiples subredes en la configuracin. Las opciones encerradas entre llaves, tales como los detalles del nombre del servidor o el dominio NIS, deben ser nicos. En la prctica, cada segmento de la red est tpicamente asociado a uno de las NIC del servidor DHCP Para que se reconozcan los cambios, dhcpd debe ser reiniciado. Como los cambios de este tipo slo ocurren ocasionalmente, los administradores se pueden tumbar y relajar cuando se conecte una nueva mquina a la red.

Tcnicas avanzadas de DHCP


DHCP es capaz de mucho ms! DHCP puede comunicarle a un cliente sin disco duro que se baje el sistema operativo de la red a partir de una imagen boot. Esto se logra usando TFTP (Protocolo de Transferencia de Ficheros Trivial), un subconjunto de FTP, para transferir la informacin por la red. El listado 4 muestra un ejemplo donde a una estacin de trabajo Indy SGI se le asigna su kernel Linux va DHCP. Este procedimiento de boot no slo se usa en grandes clusters, para la resolucin de clculos matemticos complejos, por ejemplo, sino tambin en universidades e institutos. Esto slo funciona si el servidor tftpd est activado en /etc/inetd.conf. Para permitir al servidor encontrar la imagen de boot adecuada (indy_r4k_tftpboot. img, en nuestro ejemplo), se necesita pasar el directorio con los archivos (tal como /boot) al servidor:

El Cliente
Las mquinas recin llegadas no necesitan mucha configuracin. En vez de ponerles una IP esttica, se le habilita DHCP. Dependiendo del sistema operativo (y posiblemente tambin de la distribucin), esta tarea se puede hacer de varias maneras. Si tenemos Debian, se aade una lnea como la siguiente:
iface eth0 inet dhcp

La solucin es bien sencilla. Editamos el script y tan slo se necesita aadir un 6 en el lugar adecuado y enseguida debera estar todo arreglado y funcioI nando sin ningn problema.

Listado 5: El archivo /etc/xinetd.d/tftp


01 # default: off 02 03 service tftp 04 { 05 disable = no 06 socket_type = dgram 07 protocol = udp 08 wait = yes 09 user = root 10 server = /usr/sbin/in.tftpd 11 server_args = -s /boot 12 }

al fichero /etc/network/interfaces. Otras distribuciones tienen herramientas de configuracin en formato grfico. Mandrake usa el asistente que se muestra en la figura 2. Los usuarios de Windows tienen que acceder al icono Red del Panel de Control. Los que usen el clsico MacOS necesitan acceder al Panel de Control / TCP/IP en el men Apple. MacOS X (ver Figura 3) activa DHCP en Preferencias del Sistema / Internet y Redes.

INFO
[1] Servidor DHCP: http://www.isc.org/ index.pl?/sw/dhcp/ [2] Base de datos MAC: http://www.coffer. com/mac_find/

20

Nmero 01

www.linuxmagazine.com.es

Especial Redes

PORTADA

Modificacin de la configuracin del sistema con SCPM

Cambio de entorno
La modificacin de la configuracin del sistema operativo de una sola mquina implica bastante trabajo. SCPM hace esto ms fcil a los usuarios de Suse manteniendo perfiles con distintas configuraciones.
POR FALKO ZURREL

inux est invadiendo el mundo de los porttiles. Los equipos porttiles son especialmente propensos a los cambios de entorno. Normalmente se conecta el porttil con un cable a la red o se usa una WLAN de vez en cuando. Otras veces el porttil no se conecta a nada. Aunque en la oficina se conecte el porttil a una pantalla externa, en casa probablemente se use la propia pantalla del porttil. Suse Linux viene con SCPM, el gestor de perfiles del sistema, para ayudar al equipo a adaptarse a estos cambios.

Ajuste de los Perfiles


SCPM guarda una coleccin completa de configuraciones (conocidos como perfiles) del sistema para distintos entornos, permitiendo restaurarlas cuando sean necesarios. Los perfiles no slo almacenan los ficheros de configuracin, tambin almacenan informacin adicional, tales como si los servicios especficos estn activos o no. Esto hace posible realizar todos los cambios

requeridos para adaptarlos a diferentes entornos con un solo comando. Como alternativa, slo se tiene que seleccionar un perfil al arrancar. El mdulo gestor de perfiles YaST (con interfaz grfica), que est localizado en el grupo System, ayuda a configurar SCPM (ver Figura 1), pero tambin se puede usar el gestor de perfiles yast2 para lanzar la herramienta directamente. Los perfiles existentes se muestran en la ventana principal del gestor de perfiles. Se puede aadir un nuevo perfil o modificar la configuracin de uno existente. El botn de Options permite cambiar o crear grupos (ver Figura 2). La configuracin actual se usa como una plantilla cuando se crea un nuevo perfil. SCPM crea un directorio con el nuevo perfil en /var/lib/scpm/profiles/ y copia los ficheros de configuracin para los grupos indicados en este directorio.

Grupos
Los administradores pueden usar los grupos para especificar servicios que

sern aplicados por el perfil. Por ejemplo, SCPM slo guardar la configuracin de la impresora si pertenece al grupo impresora. Si no se marca este recurso, la impresora no se ver afectada por un cambio en el perfil, sino simplemente mantendr la configuracin actual. Cuando se instala SCPM se crean unos cuantos grupos de recursos predefinidos. Estos grupos cubren la mayora de las configuraciones e incluyen configuraciones bsicas de red (network), el servicio NTP para la sincronizacin de fecha y hora a travs de Internet (ntpd), el cortafuegos (SuSEFirewall2), el montador automtico autofs, que montar los discos de forma automtica. Si esta seleccin no es del gusto del usuario, se pueden definir nuevos grupos. Desafortunadamente, la pantalla de informacin en la ventana principal del mdulo YaST no es de fiar. Insiste en que el gestor de perfiles est deshabilitado, independientemente de su estado actual. Si se activa el perfil no debe causar

Tabla 1: Comandos SCPM


Activar SCPM Crear un nuevo perfil Cambiar a otro perfil Guardar los cambios en el perfil activo Copiar un perfil Mostrar el perfil activo Mostrar los perfiles disponibles Recargar la configuracin del perfil actual scpm enable scpm add nombre_perfil scpm switch nombre_perfil scpm save scpm copy perfil_fuente perfil_destino scpm active scpm list scpm reload

Listado 1 Acceso a la base de datos SCPM y creacin de un recurso nuevo


01 02 03 04 05 06 #scpm db SCDB Utility (SCPM version 0.9.4) > load > create resource /opt/tomcat/conf/server.xml file > save > quit

www.linuxmagazine.com.es

Nmero 01

21

PORTADA

Especial Redes

Figura 1: YaST2 ayuda a configurar SCPM.

Figura 2: Mdulo SCPM de YaST2 - configuracin.

ningn dao ya que SCPM no sobrescribe ninguna base de datos existente ni ningn perfil. A no ser que se le indique explcitamente con una sobrescritura en la lnea de comandos. No hay ms o menos lmite para expandir las capacidades del gestor de perfiles, se le puede indicar al SCPM que lance scripts con un pre-arranque y un post-arranque o una pre-parada y postparada cuando se cargue o descargue un perfil (ver Figura 3). Cuando se selecciona un perfil diferente, SCPM primero ejecuta los dos scripts de parada y avisa en caso de cambios no salvados. Acto seguido lanza los scripts de pre-arranque, recuperando los ficheros de configuracin del nuevo perfil y los aplica al sistema. SCPM comprueba si el servicio se est ejecutando y se asegura de que se haya aplicado el estado indicado. El ltimo paso del proceso es llamar al script postparada. Si se especifica un perfil cuando se arranque la mquina, se puede poner el parmetro PROFILE= profile_name en el men de inicio que llama Suse para lanzarlo con la configuracin requerida. El script /etc/init.d/boot.scpm se asegura de que esto funcione. Si se cambia regularmente el perfil al arrancar, se aadirn unas cuantas entradas con parmetros del kernel preconfigurados a la configuracin del cargador (YaST2: System / Bootloader Configuration). Para hacer esto, se aade una nueva seccin con la configuracin por defecto del kernel y simplemente se cambia el parmetro PROFILE para car-

gar el perfil que se quiera la prxima vez que se arranque.

Configuracin desde la lnea de comandos

Aunque YaST2 hace el trabajo de configurar SCPM, arrancar continuamente YaST para cambiar el perfil es un engorro. La lnea de comandos proporciona otra alternativa. Se debe estar seguro de tener privilegios de root - ya que, se va a modificar la configuracin del sistema - y usar unos cuantos comandos para acelerar esta tarea. La Tabla 1 proporciona una lista de los comandos ms comunes. Por ejemplo, scpm switch ISDN activa el perfil llamado ISDN. Los cambios slo pueden aplicarse al perfil actual, no importa si se usa YaST2 o la lnea de comandos, el efecto es el mismo. Para hacerlo as, primero se cambia la configuracin tal y como se hace habitualmente. Cuando se tenga todo funcionando al gusto de uno, simplemente se llama a scpm save para salvar los cambios. SCPM mostrar los cambios uno a uno y preguntar para confirmar antes de salvarlos en el perfil. Si se necesita cambiar los ficheros de configuracin que SCPM ignora debido a la configuracin, se puede realizar cambios manualmente en modo inFigura 3: Opciones de configuracin para los perfiles. teractivo con la base de

datos (ver Listado 1). El comando load es muy importante aqu, ya que carga la base de datos actual para editarla. Si se produce un fallo en la carga de la base de datos actual y se guarda la configuracin actual, la base de datos en uso ser sobrescrita con un fichero que contiene slo estos cambios. Aunque se sobrescriba la base de datos por error, SCPM guarda las tres ltimas versiones de la base de datos en el directorio /var/lib/scpm/scdb. La base de datos actual se denomina scbd.db, las copias de seguridad tienen unos cuantos caracteres aleatorios aadidos al nombre. Para realizar una copia de seguridad del perfil creado slo se necesita el fichero de la base de datos, scdb.db. Para almacenar todos los ficheros de configuracin a la vez, se necesita copiar el directorio /var/lib/scpm/profiles/ en un I lugar seguro.

22

Nmero 01

www.linuxmagazine.com.es

CUPS

PORTADA

Configuracin de un servidor de impresin CUPS

EL ABC de la Impresin
Compartir una impresora entre usuarios mltiples puede ahorrarnos dinero y recursos. Conectemos nuestras impresoras a un servidor de sistemas CUPS para dar acceso a usuarios de Apple e incluso de Microsoft.
BY TIM SCHRMANN

os ordenadores desfasados que han sido reemplazados por nuevos equipos son ideales como servidores de impresin en red. No slo se recicla as equipos considerados obsoletos, sino que un servidor de impresin no solo permite a mltiples usuarios compartir una impresora, si no que adems un ordenador dedicado a la impresin descarga parte del trabajo de nuestro equipo, permitindole procesar sus propias tareas a la velocidad mxima. En algunas redes domsticas, distintos usuarios enviaran trabajos a impresoras diferentes. Mientras el padre puede mandar una carta a la impresora lser los nios pueden estar mandando las fotos de su ltima fiesta de cumpleaos o imsgenes descargadas de Internet a la impresora de inyeccin. Esto no es muy diferente del escenario que vemos en algunas empresas donde los Sistemas Comunes Unix de Impresin (Common Unix Printing System CUPS) permiten el acceso a cualquier impresora de la red a clientes de Linux, Microsoft y Apple.

Primeros pasos
Dos pasos son necesarios para ejecutar CUPS en un red. Primero necesitamos configurar los ordenadores a los que las impresoras estn conectadas. Estas mquinas pueden ser equipos de sobremesa normales o servidores dedicados que no necesitan GUI. Las distros actuales instalarn CUPS habitualmente como parte de la configuracin original o proporcionarn herramientas de configuracin que podemos utilizar tras terminar la configuracin general. Este ltimo tipo normalmente configura CUPS para que se ejecute al iniciar el sistema. Si nuestro sistema no dispone de CUPS o queremos actualizar la versin podemos descargarnos el cdigo fuente desde la web de CUPS [1]. Antes de CUPS, las distribuciones solan trabajar con sistemas menos potentes como BSD o LPRng. Ambos son difciles de integrar en un entorno de red. Si tenemos una distribucin antigua deberamos considerar reemplazar el sistema de impresin antiguo por CUPS. La

documentacin de CUPS nos proporciona ms informacin al respecto. Ver [2]. No es necesario modificar nuestras aplicaciones para usar CUPS. Nuestros programas interactuaran con CUPS de forma natural (es el caso de aplicaciones KDE) o usaran lo que se ha dado en llamar comandos de impresin del sistema V o Berkley. Estas son las herramientas de la lnea de comandos lp y lpr. CUPS proporciona versiones compatibles de estos programas. Estos comandos simples son tiles si necesitamos enviar un archivo a un servidor remoto usando slo la lnea de comandos. El manual de usuario del software CUPS [2] proporciona detalles al respecto de estos comandos.

Configuracin basada en Navegadores.


Al contrario que los antiguos sistemas LPRng, CUPS est perfectamente adaptado a las redes al estar basado en el Protocolo de Impresin de Internet (Internet

www.linuxmagazine.com.es

Nmero 01

23

PORTADA

CUPS

Figura 1: La anotacin Allow permite al ordenador con la direccin IP 192.168.0.16 acceder la web remotamente.

Figura 2: La pgina de bienvenida del interfaz web del demonio CUPS. Suponemos que la configuracin de privilegios de accesos correcta.

Printing Protocol, IPP [3]). IPP es una extensin del Protocolo de Transporte de Hiper - Texto (Hyptertext Transport Protocol, HTTP), usado para transferir pginas Web a travs de Internet. Un ordenador, conocido como cliente en el lenguaje CUPS, enva datos de impresin al servidor CUPS. El demonio cupsd, que se est ejecutando en segundo plano, acepta los datos y realiza algunos procesos adicionales antes de enviar los datos a la salida de la impresora. En otras palabras, cupsd es el ncleo del sistema CUPS. Podemos acceder al demonio a travs de nuestro navegador web escribiendo http:// localhost:631. Simplemente debemos reemplazar localhost en esta URL

con el nombre del anfitrin de nuestro ordenador CUPS. localhost se reserva para la mquina local. CUPS no permite el acceso externo a la configuracin por defecto, por lo que debemos lanzar el navegador localmente en el sistema que estemos configurando. Si deseamos permitir el acceso externo debemos editar el archivo de configuracin /etc/cups/ cupsd.conf. Buscaremos secciones que empiecen por <Location /...> y finalicen por</Location> (ver figura 1). Las etiquetas de localizacin contienen detalles respecto a como CUPS debe controlar el acceso a varias secciones. <Location /> se refiere al men principal y <Location /admin> al objeto Administration. Aadiendo Allow

From 192.168.0.16 permitimos al ordenador con direccin ip 192.168.0.16 acceder al interfaz. Por motivos de seguridad no se recomienda permitir el acceso con contraseas en blanco. La FAQ de CUPS [4] proporciona una visin general sobre los privilegios de acceso. El interfaz Web permite a los usuarios configurar y gestionar CUPS (ver Figura 2). Tambin podemos ver los trabajos de la cola de impresin y administrarlos, cancelndolos, parndolos y rearrancndolos, si tenemos los permisos necesarios. El comando lpstat nos proporciona algunas funcionalidades. Si nuestra distribucin tiene un programa de configuracin para establecer impresoras es preferible usar este programa. Por ejem-

LAS CARTA BOCA ARRIBA


Imprimir parece una tarea simple cuando pensamos en ello. Un usuario selecciona Print en el men y el programa enva los datos a la impresora, la cual crea una pila de papel con los resultados. Sin embargo, imprimir no es tan trivial como suena. El primer problema es el hecho de que el ordenador se puede bloquear mientras el trabajo de impresin se esta procesando. La mayora de las impresoras no tienen suficiente memoria para cargar un documento completo. Para evitar este problema, el sistema de impresin usa un programa diferente, llamado spooler, que proporciona espacio de una forma llamada cola de impresin. El spooler monitoriza la impresora y pasa al siguiente trabajo en el momento en que la impresora est lista. En un sistema CUPS, cupsd, el demonio CUPS (tambin conocido como planificador) se ocupa de esto. El demonio normalmente se ejecuta al iniciar la mquina y permanece en segundo plano esperando nuevos trabajos. Otro problema es el inmenso nmero de modelos de impresoras. Cada impresora usa secuencias de control diferentes, es decir, hablan distintos lenguajes. Una aplicacin que desee imprimir un documento debe formatearlo de modo que la impresora lo entienda. Desafortunadamente, para hacer esto el programa debera hablar el mismo lenguaje que todas las impresoras existentes. Como esto no es realista, los filtros sirven de traductores entre el spooler y las impresoras. Estas herramientas traducen los datos de entrada al lenguaje de la impresora antes de que el trabajo sea impreso. En otras palabras, las aplicaciones producen datos en formato estndar y envan el resultado al spooler. Lunix usa el formato PostScript. Adobe [6] desarroll PostScript como un lenguaje especial de programacin para grficos. Las impresoras compatibles con PostScript pueden interpretar estos datos directamente y no necesitan un filtro especfico. Los programadores de Cdigo Abierto (Open Surce) inventaron GhosScript, un programa que permite a las aplicaciones reproducir el formato PostScript en impresoras no compatibles con l. GhostScript usa un controlador de impresin para convertir documentos PostScript al lenguaje objetivo para la impresora. Cuando se enfrenta con una impresora que no es capaz de interpretar PostScript, el spooler CUPS simplemente llama a GhostScript, que convierte los datos segn necesidad. Back-ends son el ultimo eslabn de la cadena. Un back-end representa un puerto como un puerto USB o paralelo. La definicin de back-end nos permite aadir nuevos tipos de interfaces que actualmente no existen.

24

Nmero 01

www.linuxmagazine.com.es

CUPS

PORTADA

Figura 3: La entrada de la configuracin CUPS del centro de control KDE. Pulsaremos el espacio libre para mostrar ms opciones tiles como funciones para reiniciar el demonio. Figura 4: El acceso Printers lista las colas de impresin que CUPS reconoce incluyendo sus URIs (dispositivos URI).

plo, Suse Linux tiene la herramienta YaST. Existe una alternativa basada en la lnea de comandos, lpadmin, que tiene pocas opciones adicionales a las mencionadas hasta ahora [2]. Si no nos gusta ninguna de estas opciones podemos optar por uno de los muchos programas de configuracin de terceros. Las versiones ms nuevas de KDE tienen componentes para estar tareas. Los encontraremos en el centro de control bajo Hardware|Printers (ver figura 3). Usaremos el interfaz Web en los siguientes ejemplos. El acceso Printers en el interfaz nos da acceso a la lista de la cola de impresin (figura 4). Cada cola tiene un nombre y especificaciones individuales. Podemos asignar mltiples colas a una impresora o inter-

faz. Al interfaz al que los documentos de una cola de impresin sern enviados se define por el Identificador de Recursos Uniformes (Uniform Resource Identifier, URI). La notacin tiene un aspecto similar al nombre de una pgina Web: parallel:/dev/lp0 por ejemplo para el primero puerto paralelo, o usb:/dev/usb/lp0 para el primer puerto USB. El comando lpinfo -v nos proporciona una lista de los interfaces disponibles. Volveremos al asunto de los URI ms tarde. Para crear una nueva cola de impresin seleccionaremos Administration en nuestro visor web y pulsaremos Add Printer. Entonces introduciremos su nombre en el apartado name. El nmero mximo de caracteres es de 127. La siguiente pantalla nos indica que debemos

seleccionar el interfaz al que nuestra impresora est conectada, el modelo de la impresora y, finalmente, el filtro GhostScript apropiado. Los siguientes pasos suponen que CUPS ha sido configurado correctamente en cualquier ordenador (servidor) al que ha sido conectado la impresora. Podemos imprimir una pgina de pruebas en la ventana del visualizador pulsando Printers|Print Test Page.

Configuracin del cliente


El segundo paso es configurar los equipos que compartirn nuestra impresora (los clientes). Hay numerosas formas de hacerlo, si bien hay un factor comn, el demonio CUPS cupsd, que necesita estar ejecutndose como una

Figura 5a: Configuracin de impresoras remotas en Suse Linux 8.2. Primero le decimos a YaST que queremos acceder a una impresora remota que usa IPP

Figura 5b: a continuacin introducimos el nombre del anfitrin y el recordatorio del URI para completar la configuracin.

www.linuxmagazine.com.es

Nmero 01

25

PORTADA

CUPS

para evitar ejecutar el CUPS. Cada ajuste ocupa una lnea y demonio CUPS en los esta compuesta de una palabra clave y clientes. Esto significa su valor. Debemos mirar en [2] para modificar el archivo de echar un vistazo a los valores. El archivo configuracin /etc/ contienen explicaciones cortas y ejempcups/client.conf. Buslos. camos la lnea que Si estamos configurando la retranscomienza con Servermisin necesitamos las lneas que Name. Puede que tengempiezan por Browse. El valor de Browamos que quitar la seInterval define el intervalo en segunalmohadilla (#). Escribidos en el que el servidor retransmitir mos un espacio y sus datos de configuracin. Por ejemplo, despus el nombre o, BrowseAddress 192.168.0.255 enva los Figura 6: Tras habilitar el transporte, solo el equipo con IP 192.168.0.20 mejor, la direccin IP datos a cualquier equipo en la subred necesitar un demonio de impresin. Todos los trabajos de impresin del servidor que proce192.168.0. sern enviados a esta mquina. sar los trabajos de Polling es una alternativa til a examiimpresin despus de la nar. En este caso el cliente recupera su palabra ServerName (ver figura 6). configuracin desde el servidor. Desde el tarea en segundo plano. Algunas La tercera forma es probablemente la lado del cliente el archivo cupsd.conf fija distribuciones slo ejecutan el demonio ms conveniente. Cada demonio CUPS el valor de la palabra clave BrowsePoll automticamente al iniciar el sistema retransmite a travs de la red su configudel nombre o direccin IP del servidor. si una impresora ha sido configurada racin. Los clientes que reciben la seal Disponemos de mltiples entradas de en la mquina. YaST en Suse Linux 9 pueden usar inmediatamente sus colas. BrowsePoll que permiten al cliente bustiene una opcin para configurar el serLa ventaja de este procedimiento es una car mltiples servidores. Si activamos vidor ms tarde. Para hacerlo, selecconfiguracin extremadamente sencilla. BrowseRelay, se indica al ordenador que cionamos Change|Advanced y luego Simplemente configuramos una nueva transmita cualquier informacin que CUPS Server. Si tenemos una distro impresora en la mquina a la que esta aprenda mediante polling a todos los cuya programa de configuracin no conectada para permitir que cualquier equipos de la subred. nos permite esto debemos escribir mquina en la red pueda acceder a ella. un archivo de comandos de inicio CUPS Reloaded Por supuesto la retransmisin no es el de CUPS y aadirlo los niveles de ejecumtodo ms seguro. Cualquier ordecin 3 y 5 en nuestro directorio Necesitamos reiniciar el demonio CUPS nador que reciba la seal puede acceder /etc/init.d/. tras cambiar el archivo cupsd.conf. El a la impresora. En el peor de los casos comando para hacer esto depende de Introduccin de la Impresora esto puede permitir a todo Internet nuestro distribucin. Los usuarios de imprimir en nuestra impresora. la naveSuse Linux pueden usar /etc/init.d/cups Necesitamos introducir los detalles de la gacin est activado en los paquetes de restart. Si usamos la herramienta YaST impresora en el cliente para permitirle CUPS antiguos, pero las nuevas verpara cambiar la configuracin tambin encontrar esa impresora en la red. Para siones no transmiten por defecto. se encarga de reiniciar el demonio. El hacer esto debemos lanzar el interfaz La herramienta de configuracin nos dialogo KDE Print dispondr de una lista Web como hemos descrito con anterioripermite definir las dad. Seleccionamos el Internet Printing opciones de la retransProtocol (IPP) como el dispositivo misin. De nuevo esto (Device). Despus introducimos la URI significa usar YaST en de la impresora remota, por ejemplo Suse Linux. El objeto ipp://myserver/printers/myprinter. Redel men que necesitaemplazaremos myserver con el nombre o mos est localizado en la direccin IP de nuestro servidor de Change/Advanced/ impresin y myprinter con el nombre de CUPS Server Settings nuestra cola de impresin. El programa (ver figura 7). Para conde configuracin proporcionado con la figurar un servidor para mayora de distribuciones tiene opciones retransmitir manualsimilares (las figuras 5a y 5b muestran mente debemos modiSuse Linux). Repetimos este proceso ficar el archivo de conpara cada cola de impresin externa. Es figuracin /etc/cups/ evidente que este procedimiento es farcupsd.conf. Las lneas ragoso si tenemos un gran nmero de que empiezan con el Figura 7: Habilitacin de examinar en Suses YaSt. En nuestro ejemplo, impresoras. Parece lgico configurar signo numrico (#) los detalles de la impresora conectada son retransmitidos a la subred CUPS de forma que use un servidor sern ignoradas por 192.168.0. remoto de impresin para cada trabajo

26

Nmero 01

www.linuxmagazine.com.es

CUPS

PORTADA

de impresoras desde este momento (ver figura 8). Si examinar parece no funcionar debemos comprobar la configuracin del host. Puede que necesitemos aadir /etc/hosts para que la retransmisin funcione.

Integracin de sistemas Apple y Microsoft


Podemos integrar cualquier sistema operativo que soporte IPP. Esto incluye la versin 10.2 o superior de MacOS X.c Si tenemos MasIS el prcedimiento que debemos seguir es comprobar Printer Sharing de la configuracin del sistema en Services. Esto nos mostrar las impresoras como Shared printers en el dilogo de impresin. Versiones de MacOS ms antiguas necesitan el paquete netatalk. Es un requisito indespensable el aadir una entrada para cada nueva impresora en el archivo de configuracin papd.conf. En [5] disponemos de ms detalles. Lo ms importante es asegurarnos de que tenemos el archivo PPD correcto desde /etc/cups/ppd para cada impresora:
Description:MyPrinter@MyServer:\ :pr=|/usr/bin/lp -d MyPrinter:\ :op=deamon:\ :pd=/etc/cups/ppd/MyPrinter.ppd:

En el caso de preferir el controlador de impresin original se hace necesario configurar una nueva cola de impresin en nuestro servidor CUPS. Seleccionamos el dispositivo raw como el modelo de impresin. Esto indica a CUPS que debe enviar los datos entrantes directamente al puerto de salida. Debemos saber que los ordenadores sin los controladores originales no sern capaces de generar resultados tiles en nuestra impresora. Los servidores Samba 2.2 o superior automticamente exportan el controlador apropiado cuando un cliente Windows intenta imprimir. De la forma que se usa en los siguientes ejemplos, cupsaddsmb solo puede soportar contro-

problema a impresoras compartidas por equipos que corren Windows de Microsoft. Nuestra distribucin debe configurar el back-end correctamente. Si no es as, haremos su para acceder a root e introduciremos el siguiente comando ln -s 'which smbspool' /usr/ lib/cups/backend/smb. Esto nos permite configurar la impresora como cualquier otra en el servidor CUPS. En lugar de una direccin del tipo ipp://... usaremos una entrada como smb://workgroup/ server/sharename. Si la impresora est conectada a un equipo con NT o Windows 9x con contraseas necesitaremos suministrarlas: smb://user:password@ workgroup/server/sharename.

Opciones para Expertos


Este articulo solo trata de cmo configurar CUPS en una red. El siguiente paso ser su configuracin para funciones de acceso y seguridad. Por ejemplo CUPS nos permite asignar cuotas y contraseas de impresin. Esto puede que no sea til en la red de nuestra casa a no ser que tengamos una cara impresora lser a color. Los administradores deben revisar con detenimiento la documentacin. La opcin del men Classes tambin nos proporciona opciones tiles. Un class es un grupo o categora de impresoras. Cuando un trabajo de impresin es enviado, CUPS imprime el trabajo en la primera impresora libre del grupo. De nuevo, un interfaz Web proporciona un simple mtodo de configurar grupos usando Classes. La documentacin proporcionada por nuestro distribuidor puede que contenga informacin til en la bsqueda de problemas. Si no es el caso encontraremos informacin detallada respecto a CUPS en [2]. Los archivos de protocolo dentro de /var/log/cups tambin pueden conI tener indicaciones tiles.

Figura 8: Tras completar la configuracin, el dialogo de impresin de KDE debe tener un a lista de las impresoras remotas y sus detalles.

Windows 2000/XP tambin dispone de soporte IPP. Cualquier otra versin necesita la versin 2.0.6 o superior de Samba. Debemos aadir las siguientes 2 lneas a la seccin [Global] del archivo de configuracin smb.conf: printing = cups y printcap name = cups. Las distribuciones actuales deben tener esta configuracin por defecto. Los clientes de Windows necesitan un controlador de impresora capaz de generar Post-Script como el Apple LaserWriter.

GLOSARIO
IPP El Protocolo de Impresin de Internet fue creado por el Grupo de Trabajo de Impresin. Si bien esta basado en HTTP 1.1, utiliza el puerto 631 en lugar del 80. De hecho, los 2 protocolos estn tan relacionados que las implementaciones IPP pueden ser accedidas de forma nativta a travs de HTTP. La URI de la impresora ser en este caso HTTP://servername:631/... en lugar de IPP:// servername/...

ladores Adobe [6] PostScript o controladores desde su propia pagina de inicio. Los controladores Adobe estn disponibles solo como archivos EXE. Primero necesitaremos ejecutar programas como Winzip para extraerlos a una mquina Windows. Debemos guardar los controladores en el directorio /usr/ share/cups/drivers. Los nombre de los archivos deben ser escritos en maysculas. Ahora debemos modificar la configuracin Samba para permitir al servidor de archivos exportar controladores de impresin. La documentacin de Samba proporciona informacin al respecto. cupsaddsmb -U root -a exportar nuestras impresoras. Estos llevar nuestros controladores al servidor Samba. Debemos saber que cupsaddsmb utiliza la cuenta de root para copiar los archivos con el programa smbclient. Debemos asegurarnos, por tanto, de que Samba permite el acceso a esta cuenta. Samba dispone de un nuevo back-end CUPS llamados smbspool que permite a equipos Linux acceder sin ningn tipo de

RECURSOS
[1] Proyecto CUPS: http://www.cups.org [2] Documentacin CUPS: http://localhost:631 [3] IPP: http://www.pwg.org/ipp/ [4] CUPS FAQ: http://www.danka.de/printpro/faq.html [5] Netatalk: http://netatalk.sourceforge.net [6] Adobe: http://www.adobe.com

www.linuxmagazine.com.es

Nmero 01

27

DESARROLLO

SDL

Creacin de un juego

Programacin con SDL


En este artculo, el primero de una serie, Steven Goodwin da un vistazo a SDL. Qu es, cmo funciona y, lo que es mucho ms importante, cmo usarlo para escribir un flamante juego, Explorer Dug.
POR STEVEN GOODWIN
DL significa Simple DirectMedia Layer y es una API multiplataforma para programar aplicaciones multimedia, como los juegos. Aporta una base estable sobre la que los programadores pueden trabajar, sin preocuparse de cmo se encargar el hardware de renderizarlo o incluso qu hardware lo ejecutar. SDL est disponible bajo la licencia LGPL (Licencia Pblica General Menor), y como tal no requiere que el cdigo fuente de la aplicacin que se base en ella sea publicado. Actualmente existen buenas implementaciones de SDL para Linux (i386, PPC, y PS2), BSD, Windows, Macintosh OS 9/X, Solaris, Irix y BeOS.
Figura 1: La pantalla de bienvenida

Gracias al hecho de que se utiliza el acceso directo (en vez de la emulacin) a los dispositivos del sistema, se puede lograr un gran nivel de rendimiento en todas las plataformas.

Excavad, Excavad, Malditos!


Hay cientos de juegos SDL disponibles en Internet y muchos de ellos estn disponibles con todo su cdigo fuente. Contribuiremos a esta coleccin con un pequeo juego de plataformas llamado Explorer Dug. Lo programaremos en C (ya que probablemente sea la forma en que se entender mejor), aunque se puede escribir aplicaciones SDL en muchos otros lenguajes, como PHP, Ruby, Perl, Java y LISP. Principalmente nos concentraremos en las caractersticas de SDL y cmo usarlas para producir un juego. Tambin destacaremos las reas del desarrollo del juego que requiere ms trabajo de nosotros los programadores De acuerdo? Bien! Comencemos

Acceso versus Emulacin


La API SDL est compuesta de cinco subsistemas distintos: vdeo, audio, CDROM, entrada de joystick y temporizadores. Cada uno apunta a un rea de desarrollo diferente y puede ser inicializada y usada independientemente de los dems. Adems, SDL fomenta el uso de libreras que puedan suministrar nuevas funcionalidades a la API bsica. Las dos libreras ms comunes son SDL_mixer (que proporciona un mejor manejo de audio) y SDL_Image, que proporciona soporte para una amplia seleccin de formatos de ficheros grficos, incluyendo, GIF, JPG, PNG y TGA. El sitio principal de SDL [1] lista 109 libreras diferentes, actualmente en produccin, suministrando un amplio

rango de conjuntos de caractersticas desde primitivas grficas bsicas, hasta redes y soporte para tipografas True Type (TTF). La mayora de estas libreras han sido enviadas por usuarios finales y no forman parte del paquete principal de SDL. Esto no es un problema en s mismo, pero si el propsito principal es usar SDL para trabajar desarrollando para varias plataformas, el desarrollador habr de asegurarse de que las libreras que pretende utilizar se encuentran disponibles para las plataformas con las que vaya a trabajar, ya que no todas estn completamente soportadas. La herencia de Windows en SDL es muy evidente dentro de la API, tanto es as que mucha de la terminologa (y muchas de las funciones) son muy parecidas a sus equivalente en DirectX. A pesar de ello, no se emula Windows de ninguna manera. En cambio, cada llamada a la API grfica de SDL, por ejemplo, utiliza directamente el controlador desde el sistema operativo anfitrin, bastante distinto a lo que sera un sistema emulado. En Windows, esto implicara el uso de DirectX. Bajo Linux, se utiliza una de las libreras del dispositivo de grficos, como X11 o DGA. Tambin est soportado el control MTR (Memory Type Range Register, [2]) aplicaciones aceleradas a pantalla completa (vase el Cuadro 1: Dispositivos). La API de audio puede reclutar los servicios de OSS, ESD o aRts para suministrar msica y efectos de sonido.

Gran Bola de Fuego


La primera tarea es descargar e instalar SDL. La versin actual estable es la 1.2.7, y est disponible desde [3] como un archivo tar comprimido con gzip. Adems de distribuirse el cdigo fuente, estn disponibles dos versiones binarias

Cuadro 1: Drivers
SDL no est limitado a X11 como dispositivo de salida.Tambin puede usar dga, fbcon y hasta aalib! Para hacer uso de estas caractersticas, debemos asegurarnos de que el dispositivo apropiado se compila dentro de SDL (lo cual requerir otro ./configure, make, make install del paquete). Entonces podr usar la variable de entorno SDL_VIDEODRIVER para indicar que dispositivo quiere usar. Por ejemplo: export SDL_VIDEODRIVER=aalib ./explore Puede encontrar una lista de los dispositivos suministrados con SDL tecleando: ./configure -help | grep U enable-video

28

Nmero 01

www.linuxmagazine.com.es

SDL

DESARROLLO

diferentes: Ejecucin, runtime, y desarrollo (development). Naturalmente, la ltima proporciona mejores facilidades de depuracin, lo cual es ms til para nosotros, como desarrolladores. De todas formas recomiendo trabajar con las fuentes ya que esto nos permite un mejor ajuste y el uso completo de un depurador para introducirnos en el mismsimo cdigo de SDL. Esto no solo es til en el seguimiento de errores, tambin puede ser muy iluminador. El archivo tar.gz se desempaqueta de la manera habitual:
tar xfz SDL-1.2.7.tar.gz

Todos los programas SDL pueden comenzar con una de estas lineas:
#include "SDL.h"

o:
#include "SDL/SDL.h"

tarde, deberamos comenzar siempre con un SDL_Init, porque incluye la inicializacin de otros componentes que SDL_InitSubsystem no tiene. Muestras de estos componentes podran ser: Las hebras son inicializadas, el ultimo cdigo de error es borrado y el paracadas es (opcionalmente) desplegado (vase Cuadro Paracadas).
SDL_Init(SDL_INIT_VIDEO | U SDL_INIT_AUDIO);

Y se instala con el proceso igualmente familiar:


./configure make make install

Por defecto, esto colocar las libreras necesarias y los archivos incluidos en /usr/local/lib y /usr/local/include/SDL respectivamente, aunque esto puede cambiarse en el proceso de inicio con:
./configure -prefix=/poner/sdl/U algunsitio/encualquierotraparte

La primera es preferible por motivos de portabilidad en varias plataformas, aunque esto requerir que se aada el directorio SDL a la lista de rutas incluidas que gcc buscar. Todas las dems cabeceras de archivos SDL estn incorporadas dentro de sta para as limitar el mantenimiento. Tambin necesitamos enlazar la librera principal de SDL (libSDL) dentro de nuestra aplicacin. Al principio solo usaremos las funcionalidades de est librera. Segn pase el tiempo y nuestros requisitos crezcan, aadiremos otras libreras. Hasta entonces, los dos requisitos de ms arriba pueden satisfacerse en la linea comandos con:
gcc -I/usr/include/SDL -lSDL U test/testsprite.c

Es exactamente igual a:
SDL_Init(SDL_INIT_VIDEO); SDL_InitSubSystem (SDL_INIT_AUDIO);

Adems de suministrar dispositivos adicionales, debera tener pocos motivos para repetir el proceso ./configure ya que SDL es fcil de configurar y muy estable, e invariablemente funciona a la primera. El paquete SDL tambin contiene un extenso juego de pginas de manual (seccin 3) detallando los parmetros e indicadores de cada funcin.

Si cambia las rutas de libreras e incluidos, se puede usar el programa sdl-config para obtener esta informacin (vase Cuadro SDLCONFIG).

Por ahora, solo necesitamos el subsistema de vdeo, por tanto lo inicializaremos y comprobaremos si hay errores. SDL adopta el estndar de usar valores negativos para indicar un cdigo de error. El valor de este nmero indica el error concreto. SDL tambin suministra la funcin SDL_GetError que devuelve el nombre textual del ultimo error. Pero debe ser llamado inmediatamente, porque si la subsiguiente funcin SDL falla, el anterior error se perder. Cerrar el sistema es tan simple como llamar a la funcin SDL_Quit.
void exRelease(void) { SDL_Quit(); }

El Mundo en Nuestras Manos


Nuestra primera incursin en la programacin con SDL ser la pantalla de bienvenida del juego. Con esto abarcaremos un nmero de conceptos fundamentales, tal como superficies, blitting (de blit: Block Image Transfer) y actualizacin de pantalla. Cada estructura y funcin SDL comienza con el prefijo SDL_. Adems envolveremos estas funciones dentro de las nuestras (todas precedidas con ex) para encapsular mas funcionalidad y suministrar un lugar comn donde reunir el cdigo del juego y el de SDL. Esto ayudar en la depuracin. La primera etapa es inicializar SDL. Hay dos funciones para hacer esto, SDL_Init y SDL_InitSubSystem. SDL_Init puede inicializar uno (o ms) subsistemas y debera ser la primera funcin SDL en un programa. Aunque podemos inicializar subsistemas adicionales ms

Cuadro 2: SDLCONFIG
sdl-config es un pequeo programa que viene empaquetado con SDL y su funcin es bsicamente informar o prefijar, el lugar de la instalacin de SDL.Tambin se puede usar para dar los indicadores correctos tanto al compilador como al enlazador. $ sdl-config Usage: sdl-config [-prefix[=DIR]] [--execprefix[=Dir]] [--version] [--cflags] [--libs][--staticlibs] $ sdl-config -libs -L/usr/local/lib -Wl, rpath, /usr/local/lib -lSDL lpthread

Arriba con ese muro


El paquete SDL viene con un pequeo conjunto de pruebas que permiten comprobar la integridad de cada subsistema. Lo encontraremos en el directorio test, y funcionar nada ms terminar la instalacin, siempre que haya salido todo bien. En el caso de que surjan problemas, buscaremos los mensajes de error que cada prueba enva a la linea de comandos, ya que pueden indicar si son problemas con el hardware o la configuracin. Si la maquina es capaz de ejecutar un escritorio, debera estar a la altura de cualquier tarea con SDL

www.linuxmagazine.com.es

Nmero 01

29

DESARROLLO

SDL

De igual modo que se puede inicializar un subsistema individualmente, tambin puede cerrarlo de una manera similar:
SDL_QuitSubSystemU ( SDL_INIT_VIDEO );

SDL_Surface *pScreen; pScreen = SDL_SetVideoModeU (640, 480, 16, SDL_HWSURFACE);

Cuadro 3: Paracadas
El paracadas es una manera de capturar seales (tales como fallos de segmentacin, errores de bus, cauces rotos y excepciones de punto flotante) lo cual da a SDL una oportunidad para llamar a SDL_Quit y liberar sus recursos. El paracadas se instala automticamente en la inicializacin, si no queremos utilizarlo, debemos empezar la aplicacin con: SDL_Init ( SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE); La aplicacin debe suministrar sus propios manejadores de seales si es necesario, si bien conviene recordar que, en aras de la portabilidad, no todas las plataformas soportan todas las seales y algunas plataformas no soportan seales en absoluto.

La funcin final siempre debe ser SDL_Quit, ya que esto retirar lo manejadores de seales del paracadas y terminar cualquier hebra que quede activa.

La primera vez que vi tu cara


En SDL todos los grficos se almacenan en superficies. Es un termino que se ha tomado prestado de DirectX y que significa memoria grfica. La pantalla es una superficie. La imagen del fondo es una superficie. Los personajes son superficies, etctera. Las superficies pueden ser creadas y destruidas varias veces a lo largo de la vida del juego. Sin embargo, slo puede haber una superficie de pantalla. Es esta superficie de pantalla la que aparece en el monitor y, por tanto, cualquier cosa que quiera que sea visible debe ser dibujada encima de esta superficie. Las superficies pueden ser de un tamao arbitrario y son retenidas en dos lugares: memoria de vdeo o memoria de sistema. La memoria de vdeo es ms rpida y es conocida como superficie de hardware. La memoria de sistema (o memoria software) es parte de la RAM normal y marcada internamente por SDL como datos grficos retenidos. La pantalla se inicializa con el comando especial SetVideoMode, aunque la superficie que devuelve no es diferente de cualquier otra.

Aqu tenemos una configuracin de superficie de vdeo a 640x480. El 16 indica la profundidad de bit, el cual refleja el nmero total de colores disponibles. En este caso, 65.536 (2^16), lo cual nos da un buen equilibrio entre calidad visual y velocidad. Las opciones habituales son 8, 16 y 24 aunque SDL puede soportar 12 y 15 (vase el cuadro Carga de Profundidad). Normalmente, en el desarrollo de software el programador est limitado por el hardware con el que trabaja y obligado a doblegarse a sus exigencias sin rechistar. Los juegos, afortunadamente, son un mundo aparte. Hemos elegido el tamao de pantalla y la profundidad de bit para hacer alarde de nuestros grficos en el mejor entorno posible. Si no utilizamos suficientes colores, por ejemplo, grficos esenciales como la llave o la puerta de salida pueden ser difciles (o imposibles) de ver. Esto es injusto para el jugador y por eso es admisible salir del juego si esta resolucin no se puede conseguir. Por otra parte, si se est usando SDL para aplicaciones que no son juegos, o no importa la degradacin de la imagen, se puede usar cualquier modo de vdeo que el usuario pueda tener ajustado en su escritorio poniendo la profundidad de bit a cero:
pScreen = SDL_SetVideoModeU (640, 480, 0, SDL_HWSURFACE); printf("The bit depth is set toU %d\n", pScreen>format>U BitsPerPixel);

Vase el cuadro Funciones de vdeo. El parmetro final es un juego de indicadores a nivel de bit. Estos especifican atributos para la superficie y la ventana en la que es mostrado. El indicador SDL_HWSURFACE requiere que la superficie de la pantalla, si es posible, deba ser creada en memoria de vdeo. Si nos encontramos que el dispositivo no soporta superficies de hardware (como en el caso de X11), o que la memoria hardware est llena, la superficie puede ser creada, pero software. Si es apropiado crear una superficie hardware para un bfer en particular (como por ejemplo para la pantalla principal), seguimos teniendo que invocar SDL_HWSURFACE. Puede que nosotros estemos utilizando X11, pero otro usuario podra no estar hacindolo y tenemos que darles el mejor juego que podamos.

Listing 1: Initialise
01 BOOL exInitSDL(void) 02 { 03 if (SDL_Init(SDL_INIT_VIDEO) < 0) 04 { 05 fprintf(stderr, "No se pudo inicializar video SDL: %s\n", SDL_GetError()); 06 return FALSE; 07 } 08 09 return TRUE; 10 } 01 02 03 04 05 06 07 08 09 10 11 12 13 SDL_Surface *pImg;

Listing 2: First screen


if ((pImg = SDL_LoadBMP("welcome.bmp"))) { /* Hemos cargado con xito la imagen */ SDL_BlitSurface(pImg, NULL, pScreen, NULL);/* transferir todo */ SDL_UpdateRect(pScreen, 0,0,0,0); /* toda la pantalla */ SDL_Delay(2*1000); /* 2 segundos */ /* A continuacin liberamos la superficie */ SDL_FreeSurface(pImg); }

30

Nmero 01

www.linuxmagazine.com.es

SDL

DESARROLLO

Adems est el parmetro final que permite redimensionar la ventana (SDL_RESIZABLE), quitarle el marco (SDL_NOFRAME) o soportar renderizado OpenGL (SDL_OPENGL). A menudo, el primer impulso con un juego es hacerlo a pantalla completa (SDL_ FULLSCREEN). Pero nos quedaremos con una versin en ventana ya que es ms fcil trabajar con ella. Adems, es posible hacer que la mquina se vuelva inutilizable si se est ejecutando el juego a pantalla completa, desde donde no es siempre posible conmutar a otro escritorio virtual y matar el programa. Esto tambin ocurre si se tropieza con un punto de ruptura en el depurador o se nos olvida aportar algn mecanismo para abandonar el juego. Recordemos que, al igual que un depurador, el paracadas de SDL captura varias seales (como Ctrl+C) y, por tanto, stas no estn siempre disponibles. Cada superficie que se crea (y eso incluye a la pantalla) debe ser liberada con la funcin SDL_FreeSurface, una vez que ha dejado de usarse:
SDL_FreeSurface(pScreen);

, int height, int depth, Uint32U Rmask, Uint32 Gmask, Uint32 U Bmask, Uint32 Amask); SDL_Surface *SDL_CreateRGBU SurfaceFrom(void *pixels, int U width, int height, int depth, U int pitch, Uint32 Rmask, Uint32U Gmask, Uint32 Bmask, Uint32 U Amask);

Una forma mucho ms fcil es dibujar las imgenes con GIMP y salvarlas como un BMP. Entonces se puede cargar la imagen, correctamente formateada y copiarla dentro de una flamante superficie. SDL permite esta generosa funcionalidad con una simple funcin llamada:
SDL_Surface *SDL_LoadBMPU (const char *file);

Esto se utiliza raramente por que tiene que escribir cada pixel de la imagen (en el formato correcto) directamente dentro de la superficie. Adems, normalmente hay una gran cantidad de pixels.

SDL solo provee soporte a archivos BMP dentro de la librera estndar. Aunque SDL_image suministra soporte para muchos otros formatos, nuestro juego se limitar a BMPs y har uso de varias

Cuadro 5: Carga de profundidad


Cuando la profundidad de bit es distinta de 8, los datos del pixel se almacenan en un formato empaquetado. Esto se llama as porque el color se representa con tres nmeros, uno para cada uno de los componentes rojo, verde y azul que se empaquetan juntos (en un simple Uint o Uint32) para mostrar el color. Con una profundidad de 24 bits (a veces llamado Color verdadero), cada uno de los componentes RGB ocupa 8 bits. Esta es la resolucin ms alta que probablemente necesitemos, pero normalmente es excesiva para la mayora de los juegos. Desafortunadamente las cosas se vuelven ms complicadas con el ms comn de los formatos empaquetados. Me refiero al color de 16 bits. En este caso los componentes RGB usan 5, 6, y 5 bits para cada color o 5, 5 y 6 o 6, 5 y 5! El formato exacto de la superficie puede variar dependiendo de donde est almacenado y que tarjeta grfica se est usando. La orden tambin puede variar si se est usando un PowerPC, por ejemplo, debido a la cuestin de la orientacin de los datos (endian). Sin embargo, esto no es algo de lo que debamos preocuparnos, ya que desde SDL se convierten los formatos automticamente durante una transferencia de bloque o blit. Si se necesita comprender el formato interno (tal como veremos ms tarde en esta serie) es agradable saber que SDL suministra la funcin SDL_MapRGB para ayudarnos. En verdad, este problema con el formato de los paquetes tambin se manifiesta con el modo de color de 24 bits, pero es menos pronunciado. Las reglas cambian cuando se especifica una profundidad de bit de 8. En vez de separar los 8 bits dentro del componente RGB, cada valor (desde 0 a 255) referencia a una tabla separada que indica el color actual. Esta tabla se llama la paleta (la cual usa 24 bits completos para almacenar la informacin de color) y puede ser configurada con las funciones SDL_SetColors y SDL_SetPalette. Aunque hoy en da ha decado en lo que se refiere a la programacin de juegos, gracias a este formato, se puede mantener la produccin de grficos de alta calidad en hardware muy limitado.Tambin se pueden producir muchos efectos interesantes (y muy rpidos) cambiando los colores en la paleta sin hacer cambios en cada pixel sobre la pantalla. El mayor problema con las superficies de 8 bits paletizadas es que solo se dispone de 256 colores especficos para toda la imagen. Si el fondo usa un juego de 256 colores y el personaje principal usa otro diferente, entonces SDL cambiar automticamente algunos de los colores. Si bien esto no es algo demasiado malo, los resultados pueden ser impredecibles y por lo tanto har que el trabajo artstico sea un poco menos impresionante. La otra cara de la moneda, sin embargo, es que mover datos de 8 bits es el doble de rpido que mover datos de 16 bits y, por tanto, es a menudo un truco empleado para dispositivos de mano (PDAs, mviles, etc.). Para asegurar la compatibilidad en varias plataformas, los tipos estndar de C como short e int, no se usan. En su lugar, SDL define los suyos propios, que son usados por toda la API. Estos tipos pueden cambiarse sobre nuevas plataformas para asegurar que un Uint16, por ejemplo, es siempre de 16 bits. typedef typedef typedef typedef typedef typedef unsigned char signed char unsigned short signed short unsigned int signed int Uint8; Sint8; Uint16; Sint16; Uint32; Sint32;

Mis Posesiones Terrenales


Adems de la pantalla, necesitamos algunas superficies de nuestra propiedad, dentro de las cuales podremos dibujar nuestro grficos. Hay dos formas principales de crear nuestras propias superficies. La primera es crear la superficie manualmente con una de las siguientes funciones:
SDL_Surface *SDL_CreateRGBU Surface(Uint32 flags, int widthU

Cuadro 4: Funciones de vdeo


Estas funciones pueden suministrar alguna idea til sobre que modos de vdeo son posibles con SDL. Las pginas de manual tienen prototipos completos y una explicacin de estas funciones.
SDL_GetVideoinfo Recupera informacin acerca del hardware de vdeo.

SDL_VideoDriverName Da el nombre del dispositivo de vdeo. SDL_ListModes SDL_VideoModeOK Enumera todas las resoluciones de pantalla disponibles. Determina si un modo especi fico de vdeo est disponible.

www.linuxmagazine.com.es

Nmero 01

31

DESARROLLO

SDL

superficies cargadas de esta manera. Cada superficie retendr un juego de grficos especfico: Uno para el teln de fondo, otro para el jugador, otro para el enemigo, etctera. La imagen final del juego, por tanto, se construir a partir de muchas copias de superficies a superficie (recordemos que la pantalla es solo una superficie), aunque gobernadas por la lgica del juego. Este proceso de copiado se llama blitting y es la abreviatura de BLock Image Transfer.

cualquiera de las dos superficies, fuente o destino. Esto es muy til, ya que podemos dibujar grficos en posiciones tales como (-4, -2) o (600, 450), lo cual permite dividir suavemente nuestros grficos por el borde de la pantalla. SDL resuelve como representar la porcin visible ptimamente.
SDL_Rect srcrect = U {600, 450, 64, 64};

cie pantalla que hemos configurado no es la imagen que se visualiza en la ventana. Esa imagen se controla por el dispositivo (tal como X11), no por SDL. A fin de ver la imagen, debemos decirle a SDL que actualice el dispositivo con el grfico de nuestra superficie. Para hacer esto usaremos la funcin SDL_ UpdateRect.
void SDL_UpdateRect(U SDL_Surface *screen, Sint32 x, U Sint32 y, Sint32 w, Sint32 h);

El Baile del Blit


Podemos transferir bloques (blits) entre dos superficies cualquiera y eso incluye desde una superficie a s misma. Tambin podemos transferir bloques desde una porcin de una superficie, a una porcin diferente de otra superficie. La nica limitacin es que el tamao de ambas porciones (la fuente y el destino) deben ser del mismo tamao. La operacin de transferencia de bloques se puede (si ambas superficies estn en memoria de vdeo) ejecutar por hardware, lo cual es increblemente rpido. No todos los dispositivos grficos, no obstante, soportan la aceleracin por hardware, as que para un breve recordatorio, vase el cuadro Dispositivos. Hay una sola funcin para hacer transferencias de bloques. Es nica as que es sencillo de recordar:
int SDL_BlitSurface(U SDL_Surface *src, U SDL_Rect *srcrect, U SDL_Surface *dst, U SDL_Rect *dstrect);

Solo transferiremos bloques desde 600, 450 a 639, 479 aunque la extensin sea 663, 513. Si se quiere transferir en bloque la superficie entera (como hicimos en la pantalla de bienvenida) entonces pasaremos srcrect como NULL. Solo usamos las coordenadas x, y de dstrect refirindonos a la esquina superior izquierda del rea de destino, porque no somos capaces de estirar y transferir bloques. Pasando NULL como valor dstrc le diremos a SDL que comience la transferencia de bloque desde (0,0). Si la extensin del bloque transferido excede la superficie de destino la imagen se recortar normalmente. Esta rea recortada puede ser limitada artificialmente con:
void SDL_SetClipRect(U SDL_Surface *surface, U SDL_Rect *rect);

Slo un pequea porcin rectangular de la pantalla es actualizada (lo cual es naturalmente ms rpido que si actualizamos toda la superficie). Como alternativa, podemos elegir pasar ceros a cada uno de los parmetros y actualizar todo el rea de golpe. Por ejemplo:
SDL_UpdateRectU (pScreen, 0, 0, 0, 0);

Desde esta funcin no se dispone de la capacidad de estirar o rotar la superficie; para esto deberemos recurrir a cualquiera de las libreras SDL_gfx [4] o SGE [5]. Como el estirar bitmaps consume mucho tiempo de proceso no lo usaremos en nuestro juego, ya que estamos aspirando a la mxima velocidad. Por tanto generaremos nuestros grficos al tamao exacto que necesitemos. SDL_Rect es una estructura simple para indicar el tamao del rea que queremos transferir, tomando como x, y, la anchura y la altura. SDL cortar automticamente nuestras coordenadas internamente si excedemos los lmites de

Y cualquier futura transferencia de bloque a esa superficie solo ocurrir dentro del rea especificada en el rectngulo. Como dije ms arriba, pasando NULL como puntero SDL_Rect, le estamos diciendo a SDL que use el rea completa de la superficie, lo que efectivamente eliminara el rea recortada. Esta caracterstica nos permite mantener un rea de la pantalla pura y sagrada, sin tener en cuenta que componentes del juego intenten transferir bloques all, protegiendo informacin tal cmo la puntuacin, o el nmero de vidas.

Ahora hemos transferido algunos bloques a nuestra pantalla y provocado la actualizacin del monitor y as actualizarlo con nuestra propia imagen. De esta manera, si aadimos un pequeo retraso, completaremos nuestra primera pantalla. Producir un nivel del juego o personajes animados, es simplemente una cuestin de mas transferencias de bloques, en ms lugares, desde ms superficies. No implica nada ms que lo que ya hemos visto. Desafortunadamente, hay buenas y malas manera de hacer esto. El prximo mes le daremos un vistazo a las buenas maneras, mostraremos como las superficies pueden ser usadas para crear la pantalla del juego y daremos vida a algunos de I los malos!

INFO
[1] SDL: http://www.libsdl.org [2] Memory Type Range Register: http:// www.linuxvideo.org/user/mtrr.txt [3] Descargas de SDL: http://www.libsdl.org/ download-1.2.php [4] Librera SDL_gfx: http://www.ferzkopp. net/~aschiffler/Software/SDL_gfx-2.0/ [5] Librera SGE: http://www.etek.chalmers. se/~e8cal1/sge/index.html

Bienvenidos!
As que ahora podemos cargar una imagen en una superficie y transferir un bloque de esa superficie a otra superficie (tal como la pantalla). A fin de ver como queda nuestro trabajo, debemos dar a conocer una revelacin ms. La superfi-

32

Nmero 01

www.linuxmagazine.com.es

Interfaces

DESARROLLO

Un primer paso hacia curses

Interfaces Simples
Tal vez uno de los principales motivos para utilizar un interfaz de texto sea uno que dicta el sentido comn de la economa. Ms o menos nuestra mxima podra rezar as:Para qu ms?. Efectivamente: para qu? Qu necesidad tiene un almacn de piezas de recambio de automviles de un Pentium VII a un milln de gigaherzios con pantallas de plasma de tropocientos pixels y mogollomiles de colores? Tal vez sera ms realista escoger mquinas ms bsicas, incluso de las consideradas obsoletas, e invertir lo que se ahorre en hardware (y software, como despus veremos) en otro sitio. POR PAUL C. BROWN

ucho ms prctico, digo, es tener una pantalla en blanco y negro, con buen contraste, un ordenador sencillito. Sinceramente, los interfaces amigables con muchos colorines e iconos de diseo estn sobrevalorados. No slo eso, sino que pueden inducir a confusin. Si se piensa racionalmente, muchas aplicaciones (la mayora) no necesitan de interfaz grfico. Perfectamente podran apaarse con un interfaz de botones, mens y ventanas basadas en texto. Amn de resultar menos exigente con el hardware, tambin seran ms claros y ms sencillos de utilizar. Precisamente para desarrollar interfaces para aplicaciones de estas caractersticas existe curses, una librera que facilita enormemente la creacin de ventanas, mens y widgets en terminales de texto. Por supuesto que las libreras curses estn disponibles para la mayora de los Unixes, incluyendo Linux y suelen incorporarse con casi todas las distribuciones e incluso existen versiones para otras plataformas lo que asegura, hasta cierto punto, la portabilidad del cdigo (vase [1]). En este primer captulo destinado a curses vamos a ver como emplear la librera imbuida en la infraestructura de una aplicacin desarrollada en C++. Una advertencia: el C++ no es el entorno natural de curses y, al menos en un caso, no conseguiremos unas compilaciones cien por cien limpias (es decir, sin advertencias), si bien esto es ms bien un problema del compilador g++ que del cdigo de muestra o de un defecto de curses, como despus veremos.

Aplicndose a la tarea
Tal vez la manera ms racional de enfocar el desarrollo de la aplicacin (al menos es la que funciona para m) es el de concebirlo desde arriba hacia abajo. Es decir, piensa en como quieres que se vea y ya te encargars del trabajo sucio despus. Normalmente esto implica empezar con la funcin main() y reducirlo a unas pocas llamadas y cuando digo unas pocas, quiero decir unas poqusimas. Si la funcin main() puede contener como mucho 10 lneas de cdigo, es que vamos bien. Despus vamos implementando clases de las ms generales a las ms especficas, siendo estas ltimas las que de verdad interactan con las libreras especficas, curses en este caso. As que, yo cmo quera que se viese? Pues quera que en main() se inicializase un objeto x de una clase, llammosle application, y que esa clase se ocupase de mostrar la ventana principal de la aplicacin, colocara los mens etc. El resto de main() se ocupara con

un bucle while que se encargase de procesar los tecleos y pasarlos a la clase application y, al final, cuando se pulsase la tecla que precipitase la salida del bucle, se llamase al destructor del objeto y todo se recogiese limpia y ordenadamente. Sencillo. El corazn de dicha clase se puede apreciar en el Listado 1. No es muy impresionante verdad? Eso es por que la mayor parte del trabajo sucio se lleva a cabo en window, que al ser heredado por application, recibe una llamada a su constructor cuando se crea un objeto application. Y es en el constructor de window donde se inicializa toda la infraestructura de curses, preparndola para mostrar las ventana. Se puede apreciar la herencia de window por parte de application en el fichero de inclusin application.h, no listado en este artculo, pero que puede ser descargado desde la web de la revista en [2]. Un poco ms adelante volveremos sobre la clase window. Volviendo al constructor de application, lo primero que se

www.linuxmagazine.com.es

Nmero 01

33

DESARROLLO

Interfaces

hace es realizar una llamada al macro de fabricacin casera makeString() que sirve para convertir una cadena con un nmero de argumentos opcionales en una sola cadena tipo string que se utilizar como ttulo (asignado, pues, a la propiedad de la clase title). Veremos ms sobre este macro en la seccin Parmetros Indefinidos ms abajo. Lo siguiente es abrir una ventana con la que podamos trabajar. Esta ventana ser la del fondo, la madre de todas las subsiguientes ventanas y donde se alojar el men principal del programa. La llamada es un mtodo de la clase window, heredada por application y que veremos en la siguiente seccin. El destructor de la clase contiene una nica instruccin, endwin(), la funcin de curses utilizado para recoger la basura y para devolver la terminal al estado que tena antes de la llamada a initscr(). De momento es todo lo que necesitaremos para salir elegantemente de curses.

Abriendo la Ventanas
En la siguiente capa de nuestra aplicacin, estara la clase que administrara cada una de las ventanas que se fuesen creando, incluyendo la principal. Esta capa viene representada por la clase window, la implementacin de la cual se puede ver en el Listado 2 (o al menos parte. Se han dejado fuera los mtodos get y set correspondientes a varios atrib-

Listado 1: application.cpp
01 #include "application.h" 02 03 application::application(bool frame=TRUE,string app_Name="Untitled"...) 04 { 05 makeString(app_Name); 06 title=app_Name; 07 08 window app_window(COLS,LINES,0,0,TRU UE,title); 09 } 10 11 application::~application() 12 { 13 endwin(); 14 } 15 16 // ... Y 'gets' varios

utos. Ver [2]). Fijmonos que window cuenta con dos constructores sobrecargados. Uno, el que no tiene parmetros, sirve de constructor cuando se crea un objeto application y crea el entorno curses. Este constructor se llamar una sola vez por aplicacin y monta la ventana stdscr, el contenedor de todas las dems ventanas. En el cdigo se aprecia como usa los mtodos estndar de inicializar la pantalla y librera de curses utilizando (initscr()) y como se activa el mapeado del teclado (keypad(), esto sirve para que las teclas de funcin, cursores, etc. devuelvan caracteres que el programa pueda procesar, permitiendo, por ejemplo, que si el usuario pulsa la tecla F1, se active el sistema de ayuda, etc.). A continuacin, deshabilitamos la secuencia de Nueva Lnea + Retorno de Carro cada vez que se produce una salida con la llamada a nonl() y le decimos a la aplicacin que ha de capturar las pulsaciones en cuanto se produzcan sin esperar a un carcter de nueva lnea con el procedimiento cbreak(). Esto ltimo nos permitir procesar cada tecleo del usuario como es debido, activando alguna funcionalidad del programa si pulsa un tecla de un carcter no imprimible o colocando una letra en la ventana apropiada si el usuario desea escribir algo. Por fin, evitamos que se visualicen inmediatamente las entradas desde el teclado con la funcin noecho(). De esta manera, podremos capturar los tecleos y procesarlos como nos convenga en el contexto de la aplicacin. Todas estas funciones pertenecen a la librera de curses y su uso es bastante estndar en el arranque de cualquier aplicacin que utilice el paquete. El segundo constructor, window::window( int wide = COLS,int high = LINES, int posX = 0,int posY = 0, bool frame = TRUE, string win_Name = "Untitled"...), sirve para crear las ventanas con las que podremos interactuar. Si nos fijamos, el constructor de la clase application utiliza este constructor para generar el fondo visible de la aplicacin, con un marco (establecido por el parmetro frame) y de un tamao igual a la del terminal donde se mostrar. El tamao de la terminal se establece en lneas (LINES) y columnas (COLS), siendo estas dos variables generadas por curses a la hora de inicializar el motor y para la ventana principal de la

aplicacin vamos a ocupar todo el terminal visible. Por ello, al invocar al constructor de la ventana de fondo de la aplicacin en el constructor de application, utilizamos el alto y ancho mximo disponible al arrancar el programa. De hecho, lo primero que se hace en este segundo constructor es crear una ventana con la funcin curses newwin() y asignar el puntero que devuelve al atributo w_Handle. Este atributo nos ser til ms adelante para referirnos a cada una de las ventanas cuando contemos con ms de uno. A continuacin, procesamos el ttulo de la ventana de manera similar que hacamos en el constructor de application y establecemos al atributo frame para dibujar (o no) un marco alrededor de la ventana. Lo siguiente es asignar la ventana a un panel. Los paneles en curses aaden propiedades a las ventanas permitiendo que estas se apilen por capas y se solapen de manera consistente. Para entendernos, sera muy difcil tener ventanas de dilogos, ventanas mviles y ventanas apiladas sin que estas participaran de las funcionalidades que les atribuyen los paneles. La conversin de una ventana normal en un ventana panel es tan sencilla como se ve en el listado: basta invocar a la funcin curses new_panel() con el handle de la ventana a convertir. La funcin devuelve un handle al panel creado que guardamos en el atributo p_Handle para referencias futuras. Luego llamamos al mtodo de la clase putTitle() (que se ve un poco ms abajo en el listado). ste mtodo, como su nombre indica, coloca el ttulo de la ventana en el ngulo superior izquierdo y, de paso, dibuja el marco para la ventana. El siguiente mtodo, showPanels(), tambin perteneciente a la clase window, muestra el panel llamando a update_panels() (que actualiza el aspecto del panel) y doupdate() (que actualiza la pantalla con la nueva informacin), ambas funciones pertenecientes a la librera curses. El mtodo putTitle() a su vez invoca al mtodo wWrite(), que es el mtodo de la clase encargado gestionar el paso de cadenas a las ventanas de curses. Recibe tres o ms parmetros: los dos primeros establecen la posicin x e y de la cadena (tercer parmetro) que se montar junto con los parmetros indefinidos que le siguen. La funcin mvwprintw(), perteneciente a la

34

Nmero 01

www.linuxmagazine.com.es

Interfaces

DESARROLLO

Listado 2: window.cpp
01 02 03 04 05 06 07 08 09 10 11 12 #include "window.h" window::window() { w_Handle=initscr(); keypad(stdscr, TRUE); nonl(); cbreak(); noecho(); } 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 } void window::showPanels() { update_panels(); doupdate(); } void window::wWrite(int px, int py, string my_String...) { if (has_Frame) { px++;py++; } makeString(my_String); mvwprintw(w_Handle,py,px,my_String.c_str()); wrefresh(w_Handle); showWindow(); } void window::showWindow() { nodelay(w_Handle,TRUE); wgetch(w_Handle); nodelay(w_Handle,FALSE); showPanels(); } void window::drawFrame() { wborder(w_Handle, ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, ACS_ULCORNER, ACS_URCORNER, ACS_LLCORNER, ACS_LRCORNER); } int window::wGetch() { return(wgetch(w_Handle)); } // Gets y sets varios aqu

window::window(int wide=COLS,int high=LINES,int posX=0,int posY=0,bool frame=TRUE,string win_Name="Untitled"...) 13 { 14 w_Handle=newwin(high,wide,posY,posX); 15 16 makeString(win_Name); 17 title=win_Name; 18 has_Frame=frame; 19 20 p_Handle=new_panel(w_Handle); 21 22 putTitle(); 23 showPanels(); 24 } 25 26 27 void window::closeWindow() 28 { 29 delwin(w_Handle); 30 refresh(); 31 } 32 33 void window::putTitle() 34 { 35 int px=1,py=0; 36 if(has_Frame) 37 { 38 drawFrame(); 39 px=0;py=-1; 40 } 41 wWrite(px,py,title);

73 74 75 76 77 78 79 80 81

librera curses, es la encargada de colocar la cadena en la ventana indicada por el handle que se le pasa. Ntese como, a pesar de que la mayora nosotros estamos acostumbrados a referirnos primero al eje de las x y despus al eje de las y, curses lo hace a la inversa, ms bien porque cuando hablamos de terminales de texto, es habitual hablar primero de lneas (componente vertical) y despus de columnas (componente horizontal) en ese orden. Despus de colocar la

cadena, llamamos wrefresh() que refresca la ventana que acabamos de modificar, que no la pantalla. El refresco de la pantalla para que se puedan ver las modificaciones se produce en el mtodo showWindow(), que llamamos a continuacin. El mtodo showWindow() es un parche en la ya larga tradicin de los famosos parches de Paul C. Brown. Naci cuando me d cuenta de que curses no me actualizaba satisfactoriamente las ventanas si no haba una entrada de

datos desde el teclado. Bueno, ms bien, si no se intentaba conseguir una entrada desde el teclado. Por ello lo nico que hace esta rutina es anular la espera para una entrada (nodelay()), leer el bfer de entrada (wgetch() normalmente dicho bfer estar vaco, puesto que no espera a que el usuario teclee nada) y volver a activar la espera de entrada para, a continuacin, actualizar los paneles llamando a showPanels(). Sin este procedimiento, los paneles no se actualizan

www.linuxmagazine.com.es

Nmero 01

35

DESARROLLO

Interfaces

hasta una nueva entrada por parte del que acepta, adems de una serie de que fuera iterando sobre la lista de arguusuario y no se mostrarn de motu proparmetros definidos, un nmero mentos hasta que o (a) se leyese hasta el pio cosa como los ttulos o el borde. En indefinido de otros parmetros. Hay nmero de argumentos preestablecido o cuanto a drawFrame(), su nombre lo varias maneras de leer los parmetros (b) se llegase hasta el argumento que dice todo: dibuja un marco alrededor de indefinidos a variables. Una sera la de fuese igual al argumento definido como la ventana utilizando para ello la rutina pasar como argumento definido el el ltimo. Ambos mtodos ofenden mi curses wborder() y los valores prenmero de argumentos indefinidos. Otra sentido de la esttica de la progradefinidos de curses para la barra vertical la de incluir como definido un argumacin, ya que qu pasa si ni el mismo (ACS_VLINE), tanto para el borde mento que fuese igual al ltimo de los programador sabe cuantos argumentos izquierdo, como para el derecho; la barra argumentos indefinidos. En ambos casos van se indefinidos? Yo opto por el horizontal (ACS_HLINE) para el borde crearamos un bucle (en el primer caso mtodo (c), que consiste en que todos superior e inferior ; y los grficos de las un bucle for y en el segundo uno while) los argumentos se vuelcan en una lista esquinas ACS_ULCORNER (de tipo va_list) y se van (esquina superior leyendo e integrando en el Listado 3: va.h izquierdo), ACS_ argumento plantilla. Esto no 01 #include <stdlib.h> URCORNER (esquina susera un problema si no fuera 02 perior derecho), ACS_ porque con curses, el uso de 03 #define makeString(return_String) \ LLCORNER (esquina infeuna cadena de longitud 04 { \ rior izquierdo), ACS_ indefinida (tipo char *cadena) 05 char *fmt; \ LRCORNER (esquina infegenera un fallo de seg06 if ((fmt=(char*) rior derecho). Por fin, el mentacin. En concreto, si malloc(sizeof(char)*return_String.length()))==NULL)\ mtodo wGetch() se enutilizamos una cadena de lon07 printf("ERROR: Memoria insuficiente");\ carga de recoger las gitud indefinida *buf en un 08 else \ entradas procedentes del programa C o C++ normal 09 { \ teclado referidas a la ven(es decir, que no cargue libr10 strcpy(fmt,return_String.c_str()); \ tana para que puedan ser era raros como curses) no 11 va_list args; \ procesadas. pasa nada: 12 char *p; \

Parmetros indefinidos
Conviene explicar en un aparte lo referente a las funciones con parmetros indefinidos. Estas funciones permiten que funcionen, por ejemplo, el socorrido printf() de C. Si nos fijamos en como funciona, si hacemos
printf("Tengo %iU mueca vestida deU %s...",1,"azul");

devolver la cadena Tengo 1 mueca vestida de azul... y comprobamos que a printf(), que no es ms que otra funcin de las libreras estndar de C, puede recibir tantos parmetros como gustemos siempre y cuando el primero sea el que indique el formato del mensaje a mostrar. Eso es por que printf() es una funcin

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

int n, size=10; \ if((p = (char*) malloc(size)) == NULL)\ printf("ERROR: Memoria insuficiente");\ else \ { \ while(1) \ { \ va_start(args,fmt); \ n=vsnprintf(p,size,fmt,args); \ va_end(args); \ if (n < size) \ { \ break; \ } \ else \ { \ size = n+1; \ if((p = (char *) realloc(p,size)) == NULL)\ { \ printf("ERROR: Memoria Insuficiente");\ break; \ } \ } \ } \ } \ return_String=p; \ free(p); \ free(fmt); \ } \ }

function ejemplo2U (char *plant, ...) { char *buf; va_list args; va_start(args, plant); vsprintf(buf,plant,args); va_end(args); return(buf); }

El cdigo anterior funcionar sin ningn problema. Pero con curses, si se utiliza una cadena de longitud indeterminada y despus se utiliza sprintf() o vsprinf() con una plantilla y varios argumentos, el resultado es el dichoso error de fallo de segmentacin, uno de los errores ms irritantes que tiene la insidiosa costumbre de aparecer en el momento de la ejecucin, despus de una compilacin exitosa. Otra pega un tanto engorrosa es que va_start() y va_end() han de estar en la misma funcin que recibe los parmetros indefinidos, por tanto veris la

36

Nmero 01

www.linuxmagazine.com.es

Interfaces

DESARROLLO

misma secuencia de comandos repetida una y otra vez a lo largo de las clases que estamos analizando y no hay manera de separarlos en una funcin aparte. El tercer problema es que slo se nos permite operar con cadenas tipo char *, lo que tericamente nos despoja del privilegio de utilizar cadenas de tipo string, con la de ventajas y facilidades que aportan, caray. Todos y cada uno de estos inconvenientes se resuelven con Figura 1: Nuestra primera aplicacin, con marco y ttulo. el macro que se puede ver en el Listado 3. Cmo funciona? Pues, como que size, es que se ha truncado la se puede observar en el listado, lo cadena. En este caso lo que hemos de primero que hacemos es asignar espacio hacer es aumentar el valor de size hasta a una variable de tipo char* llamado fmt, n+1 (la longitud total ms el crcter de hecho tanto espacio como caracteres nulo /0) y reasignar memoria por el contenga el argumento string nuevo valor a p. Es lo que se hace a con(return_String). A continuacin copitinuacin. Una vez que tenemos el amos el contenido de return_String a tamao adecuado, volvemos a asignar la fmt. a continuacin asignamos un poco cadena a p y podemos salir del bucle y de espacio (size en bytes) a otra variable asignar la cadena contenida en p a char* llamado p. Esta variable contendr return_String y proceder a liberar la la cadena procesada. Seguidamente, memoria asignada a p y a fmt. Este ingecreamos la cadena final con un lmite de nioso truco viene de la pgina man de size bytes. La funcin vsnprintf() asigna vsnprintf(), si bien ha sido adaptado tantos bytes a p como los indicados en para que por un extremo entre una varisize, por tanto, no es posible excedernos able tipo string sin los otros parmetros de la cantidad de memoria asignada a p para formatear y por el otro salga una y evitamos posibles fallos de segvariable string con todos los parmetros mentacin. Ahora bien, si toda la cadena dispuestos limpiamente en su interior. no cabe en esos size bytes, vsnprintf() Toda la basura se recoge, la memoria devuelve el nmero de bytes que hubiera reservada para las cadenas se libera, cabido. Es decir, si n resulta ser mayor todo queda inmaculadamente limpio tras su ejecucin. Este macro no produce una compilacin limpia. A la hora de compiListado 4: principal.cpp lar con g++ genera una advertencia 01 #include "application.h" all donde se emplee que reza:
02 03 int main() 04 { 05 int ch; 06 application my_App(TRUE,"Mi Aplicacin nmero %i",1); 07 08 while((ch=my_App.wGetch())!=KE Y_HOME) 09 { 10 11 } 12 13 my_App.~application(); 14 exit(0); 15 }

nuestro programa es harto sencillo. Incluimos el fichero de inclusin application.h que contiene la definicin de la clase application. A continuacin, declaramos una variable tipo char para contener las pulsaciones del teclado y un objeto tipo application. Llegados a este punto, se visualizar en la terminal la ventana principal de la aplicacin, tal y como se ve en la Figura 1. Seguidamente, entramos en un bucle a la espera de que el usuario pulse la tecla INICIO o HOME, lo que cierra el bucle, desencadenando la destruccin del objeto application y cerrando el programa.

Compilacin
Para la compilacin con curses, hemos de enlazar con la librera ncurses. Si adems empleamos paneles para poder solapar ventanas, hemos de incluir la librera panels y, por supuesto, hemos de enlazar las clases que hemos creado. Para todo ello existe un sencillo Makefile que se puede descargar junto con el resto del cdigo fuente de [2].

Conclusin
Si bien parece que es poco lo obtenido hasta ahora, hemos sentado las bases para una aplicacin mucho ms compleja. Podramos tomar lo desarrollado como una plantilla para un programa funcional e ir insertando nuevas funcionalidades con un de mnimo esfuerzo. El mes que viene seguiremos utilizando curses para implementar una aplicacin y veremos como crear ventanas modales de dilogo, como crear botones y otras funcionalidades que nos demostrarn que los interfaces de texto siguen I estando vivitos y coleando

warning: second parameter ofU `va_start' not lastnamedU argument

Esta advertencia surge debido a que el compilador es incapaz de reconocer una cadena de tipo string como el ltimo argumento definido antes de la ristra de argumentos indefinidos. Sin embargo, el programa acaba compilando y se ejecuta sin problemas.

RECURSOS
[1] Curses en plataformas Windows: http://www.funet.fi/pub/win-nt/curses/ http://www.crystalcom.com/crs_swin. htm http://www.eunet.bg/simtel.net/ msdos/screen.html [2] Las fuentes completas, con ficheros de inclusin, para el programa descrito en este artculo http://www.linuxnewmedia. es/magazine/numero1/descargas/curses

Explotacin
Por fin hemos llegado al momento de ver nuestras clases en accin. Si miramos el Listado 4, vemos que la funcin main de

www.linuxmagazine.com.es

Nmero 01

37

DESARROLLO

Perl

Sobres impresos con Perl y PostScript

Cartas Postales Perfectas


No necesitamos ni un paquete Office ni LaTeX para imprimir los sobres de un mailing. Los mdulos Perl de PostScript, una base de datos y el listado de este artculo forman una solucin perfecta para crear sobres para envos masivos de correo.
POR MICHAEL SCHILLI

Prajuab Manklang, visipix.com

inux puede hacer ms o menos cualquier cosa. Leer imgenes digitales desde cmaras, reproducir pistas digitales, escribir CDs, incluso conseguir que un escner USB funcione (con algo de ayuda de Xsane). Pero a ttulo personal tena que utilizar Windows de vez en cuando para realizar una tarea en concreto: a la hora de remitir varias cartas iguales a distintos destinatarios, las direcciones de los cuales se extraa de una base de datos, tena que slirme de mi adorado Linux, rearrancar el ordenador, no distraerme ni ir a por un caf mientras la mquina arrancaba para
Michael Schilli trabaja como ingeniero Web en la empresa AOL/Netscape en Mountain View, California. Escribi Perl Powerfor AddisonWesley y puede ser contactado en la direccin mschilli@perlmeister.com. Su pgina web es http://perlmeister.com.

THE AUTHOR

no perderme, el men de arranque, y meterme en mi semi-olvidada instalacin de Windows, desde el cual, por supuesto, no tena acceso ni a la mitad de las herramientas a las que Linux me tiene acostumbrado y sin las cuales me siento totalmente desamparado. Un montn de trabajo para imprimir unos sobres. Sola usar un viejo programa de Windows para esta tarea, pero eso se acab. Existe un utilsimo programa bajo Linux que llamado Ghostscript que puede convertir nuestra vieja impresora domstica en una fabulosas mquina PostScript. Si nuestra distribucin no se ha ocupado ya de esto, vase [1] para saber como se hace. Como muestra la figura 1, la exportacin de datos desde la base de

datos Windows no fue un problema al usar el formato de separadores mediante comas (CSV). Todo lo que tuve que hacer a continuacin fue generar un archivo PostScript para cada sobre y luego enviar esos archivos a la impresora. Y esto es un juego de nios con mdulos CPAN como PostScript::File y PostScript::TextBlock, como [2] nos dir. PostScript es bsicamente otro lenguaje de programacin. Los archivos PostScript estn hechos de texto ASCII legible y contienen una lista de comandos necesarios para generar una pgina impresa.

Pintando mediante nmeros


No obstante, PostScript usa el llamado sistema de coordenadas matemticas y

Figura 1: Los campos en el archivo de direccin separados por comas.

38

Nmero 01

www.linuxmagazine.com.es

Perl

DESARROLLO

esto algo muy poco habitual en un programa de composicin. El origen del sistema coordeandas es la esquina inferior izquierda de la pgina. Los valores positivos del eje x arrancan desde la izquierda y se extienden hacia la derecha y los valores positivos de y van incrementando de valor de abajo arriba, tal y como nos enseo nuestro viejo maestro de matemticas en nuestro colegio de secundaria. PostScript usa puntos pica o PostScript, que miden aproximadamente 1/3 de milmetro. Como ejemplo de lo que se puede conseguir con PostScript, los siguientes comandos imprimirn el nombre John Doe en el recuadro de la direccin de un sobre:
0 setgray 401.95 156 moveto /Helvetica-iso findfont 18 scalefont setfont (John Doe) show

cio del campo direccin, si no que indicamos la posicin de la esquina derecha inferior del bloque de texto. Esto nos asegura que el bloque siempre acabar en la misma posicin al margen de las variables que usemos o la larga que sea la direccin. En cuanto al programa, el cdigo de ejemplo que se muestra en el listado 1 define una constante Sender (lnea 14). sta lee los datos de un archivo .csv e imprime un sobre como los mostrados en las figuras 2 3 para cada direccin que encuentre.

Trabajo Manual vs Automatizado


La lnea 23 interpreta cualquier lnea que comienza con el smbolo # y un espacio en blanco como comentarios. Esto es muy til si solo queremos imprimir algunas entradas. Facilita muchsimo la tarea poder comentar y excluir todas las entradas que queramos evitar imprimircon el smbolo #. El comando split de la lnea 24 divide lneas donde aparecen comas separadoras. map elimina las comillas dobles. Como la sustitucin s/"//g; no devuelve una cadena como resultado vlido, $_; simplemente se aade. La lnea 27 crea un objeto PostScript::File que usa la palabra clave landscape para rotar el formato de la pgina. reencode => 'ISOLatin1Encoding' proporciona soporte para todos las caracteres Latin1. El formato del sobre se fija en Envelope-DL. Si necesitamos un formato diferente para utilizar un sobre de distinto tamao no tendremos ninguna dificultad para modificar el archivo. Un sobre DIN A6 tienen unas medidas aproximadas de 10.47 centmetros de alto por 14.81 centmetros de ancho. Para que esto se aplique en nuestro porgrama, utilizaremos el siguiente bloque de cdigo:
my $ps = new PostScript::File( landscape => 1, reencode => 'ISOLatin1Encoding', width => cm(10.47), height => cm(14.81), );

Importacin desde Windows


$ADDR_CSV en la lnea 13 especificamos el nombre del archivo de direcciones que debe tener la misma estructura que el mostrado en la figura 2. El comando para enviar un archivo PostScript a nuestra impresora se define en la lnea 17 ($PRINT_CMD). Si deseamos hacer una prueba sin malgastar papel sustituiremos "lpr" por "ghostview" para enviar sobres virtuales para que se visualicen en nuestra pantalla. El cdigo de la lnea 19 abre el archivo de direcciones y el bloque while que comienza en la lnea 22 se repite con las entradas que son analizadas usando expresiones regulares. En lugar de esta tcnica podramos haber usado el mdulo CPAN Text::CSV_XS, aunque esto podra haber sido excesivo para las direcciones de nuestro ejemplo, pues son extremadamente simples y no tienen complicaciones como comillas o comas embebidas.

Empezando en la esquina izquierda inferior del sobre, nos iramos casi 402 puntos hacia la izquierda y 156 hacia arriba para imprimir las letras que ven entre los parntesis en la fuente especificada (Helvetica-iso) y con el tamao especificado (18 puntos) y de izquierda a derecha del papel. Para empezar a programar con PostScript bajo Perl, CPAN proporciona los mdulos PostScript::File y PostScript:: TextBlock para simplificar el asunto. El primero sirve para insertar la cabecera PostScript de la siguiente manera:
%!PS-Adobe-3.0

lo cual se ocupa de cosas como la orientacin de la pgina, los bordes y el orden de la pgina. PostScript::TextBlock acepta lneas mltiples y escribe desde la coordenadas indicadas. No obstante podemos esperar muchas horas de diversin realiyando ajustes en los parmetros de cada mdulo hasta que consigamos producir el formato deseado en el lugar adecuado de la pgina. Normalmente se utiliza el siguiente formato: el bloque de texto con la direccin del remitente comienza aproximadamente 20 milmetros por encima de la esquina inferior derecha en las direcciones x e y. En otras palabras, nosotros no queremos especificar el punto de ini-

Figura 2: No importa si el remitente tiene un nombre corto

www.linuxmagazine.com.es

Nmero 01

39

DESARROLLO

Perl

LISTADO 1: SOBRE
001 #!/usr/bin/perl 002 ############################ 003 # sobre - Papel de impresin sobres 004 # Mike Schilli, 2003 (m@perlmeister.com) 005 ############################ 006 use warnings; 007 use strict; 008 009 use PostScript::File; 010 use PostScript::TextBlock; 011 use File::Temp qw(tempfile); 012 013 my $ADDR_CSV = mailaddr.csv; 014 my $SENDER = q{Steven Sender, 015 9 Sender Street, 016 San Francisco, CA 94107}; 017 my $PRINT_CMD = lpr; 018 019 open FILE, $ADDR_CSV or 020 die Cannot open $ADDR_CSV; 021 022 while(<FILE>) { 023 next if /^\s*#/; 024 my @addr = split /,/, $_; 025 @addr = map { s///g; $_; } @addr; 026 027 my $ps = PostScript::File>new( 028 landscape => 1, 029 reencode =>ISOLatin1Encoding, 030 paper => Envelope-DL, 031 ); 032 033 my ($tmp_fh, $tmp_file) = 034 tempfile(SUFFIX => .ps); 035 036 my($last, $first, $city, $str) = @addr; 037 038 # Remitente 039 my($bw, $bh, $b) = textbox($SENDER, 073 074 $b->addText( 075 font => $font, 071 072 my $b = PostScript:: TextBlock->new(); 066 067 ############################ 068 sub textbox { 069 ############################ 070 my($text, $font, $size, $leading) = @_; 061 062 # Borrar 063 unlink $tmp_file or 064 die Cannot unlink $tmp_file: $!; 065 } 107 108 return $max_width; 109 } 110 111 ############################ 112 sub tb_height { 113 ############################ 114 my($text, $leading) = @_; 115 116 my $lines = 1; 117 $lines++ for $text =~/\n/g; 118 119 return $lines*$leading; 120 } 057 058 # Enviar a impresora 059 system($PRINT_CMD $tmp_file) and 060 die $PRINT_CMD $tmp_file: $!; 040 Helveticaiso, 10, 12); 041 my ($code) = $b->Write($bw, $bh, cm(2), 042 $ps->get_width() - cm(2)); 043 $ps->add_to_page($code); 044 045 # Destinatario 046 my $to = $first $last\n$str\n\n$city\n; 047 ($bw, $bh, $b) = textbox($to, 048 Helveticaiso, 18, 20); 049 ($code) = $b->Write($bw, $bh, 050 $ps->get_height()- $bw cm(2), 051 $bh + cm(2)); 052 $ps->add_to_page($code); 053 054 # Imprimir a archivo temporal 055 (my $base = $tmp_file) =~s/ \.ps$//; 056 $ps->output($base); 076 text => $text, 077 size => $size, 078 leading => $leading); 079 080 return(tb_width($text, $font, $size), 081 tb_height($text, $leading), 082 $b); 083 } 084 085 ############################ 086 sub cm { 087 ############################ 088 return int($_[0]*72/2.54); 089 } 090 091 ############################ 092 sub tb_width { 093 ############################ 094 my($text, $font, $size)= @_; 095 096 $font =~ s/-iso//; 097 098 my $max_width = 0; 099 100 for(split /\n/, $text) { 101 s/[]/A/ig; 102 my $w = 103 PostScript::Metrics:: stringwidth( 104 $_, $font, $size); 105 $max_width = $w if $w > $max_width; 106 }

40

Nmero 01

www.linuxmagazine.com.es

Perl

DESARROLLO

Figura 3: o largo, el offset se mantiene inalterado

La lnea 36 guarda los campos de direccin en las variables $last, $first, $city y $str. La lnea 39 llama a la funcin textbox() (ver una descripcin en detalles de esta funcin ms adelante), que espera unas lneas que contengan el nombre de la fuente y su tamao y el espaciado interlineal en puntos PostScript. Hemos decidido usar Helvetica-iso por que est instalada por defecto. El sufijo -iso tambin soporta caracteres acentuados. textbox() nos devuelve 3 valores: un objeto Post- Script::TextBlock y el ancho y alto de la caja de texto generada en puntos PostScript. Ms adelante, la lnea 41 llama el mtodo Write() usado por el objeto PostScript::TextBlock para crear el cdigo PostScript. Write() espera 4 parmetros: ancho y alto del bloque de texto y las distancias en x e y desde el origen. La anchura y altura las proporciona la funcin textbox() llamada con anterioridad.

Pensando en Offsets
El offset en x (la distancia desde el margen izquierdo) es de unos 2 centmetros, que puede ser expresada utilizando la funcin cm(), definida ms abajo para convertir centmetros a puntos PostScript. El offset en y es ms complicado puesto que Write() espera una distancia desde el margen inferior cuando nosotros necesitamos 2 centmetros desde el margen superior. No debemos preocuparnos puesto que el mtodo $ps->get_ width() del objeto PostScript::File nos proporciona la altura del

sobre y simplemente debemos restar cm(2) de esta en la lnea 42. Debemos saber que PostScript::File mantiene la nocin de ancho y alto al margen de que usemos el modo landscape en el que el papel se rota 90. En nuestro caso, get_width() nos muestra la altura y get_height() la anchura. Write devuelve una lista en la que el primer elemento es el cdigo PostScript del bloque de texto. La lnea 43 aade este cdigo a la pgina PostScript actual. Se utiliza el mismo procedimiento para el destinatario: la lnea 46 concatena nombre y apellidos, la calle y la ciudad. La funcin addresseetextbox() usa una fuente un poco mayor al igual que con el espacio interlineal. El offset en x desde la esquina superior izquierda de la caja de texto hasta el origen del PostScript se calcula restando a la longitud del sobre ($ps ->get_height()) el ancho de la caja de texto ($bw) menos 2 centmetros de borde (cm(2)). El offset en y es la distancia desde el borde superior de la caja de texto hasta el lmite inferior del sobre y es el resultado de sumar 2 centmetros a la altura de la caja de texto ($bh + cm(2)).

archivo, pero como no espera el sufijo .ps, el sufijo se quita primero de la lnea 55 y luego el resultado es escrito a $base. Tras llamar al comando de impresin en la lnea 59, depende de la lnea 63 el que se elimine el archivo temporal obsoleto. textbox() en la lnea 68 crea un Nuevo objeto PostScript::TextBlock y llama al mtodo addText. ste espera el nombre de la fuente y su tamao, el valor del espaciado interlineal ($leading) y el texto que se debe fijar. Para determinar el tamao de la caja de texto que se generar, se llama a tb_width() y tb_height() (tb significa bloque de texto), definidas ms abajo. Mientras que tb_height simplemente necesita multiplicar el espacio interlineal por el nmero de lneas, calcular el espacio horizontal usado es ms complicado debido a la variacin en la anchura de los caracteres.

Asistente para Medir Fuentes


Afortunadamente hay un mdulo llamada PostScript::Metrics con una funcin llamada stringwidth() que usa tablas incrustadas de fuentes para resolver estos problemas. La mala noticia es que el mdulo nunca ha odo hablar de Helvetica-iso. Simplemente quitando el sufijo -iso de la lnea 96 resolvemos este problema, pero impedimos que funcionen caracteres especiales. Esto nos lleva a otra solucin en la lnea 101, donde unos pocos caracteres son simplemente reemplazados por la letra A. si bien esto no genera un resultado preciso, s solucion el problema de nuestro ejemplo. Reconozco que he tenido que usar unos pocos de trucos en esta ocasin, pero mi excusa es que he tenido que encontrar la manera de resolver la incompleta implementacin de los mdulos PostScript::*. Es un precio que estoy dispuesto de pagar, pues me permite elegir la libertad de Linux y evitar todos esos arranques superfluos de WinI dows.

Vida corta
La funcin tempfile() del modulo File::Temp crea un archive temporal con el sufijo PostScript .ps en la lnea 34 y devuelve un handle de archivo que admite escritura y el nombre del archivo. El mtodo output() llamado en la lnea 56 escribe los datos PostScript a este

INFO
[1] Como instalar impresoras en Linux: http://www.linuxprinting.org [2] Shawn Wallace,Perl Graphics Programming: OReilly,2002 [3] Ms informacin sobre PostScript: http:// www.mathematik.uni-ulm.de/help/pstut/

www.linuxmagazine.com.es

Nmero 01

41

DESARROLLO

Pear

Con forma de Pera

Cobertura Total
Si se escribe cdigo en un lenguaje de alto nivel, como PHP, se asegura su funcionalidad en cualquier plataforma. Entonces, Por qu limitarlo a usar un nico servidor de bases de datos? Qu pasa con las plataformas que no soportan MySQL? POR STEVEN GOODWIN
a respuesta a esta preguntas est contenida en las palabras API Genrica. Haciendo uso de una API genrica, nuestro cdigo puede funcionar con diferentes servidores de bases de datos sin necesidad de tener que modificar los archivos de cdigo fuente. Los desarrolladores de PHP son muy conscientes de esta ventaja y, en los ltimos aos se han dirigido esfuerzos a solventar la carencia de la que adoleca PHP en este rea. Este mes, en nuestra seccin dedicada a PHP, Steven Goodwin presenta PEAR:DB.

Arte Abstracto
PEAR::DB es un mdulo de PHP que permite el control de una base de datos sin necesidad de especificar ningn servidor de bases de datos en concreto. Esto significa que el mismo cdigo se puede utilizar para acceder a MySQL y Oracle, por poner un ejemplo. As pues, cmo funciona? Gracias a la abstraccin, que permite hacer una generalizacin de un sistema, o de una API, de modo que los detalles queden ocultos. La mayora de nosotros usamos abstracciones (a menudo sin darnos cuenta de ello). Incluso los programadores de C, supuestamente los tipos ms duros del mundo del desarrollo software, hacen que sus

vidas sean ms fciles gracias a las abstracciones. Cada funcin, expresin y sentencia abstrae algn detalle especfico del hardware del procesador al programador por medio del lenguaje C. Esto se conoce como abstraccin de bajo nivel. Otro ejemplo de abstraccin se produce cada vey que interactuamos con una base de datos a travs de cualquier motor SQL. La programacin de bases de datos por medio de SQL es una abstraccin de alto nivel. La base de datos (ya sea MySQL, PostgreSQL u Oracle) puede funcionar de cualquier forma, ajustarse a cualquier algoritmo y hacer uso de cualquier archivo. Pero usando un lenguaje genrico (SQL) con el que comunicarnos, no necesitamos preocuparnos ms por los aspectos especficos. Al contrario, podemos dedicar nuestro tiempo a tareas ms importantes, como crear consultas select e inner joins eficientes. Esta abstraccin no se extiende a la forma en que programamos las bases de datos, ya que cada una de ellas tiene su propia API. Esto se ve en PHP, donde se puede empezar un dilogo con una base de datos MySQL llamada fredbloggs usando,
$db = mysql_connect("localhost",U "myuser", "mypass"); mysql_select_db("fredbloggs");

Acerca de Pear
PEAR son las siglas de PHP Extension and Application Repository (aunque algunos prefieren sustituir Application por Add-on) y es una biblioteca de funciones de cdigo PHP, similar a CPAN de Perl. Adems del mdulo para el manejo de bases de datos (DB), tambin hay cdigo para el manejo de HTML, autenticacin y criptografa.

mientras que PostgreSQL necesita,


$db = pg_connect("host=localhostU dbname=fredbloggs user=myuserU password=mypass");

Aunque la mayora de estos parmetros son opcionales, la migracin de cdigo entre bases de datos es an ms ardua. Toda conexin, consulta y manejo de errores debe ser reescrito para ajustarse a la nueva base de datos cada vez que se desee utiliyar un sistema de almacenamiento y su correspondiente motor diferentes. Esto no slo supone una modficiacin en lo que se refiere al nombre de la funcin sino que tambin cambia la estructura y el formato de los argumentos. Otro problema es que los cdigos de error devueltos por el motor varan de sistema sitema, lo que hace que sean difciles de interpretar. La solucin a todos estos dilemas, ya la hemos mencionado, consiste en abstraer la funcin database_connect de la base de datos especfica y usar una llamada a una API genrica. Esto debe hacerse para cada funcin especfica de la base de datos. Desafortunadamente, si pretendemos crear la APi nosotros mismos, esta tarea supone mucho trabajo Pero, al fin y al cabo, estamos hablando de cdigo libre, con una comunidad de desarrolladores muy activa, y las buenas noticias son que alguien ya lo ha hecho por nosotros. Hay un par de APIs de bases de datos para PHP. El objetivo de este artculo es PEAR::DB, uno de los muchos mdulos PEAR (ver cuadro Acerca de PEAR) disponible en [1]. Est bajo desarrollo constante e incluye a algunos miembros del equipo del ncleo

42

Nmero 01

www.linuxmagazine.com.es

Pear

DESARROLLO

de PHP. La versin actual considerada estable es la 1.6.0. Para aquellos que quieran comparar alternativas estn tambin ADOdb [2], Metabase [3] y PHPlib [4]. La adopcin de MySQL ha sido, a la vey que una bendicin, una maldicin para los desarrolladores de PHP. En el lado positivo podemos dqecir que se integra bien con la instalacin por defecto, significando que cualquiera puede desarrollar buenos sitios webs con bases de datos con el mnimo esfuerzo. Desafortunadamente, esto lleva a creer a muchos desarrolladores que no hay otros sistemas de bases de datos. O que no estn bien soportadas. Nada ms lejos de la realidad, como puede verse en la tabla 2, Bases de datos soportadas. Para mayor informacin se puede consultar el archivo docs/STATUS. En este artculo utilizaremos PEAR::DB con MySQL para adminsitrar una base de datos que contenga informacin sobre cadenas de televisin y su sintona. Esto podras servir, por ejemplo, para controlar programticamente una tarjeta de televisin, permitiendo que se sintonizase cada canal a travs de una aplicacin.

de la claridad) nos encontramos con no menos de 5 referencias separadas a MySQL. En vez de referenciar la tabla con tv.channels, algunos programadores prefieren especificar una base de datos por defecto usando:
mysql_select_db("tv");

DSN as array
01 02 03 04 05 06 07 08 $dsn = array( 'phptype' => "mysql", 'hostspec' => "localhost", 'database' => "tv", 'username' => "www-data", 'password' => "" ); $db = DB::connect($dsn);

Esta funcin es equivalente al comando use en el prompt de MySQL, pero aade otra llamada especfica a MySQL. En el momento de cambiar a un nuevo servidor de base de datos, nos encontramos conq que cada referencia a mysql tendra que ser rescrita. Con ms funciones, manipulando ms bases de datos, la cantidad de cdigo redundante crece de manera exponencial hasta el punto de ser inmanejable. Normalmente la nica concesin a la hora de mantener el cdigo al migrar a otro host consiste en un archivo independiente con el nombre del host, el usuario y la contrasea, por ejemplo, podemos tener un fichero como dbase.inc:
$dbhost $dbuser $dbpass $dbname = = = = 'localhost'; 'www-data'; ''; 'tv';

PEAR el manual on-line en [6] contiene toda la informacin necesaria para llevar a cabo la instalacin y configuracin del paquete. Otra opcin consiste en copiar los archivos en el directorio home (~/pear/) y modificar el path de PHP. Esta alternativa ser necesaria cuando el usuario no tenga los permisos de root en la mquina, como es el caso de muchos servicios de hosting. Por ejemplo:
<?php ini_set('include_path',U '~/pear/lib'.PATH_SEPARATOR.iniU _get('include_path'));?>

Manos a la obra
Pondremos las entradas (emisoras, canales y nombres) en una base de datos. De modo que pueda ser usado como parte de una aplicacin para el control de una cadena de TV ms grande, ver Listado 1. Para empezar, hay que tomar este sqldump e introducirlo en la base de datos de la forma habitual, permitiendo el acceso al usuario apropiado (www-data, por ejemplo). Esta base de datos puede ser accedida por MySQL con el Listado 2. En esta seccin de cdigo (de la que se ha extrado el manejo de errores en aras

Pero normalmentes esto suele ser muy insuficiente. Parte de lo anterior, necesitamos una capa de abstraccin, como PEAR::DB. La mayora de las instalaciones PHP incluyen la biblioteca PEAR::DB por defecto, y se puede encontrar los mdulos que lo componen en /usr/share/pear. Para confirmar que est instalado en el sistema y que se halla en la ruta de acceso a ficherso de inclusin de PHP, podemos crear una fichero testpear.php con el siguiente contenido:
<?php require_once 'DB.php'; ?>

Ahora se dispondr de acceso a nuevas funciones de bases de datos, todas ellas de acuerdo con las convenciones de nombrado de PEAR. Dnde empezar? El lugar obvio es por las funciones bsicas, connect y close. Habindole echado un vistazo previo a las versiones de MySQL y PostgreSQL, para empeyar a utilizar PEAR::DB se requiere que el desarrollador adopte un ligero cambio de perspectiva. Por ejemplo, para bases de datos que precisan ms (o menos) parmetros que las dos mencionadas, una funcin simple que sustituya los parmetros no funcionar. En vez de esto, debemos especificar un Nombre de Fuente de Datos o DSN. Esto incluye todos los posibles argumentos dentro de una cadena nica con formato. El formato completo es:
phptype(dbsyntax)://username:U password@protocol+hostspec/U databasename

Tabla 1: Opciones de portabilidad


Opcin
DB_PORTABILITY_LOWERCASE DB_PORTABILITY_RTRIM DB_PORTABILITY_DELETE_COUNT DB_PORTABILITY_NUMROWS DB_PORTABILITY_ERRORS

Descripcin
Convierte los nombres de campos y tablas a minscu las (en los fetch y get) Elimina los espacios en blanco de la derecha Informa siempre del nmero de filas borradas Una copia del numRows de Oracle Convierte los nmeros de error entre distintas bases de datos

DB_PORTABILITY_NULL_TO_EMPTY Convierte los nulls en cadenas vacas(en los fetch y get) porque Oracle no los diferencia

Si lo anterior no funciona, se puede instalar o bien usando el PEAR Packet Manager (tecleando pear install DB), o manualmente con un tarball. Para ms detalles de la instalacin de

El DSN tiene el aspecto de una URL. Describe donde conectarse, como conectarse y que base de datos y opciones utilizar una vez establecida la conexin. Estas lneas recogen dos partes. La primera parte describe los parmetros

www.linuxmagazine.com.es

Nmero 01

43

DESARROLLO

Pear

especficos del servidor de base de datos e incluye el tipo de base de datos (llamado phptype, ej. mysql) y cualquier opcin especfica dada por dbsyntax. Una lista de phptypes se muestra en la Tabla 2. El ejemplo citado de dbsyntax es el nombre de un driver especfico cuando se usa una conexin ODBC (ej. access, db2, mssql). Esto no es difcil de determinar, pero afecta ms a los usuarios de Windows que a nosotros, por ello no tenemos que profundizar ms en este tema. La segunda parte del DSN contiene todo aquello que es dependiente de la base de datos, como el nombre del host, el puerto, el nombre del usuario y la contrasea. Como en la tpica funcin mysql_connect, no todos los parmetros son obligatorios y pueden ser omitidos si no son necesarios. Por ejemplo:
mysql://www-data@localhost/tv

dantes de desarrollo (para controlar la cantidad de mensajes de depuracin producidos). Como estas opciones pueden variar entre consultas especficas, no las incluiremos dentro del DSN. Por el contrario crearemos un array detallando las opciones y lo pasaremos como argumento a la funcin DB::connect de forma separada.
// Recordar que estas variablesU han de ser declaradas de formaU global $dsn = "$dbbackend://$dbuserU @$dbhost/$dbname"; $options = array('debug' => 2); $db =& DB::connect($dsn,U $options);

Entonces, tendremos que adaptar nuestras funciones existentes para usar el nuevo objeto y sus funciones miembros asociadas. Esto no es difcil, ya que tienen nombres muy parecidas a las versiones originales de MySQL pero siguiendo las convenciones de nombres de PEAR. As pues, mysql_query se convierte en query, por poner un ejemplo. Las funciones bsicas aparecen en el Listado 3.

Al grano
Como todas las peticiones a la base de datos pasan por el controlador PEAR::DB, el cdigo tiene que tener la habilidad de cambiar y modificarse en las peticiones. Esto se hace en aras de una mayor portabilidad. Y podemos darle ms o menos opciones haciendo uso del mtodo setOption que ya hemos visto con anterioridad. Este mtodo permite establecer un nmero diferente de opciones conforme a las necesidades que precisemos. Estas opciones normalmente estn para facilitar la portabilidad a costa del rendimiento, y dependen de una manera muy especfica de cada aplicacin. Otro uso al que se pueden aplicar es para permitir la coexistencia de cdigo antiguo dentro de PEAR::DB. Dentro del desarollo con bases de datos, la conevnsin dicat que la mayora de los nombres de tablas aparecen en minsculas. Si una aplicacin est intentando obtener filas usando una mezcla de maysculas y minsculas, por ejemplo, entonces estos nombres se convertirn de forma automtica a minsculas.
$db->setOption('portability',U DB_PORTABILITY_LOWERCASE);

Tenemos la posibilidad de realizar modificaciones en estos parmetros en cualquier momento con la utilizacin de la siguiente funcin:
$db->setOption('debug', 0);

Naturalmente, nuestro cdigo final almacenar todos estos parmetros en un archivo genrico dbase.inc, como se mostr antes. El DSN no tiene por qu ser especificado por una cadena. Tambin puede ser definido por un array (como se muestra en el cuadro DSN como Array), haciendo ligeramente ms rpida la inicializacin ya que no se ha de analizar la cadena. El DSN nos permite especificar las opciones de inicializacin usando un mtodo inspirado en una URL ?opcion1=valor1&opcion2=valor2. Hay varias opciones disponibles, incluyendo tanto caractersticas prcticas de conexin (uso de SSL) como ayu-

En el caso de que la conexin no falle por algn motivo (echaremos un vistazo a las posibilidades del manejo de errores ms adelante), tendremos un objeto de base de datos llamado $db que se utilizar en todas las llamadas a esta base de datos en concreto. Por ejemplo, para cerrar la conexin despus de su uso, haremos:
$db->disconnect();

Tabla3: Soporte de provides


Cadena
prepare pconnect transactions ciones limit

Funcionalidad
Pre-comprueba la consulta SQL Conexiones persistentes Activa el soporte de transacLimita las consultas select

Tabla 2: Bases de Datos soportadas


Nombre
dBase FrontBase InterBase Informix Mini SQL Microsoft SQL Server MySQL MySQL >=4.1 Oracle 7/8/9 ODBC PostgreSQL SQLite Sybase

Palabra reservada
dbase fbsql ibase ifx msql mssql mysql mysql4 oci8 odbc pgsql sqlite sybase

Tabla 4: Diferencias entre versiones de SQL


Base de Dato
DB2 Informix Microsoft SQL Server MySQL Oracle 8i PostgreSQL

Sintaxis SQL
select * from table fetch first 10 rows only select first 10 * from table select top 10 * from table select * from table limit 10 select * from (select * from table) where rownum <= 10 select * from table limit 10

Esto elimina las sorpresas que pueden surgir cuando un trozo de cdigo desconocido se ejecuta y da un error de ejecucin. Otras opciones pueden verse en la Tabla 1. Los valores por defecto para estas opciones tienen como objetivo mejorar el rendimiento, pero est a la eleccin de uno determinar cuales se deben establecer en la aplicacin. Hay tambin definiciones para DB_PORTABILITY_ALL y DB_PORTABILITY_NONE que permiten el activar todas las opciones o desactivarlas respectivamente.

44

Nmero 01

www.linuxmagazine.com.es

Pear

DESARROLLO

Sigamos adelante
No toda la funcionalidad est dirigida a que el acceso a la base de datos sea ms fcil. fetchRow, por ejemplo, hace mas fcil obtener datos en un formato programtico ms amigable. Actualmente PEAR_DB soporta tres formatos de este tipo. Por defecto se usa un array, indexado desde cero, como se muestra en el cuadro adjunto. Los parmetros opcionales de DB_FECTHMODE_ORDERED han sido omitidos en el ejemplo anterior. Esto es til para manejar bases de datos genricas o para mostrar tablas sin la necesidad de saber el nombre de sus campos. En la mayora de las situaciones, sin embargo, los ndices numricos no son lo suficientemente descriptivos y tenemos que solicitar que los datos nos sean devueltos en un array asociativo. De esta forma los resultados aparecen en el cdigo de una forma ms legible a costa de sacrificar generalidad.
while($row = $result->fetchRowU (DB_FETCHMODE_ASSOC)) { print $row['station']." - U ".$row['name']." (".$rowU ['channel'].")<br>"; }

errores de PEAR_Error. Pero si una funcin de PEAR::DB produce un fallo, la mayora devolver una instancia de la clase error, desde connect hasta getRow. Esta clase no solo controla los errores de PEAR, sino que tambin proporciona informacin extra al depurador, lo cual es til a la hora de detectar problemas.
$db=& DB::connect (&dsn); U //DB::Error es los mismo queU PEAR::isError if (DB::isError($db)) { print $db->getMessage(); print $db->getDebugInfo(); }

12 ob_end_clean(); 13 print "Se ha producido un ERROR (".$err-> getMessage().")"); 14 exit; 15 }

Rizando el rizo
PEAR::DB realmente es tan fcil como parece. La complejidad viene del SQL. PEAR::DB slo sirve para protegerte en cierta medida de esto. SQL existe desde hace muchos aos. Debido a las guerras comerciales entre distintos vendedores, han surgido distintas variantes de SQL que son incompatibles entre s. Aunque ANSI ha intentado estandarizar algunas partes del lenguaje (las versiones bsicas de select, insert y update, las cuales son bastante portables), existen an muchas diferencias. Escribir SQL estndar es una tarea rdua en s misma y hay que saber y adoptar varias reglas. La mayora de los programadores expertos en bases de datos las conocen de forma instintiva, el resto de los mortales tienen que aprenderlas de tutoriales tales como [7]. En algunos casos, podramos desear usar diferentes consultas dependiendo de como reaccione la base de datos. Esto requiere trabajo extra ya sea de nosotros o de PEAR::DB. Desafortunadamente, una vez que hemos sacado la base de datos de la ecuacin, no tenemos forma alguna de saber si es capaz de hacer lo que pretendemos. PEAR::DB tiene conocimiento de este problema y utiliza un mtodo llamado provides. provides indica las caractersticas propias del servidor de base de datos que se est usando, nos permite cambiar entre dos consultas afinadas a mano para ayudarnos a mejorar el rendimiento en casos especiales. Usamos las capacidades (otra abstraccin) en vez de funciones especficas de la base de datos porque las cosas cambian. Por ejemplo, una versin posterior de la base de datos podra soportar nuevas caractersticas o podra aparecer un nuevo tipo de servidor en el mercado. El mtodo PEAR::DB provides suministra un medio para usar la consulta ms ptima en la base de datos sin la necesidad de entender nada acerca de las nuevas bases de datos.
if ($db->providesU

Por ltimo, fetchRow proporciona un medio para usar las caractersticas de la orientacin a objetos de PHP para devolver un objeto por cada fila de la tabla de resultados. Cada columna est etiquetada como un atributo. De nuevo, esto hace que el cdigo sea ms fcil de leer, pero hace que la aplicacin sea menos genrica.
while($row = $result->fetchRowU (DB_FETCHMODE_OBJECT)) { print $row->station." - U ".$row->name." (".$row->U channel.")<br>"; }

Los errores tambin pueden ser capturados usando el manejo de errores estndar de PEAR. Esto se hace con unas funciones definidas por el usuario que sern llamadas cada vez que un modulo de PEAR (como DB) genere un error. Esta funcin puede usarse para generar una pgina HTML estndar para el usuario, al mismo tiempo que tambin puede alertar al administrador del problema. El manejo de errores tradicionalmente est combinado con las caractersticas de escritura en el buffer de salida de PHP, permitiendo a cualquier pgina parcialmente generada sea eliminada del flujo de salida HTML. Como esto es una caracterstica de PEAR, no de PHP, los errores tradicionales (como la divisin por cero) no sern capturados por este mtodo.
01 // Preparacin del handler 02 PEAR::setErrorHandling U (PEAR_ERROR_CALLBACK,U 'error_function'); 03 //Activamos el buffer deU salida 04 ob_start(); 05 // Realizamos alguna tarea 06 PearVersion(); 07 // Volcamos el buffer aU la salida (si todo ha ido U bien) 08 ob_end_flush(); 09 // Preparamos nuestro U handler 10 function U error_function($err) 11 {

Allanando el camino
Ningn programa est terminado sin un control de manejo de errores y la documentacin correspondiente. Ninguno de los dos son atractivos desde el punto de vista del programador pero son muy necesarios. Las opciones de manejo de errores de PEAR::DB han sido unificadas (como los cdigos de error) y hacen uso de las capacidades bsicas de manejo de

www.linuxmagazine.com.es

Nmero 01

45

DESARROLLO

Pear

Listado 1: La Base de Datos TV


01 02 03 04 05 06 07 08 09 10 11 12 13 14 CREATE DATABASE IF NOT EXISTS tv; USE tv; drop table IF EXISTS channels; CREATE TABLE channels ( station smallint(2) NOT NULL default '0', channel smallint(2) default NULL, name varchar(10) default NULL, PRIMARY KEY (station) ) TYPE=MyISAM; INSERT INTO channel VALUES (1,55,'TVE1'); INSERT INTO channel VALUES (2,62,'La 2'); INSERT INTO channel VALUES (3,59,'Telecinco'); INSERT INTO channel VALUES (4,65,'Antena 3'); INSERT INTO channel VALUES (5,37,'Canal +'); 01 02 03 04 05 06 07 08 09 10 11 12 13

Listado 3: Convenciones para los nombres PEAR


function PearVersion() { global $dbname, $dbhost, $dbuser, $dbbackend; $dsn = "$dbbackend://$dbuser@$dbhost/$dbname"; $db =& DB::connect($dsn); $query = 'SELECT * FROM channels'; $result = $db->query($query); while ($row = $result->fetchRow()) { print "$row[0] - $row[2]($row[1])<br>"; } $result->free(); $db->disconnect(); }

('transactions')) print "OK! Estn soportadas";

El abanico de caractersticas para las que podemos usar provides se muestran en la Tabla 3. En cada caso es posible que la base de datos no soporte de forma nativa la caracterstica. La palabra clave aqu es nativa, porque hay que diferenciar entre el servidor de la base de datos y el driver PEAR::DB. Por ejemplo, si la base de datos no soporta comandos prepare/execute, el driver soportar la apariencia del comando de forma simulada. Se puede estar tentado a usar provides para crear consultas completamente diferentes para cada base de datos de $query = "SELECT name FROMU forma manual. En la mayora de los channels";// sin referenciasU casos esto es innecesario y desde luego a lmites aqu! es Una mala IdeaTM. La razn (algunos $result = limitQueryU diran excusa) para este comportamiento ($query, 2, 1); viene de las extensiones que aparecen en SQL. El ejemplo tpico de este problema Este comando extrae una lnea de resulviene de las consultas select limitadas, tado de la consulta, empezando por el que paran de producir resultados Listado 2: Acceso a MySQL despus de las 01 function GetStationsList() primeras, digamos, 02 { 10 filas. La mayora 03 $db = mysql_connect("localhost","www-data", ""); de las bases de 04 $query = "SELECT * FROM tv.channels"; datos actuales son 05 $result = mysql_query($query); capaces de tener 06 while ($row = este comportammysql_fetch_array($result,MYSQL_NUM)) { iento, pero con 07 print "$row[0] - $row[2]($row[1])<br>"; cadenas de consul08 } tas SQL diferentes, 09 mysql_free_result($result); como se muestra 10 mysql_close($db); en la tabla 4. Codi11 } ficar cada ejemplo

explcitamente provocara un montn de trabajo extra. Tambin, como no podemos probar cada base de datos (incluidas las nuevas, incluso las no escritas an) nuestro cdigo se volvera no-portable de forma muy rpida. Este problema es fcil de resolver, sin embargo, empleando el mismo principio de abstraccin. PEAR::DB proporciona un mtodo llamado limitQuery que oculta la sintaxis precisa al usuario final y adapta de forma adecuada la consulta al servidor. Esto obviamente tiene ms sentido que escribir consultas separadas para cada una de las bases de datos por nosotros mismos.

ndice 2. Como empezamos a contar desde 0, esto significa la tercera entrada. Si la consulta SQL select puede ser modificada para crear una cadena adecuada para la base de datos en cuestin, $db->provides("limit") ; devolver alter, y la consulta ser modificada por el controlador de PEAR::DB antes de ser pasada al servidor. Por otro lado, provides puede devolver emulate, porque el driver es capaz de capturar los resultados de las consultas fila a fila. O devolver false. Se debera siempre preguntar por las caractersticas de las bases de datos usando provides en vez de confiar en nuestra experiencia o en la memoria. Sin embargo, por comparacin, el conjunto de controladores actuales proporcionan la funcionalidad que muestra en la Tabla 5. En algunos casos raros, es necesario saber la base de datos que se est utilizando de forma precisa. Normalmente debido a bugs conocidos en la base de datos misma. Son un hecho de vida. Pero si no podemos eliminarlos, tendremos que saber donde estn para al menos poder evitarlos.
print $db->phptype;

Utiliza los mismos identificadores que se muestran en la tabla 2. Los detalles referentes a los bugs conocidos en bases de datos concretas, van ms all del objetivo de este artculo.

Slo para Ti
Como complemento especial, PEAR::DB no slo proporciona abstracciones de bases de datos. Tambin incluye algunas

46

Nmero 01

www.linuxmagazine.com.es

Pear

DESARROLLO

Example Interface Files


01 $tableinfo = $result->tableInfo()); 02 for($col=0; $col < $result->numCols(); $col++) { 03 print $tableinfo[$col]['name']." es un ".$tableinfo[$col]['type']; 04 }

ayudas para el manejo de datos, como son numRows y numCols.


print "La consulta selectU produjo ".$result->numRows()U . " filas"; print "La consulta selectU produjo ".result->numCols()U . " columnas";

Los resultados de estas consultas son bastante autoexplicativas, y pueden ser deducidas de la propia consulta select. Cuando la consulta es generada automticamente, podemos evitar tener que contar las columnas manualmente. Podramos usar estos valores para iterar sobre los resultados. Hay tambin un mtodo llamado table-

Info que proporciona informacin sobre cada columna del resultado, como es su nombre y tipo. Esto no es slo til mientras estamos depurando el programa, sino incluso para crear aplicaciones de bases de datos generalizadas. Podemos colorear cada columna segn su tipo, o resaltar algn campo clave. Para ver como funciona esto, ver listado 4. Adems del nombre y del tipo, se puede consultar la longitud de cada columna, flags (que indiquen si son claves primarias) y el nombre de la tabla, usando la sintaxis apropiada. Aunque la mayora de las API soportan las consultas select, hay an algunos problemillas a solventar con otros tipos de consultas como los insert. Un mtodo interesante es affectedRows. Este mtodo, como podr se adivinar, devuelve el nmero de filas que han sido afectadas por una consulta insert, delete o update. Hay tambin soporte para generar IDs nicos usando funciones de secuencia, nextID, que es til para generar claves nicas, algo no soportado de forma nativa en MySQL. Por ejemplo:
// Obtencin de un nuevo ID. $id = $db->nextID('sequence'); U // La secuencia ser creada deU no existir

ciales, de manera que se pueda ejecutar mltiples veces con los datos diferentes contenidos en dichas variables. Ver listado 6. El mtodo executeMultiple se evala a la consulta SQL,
INSERT INTO channels (station,U name, channel) VALUES (6, "Video",U 0); INSERT INTO channels (station,U name, channel) VALUES (7,U "PS2", 39);

executeMultiple se parar al primer error que ocurra. Para evitar esto, se necesitar ejecutar cada consulta cada vez con el mtodo execute. Por ejemplo,
foreach ($data as $row) { $db->execute($generic, $row); }

Listado 5 : assertExtension
01 if(DB::assertExtension("oci8") ) 02 print "Usamos Oracle si tenemos que..."; 03 if (DB::assertExtension("mysql")) 04 print "Usamos MySQL porque lo entendemos mejor...";

Conivene siempre recordar que el array de datos empieza a indexarse desde cero. En la mayora de los casos se podr ver una mejora en la velocidad cuando varias entradas se introduzcan en la base de datos de una vez. Este beneficio presupone que la base de datos soporta esta caracterstica de forma nativa, algo que no siempre sucede.

Listado 6: Preparando una consulta


01 $generic = $db->prepare("INSERT INTO channels (station, name, channel) VALUES (?, ?, ?)"); 02 $data = array ( 03 array(6, "Video", 0), 04 array(7, "PS2", 39) 05 ); 06 $res = $db->executeMultiple($generic, $data);

Otra caracterstica til es el mtodo de clase (declarado static) assertExtension. Este mtodo, siendo de clase, no requiere de una instancia de la clase base de datos para ser invocado e indicar que caractersticas estn incluidas en la instalacin actual. En su forma ms til, se puede determinar que bases de datos estn instaladas en el sistema y seleccionar la ms adecuada para usarla en la aplicacin. Ver Listado 5. A pesar de su nombre, esto no es una asercin tal y como se suele entender tradicionalmente en programacin, ya que no imprime ningn error y no tiene que cumplirse ninguna condicin. Simplemente indica si una extensin existe o no. Antes de terminar, mencionaremos de pasada la pareja prepare y execute. prepare prepara (valga la redundancia) una consulta para una ejecucin repetida precompilndola en tokens. La consulta estar preparada para admitir distinta informacin en unas variables espe-

Conclusin
Con PEAR::DB en el arsenal, se pueden atacar la mayora de las bases de datos, sin tener que preocuparse de caractersticas no soportadas o de funciones no disponibles. Usando las funciones y el amplio rango de mtodos disponibles, podemos escribir en PHP buenas aplicaciones para mltiples plataformas sin preocuparnos de las minucias de la batalla y as pues, podremos concentrarnos en pensar en las estrategias para I ganar la guerra.

INFO
[1] PEAR: http://www.pear.php.net [2] ADOdb: http://php.weblogs.com/adodb [3] Metabase: http://freshmeat.net/ projects/metabase/ [4] PHPlib:http: // phplib.sourceforge.net/ [6] Manula de PEAR: http://www.pear.php.net/manual/ en/installation.cli.php [7] Como Escribir Cdigo SQL Portable: http://php.weblogs. com/portable_sql

www.linuxmagazine.com.es

Nmero 01

47

DESARROLLO

Python

Python: Potencia y sencillez multiplataforma

Lenguaje Todoterreno
{ printf("Hola Mundo"); }

Hola Mundo en Java


public static voidU main(String args[]) { System.out.println("HolaU Mundo"); }

Hola Mundo en Python


print "Hola Mundo"
www.daimlerchrysler.com

Python es un lenguaje potente, seguro, flexible pero sobre todo sencillo y rpido de aprender, que nos permite crear todo lo que necesitamos en nuestras aplicaciones, de forma rpida y eficaz.
POR JOS MARA RUZ Y JOS PEDRO ORANTES

ara empezar, debemos saber por qu Python es interesante, por qu es tan famoso y cada vez es ms utilizado. Mirando un poco por Internet, se pueden encontrar multitud de aplicaciones que nos muestran un poco las capacidades de este lenguaje de alto nivel. Primero, Python es un lenguaje orientado a objetos, esto no significa que lo sea exclusivamente, podemos utilizarlo como queramos, aunque es mas natural utilizar su implementacin de la OOP. Adems, es libre y gratuito pudiendo descargar el intrprete y su cdigo fuente. Nos permite programarlo como script, lo que posibilita ver el cdigo fuente de aquellas aplicaciones que as

estn desarrolladas, o bien podremos compilarlo obteniendo un Bytecode al igual que java. Es portable y nos permite ejecutar nuestros programas en cualquier sistema operativo y/o arquitectura teniendo previamente el intrprete instalado en nuestro ordenador. Realizar un programa bajo este lenguaje, seguramente nos costara entre la mitad o la cuarta parte del tiempo que tardaramos en desarrollar el mismo programa en C/ C++ o Java esto hace que sea muy potente. Veamos una breve comparativa con otros lenguajes: Hola Mundo en C.
main ()

Python dispone de otras caractersticas que lo convierten en el lenguaje favorito de una comunidad de desarrolladores cada vez ms amplia. Por ejemplo, permite la declaracin dinmica de variables, es decir, no tenemos que declarar las variables y no tenemos que tener en cuenta su tamao, ya que son completamente dinmicas. Dispone tambin de un gestor de memoria que, de manera similar al recolector de basuras de java, se encargar de liberar la memoria de objetos no utilizados. Sin embargo, y al igual que Java, no nos permite referirnos a zonas de memoria a bajo nivel, como puede hacerse con C. Adems se puede combinar con otros mltiples lenguajes de programacin. Podemos mezclar en nuestras aplicaciones Python y Java (Jython), por ejemplo. O Python con C/C++, lo cual hace que resulte mas potente si cabe. Python tambin cuenta con una amplia biblioteca de mdulos que, al estilo de las bibliotecas en C, permiten un desarrollo rpido y eficiente. La sencillez de Python tambin ayuda a que los programas escritos en este lenguaje sean muy sintticos. Como podemos ver en la comparativa anterior, la simplicidad llega a ser asombrosa y solo hemos escrito un simple ejemplo. Si este programa ya supone ahorrarte unas

48

Nmero 01

www.linuxmagazine.com.es

Python

DESARROLLO

lneas de cdigo, con una sintaxis tan sencilla y ordenada podemos imaginar que un programa de 1000 lineas en Java, en Python podran ser alrededor de 250. Muy bien, pero como se usa?

Uso
Para empezar a matar el gusanillo, podemos ir haciendo algunas pruebas interesantes. Vayamos al intrprete Python. Para esto, basta con escribir python en cualquier shell en cualquier versin de Linux que tenga instalado el intrprete (si no lo tienes instalado, hazte con la ltima versin en [1]). Entonces podemos probar el Hello World:
>>> print 'Hello World' Hello World

Esto es importante porque, mientras la norma en la mayora de los lenguajes es dejar al programador la decisin de la manera en que deben ser formateados los archivos fuente, en Python es obligatorio seguir una metodologa. En Python todo se hace de una sola manera, es parte de su filosofa: Solo Hay Una Manera de Hacer Las Cosas. Comencemos con lo ms simple en todo lenguaje, la asignacin a una variable:
cantidad = 166.386

En lo que se refiere al tema de los bucles en Python es algo especial. Puede que estemos acostumbrados a los bucles tipo C:
for(int a = 1; a < 10; a++)U printf("%d\n",a);

Sin embargo, en Python, se toma un enfoque funcional prestado de otros lenguajes como Lisp o Haskell. Se utiliza una funcin especial llamada range que genera una lista de nmeros:
range(1,10)

Lo primero que hay que apreciar es que no se usa el ;. Esto es una caracterstica de las muchas que hacen a Python diferente. Una instruccin acaba con el retorno de carro, aunque el ; se puede utilizar cuando tenemos dos sentencias estn en la misma lnea:
cantidad = 166.386; pesetasU = 3000

generar una ristra de nmeros del 1 al 9. De manera que podemos utilizar una funcin range para crear un bucle for en Python de la siguiente manera:
for i in range(1,10)

Simple, verdad?, ahora podemos probar a utilizar algunas variables:


>>> suma = 15 + 16 >>> >>> print 'el resultado de laU suma es: ', suma el resultado de la suma es: 31

Es recomendable trastear un poco con esto, antes de ponernos a programar algo ms complicado, ya que de esta manera es ms sencillo hacerse con la sintaxis mucho mas rpidamente viendo los resultados de cada prueba. Veamos ahora alguna propiedad interesante de Python. Los ficheros en Python, no tienen por que llevar extensin ninguna aunque seguramente querremos tenerlos diferenciados del resto de nuestros ficheros. Para ello se utiliza la extensin .py o bien .pyw. Imaginemos que tenemos un ejemplo ejemplo.py, al permitirnos usarlo como script, podemos indicarle la ruta del intrprete en el inicio (#!/usr/bin/python en nuestro caso) y dndole permisos de ejecucin (en este caso, chmod +x ejemplo.py) obtenemos un programa listo para correr ./ejemplo.py.
#! /usr/bin/python print 'Hello World'<C>

Como es un lenguaje dinmico no hay que declarar el tipo de las variables, pero una vez han sido definidas, lo que se hace asignndoles un valor, stas guardan su tipo y no lo cambiarn a lo largo de la ejecucin del programa. Tenemos a nuestra disposicin los operadores de siempre (+, -, *, /, etc) y una vez que sabemos como manejarlos y como asignar las variables, podemos realizar algo til, pero lineal. Para que la ejecucin no sea lineal necesitamos los bucles y los condicionales.

Este bucle iterara con i desde 1 a 9, ambos inclusive. La versin del bucle while en Python es ms normal
while(<I><condicin><I>)

al igual que if
if (<I><condicin><I>)

Por qu no hay puestos cuerpos de ejemplo en esos bucles? Pues porque ahora viene otra novedad. En Python no se usan las famosas { y } de C, Java y otros lenguajes. Se decidi, y no a todo

Despus de toda la introduccin tcnica va siendo hora de que veamos como es el formato de los programas en Python.

Figura 1: Utilizacin de Python como una calculadora

www.linuxmagazine.com.es

Nmero 01

49

DESARROLLO

Python

el mundo le gusta, que se usara la posicin como delimitador. Esto as suena algo extrao, pero si se ve es mucho ms sencillo:
>>> cantidad = 2 >>> for i in range(1,10): print cantidad*i

Listado 2: Adicin y eliminacin de elementos de una lista


01 >>> b = [ 1 , 2 , 1 ] 02 >>> b.append(3) 03 >>> b.append(4) 04 >>> b 05 [1 , 2 , 1 , 3 , 4 ] 06 >>> b.remove(1) 07 >>> b 08 [2, 1, 3, 4] 09 >>> b.pop() 10 4 11 >>> b 12 [2, 1, 3] 13 >>> b.insert(1,57) 14 >>> b 15 [2, 57, 1, 3] 16 >>> b.append(1) 17 >>> b 18 [2, 57, 1, 3, 1] 19 >>> b.count(1) 20 2 21 >>> b.index(57) 22 1 23 >>> b.sort() 24 >>> b 25 [1, 1, 2, 3, 57] 26 >>> b.reverse() 27 >>> b 28 [57, 3, 2, 1, 1]

Comencemos mirando a ese :. Los dos puntos marcan el inicio de un bloque de cdigo Python. Ese bloque aparecer en bucles, funciones o mtodos. Si nos fijamos bien en la sangra de la siguiente lnea, vemos una serie de espacios (logrados pulsando la tecla TABULADOR) y una sentencia. Esos espacios son vitales ya que marcan la existencia de un bloque de cdigo. Adems, son obligatorios. Este es uno de hechos ms controvertidos de Python, pero tambin mejora mucho la legibilidad del cdigo. Slo existe una manera de escribir Python as que todo el cdigo Python se parece y es ms fcil de entender. El bloque acaba cuando desaparecen esos espacios:
>>> for i in range(1,10): print cantidad*i cantidad = cantidad + 1 ... >>>

los argumentos no se les asignan tipo. Existen muchas posibilidades en los argumentos pero los veremos ms tarde, de momento veamos un ejemplo sencillo:
>>> def imprime (texto): print texto >>> imprime("Hola mundo") Hola mundo >>>

Objeto y podemos utilizar sus mtodos:


>>> print a.getCantidad() 20 >>> a.setCantidad(12) >>> print a.getCantidad() 12

Vuelve a ser sencillo. Y los objetos? Pues tambin son bastante simples de implementar. Podemos ver un ejemplo Funciones y Objetos en el Listado 1. Con class declaramos el nombre de la clase, y los def de su interiTenemos ya las piezas fundamentales or son los mtodos. El mtodo __init__ para entender las funciones y los objees el constructor, donde se asignan los tos. La declaracin de una funcin en valores iniciales a las variables. __init__ Python tiene una sintaxis muy simple: es un mtodo estndar y predefinido, lo def nombre_funcion (<lista arguque quiere decir que tendremos que usar mentos>): <CUERPO> ese y no otro para inicializar el objeto. Fcil no? Al igual que las variables, a Todos los mtodos, aunque no acepten valores, poseen un Listado 1: Una clase sencilla parmetro self. ste es otro 01 >>> class Objeto: punto controvertido en 02 def __init__ (self, cantidad): Python, self es obligatorio, 03 self.cantidad = pero no se usa al invocar el cantidad mtodo. Se puede ver un 04 ejemplo de clase en el Listado 05 def getCantidad(self): 1. Cmo se crea el objeto? 06 return self.cantidad Fcil:
07 08 09 cantidad def setCantidad(self, cantidad): self.cantidad =

No hay que preocuparse por la administracin de la memoria del objeto ya que, cuando a no apunte hacia l, el gestor de memoria liberar su memoria. Ya tenemos las bases para construir algo interesante. Por supuesto nos dejamos infinidad de cosas en el tintero, pero siempre es mejor comenzar con un pequeo conjunto de herramientas para empezar a usarlas.

Estructuras de datos
Una de las razones por las que los pro-

Listado 3: Ejemplo de un diccionario


01 >>> dic = {} 02 >>> dic["Perro"] = "hace guau guau" 03 >>> dic["Gato"] = "hace miau miau" 04 >>> dic["Pollito"] = "hace pio pio" 05 >>> dic 06 {'Perro': 'hace guau guau', 07 'Gato': 'hace miau miau', 08 'Pollito': 'hace pio pio'} 09 >>> dic["Perro"] 10 'hace guau guau'

>>> a = Objeto(20)

Es como llamar a una funcin. A partir de este momento a es una instancia de

50

Nmero 01

www.linuxmagazine.com.es

Python

DESARROLLO

gramas scripts de Python resultan tan potentes es que nos permiten manejar estructuras de datos muy verstiles de manera muy sencilla. En Python estas estructuras son las Listas y los Diccionarios (tambin llamados Tablas Hash). Las listas nos permiten almacenar una cantidad ilimitada de elementos del mismo tipo. Esto es algo inherente a casi todos los programas, as que Python las incorpora de fbrica. Las listas de Python tambin vienen provistas de muchas ms opciones que sus semejantes en otros lenguajes. Por ejemplo, vamos a definir una lista que guarde una serie de palabras:
>>> a = ["Hola", "Adios",U "Buenas Tardes"] >>> a ['Hola', 'Adios', 'BuenasU Tardes']

Figura 2: Definicin de una funcin en Python

Python indexa comenzando desde 0, de manera que Hola es el elemento 0, Adios el 1 y Buenas Tardes el 2, y la longitud de la lista es 3. Podemos comprobarlo de esta forma:
>>> a[1] 'Adios' >>> len(a) 3

ah que su nombre sea diccionario (vase el Listado 3). Las listas y los diccionarios se pueden mezclar: diccionarios de listas, listas de diccionarios, diccionarios de listas de diccionarios, etc. Ambas estructuras combinadas poseen una enorme potencia.

Algoritmos + Estructuras de datos = Programas


Ahora nos toca poner todo esto en prctica. Lo normal es hacer un programa sencillo. Pero en lugar de eso vamos a

implementar algo que sea creativo. Este programa es el que se usa en el libro La prctica de la programacin de Pike y Kernighan para ilustrar como un buen diseo sobrepasa al lenguaje que usemos para ejecutarlo. En el libro se implementa el diseo en C, C++, Java, Perl y AWK. Nosotros lo haremos en Python (ver Listado 4). El programa acepta un texto como entrada y genera un texto como salida, pero este segundo texto no tiene sentido. Lo que queremos hacer es generar texto

Podemos aadir elementos a las listas de varias maneras. Nos contentaremos con ver las ms normales. Aadamos un elemento y eliminemos otro (ver Listado 2). Las listas tambin se pueden comportar como una Pila, con las operaciones append y pop. Con insert hemos introducido un elemento en la posicin especificada (recuerda que siempre comenzamos a contar desde 0). La facilidad con la que Python trata las listas nos permite usarlas para multitud de tareas lo que simplificar mucho nuestro trabajo. A pesar de su potencia, las listas no pueden hacerlo todo y existe otra estructura que rivaliza con ellas en utilidad, los Diccionarios. Mientras las listas nos permiten referenciar a un elemento usando un nmero, los diccionarios nos permiten hacerlo con cualquier otro tipo de dato. Por ejemplo, con cadenas, bueno ms bien casi siempre con cadenas, de

Figura 3: El programa de ejemplo aplicado al prlogo de El Quijote

www.linuxmagazine.com.es

Nmero 01

51

DESARROLLO

Python

sin sentido pero con estructuras que s lo tengan. Puede parecer algo muy complicado, pero no lo es tanto si usamos la tcnica de las cadenas de Markov. La idea es comenzar con las dos primeras palabras, ver si esa combinacin se repite en el texto, hacer una lista con las palabras que siguen a alguna de las ocurrencias de esa combinacin, elegir una palabra al azar de las que las suceda y reemplazar la primera por la segunda y la segunda por la palabra escogida. De esta manera vamos generando un texto que, aunque carece de sentido, normalmente se corresponde con la estructura de un texto normal aunque disparatado. Para hacer las pruebas es recomendable conseguir un texto de gran tamao, en textos pequeos no surtir tanto efecto nuestro programa. En el proyecto Gtenberg podemos conseguir infinidad de textos clsicos de enorme tamao en ASCII. Pero somos conocedores de que no todo el mundo entiende el idioma anglosajn, as que en lugar del proyecto Gtenberg podemos coger cualquier texto que queramos modificar, por ejem-

plo alguna noticia de poltica de un diario digital o alguna parrafada de cualquier weblog de moda. En nuestro caso, hemos escogido parte de la introduccin a la obra maestra de la Literatura espaola, El Ingenioso Hidalgo, Don quijote de la Mancha. Este programa es especialmente interesante y didctico porque nos permitir utilizar las estructuras de datos que Python implementa, en particular en los diccionarios y las listas, para generar una tabla donde los ndice sern cadenas de texto. Veamos como funciona. Lo primero es ir introduciendo en el diccionario dos prefijos como ndice y las palabras que les siguen en el texto dentro de una lista referenciada por ellos. Eso es un diccionario con dos palabras como ndice que contiene una lista:
DICCIONARIO[ palabra 1,U palabra 2] -> LISTA[palabra,...]

crearemos un diccionario de la siguiente forma:


>>> dict['La', 'gente'] =U ['est'] >>> dict['La',U 'gente'].append('opina') >>> dict['La', 'gente'] ['est','opina']

O sea, si tenemos las palabras La gente est La gente opina en nuestro texto,

Listado 4: markov.py genera un texto no-tan-aleatorio


01 #!/usr/local/bin/python 02 03 #Importamos dos mdulos 04 05 import random 06 #utilizado para escoger un elementos 07 #aleatorio de una lista 08 09 import sys 10 #permite acceder a algunas clases 11 #utilizadas por el intrprete 12 13 no_palabra = "\n" 14 w1 = no_palabra 15 w2 = no_palabra 16 17 # GENERAMOS EL DICCIONARIO 18 dict = {} 19 20 for linea in sys.stdin: 21 22 for palabra in linea.split(): dict.setdefault( (w1, w2), [] ).append(palabra) 40 41 42 43 44 45 w1 = w2 w2 = nueva_palabra print nueva_palabra; 38 no_palabra: sys.exit() 39 28 29 # GENERAMOS LA SALIDA 30 w1 = no_palabra 31 w2 = no_palabra 32 33 # puedes modificarlo 34 max_palabras = 10000 35 36 for i in xrange(max_palabras): 37 nueva_palabra = random.choice(dict[(w1, w2)]) if nueva_palabra == 23 24 25 26 # Fin de archivo 27 dict.setdefault((w1, w2), [] ).append(no_palabra) w1 = w2 w2 = palabra

Vamos haciendo esto de manera sucesiva con todos los conjuntos de dos palabras adyacentes y obtendremos un diccionario en el que muchas entradas referenciarn a una lista de ms de un elemento, cuantas ms haya mejor. La magia aparece cuando generamos el texto, puesto que lo que hacemos es comenzar por imprimir las dos primeras palabras y cuando existan varias posibilidades para esa combinacin (como con el ejemplo de La y gente), escogeremos aleatoriamente entre ellas. Imaginemos que escogemos opina, entonces escribimos opina por la pantalla y buscamos en la entrada de diccionario ['gente','opina'] y as sucesivamente, hasta llegar a no_palabra. Para entender mejor el funcionamiento del programa, te recomendamos que copies el cdigo fuente y le pases unos ejemplos (por ejemplo con cat texto.txt | ./markov.py) para que veas los resultados. Despus podemos intentar realizar cambios en el programa, por ejemplo, en lugar de utilizar 2 palabras como ndice del diccionario podemos probar con 1 o con 3, y tambin con el tamao del texto que se le pase. Con un poco de experimentacin es posible conseguir resultaI dos muy interesantes.

RECURSOS
[1] Decargas de Python http://www.python.org/download/

Jos Mara Ruz est realizando el Proyecto Fn de Carrera de Ingeniera Tcnica en informtica de Sistemas y lleva 7 aos usando y desarrollando software libre, y desde hace dos en FreeBSD. Jos Pedro Orantes est cursando 3 de Ingeniera Tcnica en Informtica de Sistemas y 3 de Ingeniera Tcnica en Informtica de Gestin, lleva mas de seis aos utilizando Linux como escritorio y herramienta de trabajo.

52

Nmero 01

www.linuxmagazine.com.es

LOS AUTORES

Charly

ADMINISTRACIN

La rutina diaria del administrador de sistemas: PS-Watcher

Monitor de Procesos
Simplemente no es factible estar pendiente de cada uno de los procesos. Esto es un problema si un proceso tiene una prdida de memoria gradual. Es decir, a menos que tengamos PS-Watcher. PS-Watcher automatiza las tareas de vigilancia, ayuda a reducir la presin y acta como un sistema de alerta temprana.
POR CHARLY KHNAST
fortunado el administrador de sistemas que reconoce un problema desde su inicio antes de que las lneas de atencin al cliente estn en serios problemas. Esto es cierto en asuntos clave como los requerimientos de memoria de funcionamiento de procesos de mi servidor. Se me ocurren numerosas cosas que hacer mejor que estar pendiente de cada proceso todo el da, a pesar de que el nombre de la aplicacin parezca sugerir lo contrario. La solucin es PS-Watcher [1], una herramienta que analiza la tabla de procesos, filtrndola mediante la aplicacin de expresiones regulares almacenadas en el fichero de configuracin. Este fichero tambin especifica como PS-Watcher debe reaccionar ante la ocurrencia o no de determinadas expresiones. Puedo indicarle a PS-Watcher que termine un proceso que utiliza demasiada RAM, monitorizando a la vez los procesos hijos generados por otro. El programa, escrito en lenguaje Perl viene como tarball de 114 kbytes que se instala mediante el proceso estndar de

configure, make, make install, suponiendo que los mdulos de Perl Sys::Syslog, File::Basename, Getopt:: Long and Config::IniFiles estn instalados. Instlalos de CPAN si te falta alguno. El siguiente paso es crear el fichero de configuracin. Para probar la herramienta, quiero que monitorice los procesos mingetty y que anote en un archivo de registro si ocurren ms de tres procesos. Mi fichero de configuracin, /etc/pswatch.conf, para esta tarea tiene el siguiente aspecto:
[(/sbin/)?mingetty?] trigger = $count > 3 action = echo "$count $command procesos en ejecucin"

que un proceso, el demonio compilador de C distribuido, Distccd en este ejemplo, utilice ms de 5 mbytes de memoria principal. Mi nuevo fichero de configuracin pswatch.conf ser como sigue:
[(/usr/sbin/)distccd?] trigger = $vsz > 5000 # Output size in Kbytes action = echo "El proceso $command est ocupando $vsz KB de memoria"

A continuacin ejecutamos PS-Watcher como un demonio en Segundo plano:


ps-watcher --config /etc/ pswatch.conf --log /var/log/ pswatch.logs

Podemos especificar cualquier otro comando en lugar de echo. Por ejemplo, puede desear mandar un correo electrnico al administrador. Como PS-Watcher repite la alerta cada pocos minutos, en funcin del parmetro -**sleep N, a pesar de que puede hacerlo, no sera una buena idea mandar mensajes al telfono mvil, o al menos no es una idea que yo considere oportuna. La pgina principal contiene numerosas pistas y ejemplos. I

Recursos
El demonio cuenta el nmero de procesos mingetty activos cada cinco minutos. Si estos comienzan a dispararse, aparece un mensaje del estilo de 4 procesos mingetty en ejecucin en /var/log/ pswatch. Si es necesario, se puede incrementar el intervalo por defecto desde cinco minutos a 15 minutos especificando el comando -sleep 900.
[1] PS-Watcher:http://ps-watcher. sourceforge.net

SYSADMIN
WikiMedia .....................................54
Vemos como se comparte conociemientos con el motor wiki de la Wikipedia

TLS sobre SMTP ...........................60


La solucin inteligente para la encriptacin de correo

Syslog ...............................................62
La herramienta fuente de informacin del adminitrador de sistemas

Creciendo Juntos
Veamos un ejemplo de una aplicacin ms prctica. Quiero que PS-Watch anote en un archivo de registro cada vez

Charly Khnast es un administrador de sistemas bajo entorno Linux en el centro de datos de Moers, cerca del Rin, el famoso ro Alemn. Sus tareas incluyen asegurar la seguridad y disponibilidad del cortafuegos y el mantenimiento del DMZ (zona desmilitarizada).

EL AUTOR

www.linuxmagazine.com.es

Nmero 01

53

ADMINISTRACIN

Wikipedia

Instalacin y mantenimiento de Mediawiki

Edicin Colectiva
La enciclopedia libre Wikipedia usa el motor Mediawiki para recopilar un enorme base de datos de conocimiento. Si desea estrenar su propio wiki, este software basado en PHP es una buena eleccin que facilita una funcionalidad abundante y llena de potencia.
POR ERIK MLLER

iki, la palabra de moda en todos los medios, significa rpido en hawaiano y la tecnologa wiki basada en web se ha establecido de manera extraordinariamente rpida. Desde que Ward Cunningham tuvo la idea en 1995, cuando estaba buscando un mtodo para

recopilar ejemplos de tareas comunes de programacin entre un grupo de desarrolladores, los wikis se han establecido como una manera de colaborar en red casi universal. La idea de Cunningham era sencilla: desarrollar un motor qur permitiese modificar cada pgina wiki, un HTML generado dinmicamente, en

Un viaje al mundo de los wikis


Aunque se desarrollo especialmente para la Wikipedia, Mediawiki no se limita a las enciclopedias. Adems de la Wikipedia, la comunidad Wikipedia lanzo el Wikcionario (Wiktionary) http://www.wiktionary.org en diciembre del 2002. Este diccionario proporciona una definicin inglesa y la traduccin a un cierto nmero de lenguajes para cada palabra. El modelo wiki es ideal para este tipo de tareas ya que permite a usuarios de todo el mundo proporcionar las traducciones. Citas y libros de texto Wikiquote http://www.wikiquote.org es una coleccin por categoras de frases celebres (citas),Wikisource http://www.wikisource.org aade material de investigacin original para complementar la Wikipedia. El material pertenece tanto al dominio publico, como obras publicadas bajo licencias libres. El proyecto Wikibooks en http://www. wikibooks.org no est relacionado con la Wikipedia en en lo que a contenidos se refiere, pero proporciona material de enseanza libre para asuntos diversos. El proyecto puede convertirse en un archivo central para planes de lecciones para la enseanza universitaria. Enciclopedia de Propaganda Una lista de los Mediawikis esta disponible en Wikipedia [10]. Algunos notorios ejemplos de la enciclopedia de propaganda son, Disinfopedia http://www.disinfopedia.org. El coautor de Mediawiki Evan Prodromou tiene en marcha una guia de viajes llamada Wikitravel en http://www.wikitravel.org, y el autor de la base de conocimiento sobre software de fuente abierta, Openfacts esta disponible en http://openfacts.berlios.de/.

el navegador. Los corchetes era todo lo que se necesitaba para realizar un enlace con una cadena de texto dentro. Si la pgina ya exista, el enlace se crea; si no, se facilita el acceso al usuario a una caja de edicin donde poda crear una nueva pgina con el encabezamiento adecuado (ver figura 1). Una sintaxis fcil y comprensible aligera el trabajo de formateo. Tecleando un asterisco al comienzo de una linea creamos un listado; el texto enmarcado entre signos de igual, se convierten en un encabezado. Actualmente hay mas de 100 motores wiki [1]. Mediawiki [2] es un ejemplo muy popular. Suministra la tecnologa subyacente para la enciclopedia Copyleft, Wikipedia, el modelo a imitar para la mayora de otros wikis (vea el cuadro Un viaje al mundo de los wikis). En su primer ao, Wikipedia uso usemod wiki [3], que esta escrito en Perl. Pero la tarea demostr ser un desafo excesivo para usemod, que amenazo con colapsarse bajo la carga de miles de artculos y visitantes. Esto llevo a los wikipedistas a desarrollar el motor Mediawiki en PHP, apoyado por una base de datos MySQL. La habili-

54

Nmero 01

www.linuxmagazine.com.es

Wikipedia

ADMINISTRACIN

Seleccin de lenguajes
Wikipedia permite mas de 50 lenguajes. Es uno de los wikis mas ampliamente traducidos. Esto nos permitir crear un wiki en rabe, chino, japones, hebreo, hind, ruso o vietnamita, incluyendo el soporte de Unicode. Para usar estos lenguajes el operador del wiki simplemente necesita configurar las variables $wgInputEncoding y $wgOutputEncoding a UTF-8. El guin de instalacin crea 3 usuarios MySQL diferenciados y con distintas funciones. A cada uno de estos usuarios se les asigna privilegios de base de datos. Mediawiki utiliza la cuenta de usuario $wgDB para las operaciones normales de base de datos, mientras que el usuario SQL $wgDBsqluser solamente tiene privilegio de lectura. Esta cuenta se usa para una pgina especial que permite a los operadores del sistema (sysops) realizar consultas SQL, para, por ejemplo, localizar y dar la bienvenida a los usuarios que se han registrado recientemente. El operador del wiki tambin puede aadir la cuenta de usuario de administrador MySQL $wgDBadminuser y poner contrasea al archivo AdminSettings.php. Esta cuenta tiene privilegio de escritura y es usada por los guiones para tareas de instalacin y mantenimiento. Para instalar el wiki, hay asegurarse de ser root y teclear php install.php. Algunas distribuciones llaman al interprete de ordenes php4 antes que php. Entre otras cosas, el guin nos pedir la contrasea del administrador (root) de MySQL y crear la base de datos, las tablas y los usuarios

Figura 1: La ventana de edicin de Mediawiki tiene una barra de herramientas Javascript para ayudar a los principiantes con las tareas de formateo. Los corchetes dobles indican un enlace a otra pgina.

dades de PHP son tiles si se necesita configurar y modificar un wiki. Pero aunque no se sepa PHP, Mediawiki nos permitir configurar un wiki que funciona correctamente y que sea fcil de usar.

Estable o experimental
Mediawiki, como casi todos los proyectos de cdigo abierto, est disponible en 2 sabores. La versin estable est disponible como descarga desde la pgina de inicio en [2]. La versin en desarrollo puede funcionar, pero contiene funciones experimentales y puede plantear problemas de estabilidad. Se puede descargar con CVS:
cvs -d:pserver:anonymous@cvs. sourceforge.net:/cvsroot/ wikipedia login cvs -z3 -d:pserver:anonymous@ cvs.sourceforge.net:/cvsroot/ wikipedia co phase3

el toolkit Imagemagick, o aadir la biblioteca gd desde la versin actual de PHP. Imagemagick permite muchos mas formatos de archivo que gd. El script install.php en el directorio raz del programa comenzar la instalacin. Pero antes de instalar, necesitara ejecutar algunos tareas de configuracin. El administrador debe copiar los ejemplos de configuracin, LocalSettings.sample y AdminSettings.sample, a Local Settings.php y AdminSettings.php. El cuadro 1 muestra las variables Local Settings.php que deben ser configuradas.

El directorio phase3 contiene el software, que se puede actualizar en cualquier momento tecleando cvs update. Mediawiki necesita Apache 1.3.27, MySQL 4.0.13 y PHP 4.3.2, incluyendo el interprete de ordenes. El programa es compatible con PHP 5. Si desea que el software reduzca las imgenes automticamente, puede optar por

Figura 2: Un tpico articulo Wikipedia muestra que los wikis no tienen por que ser feos. La tabla de contenidos se genera automticamente a partir de los encabezados.

www.linuxmagazine.com.es

Nmero 01

55

ADMINISTRACIN

Wikipedia

MySQL. Finalmente, ofrecer crear dos cuentas de usuario del wiki, un operador (sysop) y un desarrollador. Esto es recomendable. Sin esta opcin, necesitaremos asignar manualmente los privilegios de acceso en una etapa posterior. Para configurar el servidor web, aadimos phtml como extensin PHP a httpd.conf:
AddType application/x-httpd-php .php .phtml

En el directorio upload creado por la instalacin (donde Mediawiki almacena los archivos cargados) la ejecucin de PHP o la representacin HTML debe prohibirse.
<Directory "/path/to/uploaddirectory"> AllowOverride None AddType text/plain .html .htm .shtml php_admin_flag engine off </Directory>
Figura 3: El modo de vista diff resalta las diferencias entre dos versiones, mostrando que se ha modificado y borrado. Los operadores (Sysops) pueden apuntar y hacer clic para restablecer las versiones previas.

Necesitamos habilitar algunas variables globales para el directorio de guiones. Debemos asegurarnos de que la configuracin de las directrices del directorio php_value register_globals sea 1. Como alternativa, podemos modificar el archivo php.ini, el cual suele residir en /etc o en /etc/php4.

Consolidacin
El guin de instalacin copia todos los archivos PHP al directorio del servidor web. Y esto es una de las cosas que ms hay que vigilar, ya que cuantos mas guiones con acceso externo tengamos. , mayor sera el riesgo de que un atacante pueda conseguir acceso a las funciones internas. Esto es particularmente importante para register_globals, como parmetros de URL que le autorizan a configurar variables de guiones internos. Solo son realmente importantes los archivos que puedan estar almacenados en el directorio del servidor Web, esto es, cualquier cosa terminado con .phtml, imgenes y hojas de estilo. Lo mejor es mover cualquier archivo terminado en .php a un directorio distinto de document root despus de la instalacin. Despus de mover los archivos, reemplazaremos

los enlaces a ./LocalSettings.php en los archivos phtml con el enlace a LocalSettings.php y aadimos la nueva ruta al include_path en el archivo php.ini. Hay que notar que en la actual versin inestable, que para cuando esto salga al quisocos, ser la estable, los archivos .phtml estn desaprobados. Si tarbajamos con la ltima versin y este es el caos, copiaremos index.php y redirect.php al nuevo directorio del servidor web y copiaremos el resto de ficheros .php a un directorio seguro desde el que se puedan aadir.

base de datos que ya existe,debemos vigilar que el nombre de la tabla no entre en conflicto con tablas ya existentes, ya que Mediawiki no utiliza un prefijo y se podran sobreescribir base de datos que ya tuviramos. Importaremos las tablas desde tables.sql e indexes.sql en el directorio de mantenimiento:
mysql -u root -p databasename < filename,sql

Instalacin manual
Si no se tiene acceso de administrador (root) al servidor, o si falla el guin de instalacin, podemos instalar Mediawiki manualmente. El primer paso es crear una base de datos. Si utilizamos una

Necesitaremos un conjunto mnimo de configuraciones en LocalSettings.php; omita el usuario SQL e ignore AdminSettings.php. Por supuesto que debe disponer de un usuario principal de la base de datos. Copie cualquier archivo .php y .phtml de los directorios includes, languages, stylesheets e images al directorio principal del servidor. Puede ejecu-

Tabla 1: Configuracin Bsica


Variable $IP $wgServer $wgScriptPath $wgEmergencyContact $wgDBserver $wgDBuser y $wgDBpassword $wgLanguageCode Entorno local. Ruta local en el servidor donde esta copiando el wiki,por ejemplo >c>/var/www/wiki Elemento de direccin del servidor antes de la primera barra,por ejemplo http://www. mywiki.com Subdirectorio con los archivos PHP,por ejemplo wiki; dejaremos esto en blanco () si los archivos estn en el directorio principal Direccin de email del administrador que se mostrar en caso de problemas Nombre de la base de datos MySQL Usuarioa MySQL para el acceso normal a la base de datos Cdigo de dos letras para el idioma a usar,por ejemplo es para espaol

$wgDBsqluser y $wgDBsqlpassword Usuario MySQL para consultas SQL va interfaz Web; solo tiene acceso de lectura

56

Nmero 01

www.linuxmagazine.com.es

Wikipedia

ADMINISTRACIN

tar en su navegador el archivo wiki.phtml con la ruta elegida en el paso anterior para acceder a la pgina del recin instalado Mediawiki. De un vistazo al entorno y pruebe las caractersticas del software (mire el cuadro Mediawiki 101). Si el servido web no reconoce phtml, renombre el archivo index.php. En ese caso tambin necesitara editar las variables $wgScript y $wgRedirectScript. Hay un ejemplo en DefaultSettings.php.

un usuario en sysop, developer o editor, por ejemplo:


USE Databasename; UPDATE SET user_rights='sysop' U WHERE user_name='nombreusuario';

Privilegios de usuario
La mayora de los wikis permiten a los usuarios annimos editar sus pginas. Esto plantea la cuestin acerca de como el operador del wiki maneja el contenido indeseable o incluso la desfiguracin. Mediawiki tiene unos cuantos mecanismos de defensa. Puede restringir la lectura o edicin de contenidos a grupos de usuarios especficos. Los indicadores $wgWhitelistEdit y $wgWhitelistRead en LocalSettings.php le ayudaran a realizarlo de esa manera. La estructura (array) $wgWhitelistAccount define los grupos que tienen accesos de lectura o escritura:
$wgWhitelistAccount=array(U" user" => 0, "sysop" => 1, U "developer" => 1)

Estos ajustes restringen las modificaciones a operadores (sysops) y desarrolladores. Lo siguiente aadir un nuevo usuario llamado editor:
$wgWhitelistAccountU =array("editor" =>U 1,"user" => 0U "sysop" => 1,U "developer" => 1)

La versin de desarrollo ahora tiene un tipo de usuario bureaucrat. Los burcratas usan una pgina especial para designar otros usuarios como operadores (sysops). Para hacer esto, el usuario necesita privilegios de operador y burcrata. Un historial de cambios nos permite supervisar los ltimos acontecimientos en nuestro wiki. Mediawiki facilita una funcionalidad diff que resalta las diferencias entre dos revisiones (ver la Figura 3). El historial de cambios graba las modificaciones en una pgina para volver directamente a la versin original. El historial de versiones nos permite recargar versiones previas y salvarlas de nuevo, si fuese necesario. Por ultimo, los usuarios tienen la funcin User contributions que les permite ver todo el contenido creado por un usuario especifico. Los operadores pueden deshacer entradas desde esta lista, permitindoles la reparacin de desfiguraciones en cuestin de segundos. Si se origina una controversia sobre el contenido de una pgina, el operador puede temporalmente proteger la pgina. Los administradores pueden censurar a los

Habiendo creado el tipo de usuario, el operador puede proseguir asignando privilegios de lectura o escritura mediante la configuracin del valor en el campo de la base de datos user_rights del usuario a editor. En el momento de escribir esto, Mediawiki no posee una herramienta genrica de gestin de privilegios, esto significa que hay que formular consultas SQL para convertir a

usuarios polmicos y tenaces bloquendoles sus direcciones IP. Desafortunadamente, los usuarios no registrados con conexiones telefnicas temporales (dialup) cambian constantemente sus IPs. Por esta razn, una IP se bloquear, de manera predeterminada, durante solamente 24 horas (opcin $wgIPBlock Expiration). En general, la desfiguracin es una cuestin sobrestimada. Las cuestiones sociales son ms espinosas Que tipo de pginas y que tipo de conducta permitir el wiki? Definitivamente los operadores tienen la necesidad de convertir algunas de estas cuestiones a polticas de uso. El operador del wiki deber definir cuidadosamente las opciones predeterminadas,en la estructura $wgDefaultUserOptionsEn dentro del archivo Language.php o sus equivalentes locales. Opciones tales como quickbar (0 = sin barra de navegacin , 1 = barra de navegacin a la izquierda, 2 = a la derecha) son importantes. editondblclick abrir la ventana de edicin cuando se hacer doble clic sobre la pgina. showtoc genera una tabla de contenidos por cada pgina que tenga mas de tres encabezados y showtoolbar habilita la caja de herramientas de Javascript en la ventana de edicin (mire la Figura 1). La opcin editsection presenta un enlace Edit junto a cada encabezamiento. Esto permite la edicin directa de una seccin especifica y es particularmente cmodo para pginas largas, reduciendo la necesidad de navegar por la ventana de edicin. Por el contrario los enlaces de este tipo pueden estropear su diseo. Si se habilita la opcin editsectiononrightclick, hacer clic con el botn derecho sobre un encabezado tendr el mismo efecto. Esto provoc alguna vez el fallo de Konqueror en nuestro laboratorio.

Espacio para los nombres


Figura 4: Viendo los cambios recientes en el wiki con la piel CologneBlue. El enlace Recent Changes dirige directamente al modo de vista diff de la pgina actual.

Wikipedia hizo frente rpidamente a la

www.linuxmagazine.com.es

Nmero 01

57

ADMINISTRACIN

Wikipedia

cuestin de separar informacin sobre el wiki, polticas o discusiones sobre los artculos de la enciclopedia. Por ejemplo, hay un articulo sobre las FAQs y una FAQ oficial de Wikipedia. Para separar acertadamente las dos, Mediawiki introduce los denominados espacios de nombres (namespaces), los cuales son definiciones en Language.php o su traduccin local. Por omisin, estos son el espacio de nombres principal, el espacio de nombres de debates mltiples, un espacio de nombre para imgenes, un espacio de nombres para pginas de usuario, un espacio de nombres especial y un espacio de nombres Mediawiki muy especial. Los artculos fuera del espacio de nombres principal siempre tendrn un prefijo. [[Discussion:Mainpage]] apunta hacia la pgina de debate al que pertenece a la pgina principal, [[User:Troll]] es la pgina personal perteneciente al usuario Troll. Si no se ha propuesto poner en funcionamiento un wiki gigantesco, podemos ahorrarnos al problema del meta espacio de nombres. Por omisin,

este espacio de nombres supone el valor de la variable $wgSitename en DefaultSettings.php. La FAQ de la Wikipedia esta almacenada en [[Wikipedia: FAQ]]. Esto resuelve el conflicto referido anteriormente, pero hace las cosas difciles para los sitios pequeos. Si, por ejemplo, se borran los espacios de nombres 4 y 5 de la estructura $wgNamespaceNamesDe en el archivo LanguageDe.php, tambin sern retirados del interfaz de usuario. Una caracterstica que Mediawiki mantiene despus de la migracin desde usemod es la subpgina. Por ejemplo, un articulo llamado Linux puede tener una subpgina llamada Linux/Consejos Kernel. La pgina Consejos Kernel tendr automticamente un enlace de vuelta a Linux. Las subpginas pueden ser habilitadas individualmente para un espacio de nombres mediante la configuracin de la variable $wgNamepacesWithSubpages. El espacio de nombres Mediawiki se habilita a travs de $wgUseDatabase Messages, que autoriza a los usuarios

para editar todos los elementos de texto del software dentro del wiki, ayudando de ese modo a las traducciones. Los nombres de las variables de texto se almacenan en Language.php.

Atajos para bloques de texto


El contenido de cualquier pgina creada en este espacio de nombres puede ser incrustado en cualquier punto dentro del wiki. Por ejemplo, para proporcionar un texto de bienvenida predeterminado, creamos una pgina llamada MediaWiki: greeting. {{msg:greeting}} desplegar el contenido de la pgina en otras pginas. Cualquier cambio en la pgina Mediawiki es inmediatamente aplicado a cualquier otra pgina que utilice {{msg}} para su acceso. La orden {{subst:greeting}} aade el texto en la localizacin actual pero sin la caracterstica de la actualizacin automtica. Observese que en las pginas del espacio de nombres Mediawiki no estn permitidos los caracteres no estndar o espacios en sus cabeceras. Como cada texto del

Manual Prctico de Mediawiki


El elemento principal de navegacin en Mediwiki es el recuadro a la izquierda de la pantalla (ver la Figura 1). Recent changes es uno de los enlaces mas importantes para los visitantes habituales del wiki. Despliega las pginas donde estn actualmente trabajando los colaboradores del wiki (ver la Figura 4). Los usuarios registrados pueden hacer clic en el enlace Watch this page para aadirla a su lista. La lista muestra los cambios habidos en esas pginas durante la ultima semana. Esto permite a los colaboradores supervisar las pginas donde han incluido contenido. Move page permite renombrar una pgina. Aun as, el titulo anterior sigue siendo vlido; los usuarios que sigan enlaces a la pgina sern llevados al nuevo enlace. El enlace Discussion apunta al debate de la pgina actual. Por ejemplo una pgina llamada Linux tendr un debate llamado Discussion:Linux. Un enlace llamado enviar un comentario (Post a comment) esta disponible en la barra lateral de este tipo de pgina. Se puede pulsar en el enlace para abrir una ventana de edicin vaca y aadir un comentario. Despus de hacer clic en Save Page, el comentario sera aadido al final de la pgina. Una pgina y su Historial Para aadir un nueva pgina, simplemente creamos un enlace en una pgina existente, por ejemplo [[Mi nueva pgina]], y entonces pulsamos en el enlace rojo. El enlace pgina de historial (Page history) nos conduce a una pgina con las versiones anteriores de la pgina actual (ver la Figura 4). Esta vista puede tambin usarse para reincorporar versiones anteriores. Para hacerlo, seleccionamos una versin haciendo clic en el enlace de fecha (timestamp), editamos la pgina que estamos viendo y la almacenamos. El enlace versin actual (Current revision) tambin es bastante til y muestra las diferencias entre cualquier versin y la actual. Upload nos permite cargar cualquier fichero en la bitcora y puede ser insertado usando la sintaxis [[Image:file.jpg]] o [[Media:file.zip]]. Mediawiki muestra enlaces de imgenes al vuelo. Los enlaces a los medios apuntan al archivo. Relaciones Conocidas Una razn para migrar a una solucin de base de datos centralizada era que los wikipedistas demandaban bsquedas avanzadas. Por ejemplo, Mediawiki usa pginas especiales para mostrar las pginas nueva o hurfanas, las pginas que no estn sealadas por ningn enlace. Funciones adicionales de listado de artculos por orden alfabtico o por longitud. La pgina especial Most wanted articles muestra una visin general de las palabras clave mas usadas que no se corresponden con una pgina. El enlace What links here enlaza a una vista de los enlaces a esa pgina. Related Changes nos permite ver los cambios en los artculos enlazados desde la pgina y de esa manera supervisar temas concretos. El manual oficial de Mediawiki [4] ofrece mas detalles.

Figura 6: El historial permite al operador (sysop) supervisar el desarrollo de un articulo de la Wikipedia.

58

Nmero 01

www.linuxmagazine.com.es

Wikipedia

ADMINISTRACIN

turar las contraseas. Ahora podemos habilitar las opciones $wgCompress Revisions, $wgUseMemCached, $wg SessionsInMemcached y $wgLinkCache Memcached. $wgCompressRevisions usa gzip para comprimir viejas revisiones de pgina, y de ese modo se ahorra un montn de espacio en el servidor.

Prximamente: Wikitex
An no est en la versin oficial, pero vase [7] para un primer vistazo a la interfaz Wikitex escrita por Peter Danenberg. Esta permitir a Mediawiki hacer uso de numerosos motores en el futuro. Por ejemplo GNU Lilypond [8], el cual traduce una simple sintaxis en una elegante hoja pautada de msica, varios macros Latex que generan formulaciones matemticas y qumicas o tableros de ajedrez que ilustran el discurrir de una partida (ver la Figura 5). Al principio puede que los nuevos usuarios encuentren la mayora de las caractersticas algo confusas. En el caso de tener alguna pregunta o para resolver dudas, la comunidad Mediawiki, que es tan solcita como lo son la mayora de las comunidades de desarrollo de pryectos de software libre, estar encantada de echar una mano, por tanto, se recomienda aprovechar los canales de las que se dispone. Conviene apuntarse a la lista de correo mediawiki-l [9] y tambin visitar el canal de IRC #mediawiki en irc.freenI ode.net.

Figura 5: El interfaz Wikitex permite a Mediawiki mostrar partituras de msica, formulacin qumicas y matemticas o incluso juegos de ajedrez. Haciendo clic sobre las notas se generara automticamente un archivo midi.

programa se recupera desde la base de datos, se puede usar esta caracterstica solamente en combinacin con memcached (descrita ms adelante).

Manejo de un wiki
Una vez configurado y en marcha, Mediwiki da pocos quebraderos de cabey. Ejecutar Mediawiki durante un largo periodo de tiempo es de hecho considerablemente menos estresante que lograr instalarlo adecuadamente. En un mundo perfecto, el operador del wiki solamente necesitar asignar privilegios de operador (sysop) y desarrollador. Para hacer una copia de seguridad de la base de datos se aconseja mysqldump o phpMyAdmin. Cuando importamos grandes conjuntos de datos tales como artculos de la Wikipedia en [5], ejecutaremos el guin maintenance/rebuildall.php en el directorio de instalacin. Como prximo paso, para evitar preguntas del tipo Que enlazo aqu y otras dudas por el estilo. Mediawiki tiene un nmero de opciones de puesta a punto, hay ejemplos en DefaultSettings. php. Asegurese que copia las modificaciones en LocalSettings.php para evitar sobreescribirlas durante una actualizacin. Mediawiki tiene la opcin $wgMiserMode para wikis de gran extensin. Habilitando la opcin se desactivan las consultas que consumen mucho

tiempo tales como una lista de los artculos mas largos. Sin duda alguna es lgico habilitar la opcin de cache de pgina, $wgUseFileCache. Esto servir pginas HTML estticas a los usuarios annimos y de este modo facilitar un considerable aumento del rendimiento. Si uno est dispuesto a dedicar algo de tiempo y esfuerzo en la puesta a punto de su wiki, puede intentar memcached [6] y zlib. Memcached reduce los accesos a la base de datos mediante el almacenamiento temporal de los datos de usuario y la informacin vinculada. Zlib comprime las revisiones de pginas antiguas. Esta opcin supone que se ha compilado PHP con las opciones --enable-sockets y --with -zlib. Podemos escribir <?phpinfo()?> en una pgina PHP de prueba para averiguarlo.

INFO
[1] Lista maestra de motores wiki: http://c2. com/cgi/wiki?WikiEngines [2] Mediawiki: http://www.mediawiki.org [3] Wiki Usemod: http://www.usemod.com [4] Manual Mediawiki: http://meta. wikipedia.org/wiki/ MediaWiki_User%27s_Guide [5] Volcado SQL de la Wikipedia: http:// download.wikimedia.org [6] Memcached: http://www.danga.com/ memcached [7] Prueba de Wikitex: http://wikisophia.org [8] Lilypond: http://lilypond.org/web [9] Lista de correo del proyecto: http://mail. wikipedia.org/mailman/listinfo/ mediawiki-l [10]Proyectos que usan Mediawiki: http:// meta.wikimedia.org/wiki/ Sites_using_MediaWiki

Memcached
El demonio deber ejecutarse en segundo plano con las opciones -d -l 127.0.0.1 -p 11000 -m 64 habilitadas. Esto asigna 64 MBytes de RAM como memoria cache para aplicaciones locales. Memcached no facilita caractersticas de autentificacin. Los usuario locales tienen acceso sin restricciones. Conviene evitar la ejecucin de memcached en un sistema con mltiples usuarios locales. Sin un firewall o el parametro -l, los usuarios externos pueden acceder al servidor y cap-

www.linuxmagazine.com.es

Nmero 01

59

ADMINISTRACIN

SMTP

SMTP va TLS con Evolution, Kmail y Mutt.

Correo Ms Seguro
La transmisin segura de correo electrnico mediante la Seguridad de la Capa de Transporte (TSL) no puede reemplazar la encriptacin individual de mensajes de correo. Desafortunadamente, a pesar de que los programas modernos de correo son capaces de usar los mtodos mencionados, tienden a complicar la vida innecesariamente de cualquier usuario que desee aprovechar los beneficios de la confidencialidad y seguridad.
POR PATRICIA JUNG

os mensajes de correo electrnico son como una postal - cualquier cartero los puede leer. Si bien la mayora de los administradores de sistemas escrupulosos evitarn leer el correo privado de otras personas, al menos en teora, los privilegiados poseedores de la contrasea root, autorizados o no (pienso en los hackers), de una mquina usada para remitir o almacenar correo tendrn acceso a los mensajes. Los servicios secretos de todo el mundo aclaman exultantes a los padres (y madres) fundadores de Internet, que fueron tan confiados que concibieron la transmisin de todo tipo de datos a travs de la red de forma transparente. Encriptar, por ejemplo con GnuPG y PGP, es el equivalente electrnico de un sobre en el mundo real. Sin embargo, los mtodos anteriores plantean un problema: si un pas niega a sus ciudadanos el acceso a mtodos seguros de encriptacin - tpicamente argumentando que es en ayuda de la lucha contra el crimen - el protocolo de transporte de correo, SMTP (Protocolo de Transporte de Correo Simple), se convertir en un delator. El contenido de mensajes encriptados con PGP o GnuPG descubiertos en la red no pueden ser ledos, pero podemos observar cuales han sido encriptados y cuales no. De esta forma,

el uso de slidos mtodos de encriptacin se convierte en una prueba de definitiva en contra de todos esos criminales que demandan confidencialidad en sus mensajes de correo. Sine embargo, cada vez ms proveedores de correo estn intercambiando el corre por medio tneles TSL (Transport Layer Security - Seguridad de la Capa de Transporte) encriptados en lugar de al descubierto, previniendo por tanto ataques de bsqueda. Hay otras razones para seguir la tendencia de alejarse de los mensajes transmitidos en texto libre, usando SSH en lugar del venerable protocolo telnet o el protocolo https para pginas web que piden datos personales. La introduccin de una poltica que impone el uso de correo encriptado en una empresa con distintas sedes puede provocar ciertos inconvenientes: Qu ocurre si una tercera persona necesita acceder al correo posteriormente? Qu ocurre con las claves utilizadas por una persona de la empresa que deja de trabajar en ella, o con su correspondencia encriptada? Como la encriptacin normalmente solo se utiliza para prevenir que datos sensibles crucen la red al descubierto, un sistema de encriptacin que funcione en el servidor y que sea transparente para los usuarios, como SMTP/ TLS es una buena solucin.

Agentes Secretos
Esta solucin ofrece adicionalmente la ventaja de ser libre de mantenimiento tras la configuracin inicial del servidor. Si tanto el cliente y el servidor de correo hablan TLS, ellos negociarn un intercambio seguro sin necesidad de intervencin exterior. Para permitir esto, ambos ordenadores intercambian certificados durante el saludo inicial facilitando la identificacin mutua. Es como si cada ordenador le muestra su pasaporte al otro. Por motivos prcticos, solo ser necesario que se autentifique el receptor principal en el entorno del correo, no habiendo diferencia entre si el receptor es otro servidor de correo o el programa de correo del usuario. Como el cliente ya puede confiar en el servidor, las dos mquinas acuerdan un algoritmo y una llave secreta de encriptacin se utilizarn para codificar el trfico resultante.

GLOSARIO
https: Si bien puede que sorprenda saberlo, pero https no es un protocolo independiente. La comunicacin entre buscadores y servidores en sitios Web que usan URLs https sigue estando basada en el Hypertext Transfer ProtocolHTTP (Protocolo de Trasferencia de Hiper Texto), pero encapsulado en un tnel TLS.

60

Nmero 01

www.linuxmagazine.com.es

SMTP

ADMINISTRACIN

Preferences (Preferencias del correo). La versin 1.2 resuelve los dos problemas, si bien el asistente o el cuadro de dilogo de Use secure connection (SSL) (figura 2) se refiere de nuevo slo a SSL, sin mencionar TLS, ste ltimo protocolo tambin esta soportado. Solo Dios sabe por que el valor Whenever possible (Cuando sea posible) no es el valor por defecto. Cuando intentamos enviar correo encriptado por primera vez, Evolution nos mostrar informacin del cerFigura 1: KMail deja en manos del usuario descubrir si el servidor de correo tificado del servidor y nos conoce TLS. solicitar que lo aceptemos o que no utilicemos el tnel la pestaa Sending de la opcin Network SSL/TLS (ver figura 3). Como el proCmo se Hace o modificamos una cuenta existente, grama no nos ayuda a tomar esta Mientras que los servidores de correo (o necesitamos seleccionar adicionalmente decisin (por ejemplo, que significa si Agentes de Transferencia de Correo) la pestaa Security en el cuadro de dialuna firma es BAD), puede que sea mejor como Postfix o Sendmail usarn ogo que aparece (figura 1). Esto al dejar que el programa tome la decisin l automticamente TLS si ambas partes menos nos proporcionar la opcin de mismo en lugar de preocupar al usuario son capaces de hacerlo, los desarrolmarcar en Check what the server supports preguntndoselo. ladores de clientes de correo actuales [1] para verificar lo amigable que es la El programa de la lnea de comandos (los llamados Agentes de Usuarios de encriptacin del anfitrin inteligente mutt es ejemplar: como siempre usa Correo) tienden a prestar poca atencin seleccionado en la pestaa General. Si la servidores de correo local para transmitir a la facilidad de uso. En lugar de preconrepuesta es positiva (la alternativa, SSL el correo mediante el interfaz figurar sus programas para usar SMTP/ Capa de conexin segura- es un /usr/sbin/sendmail, no necesita soportar TLS cuando sea posible, esperan que los antecedente de TLS), podemos pulsar SMTS/TLS. El mensaje coger automtiusuarios sean los que conozcan la mateOK para asegurar que Kmail usar comucamente un camino seguro a travs de la ria y que elijan y sepan implementar nicaciones encriptadas. red si el Agente Local de Transferencia estos valores seguros. La versin 1.0.x de Evolution proporde Correo y el servidor de destino lo En el caso de KMail sobre KDE3.x, si ciona una opcin segura SSL para el pueden proporcionar sin ninguna interseleccionamos Settings/Configure y anfitrin inteligente. Desafortunadaaccin por parte del usuario. Pero no despus aadimos una nueva cuenta de mente, marcando Use secure connection podemos evitar proporcionar a nuestro salida (Outgoing account) con SMTP en (SSL) (Usar conexin segura) se conservidor de correo local de este potencial I vierte en un escollo en muchos casos. La en nuestro propio ordenador. mayora de los servidores no soportan el mtodo obsoleto de SMTP va SSL; por otro lado, Evolution 1.0.x no habla TLS. Si intentamos transmitir correo con esta configuracin, el programa de correo no cooperar y emitir un mensaje muy explicito como Connection to name.of.mailservers (Port 465) could not Figura 3: Confas en este certificado? be established. The connection was reset by the communication partner. (La conexin con nombre.de.los.servidores RECURSOS (puerto 165) no se pudo establecer. La [1] Patricia Jung y Andrea Mller:Mail and conexin fue restablecida por el asistente more, Linux Magazine International, nmero 29, abril del 2003, pgina 44, de comunicacin). El cliente ni siquiera http://www.linux-magazine.com/issue/ Figura 2: Por qu no es esta la opcin por intentar la comunicacin no encriptada 29/MailUserAgents.pdf defecto? hasta que quitemos la marca en Mail

La gente tiende a confiar en las contraseas porque se fan de la autoridad que las otorga. De forma similar, el cliente de correo solo aceptar los certificados de un servidor si confa en que la autoridad que lo certifica ha hecho el proceso con consistencia. La autoridad autentifica el certificado firmndolo con su propio certificado, que a su vez ha sido firmado por un proveedor seguro de mayor rango. A pesar de todo, para confiar en una autoridad, el cliente necesitar almacenar los certificados de las autoridades de confianza superior, los certificados raz.

www.linuxmagazine.com.es

Nmero 01

61

ADMINISTRACIN

Syslog

Registro de Sistema de Prxima Generacin: Syslog-NG

La Caja Negra
El registro de los eventos del sistema es un reto para cualquier administrador. Y la debilidad del servicio Syslog tradicional se hace particularmente patente en grandes redes. Syslog-NG es un sustituto que realmente vale la pena. POR
CHRISTIAN SCHMITZ
los ms difundidos es Syslog-NG (Syslog de prxima generacin) que se lanz bajo licencia GPL. Muchas distribuciones Linux ya han adoptado SyslogNG. Otras alternativas disponibles son Reliable Syslog, en su primera implementacin, SDSC Secure Syslog [5] y Syslog Sign. El ltimo todava est en fase beta. espiar los mensajes y conseguir el acceso a la informacin privilegiada. Configuracin poco flexible La configuracin de Syslog usa un sistema poco flexible con 20 posibles orgenes y 8 prioridades. Esto puede ser un obstculo en grandes redes o para servidores con mltiples servicios. Uso inconsistente de orgenes y prioridades Para la mayora de las aplicaciones los administradores no tienen una opcin para administrar mensajes bajo un origen especfico. En algunos casos se puede establecer una opcin cuando se compila la aplicacin, pero en tiempo de ejecucin hay realmente pocas opciones disponibles. No registra el origen de la fuente Cuando un mensaje pasa por distintos servidores de registro es imposible descubrir la fuente del mismo. Syslog no almacena el FQDN (Fully Qualified Domain Name) del host. Cada host que propaga un mensaje modifica la direccin IP registrada. Uso de transferencia de mensajes no orientado a la conexin (UDP) Syslogd solo puede usar el protocolo UDP para transferir los mensajes. Si un paquete se pierde por problemas en la red el mensaje nunca llegar al destino.

Problemas con BSD Syslog


yslog permite a los administradores obtener informacin de registro en sus sistemas de manera uniforme para toda la red. Realizando la tarea de guardar, analizar y procesar los archivos de registro fcilmente, pero lo que la gente espera de los registros del sistema ha cambiado en los ltimos aos y el servicio Syslog tradicional simplemente no lo puede ofrecer. Syslog-NG [1] cubre este hueco. Los registros tradicionalmente se usan para comprobar la salud del sistema. Muchos administradores ni siquiera se molestan en mirar los registros a menos que se encuentren con un problema en el sistema. Pero hoy, es tambin una cuestin de mejorar la fiabilidad, esto es, usar el sistema como una alerta temprana para impedir que las cosas vayan a peor. La integridad de los mensajes de un sistema es tambin ahora ms importante que nunca, ya que permiten a los administradores levantar defensas basadas en datos reales. Los administradores tambin buscan habitualmente ms flexibilidad en la configuracin y en el manejo de las redes. Han salido varios proyectos que intentan conseguir este objetivo de mejorar el servicio del Syslog tradicional. Uno de

El servicio syslog tradicional se present en Septiembre de 1983 en la Universidad de California (Berkeley). No tena documentos de diseo y el software estaba pobremente documentado. Pasados 18 aos BSD Syslog se termin de documentar en el RFC 3164 [7]. Syslog se ha convertido en un estndar de facto. El servicio es fcil de configurar, usando un fichero de configuracin central llamado syslog.conf. Pero hay unas cuantas buenas razones para no estar satisfecho con la funcionalidad de syslogd:

Falta de mtodos de autenticacin


Syslogd no puede distinguir entre distintos hosts. Si el servicio se lanza con la opcin -r, acepta mensajes UDP en el puerto 514 sin importar cual es su origen. Esto permite a los atacantes invadir el servidor de registro con paquetes UDP o transmitir mensajes manipulados. Aparte de utilizar la funcionalidad de un firewall simple, no hay forma de proteger al servidor de registros. Mensajes en texto claro Syslog siempre usa texto claro (texto no cifrado) para transmitir mensajes a travs de la red. Esto permite fcilmente

Syslog-NG
Existen grupos de desarrolladores que estn trabajando para eliminar estos problemas y desarrollando un sistema de registros (ver los cuadros Syslog-Sign y Reliable Syslog). Actualmente SyslogNG es el mejor de ellos. Este desarrollo se basa en el servicio Syslog tradicional al que se le han aadido nuevas carac-

62

Nmero 01

www.linuxmagazine.com.es

Syslog

ADMINISTRACIN

PRI

Header

Message N

SHA-1

Hash

DSA/DH Private Key

PRI

Header

Message N+1

SHA-1

Hash

DSA/DH

Other Messages PRI Header Message N+M SHA-1 Hash DSA/DH

PRI

Header

H(N)

H(N+1)

...

H(N+M)

SIG

SHA-1

Hash

DSA/DH

Figura 1: Syslog-Sign aplica una funcin hash a cada mensaje que se enva. Despus transfiere un paquete con todos los valores hash de un grupo de mensajes, notificndolo al administrador de la transmisin adems de las firmas de los mensajes.

tersticas sin sacrificar la compatibilidad con el RFC 3164. Aunque actualmente carece de caractersticas tales como la firma digital y encriptacin, los desarrolladores estn intentando aadir la encriptacin en una versin futura. Actualmente se necesita stunnel [4] para manejar la encriptacin. Syslog-NG puede cambiarse de UDP a

Syslog-Sign
Syslog-Sign es una extensin del RFC 3164 [7] que mantiene la compatibilidad hacia atrs con el BSD Syslog. Como sugiere su nombre, este nuevo desarrollo usa la firma digital para proteger los mensajes de ser manipulados por un atacante. En el arranque, cada host crea un par de claves asimtricas que son usadas para firmar cada grupo de mensajes. Luego el host transmite el grupo de mensajes al servidor de registro en un nico mensaje (vase la figura 1). Este mtodo es particularmente til para proteger los mensajes almacenados. Como mantiene la compatibilidad con el RFC 3164, Syslog-Sign usa UDP para transmitir los mensajes. Los mensajes se pueden perder por la red y al no estar encriptados en s mismos, un atacante espiando la red podra acceder a informacin privilegiada. La verificacin de la clave aun no est clara. Un atacante podra ser capaz de distribuir claves manipuladas ya que Syslog-Sign utiliza un mensaje normal para distribuir la clave pblica. An se est trabajando en una implementacin para FreeBSD [6]

TCP para proporcionar ms fiabilidad en la entrega de mensajes. En este caso, la herramienta usa el puerto 514 por defecto. Aunque actualmente el puerto 514 est reservado para rlogin. Si quiere que los dos funcionen al mismo tiempo habr que reconfigurar el servidor. Muchas distribuciones incluyen actualmente Syslog-NG. Si se quiere usar el sucesor de Syslog en SuSE, hay que escribir la siguiente lnea en /etc/sysconfig/syslog y relanzar el servicio.
SYSLOG_DAEMON='syslog-ng'

redirigir los mensajes. El controlador file se encarga de klogd, por ejemplo leyendo los mensajes del kernel desde /proc/kmsg. Cada uno de estos controladores tiene una o ms opciones, que pueden especificarse entre parntesis seguido del nombre del controlador, por ejemplo, TCP y UDP necesitan saber el nmero de puer-

Reliable Syslog
Reliable-Syslog [8], que est especificado en el RFC 3195, usa BEEP (Block Extensible Exchange Protocol) para transferir los mensajes. Este protocolo del nivel de aplicacin est basado en TCP. Est orientado a la conexin y tiene mecanismos de autenticacin y verificacin.Y proporciona proteccin contra ataques. Usa dos tipos de formato de mensajes: El modo RAW que es compatible con el estilo del servidor syslog RFC 3164.Y el modo COOKED que usa un formato de mensaje XML. Los mensajes COOKED adems almacenan atributos adicionales como direcciones IP, FQDNs y tipos de dispositivos. La longitud del mensaje puede ser arbitraria. SDSC (San Diego Supercomputer Center) usa una implementacin de Reliable-Syslog con la licencia BSD-licensed Secure Syslog [5]. Est versin es compatible con el BSD Syslog. Requiere de las bibliotecas Roadrunner BEEP, OpenSSL, Glib2 y PkgConfig. Adems de los perfiles RAW y COOKED, tambin soporta el perfil llamado Security Profile.

El archivo de configuracin central, /etc/syslog-ng/syslog-ng.conf, es ligeramente ms complejo que el tradicional del syslogd. En vez de incluir original y priority, contiene el llamado logpaths que est formado por source, filter y destination. Hay ocho controladores fuente diferentes (vase Tabla 1). El controlador internal es obligatorio. Syslog-NG usa esta fuente especial para transmitir mensajes que tienen que ver con el propio servicio.

Fuentes
Cuidado: Los controladores file y pipe no deben confundirse con las acciones de syslogd, file y pipe. Syslog-NG los usa como fuente desde las cuales el servicio lee mensajes y no como destino a los que

www.linuxmagazine.com.es

Nmero 01

63

ADMINISTRACIN

Syslog

Tabla 1: Controladotes fuentes


Fuente
internal unix-stream

Descripcin
Controlador para el propio servidor de mensajes. Obligatorio. Abre un socket Unix especfico en modo SOCK_STREAM y se queda a la escucha de mensajes. Abre un socket Unix en modo SOCK_DGRAM y recibe mensajes a travs de l. Abre el fichero especificado. Abre el pipe especificado y lee mensajes. Escucha mensajes en un puerto UDP. Escucha mensajes en un puerto TCP. Abre el dispositivo de flujo especificado (slo Solaris)

unix-dgram

file pipe, fifo udp tcp sun-stream

to en el que escuchar y file necesita el nombre del archivo. Los sistemas Linux usan el controlador unix-stream localmente; el controlador usa un socket de dominio Unix orientado a la conexin. Cada conexin abierta requiere su propio proceso, un hecho que un atacante podra explotar para realizar un DoS (ataque por denegacin de servicio). max-connections puede impedir esto especificando un nmero mximo de conexiones concurrentes al servicio syslog. Est establecido a 10 por defecto. El manual de referencia [2] contiene una lista completa de los controladores fuente.

Filtros y Destinos
Los filtros describen como Syslog-NG debera manejar los mensajes que recibe de las diversas fuentes. ste es uno de los puntos fuertes del nuevo sistema de registro. Los administradores pueden usar filtros para ordenar los mensajes y pasarlos a los destinos apropiados.

Las funciones de filtro (vase la Tabla 2) pueden conectarse usando operadores booleanos (and, or, not y parntesis). Para aplicar un filtro el resultado de la operacin debe ser true. Algunas funciones de filtros pueden manejar expresiones regulares como opciones. Los destinos especifican donde y por qu medios un mensaje debe ser redirigido y procesado. Tal y como en las fuentes hay disponibles un nmero de controladores de destino, cada uno de los cuales pueden tener distintas opciones. La Tabla 3 proporciona una lista de controladores disponibles. Syslog-NG llama al controlador una sola vez y lo mantiene ejecutndose hasta que el servicio recibe la seal SIGHUP y termina. Esto hace que el controlador sea muy eficiente. Si Syslog-NG se lanzase por un programa externo por cada mensaje entrante un atacante podra lanzar mltiples procesos que sera similar a un ataque tipo DoS contra el sistema. Syslog-NG tambin tiene un nmero de opciones globales. Por ejemplo, chain_hostname y sep_hostname especifican como Sislog-NG debe manejar los nombres de host cuando pasa un mensaje a travs de mltiples servidores de registros. Esto permite a los administradores descubrir donde se origin el mensaje. El manual de referencia [2] contiene una lista completa de opciones globales.

mensajes del kernel desde /proc/kmsg. La prxima seccion crea una fuente de red:
source remote { tcp( ip(192.168.0.24) port(3333)U max-connections(10) ); };

Esta fuente se referencia como remote; y su controlador es tcp. Syslog-NG ahora escuchar los mensajes en el puerto TCP 3333. Incluso si el ordenador tiene mltiples direcciones IP el servidor slo escuchar en 192.168.0.24. La opcion max-connections est establecida en 10; el ordenador aceptar un mximo de 10 conexiones concurrentes al Syslog-NG. No es necesario especificar una nica fuente para los mensajes remotos. Muchos administradores crean una fuente individual que maneja todos los controladores. Dicho esto, fuentes separadas suministraran una estructura ms limpia.

Seleccin de Mensajes
Ahora a por los filtros. Nuestro primer ejemplo maneja mensajes cuyo nivel de registro corresponde a los valores warn, err, crit:
filter warning { level(warn, err, crit); };

Ejemplo de Configuracin
Para ilustrar la estructura de syslog-ng.conf la siguiente seccin muestra un archivo de configuracin simple dividido en secciones. Si est interesado en hacer un archivo ms complejo puede consultarlo en [3].
source local { internal (); unix-stream("/dev/log"); file("/proc/kmsg"); };

Esta regla simple, que aplica los filtros basados en las prioridades, es bastante

Tabla 3: Controladores destinos


Destino Descripcin
file pipe, fifo Escribe el mensaje al archivo especificado. Pasa el mensaje al pipe especificado.

Tabla 2: Funciones filtro


Filtro
facility level, priority program

Descripcin
Se refiere a los mensajes que origina la utilidad especificada. Se refiere a los mensajes con la prioridad especificada. Filtra los mensajes donde el campo nombre del programa contienen la expresin regular especificada Filtra los mensajes donde el campo nombre de host contiene la expresin regular especificada. Aplica la expresin regular especificada al mensaje entero. Llama a otra regla de filtro.

unix-stream Reenva el mensaje al socket Unix SOCK_STREAM. unix-dgram Reenva el mensaje al socket Unix SOCK_DGRAM. udp tcp usertty program Enva el mensaje al puerto UDP especificado. Enva el mensaje al puerto TCP especificado. Enva el mensaje a la consola especificada por el usuario,si el usuario est conectado. Lanza el programa especificado y enva un mensaje a la entrada estndar de programa (Stdin).

host

match filter

La fuente especifica aqu est identificada por su nombre local y comprende un nmero de fuentes locales. Los controladores fuentes son internal (obligatoriamente) y el controlador unix-stream, los cuales usan el archivo de dispositivo /dev/log y el controlador file que lee los

64

Nmero 01

www.linuxmagazine.com.es

Syslog

ADMINISTRACIN

Message

Message

Message

TCP-Port 601

UDP-Port 514

Loghost 1
uso en entornos segmentados con mltiples cortafuegos.

Loghost 2

Loghost 3

Figura 2: Dependiendo de la configuracin, Syslog-NG utiliza TCP o UDP para reenviar mensajes a travs de la red. Esto permite modificar Syslog-NG para su

comn al tradicional syslogd. La mayor ventaja de la variante Syslog-NG es el uso de las expresiones regulares. Una introduccin a esta tcnica la podemos encontrar en diversos libros de Perl, as como en la documentacin para el programa Logsurfer [9]. Esta herramienta automtica de anlisis de archivos de registro hace un uso intensivo de las expresiones regulares y proporciona una referencia de 50 pginas. Veamos una expresin regular extremadamente simple que busca todos los mensajes que tienen algo que ver con FTP, que se cumple si la cadena ftp aparece en cualquier parte del mensaje:
filter ftp { match("ftp"); };

originado por la utilidad authpriv, y todos los avisos del Kernel. El filtro email slo permite pasar los mensajes del sistema de correo.

Los Destinos
Todo lo que necesitamos ahora son unos cuantos destinos a los que mandar los mensajes. La siguiente entrada de configuracin le dice a Syslog-NG que escriba los mensajes al archivo de registro /var/log/mail (nombre de destino: email) o a la consola /dev/tty10.
destination email { file("/var/log/mail"); }; destination console { file("/dev/tty10"); };

tro hasta el destino. Es una regla que engloba el nombre de la fuente, un filtro y un destino. La primera de las siguientes reglas lee mensajes desde la fuente local y manda las entradas que coinciden con la regla de filtro konsole al destino konsole. La segunda regla almacena los mensajes del sistema de correo local en /var/log/mail.
01 02 03 04 05 06 07 08 09 10 11 log { source(local); filter(console); destination(console); }; log { source(local); filter(console), destination(email); };

Y aqu tenemos otra regla de filtro que slo permite a los mensajes crticos pasar y que tambin es til para la salida a TTY10. La salida por consola no debera ser muy verbosa:
filter console {U level(err) andU not facilityU (authpriv) orU level(warn) andU facility(kern); }; filter email {U facility(mail)U; };

Una ruta de registro describe la ruta completa desde la fuente, a travs del fil-

Si un host necesita reenviar los mensajes recibidos a travs de la red desde una fuente a otro host de registro, simplemente hay que configurar un destino apropiado para Syslog-NG.
destination loghost { udp(ip(172.16.0.33) port(514)); }; log { source(remote); filter(ftp); destination(loghost); };

El filtro console usa funciones, valores y expresiones booleanas. Esta regla trata cualquier mensaje de error que no se ha

Figura 3: El servidor Syslog de Kiwi Enterprises permite a los administradores incluir ordenadores con Windows en su configuracin de registros.

Lo importante es que el servidor de registro, loghost, est

www.linuxmagazine.com.es

Nmero 01

65

ADMINISTRACIN

Syslog

escuchando el puerto 514 definido por la direccin IP 172.16.0.33 en su archivo de configuracin. Este mtodo de conversin de direcciones puede ser extremadamente til (Vase la figura 2).

options { keep_hostname(no); chain_hostname(yes); sync(0); };

Opciones Globales
Para completar el archivo de configuracin, ahora hace falta poner las opciones globales, que se colocan al principio del archivo. Alguna de las opciones especifican como Syslog-NG manejar los nombres de hosts de los mensajes, cuando redirigir los mensajes a otro servidor de registro. Habilitando keep_hostname> se le dice a Syslog-NG que mantenga los nombres existentes. Si se deshabilita keep_hostname, chain_hostname (alias: long_hostname) decide lo que hacer con el nombre. Sin el encadenamiento (chain_hostname), el servidor de registro insertar su propio nombre, con encadenamiento aadir su nombre al nombre ya existente. Esto permite a los administradores trazar la ruta de los mensajes hasta su origen.

La opcin sync especifica el nmero de lneas que Syslog-NG guardar en la cach, antes de escribirla en el archivo. Un nmero alto aumentar el rendimiento, pero incrementar el riesgo de perder los mensajes si el sistema cae. El listado 1 contiene un archivo de configuracin. ste ilustra como de avanzado es Syslog-NG con respecto a los conceptos de flexibilidad y escalabilidad, en comparacin con su predecesor.

se est preparado para realizar un trabajo extra [4]. Si se precisa integrar las utilidades de encriptacin, autenticacin y no repudio, se debe ver SDSC Secure Syslog. Sin embargo, este servidor requiere ms mantenimiento. Sin duda, Syslog-NG es el ms completo, ya que se puede configurar para soportar su infraestructura con muy I poco esfuerzo.

Syslog y Windows
Muchas redes tienen PCs Linux y Windows. Bajo circunstancias ideales, una solucin centralizada de registro debera admitir ambos sistemas. Sin embargo, se requiere software extra para permitir que los sistemas Windows enven y reciban mensajes syslog. El servidor de Syslog de la empresa Kiwi http://www.kiwisyslog.com es un ejemplo de programa que proporciona este servicio. Soporta Windows 9x, NT, 2000 y XP. Adems de la versin gratuita, hay una versin comercial con funcionalidades ampliadas. La versin gratuita es adecuada para simplemente aadir mquinas Windows a los entornos syslog de Linux. Se configura por medio de una interfaz grfica y se puede lanzar tanto como un servidor de registro como un cliente. Como Syslog-NG, el software de Kiwi puede usar TCP o UDP para enviar los mensajes. Adems tiene algunas bonitas, aunque superfluas, florituras como grficos de barras de colores y otros grficos estadsticos.

Casi Perfecto
Las funciones filtros permiten a los administradores hacer los registros a medida, para reflejar las infraestructuras de redes complejas. La configuracin es clara a pesar de su flexibilidad. Incluso se puede compensar la carencia de utilidades de encriptacin y autenticacin, si

Listado 1: Configuracin Syslog-NG


01 # Opciones Globales 02 options { keep_hostname(no); chain_hostnames(yes); sync(0); }; 03 04 # Fuentes 05 source local { internal(); unix-stream("/dev/log"); file("/proc/kmsg"); }; 06 source remote { tcp(ip 192.168.0.24) port(3333) max-connections(10);}; 07 08 # Filtros 09 filter warning { level(warn, err, crit); }; 10 filter email { facility(mail); }; 11 filter ftp { match("ftp"); }; 12 filter console { 13 level(err) and not facility(authpriv) 14 or level(warn) and facility(kern); 15 }; 16 17 # Manda mensajes crticos a TTY10 18 destination console { file("/dev/tty10"); }; 19 log { source(local); filter(console); destination(console); }; 20 21 # Escribe mensajes de correo a un archivo 22 destination email { file ("/var/log/mail"); }; 23 log { source(local); filter(email); destination(email); }; 24 25 # Redirige los mensajes a otra red 26 destination loghost { udp(ip(172.16.0.33) port(514)); }; 27 log { source(remote); filter(ftp); destination(loghost); };

RECURSOS
[1] Pagina de inicio de Syslog-NG: http:// www.balabit.com/products/syslog_ng/ [2] Manual de Syslog-NG: http://www. balabit.com/products/syslog_ng/ reference/book1.html [3] Configuracin de ejemplo: http://www. campin.net/syslog-ng.conf [4] Syslog-NG encryption howto: http:// venus.ece.ndsu.nodak.edu/~jezerr/linux/ secure-remote-ogging.html [5] Secure Syslog por SDSC: http://security. sdsc.edu/software/sdsc-syslog/ [6] Syslog-sec: http://sf.net/projects/ syslog-sec/ [7] RFC 3164,The BSD Syslog Protocol: http://www.ietf.org/rfc/rfc3164.txt [8] RFC 3195,Reliable Delivery for Syslog: http://www.ietf.org/rfc/rfc3195.txt [9] Logsurfer: http://www.cert.dfn.de/eng/ logsurf/

66

Nmero 01

www.linuxmagazine.com.es

Bienvenidos a Linux User


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

Herramientas: Portal de Acceso

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 Tienes una red, pero slo una de las mquinas tiene acceso a Internet. Cmo hacer para que las dems puedan conectarse concurrentemente? Necesitas un portal o router y con Linux es fcil crear uno. Aprende cmo se hace en este artculo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Muchos de los gestores de ventanas ms sencillos son rpidos, muy configurables, a la vez que exigen pocos recursos. Sin embargo, muchos no disponen de un panel de control. Panelizer soluciona este problema sin ralentizar tu mquina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 Cmo mantenerse en contacto con la gente sin apartarte de tu escritorio? La respuesta est en Konversation, el ltimo y ms novedoso de los clientes IRC de KDE. Ideal para chateadores que disfrutarn de su amigable interfaz.

Desktopia: Panelizer

Aplicaciones: Konversation

Programacin Bsica: XUL

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74 Mozilla, aparte de estupendo navegador, es toda una plataforma de desarrollo que permite crear interfaces de manera sencilla y rpida. Aprende desde cero a crear tus propias aplicaciones multiplataforma con esta serie.

Educacin: WIMS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 Necesitas poder generar ejercicios para tus alumnos? Puede que WIMS sea la respuesta. Este servidor educacional permite crear ejercicios, exmenes y tests; adems administra clases y proporciona un entorno ideal para el autoestudio. Sirve para cualquier plataforma (Windows, Linux o Mac) y por supuesto que es gratuito y de cdigo abierto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84 El problema ya no es que no exista documentacin sobre un tema concreto, sino como encontrarla entre todas las descargas en nuestros discos duros. Grep es la herramienta de bsqueda todoterreno de los entornos Linux: pequeo, rpido y muy, muy eficiente.

Linea de Comandos: Grep

Iniciacin a Latex

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86 Para conseguir efectos tipogrficos profesionales, no hace falta costosos programas de autoedicin corriendo en costosos equipos. De hecho, no hace falta ni un procesador de textos. Con un pequeo editor y unos pocos comandos podemos generar documentos formateados elegantemente, con cuadros, tablas y notaciones matemticas utilizando Latex.

LINUX USER

Portal

Configurando una puerta de enlace en Linux

Portal de acceso
Si tenemos nuestra propia red con uno o dos ordenadores y buscamos una forma de tener acceso concurrente a Internet desde la red, la solucin es utilizar un router, tambin denominado puerta de enlace. En este artculo vemos a explicar como configurar nuestro PC Linux como puerta de enlace, un interfaz entre nuestra red local e Internet. BY HEIKE JURZIK
os routers se utilizan para intercambiar datos entre redes. En el caso de una pequea red, el sistema Linux que se ejecuta en nuestro ordenador puede realizar esta tarea de forma adecuada. Por supuesto, suponemos que tenemos una conexin a Internet y una conexin a la red local en el mismo ordenador. Este taller nos muestra la manera de configurar nuestro ordenador Linux para que nos ofrezca capacidades de enrutado.

SuSE Linux
Si tenemos instalado SuSE para permitirnos acceso a Internet, los siguientes pasos adicionales sern necesarios para configurar el ordenador como una puerta de enlace estndar: 1. Arrancamos YaST2 e introducimos nuestra contrasea. 2. Pulsamos sobre Network Devices (dispositivos de red) en la versin SuSE Linux 8.2 o Network/Basic (red/bsico) en SuSE Linux 8.1. Ahora debemos seleccionar un dispositivo adecuado: mdem, RDSI, ADSL o tarjeta de red. 3. Pulsamos Configure (configurar) para aadir una conexin de Internet, o Change (cambiar) para reconfigurar una existente. 4. Debemos asegurarnos de marcar la casilla Default Route en IP_Details dentro del dilogo de configuracin (ver figura 1). 5. Salvamos la configuracin y volvemos a Network Devices o Network/Basic. 6. Ahora debemos comprobar la configuracin de Network card para asegurarnos de que el transporte IP est habilitado. Para hacer esto, pulsamos

Change para modificar la configuracin de una tarjeta previamente configurada. Entonces, seleccionamos la tarjeta de red de nuestra red de la lista que aparece y pulsamos Edit. 7. Pulsamos en Routing - y verificamos que la casilla Enable IP Forwarding est marcada (ver figura 2). En las pruebas que realizamos en la redaccin, esto no fue suficiente para acabar la configuracin. Debimos iniciar la seccin Security and Users de nuestro YaST2 y el mdulo Firewall (Cortafuegos). Aqu encontramos la opcin Forward Traffic and do masquerading (Remitir Trfico y hacer enmascaramiento), que debimos marcar como activa.

Red Hat Linux

Los pasos de configuracin en Red Hat Linux son algo ms complejos. Debido a que la herramienta GUI no nos permite habilitar la redireccin IP, necesitamos acceder a la lnea de comandos para este paso. Primero iniciamos la herramienta redhat-config-network (redhat-configuracin-red) pulsando en el men K, Systems Settings (configuracin del sistema) y finalmente Network (redes). Tras introducir la contrasea debemos seguir estos pasos: 1. Seleccionamos una conexion de InterFigura 1: Conversin del ordenador en un router. net de la lista de

dispositivos y pulsamos Edit en la barra de herramientas. Alternativamente podemos elegir New para crear una conexin nueva. 2. Nos aseguramos de que la opcin Make this connection the default route (Establecer esta conexin por defecto) en la seccin Advanced est marcada (ver figura 3). 3. Salvamos los cambios y salimos del programa. Necesitamos hacer una visita rpida a la lnea de comandos para activar la redireccin IP. La configuracin para Red Hat Linux 9 y 8.0 es: 1. Abrimos una consola: la forma ms rpida de hacerlo es pulsando [Alt-F2] y escribiendo konsole. 2. Asumimos privilegios de superusuario escribiendo su, en la lnea de comandos y pulsamos [Enter] y escribiendo la contrasea de root. 3. Comprobamos que el modulo NAT

68

Nmero 01

www.linuxmagazine.com.es

Portal

LINUX USER

esta cargado:
/sbin/lsmod | grep iptable_nat

puerta de enlace por defecto). 4. Salvamos los cambios y salimos del programa.

S esta prueba no nos proporciona ningn resultado deberemos cargar el modulo escribiendo:
/sbin/modprobe iptable_nat

Puerta de Enlace con Microsoft Windows


Para permitir que un cliente de Windows acceda a Internet mediante un router Linux debemos seguir los siguientes pasos en funcin de la versin de Windows:
Figura 2: Habilitando la redireccin IP en SuSE

4. Ahora introducimos comando:

el

siguiente

Windows 95/98/Me
1. Abrimos Inicio/Configuracin/Panel de Control y hacemos doble clic sobre el icono Red. 2. En la lista de componentes de red localizamos la entrada TCP/IP y pulsamos Propiedades. 3. Ahora abrimos la pestaa Puerta de Enlace y escribimos la direccin local IP de nuestro router Linux en la caja Nueva Puerta de Enlace. Pulsamos Aadir y salvamos la nueva configuracin.

/sbin/iptables -t nat -A POSTRO

Linux.

UTING -o ppp0 -j MASQUERADE

5. Salvamos la configuracin escribiendo:


/sbin/service iptables save

6. Ahora usamos el siguiente comando para activar la redireccin IP:


echo "1" > /proc/sys/net/ipv4/ ip_forward

Para asegurarnos de que la redireccin IP se mantiene habilitada despus de reiniciar el sistema podemos usar nuestro editor favorito para modificar /etc/sysctl.conf, donde reemplazaremos el 0 que aparece en net.ipv4.ip_ forward = 0 y lo sustituiremos por un 1. 7. Esta configuracin es aplicada cuando reiniciamos el equipo. Si slo cambiamos sysctl.conf sin escribir 1 en ip_forward ahora podemos escribir:
/sbin/sysctl -p

2. Pulsamos en Network Devices (SuSE Linux 8.2) o Network/Basic (SuSE Linux 8.1) y luego Network card (SuSE Linux 8.2) o Network card configuration (SuSE Linux 8.1). 3.Ahora pulsamos Change para cambiar la configuracin de la tarjeta existente seleccionndola de la lista y pulsando Edit. 4. En Detailed settings, pulsamos Routing e introducimos la direccin local IP de nuestro router en la casilla Default Gateway. En el caso de Red Hat Linux, necesitaremos de Nuevo el programa redhat-confignetwork: 1. Iniciamos la herramienta redhat-config-network con la secuencia desde la opcin de K Men, System Settings/ Network, e introducimos la contrasea de root. 2. Seleccionamos la tarjeta de red de la lista de dispositivos y pulsamos el botn Edit. 3. En General escribimos la direccin local IP del router en al campo Default Gateway Address (Direccin de la

Windows 2000
1. Abrimos Inicio/Configuracin/Panel de Control/Red y conexiones, pulsamos con el botn derecho sobre Conexin rea Local y seleccionamos Propiedades en el men. 2. Seleccionamos Protocolo Internet (TCP/IP) y pulsamos Propiedades. 3. En Utilizar la siguiente direccin IP: escribimos la direccin de nuestro router de Linux en el cuadro Puerta de Enlace por Defecto:. 4. Finalizamos pulsando Aceptar.

Windows XP
1. Pulsamos sucesivamente en Inicio/ Panel de Control y luego Red y Conexiones Internet. 2. Abrimos las conexiones de red en Conexiones de Red. 3. Con el botn derecho accedemos al men del icono Conexiones de rea Local donde seleccionamos Propiedades. 4. En la pestaa General seleccionamos Protocolo Internet (TCP/IP) y pulsamos sobre Propiedades. 5. En Utilizar la siguiente direccin IP: escribimos la direccin de nuestro router de Linux en el cuadro Puerta de Enlace por Defecto:. 6. Pulsamos Aceptar para confirmar. I

para realizar el cambio en el sistema mientras se ejecuta. 8. Cerramos la consola presionando [Ctrl-d] 2 veces.

Configuracin Cliente Linux


Ahora debemos configurar los ordenadores Linux de nuestra red local para que utilicen la puerta de enlace de Internet. Para hacer esto en SuSE Linux procederemos de la siguiente manera: 1. Iniciamos YaST2 e introducimos la contrasea root.

Figura 3: Configuracin de la ruta por defecto en Red Hat Linux.

www.linuxmagazine.com.es

Nmero 01

69

LINUX USER

Desktopia

Panelizer

Aplicaciones a Raya
Los gestores de ventanas simples ofrecen una serie de ventajas en comparacin con los entornos de escritorio ms complejos: exigen pocos recursos, son rpidos y sumamente configurables. Desafortunadamente, la mayora carecen de un panel para aadir funcionalidades adicionales al entorno. POR ANDREA MLLER
ndependientemente de lo contento que uno est con sus actuales gestores de ventanas, la mayora de los usuarios Linux echarn de menos una pequea caracterstica, un panel lateral con reloj y men. Los paquetes integrados de entornos de escritorio como GNOME y KDE proporcionan un panel por defecto, pero los individualistas en la comunidad Linux deben encontrar primero el panel adecuado. Panelizer [1], un programa de Fabien Couyant, puede significar el final de la bsqueda. Se ejecuta en la mayora de gestores de ventanas y proporciona una serie de agradables extras como un monitor de correo y applets para montar dispositivos o monitorizar trfico de redes al margen de las funciones bsicas. Increblemente, la aplicacin ocupa tan 64kbytes, ocupando solo 236 kbytes si se activan todos los applets disponibles.

www.yukonhostels.com

evitar perdernos en el proceso. Despus de gestionar adecuadamente las numerosas dependencias, podemos empezar a compilar Panelizer. DesInstalacin compleja. comprimimos el archivo- 0.5.tar.gz (que podemos descargarnos desde [1]) con No existen paquetes precompilados del tar -xzf panelizer-0.5.tar.gz. A continpanel, por lo que debemos utilizar nueuacin cambiamos al nuevo directorio de stro compilador. Aparte de la librera Panelizer que hemos creado. Puesto que GTK versin 1.2.0 o superior (excepto el programa no dispone de archivo de gtk-2.x) y libxml, necesitaremos el configuracin, ser necesario usar un paquete de desarrollo del Panelizer y, editor de texto para aadir nuestras prefpor supuesto, un compilador. Como el erencias al archivo Config.mak. No GUI de Panelizer fue desarrollado utiobstante, los tiles valores por defecto lizando glade, necesitaremos tener insta(como la instalacin en /usr/local) hacen lado este paquete antes de poder compique la personalizacin no sea imprelar el panel. El gestor del paquete glade scindible. suele tender a instalar numerosas librYa podemos lanzar el compilador eras GNOME adicionales localizadas escribiendo make, e instalar escribiendo normalmente en el CD de instalacin. make install. Como alternaAfortunadamente, stas solo tiva, tambin podemos inson esenciales para compilar stalar Panelizer como un Figura 1: Primera ejecuPanelizer, por lo que el softROX applet [2] utilizando el cin de Panelizer. ware puede ser borrado comando roxinstall. Si bien despus de la compilacin. Es en la teora esto es una buena opcin, una buena idea tomar nota de todos las uno se pregunta porque los usuarios de libreras aadidas al instalar glade para

ROX, que ya disponen de un panel, necesitan otro.

Simple, ordenado y funcional.


Tras completar el proceso de instalacin podemos ejecutar el panel escribiendo panelizer &. La figura 1 muestra la configuracin estndar, si bien no muestra mucho. Pulsando la flecha de la izquierda minimizamos el panel, dejando solo un botn a la vista. Pulsando la aspa negra cerraremos el panel. Si bien esto nos permite un ahorro de espacio significativo, es muy posible que necesitemos algo ms de funcionalidad que un botn con calendario y reloj. El icono del editor de texto no gua hacia el editor de la configuracin (Figura 2). Lo primero que debemos decidir es que queremos que

GLOSARIO
Punto de Montaje: directorio donde el archivo del sistema de un volumen esta unido al rbol local de archivos del sistema.

70

Nmero 01

www.linuxmagazine.com.es

Desktopia

LINUX USER

muestre el panel. Pulsando Add abrimos el dilogo de seleccin. Esta seccin incluye un conjunto de tiles herramientas, como un monitor de mensajes de entrada en el buzn de correo (llamado Mail Counter en la documentacin), un applet para montar dispositivos (Mount Applet), un conmutador de silencio para la tarjeta de sonido, un men de inicio para programas y herramientas de monitorizacin para la CPU, memoria y trfico de red. Figura 3: Panelizer mostrando el men de GNOME 2. Debemos prestar atencin al deskswitch (aplicacin de concuando pulsemos el icono del correo en mutacin). Como la mayora de las apliel panel, es decir, abrir el programa que caciones de conmutacin no funciona utilicemos. con todos los gestores de ventanas, pero, Debemos prestar tambin atencin a la en lugar de simplemente negarse a funfuncin de silencio. La configuracin por cionar con candidatos no adecuados, defecto ejecuta esd (Enlightenment Panelizer se cuelga cuando llamamos al Sound Daemon). Si utilizamos otro applet. Podemos ejecutar Panelizer sin servidor de sonido, debemos indicarle la problemas de cuelgues con entornos nomenclatura correcta para su manipucomo WindowMaker, Enlightenment or lacin. Por ejemplo, para trabajar con IceWM. No podemos utilizarlo con aumix la sintaxis correcta es aumix -v0 y waimea, PWM or Blackbox. aumix -v75. Este texto debe ser escrito en los recuadros When pushed on y El baile de la configuracin. When pushed off respectivamente. Esta Algunas herramientas del Panelizer funconfiguracin apagar el sonido cuando cionan bastante bien con la configupulsemos el icono del altavoz una vez, lo racin por defecto, pero otras necesitan volver a conectar cuando lo pulsemos algunos cambios. Pera realizar cambios de nuevo, subindolo al 75 % si pulen un applet, debemos seleccionarlo en samos el botn una tercera vez. La aplila ventana de configuracin y pulsar el cacin de redes necesita saber que interbotn Configure. Por ejemplo, para perfaz debe monitorizar, mostrando la mitir que el monitor de correo (biff) funvelocidad de conexin cuando est concione, debemos indicarle donde esta figurado. Los usuarios de mdems y DSL almacenado nuestro buzn de correo y pueden usar el dispositivo ppp0 para especificarle que accin debe realizar monitorizar su conexin a Internet, siendo eth0 el dispositivo habitual utilizado para redes locales. Si deseamos monitorizar ambos tipos de redes, debemos iniciar dos aplicaciones de red. Panelizer permite la seleccin de smbolos en la ventana de configuracin con el objeto de ayudarnos a distinguir aplicaciones. Podemos utilizar los mismos pasos para aadir mltiples applets escalonados para diversos controladores y particiones de nuestro sisFigura 2: Un prctico editor nos ayuda con las tartema. No debemos olvidar introducir el eas de configuracin. punto de montaje adecuado para el

Mount directory en la pestaa Paths & Commands. Por defecto, se analiza la carpeta apps de la instalacin GNOME 1.4 (que puede existir o no) en busca de informacin. Es posible personalizar la ruta para permitir a Panelizer tener acceso a los archivos .desktop de una instalacin GNOME 2.2, si bien las aplicaciones no estn agrupadas en categoras, sino mostradas individualmente (ver Figura 3). La ubicacin de nuestra instalacin de GNOME depende de nuestra distribucin. Los usuarios de Red Hat deben introducir /usr/ share/applications para ubicar el men GNOME 2. Desafortunadamente, Panelizer es totalmente incapaz de emular el funcionamiento del men de KDE 3.1.x. A pesar de que el panel muestra las aplicaciones individualmente si especificamos como nuestra carpeta de men /usr/ share/applnk, Panelizer proporciona los parmetros incorrectos cuanto tratamos de ejecutar cualquier programa. Para lanzar el panel por defecto cuando introducimos el comando startx, debemos aadir el comando /usr/local/bin/panelizer & a nuestro fichero .xinitrc antes de llamar a nuestro gestor de ventanas. I

RECURSOS
[1] http://www.fcoutant.freesurf.fr/ panelizer.html [2] Jo Moskalewski:RISC rocks,Linux Magazine del 24 de octubre de 2002,pgina 73

Andrea Mller es una estudiante de derecho que se entretiene con Linux siempre que se cansa de teoras legales. Cuando el tiempo se lo permite, le gusta estudiar otros sistemas operativos como QNX, BeOS y NetBSD, e intenta mejorar sus habilidades con Python. Al margen de Linux y sus estudios universitarios, los intereses de Andrea se decantan hacia la literatura, la historia Europea y el ciclismo.

LA AUTORA:

www.linuxmagazine.com.es

Nmero 01

71

LINUX USER

Schlagwort

Konversation

Habla conmigo!
Por qu deambular por ah en busca de compaa cuando hay una sala de chat en tu misma casa? A los amantes de la tertulia virtual les va a encantar Konversation, la ltima herramienta IRC de KDE, por su amigable entorno.
BY STEFANIE TEUFEL
i pagas mucho en t factura de telfono y casi no aprovechas t tarifa plana, en lugar de usar el telfono conversa con tus amigos lejanos mediante el teclado. El servicio IRC, abreviatura de "Internet Relay Chat" (Conversacin Transmitida por Internet) es ideal para esto. Para casi cualquier tema existe una sala de conversacin apropiada o canal IRC disponible. Y si no est disponibles puedes crear uno adecuado al tema que te interese discutir. Para hacerlo, todo lo que necesitamos es un cliente IRC y conexin a cualquiera de los muchos servidores IRC disponibles en Internet. Si bien hay muchos clientes de IRC disponibles, vamos a tratar sobre Konversation [1], un programa KDE realizado con este propsito que destaca sobre el resto por su facilidad de uso. "Extra Gear" (http://extragear.kde. org/) es una coleccin de programas sueltos de KDE que por distintas razones no estn incluidas en el paquete Core KDE. Puede ser descargado desde http:// konversation.sourceforge.net/. Al igual que el cdigo fuente, tambin hay diversos paquetes RPM para los distribuciones ms conocidas, desde Debian hasta SuSE de las que puedes elegir. Programas como rpm, kpackage o dpkg y apt pueden facilitarnos el proceso de instalacin.

APLICACIONES
En esta columna presentamos herramientas mensualmente que han demostrado ser especialmente tiles para trabajar bajo KDE, resuelven problemas que de otra forma seran ignorados o simplemente son de las cosas ms bonitas de la vida, que, una vez descubiertas, no queremos dejar pasar.

No hay paquetes disponibles para en la red IRC ms importante, IRCNet, y SuSE 8.1 y algunas otras distribuciones, despus introducir el canal KDE pulsando pero tras descomprimir el paquete #kdeusers. Tras abrir la ventana de conkonversation-0.12.tar.gz desde /usr/versacin que aparece podemos seleclocal/kde/bin, la configuracin estndar, cionar Settings/Konversation Configure configure; make; make install funcionar para volver al dilogo de configuracin. perfectamente. Este procedimiento suPara conectarnos a servidores chat de pone que los paquetes KDE3 y Qt3-Dev y otras redes IRC debemos pulsar el acceso las herramientas estndar de compiNew Server (Nuevo Servidor) en la figura lacin estn instaladas. 1 y escribir los detalles del servidor en la Para arrancar el programa, podemos ir ventana de la figura 2 (p. ej.: Freenode al acceso Internet/Konversation en el [2]). Al mismo tiempo podemos selecmen K o escribir konversation & en la cionar un canal para conectar de forma ventana terminal de nuestra eleccin. Si inmediata con el nuevo servidor. Este el programa lo compilamos nosotros, pequeo truco nos puede ahorrar mucho hay que introducir la ruta correcta. tiempo ms adelante. Si deseamos La ventana principal (figura 1) es el conectarnos a un servidor especfico centro de comandos donde configucada vez que iniciemos el programa raremos el programa de acuerdo a nuesdebemos marcar la casilla del servidor tras necesidades concretas. El punto de deseado en Server List. entrada, una caja de dilogo llamada La anotacin Identity (Identidad) en la Server list (Lista de Servidores) se utiliza lista de seleccin a la izquierda de la para gestionar los diversos servidores IRC. Desafortunadamente, aqu es donde tropezamos con uno de los nicos defectos del programa. A diferencia de programas similares, los desarrolladores de Konversation no proporcionan una lista de las redes IRC ms populares y los datos de Figura 1: Nuestra ventana al mundo IRC sus correspondientes servidores. Debemos seleccionar la nica opcin disponible, pulsar Connect (Conectar) para contactar el servidor KDE IRC Figura 2: Nuevos servidores, por favor!

72

Nmero 01

www.linuxmagazine.com.es

Schlagwort

LINUX USER

figura 1 tambin es importante. Mientras que los apodos no son bien recibidos en los grupos de noticias, aqu son recomendados e, incluso, se anima a su uso.Por tanto debemos escoger un Nick (Apodo) apropiado e introducirlo en el campo adecuado (ver figura 3). Debido a que hay muchos usuarios, el apodo elegido puede estar pillado. Konversation proporciona 3 campos adicionales de apodos donde podemos introducir alternativas. El programa itera sobre la lista si nuestra primera opcin no Figura 3: Una identidad adecuada para cada mundo est disponible. Konversation tiene la capacidad de chat cada vez que ocurra algo en el estar en una red IRC con un apodo detercanal. Esto puede ocurrir por ejemplo minado y con otro distinto en otra red. El cuando alguien escriba un mensaje o un botn Add new identity (Aadir nueva usuario entre o abandone el canal. identidad) nos permite ponernos un Al margen de chatear, el IRC puede utinuevo disfraz. Mientras el nombre lizarse para el intercambio de archivos estndar New Identity no es muy especde datos. Las conexiones de clientes fico, lo podemos cambiar con el botn directos (DCCs - Direct Client ConRename (Renombrar). En cuanto salvenections) se usan con este fin. Dos mos nuestro nuevo apodo estar clientes IRC pueden establecer una disponible en el men desplegable conexin directa sin necesidad de pasar Identity. Tambin estar disponible en a travs del servidor IRC. Podemos utiServer Lists tras realizar los cambios lizar DCC settings para configurar la oportunos usando el botn Edit. Esto nos conexin. permite personalizar cada servidor con La opcin DCC accept downloads autouna identidad distinta. matically (DCC aceptar descargas El comportamiento de nuestro cliente automticamente) debe ser utilizada con IRC puede ser modificado en General setprecaucin, puesto que permite a tings.Si activamos las opciones AutoKonversation descargar cualquier cosa matically Connect (Conectar Autoofrecida sin hacer ninguna pregunta, mticamente) y Automatically Enter pudiendo descargar cdigos de progra(Entrar Automticamente), Konversation mas nocivos. Si deseamos que el prograintentar conectarse de Nuevo si la ma incluya el nombre del remitente en conexin se interrumpe. Una marca en las descargas, simplemente debemos blinking tabs (Etiquetas intermitentes) le activar la casilla Sender in data name indica a Konversation que debe encender (Nombre del emisor de datos). un pequeo indicador en la barra del

Preparados, listos, CHAT!

GLOSARIO
Core: Todos los programas que son oficialmente sacados al mercado son asignados a los llamados paquetes Core. Mientras kdelibsy kdebasedeben estar instalados, otros paquetes, organizados por materias como kdeadmino kdemultimedia, pueden dejarse aparte. IRC-Network: Podemos acceder a todos los usuarios de todos los servidores de una red IRC especfica. Pero los usuarios de redes diferentes no pueden conectarse a otras redes.

Una vez en el canal elegido, no hay nada que nos impida tener conversaciones excitantes. La ventana del canal est dividida en 3 reas (ver figura 4).Los mensajes de nuestro compaero o servidor aparecen en la ventana principal. A la derecha, Konversation lista los usuarios actualmente en el canal. Nuestros propios mensajes son escritos en la lnea de comandos inferior. Si mantenemos los valores por defecto

en General settings/ command char, los comandos de nuestro sistema empezarn con una barra invertida /. Si escribimos /help (Ayuda) nos mostrar los comandos disponibles. Podemos encontrar una ayuda rpida en IRChelp [3]. Esta pgina hace un uso intensivo del trmino IRC Op. Este tiene el siguiente significado: a un usuario que entre en un canal recin creado se le asignan ms privilegios que a otro usuario que entre ms tarde. Como Operador del canal podemos expulsar (kick) del canal a otros usuarios por mal comportamiento o por motivos personales. Los comandos ms importantes de los Ops se encuentran debajo de la lista de usuarios de la derecha. Podemos pulsar kick para expulsar usuarios y Ban (Prohibicin) para proscribir usuarios del canal. Un Op tambin nos permite asignar privilegios de Op a otros usuarios, mientras DeOp se los revocar. Si deseamos aplicar un comando a ms de un usuario debemos usar [Ctrl] y el botn izquierdo del ratn para seleccionar los usuarios. Los usuarios que utilizan mucho tiempo IRC estn destinado s a hacer amigos. Konversation nos ayuda a mantener estos contactos monitorizando si nuestros amigos estn en lnea. Podemos desplegar el men Windows/Notify list (Ventana/lista de notificacin) e introducir los apodos adecuados usando el botn New (nuevo). Konversation nos notificar cuando estos usuarios estn o entren en un canal. De la misma forma que podemos estar muy contentos con unos usuarios, hay otros que pueden ser un problema. Pero por suerte, el programa nos resuelve este problema con una lista de usuarios que deseamos ignorar Windows/Ignore list. I

RECURSOS
[1] Konversation: http://konversation. sourceforge.net/ [2] Freenode: http://www.freenode.net [3] IRC help: http://www.irchelp.org

www.linuxmagazine.com.es

Nmero 01

73

LINUX USER

XUL

El Kit de Construccin de Mozilla

Programacin XUL
De todas las invenciones de los ltimos 50 aos, solo unos pocos productos realmente innovadores han llegado a un punto en el cual todos los usamos habitualmente todos los das de nuestra vida. A pesar de ello no tenemos por qu quedarnos estancados en sus defectos iniciales de diseo.
POR JONO BACON

pesar de que joyas como el Sinclair C5, la moto tipo Chopper, el refresco Tab Clear o Microsoft FoxPro se hayan quedado en el camino, hay algunos productos y tecnologas que se han mantenido. Una de esas tecnologas es la Web. Hay pocas dudas al respecto de que la Web ha causado un gran impacto en la forma en que nos comunicamos, compramos o hacemos
Jono Bacon is a writer/journalist, consultant and developer based in England. Jono has been actively involved with Linux since 1998 and has worked on a number of different projects including KDE, KDE::Enteprise, KDE Usability Study, Kafka and Linux UK.You can find his website at http://www.jonobacon.org.

otras cosas. Al margen de las polticas de las guerras de navegadores, la incompetente implementacin de estndares y los intentos de censura por parte de ciertos polticos americanos, la Web ha demostrado ser un medio atrayente al que el acceso se supone. Hay veces que puedo or por ah la frase Cmo que no tienes Internet? (enunciada en tono de asombro). Al margen de la popularizacin de la Web, sus limitaciones son evidentes. La ms visible es el hecho de que la interfaz entera debe ser reinventada cada vez que se desarrolla un sitio web. Adems, la interfaz debe ser recargada cada vez que se realiza un cambio en la pgina por muy pequeo que sea. Esto es ineficiente no solo por el hecho de que HTML redundante necesita ser enviado y recibido una y otra vez entre el servidor y el navegador, si no porque

crea un entorno donde los cambios ms dinmicos de la pgina son los ms difciles de realizar, dndole a la Web una clara sensacin de pesada.

Introduccin a XUL
La dependencia de HTML y su esperada funcionalidad de bsqueda es realmente una piedra de toque del problema que acabamos de describir. A pesar de que tecnologas como el HTML Dinmico (DHTML) y el Modelo de Objetos de Documentos (DOM) han aparecido para atacar el problema, stas necesitan un poco de mimo para hacerlas funcionar conjuntamente. Los desarrolladores del popular buscador Mozilla tuvieron una idea diferente. Con grandes dosis de discusiones y diseo, los programadores trabajaron juntos hasta crear el Lenguaje de Interfaz del Usuario de XML (XUL)

74

EL AUTOR

Nmero 01

www.linuxmagazine.com.es

XUL

LINUX USER

especfica, pudiendo entonces escribir software que lea esas etiquetas y las use en el contexto que deseemos. XUL sigue el mismo concepto, pero las etiquetas son usadas para crear elementos de interfaz especficos. La magia no comienza, no obstante, hasta que Mozilla lee las etiquetas y crea los elementos de la interfaz por nosotros. El archivo XML es una forma simple de especificar lo que queremos como interfaz y donde.
Figura 1: No es exactamente el cdigo XUL ms claro, pero es un inicio.

Comencemos
Esta es la primera parte de una serie, donde voy a mostrar como modelar una interfaz basada en XUL. Esta interfaz abarcar algunos de los diferentes componentes XUL disponibles, y si bien no veremos como realizar tareas hasta el prximo captulo, si sentaremos las bases de cmo crear nuestra interfaz visual. Para comenzar crearemos un archivo XUL simple que contenga 2 botones. Para hacer esto, crearemos un archivo llamado xul1.xul al que le aadiremos el siguiente cdigo (ver Listado 1). Tras aadir el cdigo, usaremos Archivo | Abrir Archivo para localizarlo y abrirlo en Mozilla. Deberamos ver algo similar a la figura 1. Cualquier archivo XML, independientemente de su funcin, debe tener algunas lneas al principio que indican la versin de XML y una hoja de estilo si es oportuno. En nuestro ejemplo tenemos las siguientes 2 lneas:
<?xml version="1.0"?> <?xml-stylesheet href="chrome:U //global/skin/" type="text/css"?>

resolviendo el problema parcialmente. Pronunciado zool e inspirado por los Cazafantasmas (Ghostbusters), el lenguaje XUL en esencia busca recrear las caractersticas de la interfaz de usuario tpicamente asociadas a paquetes de herramientas grficas normales como Qt y GTK. Caractersticas como botones, barras de desplazamiento, etiquetas o mens estn disponibles en el paquete XUL. Muchos de estos simplemente no estn disponibles en formatos normales HTML. Cada una de estas funciones se usa dentro de XUL simplemente escribiendo (no es de extraar) archivos XML. Para los que sienten un agudo dolor de cabeza cuando leen las letras XML les voy a dar un breve repaso de lo que es. XML es un conjunto de reglas y convenciones que nos permiten crear lenguajes que parecen similares al HTML. Estos lenguajes incluyen etiquetas, atributos, contenidos y otros conceptos que tambin se hallan en HTML (de hecho las versiones ms modernas de HTML son dialectos XML). La tecnologa XML nos permite crear nuestras propias etiquetas y lenguaje que pueden ser usados para nuestros propios fines. Por ejemplo, si quisisemos almacenar una direccin en XML crearamos:
<contacto> <nombre>Pepe</nombre> <apellidos>Lpez</apellidos> <direccion>13, Rue del Percebe,U 33333 Villaalgo</direccion> <telefono>020 344 5443U </telefono> </contacto>

Si bien tenemos 4 lneas de cdigo, esto es realmente una nica etiqueta que he subdividido en una serie de lneas para hacerla ms fcil de leer. De hecho, no importa donde hagamos separaciones de lnea, siempre y cuando no rompamos etiiquetas. Cada pgina XUL que creemos necesita una etiqueta <window> que pueda ser usadas para contener los componentes que forman nuestra interfaz. Dentro de esta etiqueta hemos usado 3 atributos. El primero (id) es una referencia nica que apunta a esta etiqueta en XML. El atributo id es esencial para ser capaces de comunicarnos con etiquetas y actualizarlas con cambios e informacin. Esto estar ms claro cuando usemos DOM para actualizar y referenciar realmente etiquetas. La segunda etiqueta, title (ttulo), contiene una serie de caracteres legibles por humanos que se muestra en la barra de ttulo cuando lanzamos el archivo XUL en la ventana oportuna. Si cargamos el archivo en el navegador como hemos hecho, este texto es ignorado. El ltimo atributo es la parte xmlns. Este valor especifica el namespace (espacio de nombres) en el que la etiqueta <window> y todas las etiquetas dentro de ella estn basadas. Un namespace es como un grupo especial que podemos especificar para determinar de donde viene una etiqueta. Esto ayuda en situaciones en las que tengamos una etiqueta <window> de otro lenguaje XML y una etiqueta <window> del lenguaje XUL: namespace las diferencia. Ahora estamos listos para poner algo en nuestra pantalla. En nuestro ejemplo hemos creado dos botones con nuestro cdigo:

Como podemos observar, tenemos una lnea de versin que indica que la versin XML es la 1.0. La segunda lnea indica que nuestra hoja de estilo est en la ruta chrome. La ruta chrome contiene algunas utilidades internas de Mozilla que gestionan habitualmente las interfaces de usuario de Mozilla. Las siguientes lneas contienen nuestras primeras etiquetas:
<window id="firstwindow" title="First XUL Window" xmlns="http://www.mozilla.org/U keymaster/gatekeeper/there.is.U only.xul">

Listado 1: Xul1.xul
<?xml version=1.0?> <?xml-stylesheet href=chrome:// global/skin/ type=text/css?> <window id=firstwindow title=Primera Ventana XUL xmlns=http://www.mozilla.org/ keymaster/gatekeeper/ there.is.only.xul> <button id=button1 label=Primer Botn/> <button id=button2 label=Segundo Botn/> </window>

Aqu usamos etiquetas especficas para marcar datos diferentes de informacin

www.linuxmagazine.com.es

Nmero 01

75

LINUX USER

XUL

correcto. En el caso de nuestras etiquetas <button>, se ha de incluir una etiqueta de cierre </button> para mantener las reglas de XML. La barra invertida al final de nuestra etiqueta <button> es un atajo para incluir la etiqueta </button>. Vern que este tipo de atajos se usan habitualmente en XML. Para finalizar nuestro archivo incluimos la etiqueta de cierre </window>.

Gestin de la composicin
Figura 2: Gestor de diseo horizontal.

<button id="button1" label= "Primer Botn"/> <button id="button2" label= "Segundo Botn"/>

Las lneas del cdigo son muy similares, pues solo los atributos id y label (etiqueta) tienen diferentes contenidos. El atributo id se comporta de la misma manera que el equivalente <window> que usaremos para referenciar la etiqueta ms tarde. El atributo etiqueta contiene el texto que realmente aparece en el Botn. Alguno se preguntar que est haciendo la barra invertida (/) en la etiqueta. Al contrario de lo que ocurre en algunas formas de HTML, donde podemos dejar sueltas etiquetas por ah, XML es muy estricto sobre el marcaje

En nuestro primer ejemplo que el segundo Botn est debajo del primero. Este es el comportamiento predeterminado de los componentes cuya distribucin no est especificada. Si bien esto es vlido para pginas sencillas, este mtodo de posicionar componentes no es suficientemente flexible. Aqu es cuando se necesita usar un gestor de distribucin. La gestin de la distribucin es algo comn en la mayora de los componentes GUI como Qt y GTK. El nico requisito es que pongamos nuestros componentes dentro de unos controles invisibles que nos coloquen nuestro controles visibles de una manera determinada. La mayora de herramientas contienen formas horizontales y verticales de composicin. Esta forma estandarizada de gestionar las formas se ha transferido a XUL y consecuentemente tenemos las etiquetas <hbox> y <vbox>. Veamos

Figura 3: Combinacin de gestin del diseo horizontal y vertical.

a continuacin un ejemplo de gestin que nos permite disponer nuestros botones:


<hbox> <button id="button1" label=U "Primer Botn"/> <button id="button2" label=U "Segundo Botn"/> </hbox>

La forma en que funciona la etiqueta <hbox> es colocando horizontalmente los componentes entre las etiquetas <hbox> y </hbox> ms cercanas. Los resultados de este cdigo los podemos ver en la figura 2. El otro tipo de gestin de la composicin es la etiqueta <vbox>. Esta etique-

Componentes tipo HTML


Hasta ahora, en nuestra exploracin de XUL solo hemos hecho uso de gestores de composicin y botones de pulsacin. Hay otros muchos componentes que podemos usar, mirando primero los componentes HTML ms comunes. Aprenderemos estas etiquetas ejecutando un poco de cdigo: 01 <vbox> 02 <hbox> 03 <label value="Cuadro 04 de verificacin"/> 05 <vbox> 06 <checkbox id="check1" label=U 07 "Primero"/> 08 <checkbox id="check2" label=U 09 "Segundo"/> 10 </vbox> 11 </hbox> 12 <hbox> 13 <label value="Botones de Radio"/> 14 <vbox> 15 <radio id="radio1" label=U 16 "Primero"/> 17 <radio id="radio2" label=U 18 "Segundo"/> 19 </vbox> 20 </hbox> 21 <hbox> 22 <label value="Caja de Texto"/> 23 <vbox> 24 <textbox id="textbox"/> 25 </vbox> 26 </hbox> 27 <hbox> 28 <label value="Caja deU 29 Texto Multilnea"/> 30 <textbox id="multitextbox"U 31 multiline="true"/> 32 </hbox> 33 </vbox> Con este cdigo estamos componiendo una serie de descripciones de componentes y su correspondiente componentes. Estamos usando la etiqueta <label> para indicar texto en nuestra interfaz XUL. Usamos el atributo <of> de esta etiqueta para contener el texto que queremos mostrar en la etiqueta. Nuestro primer tipo de componentes en una cuadro de verificacin. La creamos con la etiqueta <checkbox> y usamos la etiqueta atributo para indicar el texto al lado de la caja. El segundo componente que usamos es el botn radio, usando la etiqueta <radio> de la misma manera que para crear el componente anterior. Ahora creamos una caja de edicin de una sola lnea. No hay etiqueta asociada a esta caja por lo que simplemente fijamos el atributo id dentro de la etiqueta <textbox>. Finalmente creamos una caja de texto multilnea. Con este fin simplemente fijamos la variable multiline = "true" (verdadero) a una caja de texto normal.

76

Nmero 01

www.linuxmagazine.com.es

XUL

LINUX USER

Figura 4: Uso de etiquetas y listados.

ta se comporta de la misma forma que la etiqueta <hbox> pero muestra sus componentes hijos (los componentes entre las etiquetas <vbox> y </vbox>) verticalmente. Si ponemos un bloque similar debajo de nuestro bloque <hbox> podemos ver como funciona. (H) en lo botones gestionados horizontalmente y (V) en los verticales:
01 02 03 04 05 06 07 08 09 10 11 12 <hbox> <button id="button1" label=U "Primer Botn (H)"/> <button id="button2" label=U "Segundo Botn (H)"/> </hbox> <vbox> <button id="button1" label=U "Primer Botn (V)"/> <button id="button2" label=U "Segundo Botn (V)"/> </vbox>

zontalmente. Prestemos atencin a como hemos dispuesto el bloque vertical de botones tras los componentes del bloque horizontal. Debido a la posicin de nuestros componentes deberamos ver algo parecido a lo que muestra la figura 3. Una cosa a la que tenemos que estar atentos cuando posicionemos nuestros componentes es cmo el gestor maneja el espacio. En nuestro ltimo ejemplo se ajust el ancho de los botones horizontales para acomodar el espacio necesario para los botones verticales. Esto es debido a que el gestor vertical fue anidado dentro del gestor horizontal afectando los componentes horizontales.

Figura 5: Un interfaz XUL completa.

Componentes Exticos
El verdadero poder de XUL reside en la forma en que puede eclipsar a HTML en la forma de conseguir informacin del usuario. Esta capacidad reside en la forma en que podemos usar aplicaciones de control GUI normales dentro del concepto de la web. En el siguiente ejemplo vamos a crear dos etiquetas, una con un componente de edicin de texto multilnea y la otra con un cajetn con una lista desplegable. En este ejemplo, las etiquetas y los cajetines no son tpicamente usados en un entorno web. Iremos avanzando paso a paso por este ejemplo y escribiendo el cdigo a medida que progresamos. Primero creamos un archivo nuevo con la versin de XML, pgina de estilo y etiquetas <window>, para luego aadir las siguientes lneas:
<tabbox> <tabs> <tab label="Editor Textos"/> <tab label="Lista"/> </tabs>

En este caso, la pestaa Editor Textos ser la pestaa de la izquierda y la pestaa Lista la de la derecha. Ahora tenemos que crear los paneles de la pestaas. Lo hacemos creando primero una etiqueta de paneles de pestaas generales:
<tabpanels>

Ahora creamos cada panel por turnos. Primero creamos el panel de la caja de texto. Para ello utilizamos la etiqueta <tabpanel> para crear cada panel y luego la rellenamos con otros componentes:
<tabpanel id="text"> <label value= "Escribe un poco de texto:"/> <textbox id="textbox"U multiline="true" flex="1"/> </tabpanel>

Las cosas se ponen realmente interesantes cuando intentamos combinar un tipo de gestor de composiciones dentro de otro gestor. Miremos el siguiente cdigo por ejemplo:
01 02 03 04 05 06 07 08 09 10 11 12 <hbox> <button id="button1"label=U "Primer Botn (H)"/> <button id="button2" label=U "Segundo Botn (H)"/> <vbox> <button id="button1" label=U "Primer Botn (V)"/> <button id="button2" label=U "Segundo Botn (V)"/> </vbox> </hbox>

Aqu hemos puesto el gestor vertical dentro de los botones gestionados hori-

Aqu hemos empezado creando un nuevo componente que contiene solapas (<tabbox>). Una caja de solapas contendr un nmero de solapas que a su vez puede contener otros componentes. Entonces abrimos la etiqueta <tabs> para especificar los nombres de los solapas en nuestra interfaz. Para cada solapa usaremos la etiqueta <tab> para especificar que etiqueta debe ser definida. Nuestros solapas sern aadidos desde la izquierda hacia la derecha en el orden que los especifiquemos en XUL.

El lector avispado se habr dado cuenta del atributo flex que se ha colado en el cdigo. Cuando este tiene un valor de 1 el componente se ajustar para ocupar todo el espacio disponible. Para nuestro segundo panel crearemos nuestra lista de texto dentro del mismo panel. Usaremos la etiqueta <listbox> para crear la caja principal y luego usaremos la etiqueta <listitem> para aadir cada cosa a la caja.
<tabpanel id="listbox"> <label value="ColorU Favorito?"/> <listbox flex="1"> <listitem label="Rojo"/> <listitem label="Azul"/> <listitem label="Amarillo"/> <listitem label="Verde"/>

www.linuxmagazine.com.es

Nmero 01

77

LINUX USER

XUL

</listbox> </tabpanel>

Finalmente cerramos el panel de etiquetas y la caja de pestaas general:


</tabpanels> </tabbox>

04 05 06 07 08 09 10

<menuitem label="Nuevo"/> <menuitem label="Abrir"/> <menuitem label="Guardar"/> <menuseparator/> <menuitem label="Salir"/> </menupopup> </menu>

(ver listado 3). El cdigo no es diferente del ejemplo anterior. Finalmente cerramos el gestor horizontal y la ventana:
</hbox> </window>

Conclusin
En la primera parte de nuestra serie hemos cubierto bastante terreno. No solo nos hemos lanzado pataleando y gritando al mundo de los programas XML y XUL, si no que adems hemos podido estudiar las etiquetas estilo HTML, las etiquetas especiales, los gestores de diseo, cajas de etiquetas, mens y muchas cosas ms. Con el conocimiento que hemos desarrollado hasta ahora tenemos la posibilidad de crear interfaces XUL ms o menos grandes. Desde luego que hay muchos ms componentes que cubriremos en otros nmeros. El mes que viene partiremos del conocimiento de este numero y lo haremos funcional. Usaremos las capacidades de JavaScript de Mozilla y las uniremos con XUL para conseguir que nuestras interfaces interacten con I el usuario.

Podemos ver el interfaz completa en la figura 4.

Interfaces completos
Para acabar la primera entrega de programacin XUL miraremos un interfaz XUL de ejemplo completo. Este interfaz incluir parte del cdigo que ya hemos repasado al igual que algunos mens y divisores reajustables. Iremos paso a paso por todas las lneas del cdigo para asegurar que entendemos todo lo que hemos tratado. Primero comenzaremos con la definicin de etiquetas en XML y la creacin de una ventana principal (ver listado 2). Los primeros componentes que aadiremos son algunos mens. Su creacin sigue el mismo principio que hemos estado usando con anterioridad creando etiquetas dentro de otras etiquetas para construir los distintos elementos. Primero creamos una barra de men (la barra en la que el men se asienta) con una etiqueta <menubar>.
<menubar id="menubar">

Para crea el men, primero usamos la etiqueta <menu> para crear las entradas del mismo y luego usamos <menupopup> para crear el rea desplegable. Finalmente aadimos una serie de elementos con etiquetas <menuitem>. Ahora usamos el mismo concepto para crear el men Editar:
<menu id="editmenu" U label="Editar"> <menupopup id="editpopup"> <menuitem label="Deshacer"/> <menuitem label="Rehacer"/> </menupopup> </menu> </menubar>

Con nuestros mens creados estamos listos para crear el rea del interfaz principal. Si miramos la figura5 podemos observar el resultado de nuestro interfaz y como est construida. Tenemos un listado a la izquierda de la pantalla y las pestaas a la derecha. Para gestionar esta disposicin primero necesitamos abrir una etiqueta <hbox> y luego crear el listado:
<hbox> <listbox flex="1"> <listitem label="Rojo"/> <listitem label="Azul"/> <listitem label="Amarillo"/> <listitem label="Verde"/> </listbox>

Listado 3: Tab box


01 <tabbox> 02 <tabs> 03 <tab label="Editor Textos"/> 04 <tab label="Lista"/> 05 </tabs> 06 <tabpanels> 07 <tabpanel id="text"> 08 <label value="Escribe algo de texto:"/> 09 <textbox id="textbox" multiline="true" flex="1"/> 10 </tabpanel> 11 <tabpanel id=listbox> 12 <label value="Color Favorito?"/> 13 <listbox flex="1"> 14 <listitem label="Rojo"/> 15 <listitem label="Azul"/> 16 <listitem label="Amarillo"/> 17 <listitem label="Verde"/> 18 </listbox> 19 </tabpanel> 20 </tabpanels> 21 </tabbox>

Luego aadiremos un men completo. En este caso, el men Archivo:


01 <menu id="filemenu" U 02 label="Archivo"> 03 <menupopup id="file-popup">

Listado 2: Ventana principal.


01 <?xml version="1.0"?> 02 <?xml-stylesheet 03 href="chrome://global/skin/" 04 type="text/css"?> 05 <window 06 id="complete" 07 title="Ejemplo Completo" 08 xmlns="http://www.mozilla.org/ keymaster/gatekeeper/there.is. only.xul>

Lo siguiente que vamos ha hacer es usar un componente especial llamado splitter para aadir una barra reajustable que permita al usuario ajustar el componente a la izquierda y a la derecha del divisor. Usamos la etiqueta <splitter/> para crear este componente:
<splitter/>

El siguiente montn de cdigo es nuestra familiar caja de etiquetas que contienen etiquetas de edicin de texto y listados

78

Nmero 01

www.linuxmagazine.com.es

Educacin

LINUX USER

El servidor interactivo de actividades matemticas WIMS

La navaja suiza de las aplicaciones matemticas


U
no de los problemas principales que nos planteamos los educadores cuando nos vemos ante la disponibilidad de ordenadores en un aula es que, aunque adivinamos que las posibilidades que se nos ofrecen son enormes, se nos hace manifiesta nuestra ignorancia sobre herramientas y recursos que nos permitan una explotacin pedaggica eficaz y creativa. Y esto ocurre tanto si se trabaja con software privativo como si es software libre; pero en este caso adems no contamos con el colchn psicolgico de lo conocido y las inercias nos hacen aferrarnos a soluciones que, tratar de demostrarlo, no lo son nunca a medio plazo: la experiencia demuestra que la mejor herramienta privativa ata al usuario a la cadena de actualizaciones de versiones de la aplicacin y impide su participacin en desarrollos que se reciben de forma pasiva. A veces se nos olvida que nicamente el software libre es nuestro y que podemos colaborar en la correccin de los errores y deficiencias que evidentemente tiene. Esta seccin tiene como objetivo presentar herramientas y aplicaciones libres de uso educativo. Evidentemente

Estrenamos esta seccin (un saludo a los lectores) presentando una aplicacin de nombre un poco intimidatorio, el Web Interactive Mathematical Server, WIMS. Pero que nadie se asuste, nuestro objetivo en estas pginas es demostrar lo fcil que es de utilizar y lo sumamente til que puede llegar a ser en un aula. POR JUAN RAFAEL FERNNDEZ

cualquier aplicacin, un editor de textos o un programa para dibujar, puede ser una aplicacin educativa, quizs la ms til; la clave est en encontrar los enfoques y las metodologas para que su utilizacin tenga sentido pedaggicamente. Nos centraremos sin embargo en los programas especficamente educativos por la sencilla razn de que son menos conocidos. Por supuesto que consideramos esencial escuchar las sugerencias, comentarios y crticas de los lectores. Pretendemos que sea una seccin clara y til; al plantearnos el criterio de ordenacin (podamos haber seguido una clasificacin por materias, o por niveles educativos) hemos pensado que debamos regirnos por la urgencia. En

este sentido hemos pensado que debamos comenzar por hablar de WIMS porque es una herramienta que responde a una demanda presente en los Centros educativos.

Qu es WIMS?
Aunque tenga nombre de herramienta para matemticos, o la documentacin lo presente como un servidor de ejercicios interactivos, WIMS es la navaja suiza de las aplicaciones educativas: una plataforma que permite crear clases virtuales, cumple tambin la funcin de compartir y almacenar cientos de ejercicios y es incluso un entorno de generacin de exmenes, evaluacin y seguimiento del progreso del alumno y de una clase. En

Figura 1: Pgina principal de un servidor WIMS

Figura 2: Actividades para el nivel H3

www.linuxmagazine.com.es

Nmero 01

79

LINUX USER

Educacin

este sentido puede revolucionar la dinmica de los controles de un Centro educativo; como explica Gang Xiao, no es necesario que a todos los examinandos se les haga las mismas preguntas ocultas hasta ese momento, simultnea y sincronizadamente, vigilando que no se copien. Porque WIMS permite generar un conjunto enorme y redundante de preguntas, de manera que a cada examinando se le asigne aleatoriamente un subconjunto equivalente a los otros subconjuntos. Slo as se logra la objetividad en la seleccin de preguntas que se le hace a cada alumno[2]. Y las actividades no tienen que ser de matemticas o qumica, comprobaremos que con WIMS podemos crear actividades de conocimiento del medio o de idiomas. Otra gran ventaja de WIMS, adems de ser libre y de que cualquiera

puede utilizarlo o contribuir, es que respeta los estndares definidos por los creadores de la web (el consorcio W3C) y por tanto funciona con cualquier navegador, en cualquier sistema operativo. WIMS lo cre y lo desarrolla Gang Xiao, un profesor de matemticas chino que ensea en la Universidad de Niza, Francia; tiene licencia libre (GPL). Georges Khaznadar ha preparado paquetes binarios para Debian y contribuye decisivamente a su documentacin y divulgacin. Existe una red de servidores WIMS por todo el mundo, y recopilaciones de ejercicios y actividades de licencia libre. La velocidad de desarrollo y de incorporacin de mdulos y traducciones es muy rpida: mientras escribo este artculo se ha pasado de la versin 3.42 a la 3.44, y probablemente cuando est en los quioscos la versin sea otra.

En el cuadro 1 se pueden leer noticias sobre la traduccin de las actividades. Las posibilidades de utilizacin de WIMS escapan al espacio disponible en esta seccin. En este primer artculo vamos a realizar un repaso general de sus capacidades y de las actividades disponibles, con algunos ejemplos de uso; expondremos primero cmo puede utilizarse en remoto y detallaremos despus cmo se instala en un ordenador. En el prximo nmero trataremos la creacin de una clase virtual, de actividades nuevas con Createxo y Modtool y lo que en la terminologa de WIMS se conoce como documentos y cursos.

Conectarse a un servidor
Para probar WIMS no hace falta instalarlo en nuestro ordenador: bastan una conexin a Internet y un navegador.

Cuadro 2: instalacin de WIMS


Hay tres maneras de instalar WIMS: instalar el paquete tar.gz preparado por Xiao, los paquetes incorporados a Sid (la versin inestable de Debian) o las versiones experimentales preparadas por Georges Khaznadar. Examinemos las ventajas e inconvenientes de cada opcin. Podemos descargar de http://wims.unice.fr/ download/wims el cdigo fuente del servidor y las aplicaciones. Las lneas siguientes ejecutadas desde una terminal bastarn: wget http://wims.unice.fr/download/U wims/wims-3.44.tgz wget http://wims.unice.fr/download/U wims/wims-modules-en-3.44.tgzU wget http://wims.unice.fr/download/U wims/wims-modules-fr-3.44.tgzU wget http://wims.unice.fr/download/U wims/wims-modules-en-3.44.tgz Tenemos instrucciones sobre cmo compilar e instalar la aplicacin en http://wims.unice. fr/download/wims/README.Tambin se nos ofrece la opcin de descargar la versin 3.42 compilada junto con sus dependencias principales (aviso: son 65 megas) wget http://wims.unice.fr/U download/wims/wims-chroot-i386-U 3.42.tgz La ventaja de utilizar las fuentes es que estaremos ante la versin actualizada por el autor; el inconveniente, que anula a mi parecer la ventaja, es que nos enfrentamos al problema de dar respuesta a la cadena de dependencias que una aplicacin tan imbricada como esta presenta; deberemos ser nosotros los que instalemos las aplicaciones a las que llama, en la versin apropiada.Y debemos decidir un poco a ciegas qu paquetes caen bajo los conceptos de recomendados,sugeridoso son dependenciascuya ausencia harn que el programa simplemente no funcione. Para resolver este problema las distribuciones han creado sus sistemas de gestin de paquetes. Utilicmoslos. Para arquitecturas i386 hay paquetes rpm disponibles en http://wims.unice.fr/ download/rpms/. La versin para Sid se instalara as (suponemos que est actualizada la base de datos de aplicaciones): apt-get install wims wims-modules-esU wims-modules-en wims-modules-fr U gap yacas octave povray latex2html A estas alturas y hasta que se remedie es altamente aconsejable instalar los paquetes de mdulos franceses e ingleses, salvo que resulten irremediablemente ininteligibles, o bien sepamos italiano, chino u holands o queramos aprenderlos por este drstico mtodo. He aadido a la lnea paquetes que figuran como sugeridos o recomendados pero que son altamente aconsejables para aprovechar la potencia de WIMS. El problema de la versin para Sid es que nos encontramos (como tantas veces, en Debian suele prevalecer el principio de estabilidad frente al de actualidad hasta en su versin inestable) ante un paquete en parte roto[4] y anticuado: entre las versiones 4.36 y la 4.40 Xiao emprendi una reestructuracin general de las actividades y suprimi gran nmero de mdulos[5]; la consulta del registro de cambios confirma que es muy aconsejable la actualizacin. Los que deseen profundizar en el uso de nuestra aplicacin debern aadir la lnea deb ftp://developer.ofset.org sarge main a su fichero sources.list. Si se haba instalado la versin 3.28 conviene que se la elimine (tras guardar las aportaciones locales) porque el rbol de dependencias ha variado y se dan incompatibilidades entre las dos versiones. Ahora el ya ritual apt-get update nos permite ejecutar apt-get install wims-serverU wims-physics wims-modules-enU wims-modules-fr wims-older-esU wims-older-en wims-older-frU gap yacas octave povray latex2html Fijmonos en que el paquete wims ha pasado a ser un paquete virtual y roto en estos momentos (no puede instalarse y ha sido sustituido por wims-server). Recordaremos tambin la reestructuracin de mdulos que haba realizado Gang Xiao y que ha llevado a Khaznadar a recuperar las viejas actividades en paquetes aparte.

80

Nmero 01

www.linuxmagazine.com.es

Educacin

LINUX USER

Figura 3: Ejercicio de sistemas lineales

Figura 4: Ejercicio sobre la tabla peridica

Podramos utilizar alguno de los espejos espaoles, pero vamos a conectarnos con el servidor principal para estar seguros de contar con la versin ms actualizada, y seleccionaremos la interfaz en espaol pinchando en la bandera espaola. Tecleamos http://wims.unice.fr/wims/ fr_home.html en nuestro navegador y obtenemos una pgina similar a la de la figura 1, salvo que en francs. Aparecer al pie de pgina la versin (3.45a es la versin actual, al 5 de noviembre) y la fecha de compilacin. Tras seleccionar el espaol como idioma (podemos elegir adems ingls, francs, chino o holands) lo primero que nos llamar la atencin probablemente es la mezcla de lenguas. Porque, y es una peculiaridad de la aplicacin, nos aparecen todas las versiones de cada mdulo, en todas sus traducciones. Pero vamos a explorar la interfaz. Nos fijaremos primeramente en el men de opciones situado sobre las banderas, donde vemos que podemos acceder a pginas de ayuda, configurar preferencias, etc. Tambin podemos ver una lnea de enlaces dedicados a la creacin y utilizacin de clases virtuales. Pero en este momento nos interesa sobre todo el buscador de actividades. Como las cosas se

comprenden con un ejemplo, aqu va uno.

Ejemplo de uso matemtico


Aunque decamos que no hace falta ser matemtico para sacarle partido a WIMS, est hecho por un matemtico y se nota. WIMS incluye una interfaz a aplicaciones matemticas (PARI, Maxima, Octave, Yacas, GAP[3]) que permite utilizarlas directamente. Y la mayor parte de los ejercicios y actividades los han creados profesores universitarios de matemticas. Afortunadamente ni son todos ni tienen porqu serlo. Comenzaremos por aprender a usar el buscador. Lo primero que nos llamar la atencin son las categoras en que estn clasificadas las actividades: Actividades wims (mdulos completos de actividades), Lecciones y referencias (el nombre no miente), Calculadores (traduccin de Online calculators, herramientas de clculo en lnea en las palabras de los franceses), Ejercicios interactivos, Recreativas matemticas y lo que recibe la extraa traduccin de Ejercicios reservada y que no son ms que ejercicios simples creados en el formato OEF (Online Exercise Format, donde el reservada es una mala comprensin de classified) con la herramienta de WIMS cre-

Tabla 1: Niveles educativos en la clasificacin de Gang Xiao


E1 E6, H1 H6, U1 U4, G, R, N cursos de Educacin Primaria + Primer ciclo de Secundaria N cursos del Segundo Ciclo de Secundaria + Bachiller (la sigla corresponde a High School) N cursos de Universidad (Undergraduate) Graduate:Licenciado,con o sin el grado de licenciatura Research, nivel de investigador

atexo. Advierto que en la interfaz inglesa aparecen adems Quick popup tools y Sheets of exercises. Seleccionamos cualquiera de las categoras y dejando el cuadro de texto en blanco nos aparecern todas las actividades clasificadas por orden de popularidad. Podramos buscar por tipos de actividad (es muy llamativo ver los ejercicios interactivos, con animaciones que lamentablemente no pueden presentarse en el formato papel de esta revista) o por palabras clave pero vamos a aprender a buscar por niveles educativos. La tabla 1 nos permitir comprender la clasificacin de Gang Xiao de los niveles educativos, que no corresponde exactamente con los niveles espaoles. Vamos a buscar actividades para bachiller, digamos nivel H3. Pondremos en el buscador la cadena levelH3. La salida de la figura 2 nos muestra que el sistema encuentra cincuenta actividades; elegimos para examinarla una actividad en espaol, Sistemas lineales 2x2, y se nos presenta una pgina que nos permite configurar la actividad. Pinchamos en Ir al trabajo y el motor de generacin nos proporciona aleatoriamente un ejercicio; incluso podemos cambiarlo por otro equivalente. El que ha aparecido, figura 3, en esta ocasin est parcialmente traducido. Una cuestin es importante en este momento: la solucin del ejercicio se har con papel y lpiz, que no van a ser sustituidos por la tecnologa; sta se utiliza para almacenar y seleccionar al azar actividades de carcter equivalente. Y para crearlas.

www.linuxmagazine.com.es

Nmero 01

81

LINUX USER

Educacin

Utilizacin en fsica y qumica


Georges Khaznadar es profesor de fsica y qumica. Por qu no vemos qu utilidad puede encontrar en WIMS un profesor de qumica? Para ello vamos a buscar la cadena qumica en el buscador. Desgraciadamente no devuelve ningn resultado; despus busco chimie y aparecen tres mdulos en francs; tecleo chemistry y el nmero de hallazgos sube a seis. Examinemos (lo siento, por ahora en ingls) OEF periodic table: averiguamos que se trata de un mdulo de 32 ejercicios configurables que tiene por Figura 5: Ejemplo de ejercicio de ptica objeto memorizar la tabla peridica. Elijo las opciones por local es la velocidad de acceso y reaccin defecto y la opcin Click on table del sistema (importante si los clculos (teclear en la tabla). Dejo al amable lecque debern efectuarse no son elementor la duda de si en la escena de la figura tales); pero el argumento fundamental es 4 hemos pinchado en la casilla errnea a la posibilidad de utilizar una de las propsito. capacidades fundamentales de WIMS: la Para demostrar que WIMS no es una creacin de clases y la perspectiva que aplicacin de slo texto, sino que puede abre de seguimiento de los progresos de utilizar y que genera al vuelo imgenes y los alumnos. grficas, introducimos a continuacin El cuadro 2 nos detalla cmo realiza la physics en el buscador y elegimos ejerinstalacin de la aplicacin. El servidor cicios de ptica: OEF Optique. En la WIMS funciona en GNU Linux y en Mac figura 5 podemos ver una respuesta OS-X. Aunque puede actuar como una incorrecta y su correccin. aplicacin independiente, lo habitual es Utilizacin local: nos integrarlo en el servidor web apache.

WIMS para profesores de Cuando hablamos de una utilizacin letras local nos estamos refiriendo a la instaHasta este punto del artculo nos hemos lacin de WIMS en una mquina de una red local que har de servidor para toda la red. La utilizacin local frente a la remota tiene evidentemente sus ventajas e inconvenientes y el usuario deber sopesarlas en funcin de sus necesidades y del uso previsto; por un lado la disponibilidad inmediata de los servidores WIMS ya instalados y la liberacin de tiempo y de preocupaciones de instalacin, mantenimiento y actualizaciones debe cotejarse con la oportunidad de instalar y/o crear (slo) las actividades que nos interesen localmente. Otro arguFigura 6: Pgina de administracin en lnea de WIMS mento a favor de una instalacin

conviene instalar WIMS?

movido en el campo de lo tcnico o lo cientfico-matemtico. Pero asegurbamos en la presentacin que nos encontrbamos ante una aplicacin de mltiples aprovechamientos; slo la inercia y la falta de imaginacin pueden explicar que no busquemos nuevas formas de explotar sus posibilidades. Como la imaginacin se nos supone, como el valor al recluta, y hay que cumplir las promesas, mostraremos ejemplos que pueden adaptarse inmediatamente a la enseanza primaria o al aprendizaje de idiomas. Hablbamos de que haba que comenzar por crear los ndices: fcil, con la condicin (lgica, si estamos instalando software) de que hay que tener permisos de root para leer /usr/lib/wims/tmp/log/.wimspassone: pinchar en WIMS online site maintenance e introducir la contrasea de un solo uso generada por el sistema (para comprobar que tenemos los permisos necesarios) en el recuadro. Nos aparecer la imagen 6. Interesa la opcin Rebuild resource index; tras un aviso lgico de que durante la (re)creacin de los ndices el servicio quedar suspendido podemos proceder; la terminacin del proceso quedar sealada por el envo de un correo al administrador (configurable en la pgina de administracin). Es el momento de hacer una pequea comparacin con las herramientas de autor con las que estamos ms familiarizados; hemos visto que WIMS permite la creacin de tests de respuesta nica o mltiple (o infinitas; Khaznadar pone los siguientes ejemplos: hallar dos enteros relativos de suma 0, con las soluciones (0,0), (-1,1), (-2,2), o bien dar n ejemplos de expresiones matemticas que sean equivalentes a 0); tambin es posible crear ejercicios de rellenar recuadros, o de ordenacin de puzzles (en la categora de Recreativas matemticas tenemos dos ejemplos, Shifting puzzle y Q-Puzzle, donde el movimiento de las piezas est vinculado a frmulas matemticas), de relacionar etiquetas e

82

Nmero 01

www.linuxmagazine.com.es

Educacin

LINUX USER

Figura 7: Configuracin del ejercicio de conjugacin

Figura 8: Ejemplo de ejercicio de idiomas Kuadros.

imgenes mediante el uso del ratn (Arithmetic Tables o EOF Flags, donde hay que asignar a un pas su bandera); o, mediante el uso de java y javascript, cualquier tipo de ejercicio interactivo (ver Elliptic billard o Moving Comet Shoot). La limitacin de espacio nos impide recoger los ejemplos citados, pero animamos al lector a que visite cualquier servidor y los evale; insisto especialmente en que ejercicios como EOF Flags o una variacin de l son perfectamente utilizables en primaria y primeros aos de secundaria. Un ltimo ejemplo nos est permitido. Ahora la ausencia de traducciones va a ser una ventaja: un idioma se aprende en ese idioma, del mismo modo que a tocar la guitarra se aprende tocando la guitarra. Podemos encontrar un ejercicio (no muy imaginativo, es verdad) para la enseanza del francs (se llega a l buscando conjugaison o verbes y se llama OEF Conjugaison) y otros ejercicios ele-

mentales que pueden utilizarse en otros niveles traducidos o tienen un valor comunicativo evidente si se usan sin traducir (estoy pensando en ejercicios como OEF Clock). Como podemos ver en la figura 7 tenemos gran flexibilidad a la hora de elegir verbos y tiempos que conjugar; la figura 8 nos muestra un ejemplo de uso. Cmo podemos adaptar este ejercicio, cmo podemos crear nuestra propias actividades, es material para el siguiente nmero.

actividades, y aprenderemos algunos detalles de uso avanzado. I Hasta pronto.

RECURSOS
[1] El sitio web cannico de WIMS es http:// wims.unice.fr. All podemos encontrar las fuentes del programa, mdulos, documentacin [2] Existen live-CDs (CDs vivos, de esos que funcionan directamente desde el CD sin tener que instalar los programas en el disco duro) con WIMS, por ejemplo KNOWIMS (http://wims.unice.fr/ knowims/). [3] En el repositorio experimental de la Guadalinex 2004 disponemos de la versin 3.28, pero podemos descargar los paquetes .deb de prueba de la versin 3.40, de developer.ofset.org. [4] El documento ms completo para aprender a manejar WIMS es El libro de WIMS, de Georges Khaznadar. Est traducido al espaol: http://libro-wims.software-libre. org.

Conclusin
En este primer captulo dedicado al software educativo, hemos hecho un repaso general de las capacidades de WIMS y comprobado que puede utilizarse en multitud de circunstancias; tambin hemos aprendido a instalarlo si lo consideramos adecuado. En el prximo nmero aprenderemos a crear clases virtuales y a desarrollar nuestras propias

GLOSARIO
End User Licence Agreement, Acuerdo de aceptacin de la licencia por el usuario final. La lectura detallada de cualquiera de ellos es muy instructiva sobre cmo el software privativo limita los derechos de los usuarios. El desarrollo del razonamiento y la demostracin en trminos matemticos puede seguirse en On Public-Question Tests, de Gang Xiao, mayo de 2004 (http://wims. unice.fr/paper/pqt.pdf). En sus trminos un public-question test es una prueba cuyas preguntas pueden publicarse previamente a su realizacin. PARI es un sistema muy utilizado de lgebra computacional creado para optimizar los clculos en teora de los nmeros (factorizaciones, teora algebraica de los nmeros, curvas elpticas) y que incluye funciones para el clculo con otras entidades matemticas como matrices, polinomios, etc. Su utilizacin en un ejercicio creado con WIMS es trivial, veamos un ejemplo recogido de la FAQ (http://wims.auto.u-psud.fr/wims/faq/ fr/logiciel.html.Tambin se presentan ejemplos de utilizacin de las otras aplicaciones.): \text{f = pari(factor(20! + 1))} Maxima es un sistema de lgebra computacional muy completo y de cdigo libre, que permite la manipulacin simblica de polinomios, matrices, funciones racionales Se podra decir que es til en la simplificacin y normalizacin de expresiones formales. Octave es un lenguaje de alto nivel (compatible con Matlab) creado para el clculo numrico.Yet Another Computer Algebra System (Yacas) es un lenguaje de lgebra computacional muy flexible y con una sintaxis muy similar a la de Mathematica. El sistema Groups, Algorithms and Programming (GAP) est especializado en la teora de los grupos. El paquete wims_3.28-6.1 no ha pasado a Sarge porque una de sus dependencias, texgd, tiene un error crtico (a release critical bug en la jerga de Debian).

www.linuxmagazine.com.es

Nmero 01

83

LINUX USER

grep

Bsqueda de archivos de texto con grep

De Cacera en el Disco Duro


Los eruditos de la Edad Media hubiesen vendido sus almas a cambio de la ingente cantidad de literatura que abunda actualmente en Internet. En la actualidad, los documentos desordenan nuestros discos duros debido a las descargas indiscriminadas. Cmo encontramos exactamente un pasaje de un texto en nuestra base de datos digital? El comando del shell grep nos puede ayudar a encontrar esa cita escurridiza. POR ELISABETH BAUER

as cosas que no seamos capaces de recordar las debemos guardar en nuestro ordenador, reza una mxima del usuario informtico. sta no es una mala idea, pero, a diferencia de lo que ocurre con la memoria humana, que normalmente recuperar la informacin almacenada de forma fidedigna (excepto en los exmenes finales, por supuesto), no siempre es tan fcil encontrar informacin en nuestro disco duro. Podemos perder mucho tiempo en encontrar un archivo del que hemos olvidado su nombre o dnde fue almacenado. Incluso el saber exactamente que archivo contiene la informacin que buscamos puede ser de poca ayuda en caso de archivos de texto grandes. El comando del shell grep, que localiza cadenas de texto en ficheros es til en ambos casos. En la situacin ms simple, podemos ejecutar grep con la tecla de bsqueda y el archivo a buscar. grep nos mostrar todas las lneas en el archivo especificado que contengan el texto buscado. Imaginemos que deseamos buscar en el archivo biblia.txt el texto Jardn del Edn. Debemos escribir
grep Edn biblia.txt

en la lnea de comandos y grep nos mostrar los pasajes apropiados del archivo. Si la bsqueda contiene espacio debemos utilizar comillas. Por ejemplo:
grep "Jardn del Edn" biblia.txt

Debemos prestar atencin y esperar fallos cuando usemos caracteres especiales: *, ? y ! tienen un significado especial para la lnea de comandos. Otro grupo de caracteres ( ., *<C>, ^<C>, $ y \ ) no se interpreta por grep tal cual. En su lugar, la herramienta supondr una expresin regular. El lado positivo es que esto nos permite construir bsquedas muy potentes y complejas, si bien es posible que prefiramos evitar estos caracteres con grep hasta que nos sintamos a gusto con la herramienta. Si no sabemos que archivo contiene el texto que buscamos, podemos ejecutar grep con un comodn. La obra "Moby Dick" del autor Herman Melvilla est compuesta de una coleccin de archivos de texto.
grep blanco moby.*

nos mostrar todas la veces que la palabra blanco aparece en la obra maestra de Melville (ver figura 1). El asterisco significa cualquier grupo de letras. El interfaz cambiar esta expresin por el nombre de cualquier archivo en el directorio actual que empiece por los caracteres moby.. Si los archivos en los que deseamos buscar estn distribuidos por diversos directorios debemos aadir la opcin r para indicarle a grep que busque en una carpeta completa:
grep -r blanco Melville/obras/

buscar blanco en el directorio obras y en los subdirecorios que cuelguen de l.

VISIN GENERAL DE GREP


Comando grep patrn *.htm Accin busca en todos los archivos en un directorio que acaban con el sufijo .htm realiza una bsqueda recursiva en un directorio y sus subdirectorios. ignora la diferencia entre maysculas y minsculas. muestra las siguientes n lneas tras la lnea que contiene la bsqueda. grep patrn fichero bsca en un archivo un patrn

grep -r patrn directorio grep -i patrn fichero grep -A n

84

Nmero 01

www.linuxmagazine.com.es

grep

LINUX USER

Ahora presionamos [Esc] ZZ o [Escape]:wq para almacenar el archivo y salir de vi. Para utilizar nuestro nuevo alias en el shell, necesitamos analizar sintcticamente el archivo de configuracin. Para hacerlo debemos escribir:
. ~/.bashrc

Ahora podemos usar el comando pss nombreprograma para buscar un programa activo.

Libro de Direcciones
grep es tremendamente flexible. Una de mis aplicaciones favoritas para grep es un sencillo libro de direcciones. Todo lo que necesitamos son los comandos grep, alias y cat y un fichero de texto donde podamos almacenar los nombres, nmeros de telfono y las direcciones de correo electrnico y de correo ordinario de nuestros amigos, conocidos y parientes. Una entrada puede ser como:
Charly Pingino +12345 678 tux@linux.org C/del Polo Sur Villatux, Antrtica

Figura 1: El libro Moby Dick de Melville est subdividido en una serie de archivos de texto. El comodn moby.* indica a grep que busque en todos los archivos del directorio.

El Trio: ps, grep y kill.


grep no es slo til para bsquedas de texto filosficos y teolgicos, si no que puede ser combinado con otros comandos del shell. Si la respuesta de un comando produce mucho texto, grep puede ser utilizado escribiendo tras la instruccin el carcter | y grep texto_a_buscar para filtrar el resultado y mantener solo las partes en las que estamos interesados. Un caso tpico es en el que usaramos grep para cerrar un programa que se ha bloqueado. El comando ps ax nos muestra los procesos activos. Podemos usar grep para aplicar un filtro y encontrar solo el programa que estamos buscando, Mozilla por ejemplo:
> ps ax | grep mozilla 2500 ? S 1:40 /usr/lib/ mozilla-1.3/mozilla-bin 5645 pts/4 S 0:00 grep mozilla

grep nos muestra dos coincidencias que contienen Mozilla: el buscador y el propio grep. La parte que nos interesa para cerrar el programa aparece al principio de cada lnea: el ID del proceso. Ahora podemos escribir kill 2500 para cerrar el programa deseado.

Debido a que los gurs del shell suelen ser notablemente perezosos, necesitamos encontrar un mtodo para no tener que escribir este comando cada vez que lo requiramos: en otras palabras, necesitamos un alias. Los alias definidos deben ser guardados en el archivo .bashrc en el directorio raz. Este archivo se ejecuta cada vez que abrimos un shell de comandos interactivo. Usaremos nuestro editor de texto favorito para abrir el fichero, por ejemplo kwrite ~/.bashrc & o vi ~/.bashrc en el escritorio, dependiendo de nuestras preferencias. Debido a que vi no es sencillo, veamos algunos comandos simples. Si escribimos G le indicamos a vi que debe ir al final del archivo. Entonces podemos escribir o para cambiar el editor al modo de introduccin de datos. A diferencia de los comandos a y i, o indica a vi que inicie la insercin en la lnea donde est situado el cursor. Ahora podemos introducir nuestro alias en la ltima lnea de .bashrc. En lugar de pss podemos usar cualquier otro nombre fcil de recordar pero evitando usar el nombre de un comando existente:
alias pss="ps ax | grep"

Ahora debemos salvar el archive como direcciones en nuestro directorio raz y aadir el siguiente alias a .bashrc:
alias tel="cat ~/direcciones | grep -i -A 4"

El comando cat nos muestra el contenido del archivo direcciones. El carcter | enva este resultado a grep. La opcin -i garantiza que la bsqueda no diferenciar entre maysculas y minsculas. Finalmente, -A 4 indica a grep que debe mostrar las 4 lneas siguientes a la primera coincidencia con la bsqueda. De nuevo
. ~/.bashrc

analizar sintcticamente de nuevo nuestro archivo de configuracin. En el futuro, solo necesitaremos escribir tel nombre en el shell para recuperar la direccin de la persona que busqueI mos.

www.linuxmagazine.com.es

Nmero 01

85

LINUX USER

LaTeX

LaTeX bajo Linux

Tipografa Profesional para Todos


Actualmente, todo el mundo tiene ordenadores personales e incluso el usuario ms principiante sabe lo que es un procesador de textos. Pero todo aqul que escribiera un libro en el periodo, digamos, de 1455 a 1985, elaboraba un manuscrito que luego mandaba a imprenta. La imprenta era un lugar misterioso de donde, por arte de magia, apareca un ejemplar impreso donde antes slo haba un montn de cuartillas emborronadas. POR MIGUEL ATENCIA
s difcil entender hoy en da el impacto que supona para un autor ver su obra impresa. LaTeX es el moderno sustituto del maestro tipgrafo. Con un ordenador personal y una impresora, podemos obtener resultados con el mismo aspecto profesional que proporciona una imprenta, tanto si escribimos un libro de 700 pginas como si hacemos un trabajo escolar que incluye grficos y frmulas matemticas. En lo que sigue, daremos algunas razones por las que resulta preferible utilizar LaTeX en lugar de un programa de autoedicin o un procesador de textos. Nuestro objetivo es que todos seamos capaces de obtener resultados brillantes con LaTeX lo antes posible (veris que no es tan difcil) y posiblemente algn purista de LaTeX se moleste en sealar todos las irregulari-

dades que vamos cometiendo. Si no queris complicaros la vida, ignorad a los puristas.

El primer documento LaTeX


Lo primero es tener LaTeX instalado para hacer todas las pruebas que vamos sugiriendo y las que se os ocurran. LaTeX y Linux se llevan bien, de hecho, LaTeX naci en el mundo Unix, la especificacin es pblica y la mayora de las distribuciones son de cdigo abierto. Por lo tanto, es muy posible que LaTeX ya est en el sistema. Para estar seguros hagamos una prueba. En la lnea de comandos escribimos:
$ latex This is TeX, Version ... **

Si al ejecutar el programa latex sale algo parecido a lo de arriba, ya podemos pasar directamente a probarlo. Para salir del prompt con los dos asteriscos, simplemente pulsaremos Ctrl-C. Si no tenemos Latex instalado, podemos instalarlo desde el CD de nuestra distro favorita mediante un programa de gestin de software, ya sea rpm, Kpackage o cualquier otro. Como ltimo recurso, se puede descargar de la Comprehensive Tex Archive Network [1] o del mirror espaol en [2]. Aqu encontraremos la distribucin teTex, que es la ms portable de las distintas que existen. Tambin podemos encontrar en CTAN [3] alguna documentacin sobre Latex, la mayora en formato Latex. Esto es uno de los principales problemas de Latex: en general, la ayuda es bastante

Figura 1: Aspecto de un documento bsico en Latex. Los mrgenes y tipos de letra estn ya ajustados a una presentacin profesional

Figura 2: Aspecto de un documento bsico en OpenOffice. El resultado es menos profesional

86

Nmero 01

www.linuxmagazine.com.es

LaTeX

LINUX USER

pobre. Con la distribucin teTex se proporciona una ayuda muy bsica, en formato info, que puede verse ejecutando info latex. Existen excelentes libros sobre Latex en cualquier librera especializada pero no es imprescindible comprarse un libro para obtener resultados brillantes en Latex. LaTeX no tiene interfaz de usuario, ya que no es un programa interactivo, sino que se ejecuta desde la lnea de comandos. Esto ser muy fcil de entender para el que haya programado en algn lenguaje (no en un entorno visual): LaTeX es como un compilador. Por tanto, prepararemos el documento LaTeX en nuestro editor preferido. Algunos editores tienen facilidades que ayudan a la escritura de documentos LaTeX. Por ejemplo, si se usa el entorno grfico KDE, Kate reconoce los comandos LaTeX (aunque no todos) y los representa con distintos colores. De esta forma, podemos detectar errores de sintaxis antes de compilar. Tambin se recomienda vim, con la ventaja de que funciona incluso sin entorno grfico. Muchos intrpidos utilizan emacs o Xemacs, por las posibilidades de personalizacin que tienen. Si alguien tiene la desgracia de verse obligado a utilizar Windows, la mejor combinacin es el editor WinEdit (de pago, aunque muy barato) con la distribucin MiKTeX. Si estamos acostumbrados a un procesador de textos, tal como el de OpenOffice, podemos seguir usndolo tranquilamente y disfrutar de las facilidades habituales (el corrector ortogrfico, el sistema de autocompletado, etc.). Eso s, hay que guardar el documento como texto plano y se perder cualquier formato que se introduzca. Ya estamos preparados para el primer documento Latex, que ser el embrin de nuestra gran obra, el best-seller con que nos haremos famosos. Escribamos en el editor el siguiente texto:
\documentclass[a4paper]{book} \begin{document} Hola, mundo \end{document}

saje bastante incomprensible. El texto anterior podemos guardarlo, por ejemplo, con el nombre hola.tex y ejecutamos desde la lnea de comandos:
$ latex hola

Supongamos que todo ha ido bien e ignoramos la ristra de mensajes que salen. Con esto hemos completado con xito nuestro primer documento Latex. Ahora bien, qu hemos sacado en claro? Si hubiramos compilado un programa, habramos obtenido un ejecutable. Al ejecutar Latex correctamente, obtenemos un fichero DVI, que significa algo as como fichero independiente del dispositivo. Un fichero DVI es como un PDF y, al igual que un PDF, necesita un programa para visualizarlo. Todas las distribuciones de Linux decentes incluyen el xdvi pero, adems, en el men de grficos del entorno KDE (o ejecutando kdvi) disponemos del KDVI, que resulta mucho ms cmodo. En cualquier caso, visualizamos nuestro fichero hola.dvi y

observamos el resultado. A la vista de este ejemplo, alguien podra preguntar si no habramos hecho lo mismo con un procesador de textos, como OpenOffice. La respuesta es s, pero con algunos inconvenientes. Para empezar, podemos comparar el aspecto de nuestro fichero DVI (Figura 1) con la previsualizacin de OpenOffice (Figura 2). Esto es subjetivo, pero a m me parece que el aspecto del documento DVI es mucho ms profesional, ms parecido a un libro de verdad. Naturalmente que en OpenOffice se puede imitar el aspecto de Latex eligiendo los tipos de letra adecuados, mrgenes, etc. Pero me parece interesante comparar los documentos que se obtienen con un mnimo de esfuerzo. Tambin resulta ventajoso Latex al usar documentos en texto plano:
$ ls -al hola.* ... 5238 sep 19 12:42 hola.sxw ... 74 sep 19 12:33 hola.tex

El documento Latex es 70 veces ms

Listado 1: libro.tex
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 % Clase de documento \documentclass[a4paper]{report} % Paquetes adicionales \usepackage[spanish]{babel} \usepackage[latin1]{inputenc} % Fin del prembulo. Comienza el documento \begin{document} % Pgina de ttulos \title{El maestro de los collares} \author{J.R. Talco} \maketitle % Fin de los ttulos. Comienza el texto normal \chapter{De los jovis}

Al que sea totalmente inexperto en Latex, le recomiendo copiarlo con cuidado, porque si se comete algn error, probablemente Latex lanzar un men-

Este libro trata principalmente de los jovis, y el lector descubrir en 16 sus pginas mucho del carcter y algo de la historia de este pueblo... 17 18 19 No obstante, muchos querrn saber desde un principio algo ms de este pueblo 20 notable y quizs a algunos no les haya dado la gana comprarse el libro 21 anterior... 22 23 Los jovis son un pueblo complicado pero muy joven, cada vez ms 24 numeroso. Amaban la guerra, el folln y la caza... 25 26 % Fin del documento 27 \end{document}

www.linuxmagazine.com.es

Nmero 01

87

LINUX USER

LaTeX

Figura 3: Aspecto del documento en OpenOffice. El resultado impreso arrastrar todas las imperfecciones cometidas al teclear, al ser un programa WYSIWYG

Figura 4: Extracto de un documento completo en Latex, que introduce automticamente cabeceras de captulos, pgina de ttulos y dems detalles de formato

pequeo! Baste decir que mi tesis docrafo con tabuladores y otras no, algunas toral de casi 200 pginas, con cientos de palabras estn separadas con ms de un frmulas y ms de 20 figuras, cabe en un espacio, algunos prrafos estn separadisquete y la escrib en un Pentium 1. dos con dos saltos de lnea, etc. Como se Intentad hacer eso mismo con observa en la Figura 3, el resultado no es OpenOffice, no hablemos ya de MS muy esttico, as que luego habr que Word. Por ltimo, la facilidad de manejo: pagarle a un tipgrafo para que haga la Latex tiene fama de ser muy difcil de composicin o podemos usar Latex. usar, asequible slo para matemticos y Vamos a introducir el texto en la plantildems gente de mal vivir. Bueno, ya la del apartado anterior, aunque le hemos visto que no es para tanto. Esto es aadiremos algunos detalles, quedando como todo, lo bsico e imprescindible es como el Listado 1. simple, despus podemos ir complicnSlo queda ejecutar latex y ver el dolo todo lo necesario. Incluso resultado (ver la Figura 4). Impodramos usar el documento que presionante, verdad? Aparte de corregir hemos hecho como plantilla y escribir en el espaciado, la tabulacin y la justifiel hueco entre \begin{document} y cacin, uno puede preguntarse de dnde \end{document}, sin aprender nada ms ha salido la palabra Captulo o la fecha de Latex. En realidad, esto de usar planactual en la pgina de ttulo, o quin ha tillas hechas por otros es un pecado que, definido los mrgenes. Todos esos ms o menos, cometemos todos los detalles de formato estn a cargo de usuarios de Latex. Cuando empec a Latex, que los resuelve a la perfeccin, usar Latex, me aconsejaron que jams aunque tambin es verdad que sin preempezara un documento desde cero, siempre deba partir de Tabla 1. Algunas opciones de la una plantilla hecha por otro. He instruccin \documentclass seguido este consejo y no me ha Opciones Significado Opcin por defecto ido del todo mal. 10pt / 11pt / 12 pt Tamao de letra 10 pt

Captulo I
Ha llegado el momento de empezar nuestro libro/trabajo/ artculo/carta o lo que a cada uno le dicte la inspiracin. Como estamos bajo el influjo de las musas, no es el momento de fijarnos en detalles de formato: unas veces empezamos el pr-

oneside / twoside Impresin a doble cara article openright / openany en report onecolumn / twocolumn titlepage / notitlepage Texto en una o dos columnas Salto de pgina tras los ttulos Empezar captulos en

report, notitlepage en article

guntarnos nuestra opinin. Para aprender a hacer nuestros propios documentos, cada vez ms perfeccionados, estudiaremos en detalle nuestro programa Latex. En primer lugar, la sintaxis de Latex es bastante simple: todas las instrucciones empiezan con un backslash (la barra hacia atrs \), seguidas del nombre de la instruccin. La mayora de las instrucciones requieren especificar uno o ms parmetros, aunque para algunas basta escribir su nombre, por ejemplo \maketitle. Los parmetros opcionales, que se pueden omitir, van entre corchetes tras el nombre de la instruccin, mientras que los parmetros que son obligatorios en una instruccin se escriben entre llaves, al final de la instruccin. Hay bsicamente dos clases de instrucciones: los mandatos simples y los entornos. Estos ltimos son los que se definen con una pareja de instrucciones \begin ... \end. En el documento anterior, slo hay un entorno: el entorno document, que debe existir en todo documento Latex. Naturalmente, slo puede haber un entorno document, pero si twoside en book,oneside en report y alguien est preparado para afrontar la gestin de errores de openright en book,openany pgina impar Latex, puede probar qu pasa cuando se incluye ms de uno. onecolumn Lo que hay dentro del entorno document es propiamente el titlepage en book y contenido de nuestro documento, como su propio nombre indica, mientras que lo anterior

88

Nmero 01

www.linuxmagazine.com.es

LaTeX

LINUX USER

a \begin{document} es el prembulo, donde se definen algunas caractersticas generales del documento. Como ya se habr adivinado, se pueden introducir comentarios en cualquier punto, comenzando la lnea con el smbolo %, de forma que estas lneas no afectan en nada al documento impreso.

ejemplo, cambiamos la clase a book en nuestro documento, el nico cambio aparente es la introduccin de una pgina en blanco despus del ttulo. Por qu aparece esta pgina? Porque, en un libro, todos los captulos empiezan en una pgina impar, es decir, en la pgina de la derecha, tal como la vemos si mantenemos el libro abierto. Para que esto sirva El prembulo del documento para algo, tenemos que imprimir el documento a doble cara. En cambio, si camLa primera instruccin del documento es biamos a la clase article, se elimina la la instruccin \documentclass: pgina de portada con el ttulo. Adems, \documentclass[a4paper]{report} se pierde el formato del ttulo del captulo porque, en realidad, un artculo no Esto define la clase del documento. En puede tener captulos, sino secciones. Latex hay predefinidas tres clases de uso Volveremos a esta cuestin pronto, al general: book, report y article. Existen estudiar la estructura del documento. tambin las clases letter (para cartas, con Habiendo seleccionado la clase de una gestin muy potente de etiquetas nuestro documento, se pueden configupara hacer envos masivos de cartas perrar diferentes variantes, dando parmetsonalizadas) y slides (se pueden hacer ros opcionales en la instruccin \docupresentaciones con Latex!) pero tienen mentclass. Por ejemplo, en nuestro documuchas instrucciones especficas y mento hemos especificado que el requieren un estudio especial. No hay tamao de papel es A4, con la opcin grandes diferencias entre book, report y a4paper. Podamos tambin haber elegiarticle, ms que en cuestiones de formado a5paper (14,8 x 21), letterpaper (la to. En principio, la clase book est penopcin por defecto: 8,5 x 11 pulgadas) o sada para libros o documentos muy larincluso otros ms exticos, pero es poco gos, la clase article se orienta a artculos probable que se necesiten. Incluyo otras de revistas, ms cortos y con la clase opciones, cuyo significado es autoexreport, que estara en un punto intermeplicativo, en la Tabla 1. Obsrvese que dio entre las otras dos, se hacen informes con estas opciones se puede cambiar el tcnicos. Seguramente, para hacer un comportamiento por defecto de una trabajo escolar, la clase ms adecuada clase. Por ejemplo, se puede usar la clase sea report, de todas formas, lo ms book sin pgina de ttulos (notitlepage), recomendable es probar con las tres para o la clase report empezando los captulos decidir cul se adapta ms a las caracen pgina impar (openright). Eso no tersticas de nuestro trabajo. Si, por quiere decir que todas las combinaciones tengan sentido, por ejemplo, es absurdo usar openTabla 2. Algunas instrucciones y right u openany en la clase entornos usuales en Latex. article , que no tiene captuInstruccin Uso los. Lo mejor es probar \begin{center} Justificacin centrada (se puede cambiar center por ... flushright -derecha-o flushleft -izquierda-) hasta dar con el aspecto \end{center} deseado. Especialmente \begin{enumerate} Relacin numerada (se puede cambiar recomiendo la opcin \item . enumerate por itemize -vietas-) twocolumn : con una sola \item palabra, obtenemos el dis\end{enumerate} eo en dos columnas tpico \footnote{Nota} Nota al pie de peridicos o revistas. \label{etiqueta} Marca una posicin para referenciarla Por cierto, al hacer todas \ref{etiqueta} Referencia a una posicin marcada $$ Frmulas matemticas en el texto estas pruebas, notaris una \begin{equation} Frmulas matemticas en una lnea aparte, de las principales ventajas ... con nmero de ecuacin de la mayora de los progra\end{equation} mas visualizadores de _{texto} Texto en subndice. Slo en frmulas ! ficheros DVI: el propio pro^{texto} Texto en superndice. Slo en frmulas ! grama detecta cundo tiene

que recargar el documento DVI porque se ha recompilado el fuente Latex. Las otras dos lneas del prembulo de nuestro documento son instrucciones \usepackage, que cargan paquetes adicionales. La posibilidad de extensin de Latex con paquetes externos es lo que le da una enorme potencia a Latex. Para cualquier cosa que queramos hacer, seguro que alguien ha hecho ya el correspondiente paquete y slo tendremos que encontrarlo. Incluso podemos encontrar clases enteras para propsitos especficos, distintas de book, report y article. Adems, hay algunos paquetes tan tiles que se han convertido en parte de la distribucin estndar de Latex. Veamos cules son los dos paquetes que hemos incluido en nuestro documento, empezando por babel. Es gracias a la lnea
\usepackage[spanish]{babel}

como Latex ha sabido escribir Captulo. Para aprender idiomas, basta cambiar spanish por german o serbian y observar la fecha y el ttulo del captulo. Los cdigos de las lenguas oficiales de Espaa, adems de spanish, son basque, catalan y galician. Adivinis cul es el idioma por defecto si no se carga babel? Por cierto, al hacer cambios de idioma y recompilar, puede que se nos produzca un error. Se debe a que Latex guard algunas caractersticas del documento en un fichero auxiliar, que ahora ya no resulta coherente con el documento. Para evitar el error y garantizar que partimos de cero en cada compilacin, basta con borrar este fichero que, en nuestro caso, se llamara libro.aux. El otro paquete que hemos cargado en el prembulo es inputenc, al escribir la lnea:
\usepackage[latin1]{inputenc}

La utilidad de este paquete es tanta, que casi no se puede explicar con palabras:

RECURSOS
[1] Comprehensive Tex Archive Network: http://www.ctan.org [2]Mirror espaol de CTAN: ftp://ftp.rediris.es/sites/ftp.dante. de/tex-archive/systems/linux [3]Ayuda de Latex dentro de CTAN: http://www.ctan. org/tex-archive/info

www.linuxmagazine.com.es

Nmero 01

89

LINUX USER

LaTeX

basta con quitar esta lnea (o ponerle un % al principio) y ver qu pasa. En los tiempos de los terminales alfanumricos, haba que teclear combinaciones como {\'e} para escribir una letra e con acento. Afortunadamente, esto es prehistoria tecnolgica y teniendo el teclado bien configurado podemos escribir normalmente gracias al paquete inputenc que, por cierto, significa INPUT ENCoding. Se pueden usar otras codificaciones de caracteres en lugar de latin1, como Figura 5: El smbolo de LaTeX se genera con... LaTeX ansinew, pero, al menos para textos en espaol o ingls, la diferencia \\ Siete para las seorasU es inapreciable. grandotas en castillos deU

La pgina de ttulos
El entorno document empieza con los ttulos, que se definen con las instrucciones \title, \author y, opcionalmente, \date. Cada uno de estos comandos toma como argumento un texto, que Latex imprimir con el tipo y tamao de letra adecuados. Este texto puede ser vaco. Por ejemplo, al imprimir la versin final de un libro no es habitual poner la fecha, as que escribiramos \date{}. Una vez definidos estos campos, la instruccin \maketitle los muestra. Lo que debemos entender de este proceso es que el formato de la pgina de ttulos est codificado al definir la instruccin \maketitle en la clase y este formato no se puede modificar, al menos no fcilmente. Por ejemplo, si queremos incluir un subttulo, a lo mejor se nos ocurre que bastara con insertar insertar una lnea de texto entre \title y \author. Pero si pasamos el texto por procesador latex, descubrimos que esto no va a funcionar, porque Latex imprimir primero el texto que est fuera de las instrucciones y luego \maketitle formatear la pgina de ttulos como siempre. En cambio, tenemos bastante libertad al definir los textos de ttulo, autor y fecha, por ejemplo, tras el begin{document} podemos escribir:
\title{El maestro de losU collares \\[0.5 cm] {\small TresU collares para los prncipesU feos sobre la tierra

mrmol}} \author{J.R. Talco \\ Traduccin: Un servidor} \date{2004 \\ \textsc{Mlaga}} \maketitle

La instruccin \\ incluye una lnea en blanco y, si le sigue una longitud entre corchetes, aade un espacio vertical adicional. En general, es preferible evitar este tipo de cosas en el texto, porque Latex ya pone el espaciado adecuado, pero el ttulo es un caso particular. La instruccin \textsc escribe un texto en un tipo de letra especial (Small Capitals), como \textsf (Sans serif), \textsl (Slanted) o \texttt (Typewriter). El texto en negrita se incluye con \textbf (Boldface), mientras que, para la cursiva es conveniente utilizar \emph (Emphasize), aunque se puede poner tambin \textit (Itlica).

El cuerpo del documento


El documento propiamente dicho es lo ms fcil, ya que todo el formato est ya definido, por lo que slo hay que escribir el texto. Si se quiere, se pueden cambiar los tipos de letra con las instrucciones que comentamos en el prrafo anterior. Entre dos prrafos hay que dejar una lnea en blanco. Para comenzar un nuevo captulo, basta dar una nueva instruccin \chapter y, adems dentro de cada captulo, es posible ir definiendo estructuras cada vez ms pequeas: \section, \subsection y \subsubsection.

Naturalmente, Latex controla la numeracin de las secciones a la perfeccin: si queremos cambiar de orden dos captulos basta con cortar y pegar sus contenidos y, mientras que en un procesador de textos tendramos que revisar la numeracin, con LaTeX, los captulos se numeran automticamente. Basta con escribir varias pginas para darnos cuenta de todo lo que hace automticamente este maravilloso, por ejemplo, las cabeceras de pgina incluyen el nmero de pgina y el ttulo del captulo actual y se distinguen la pgina derecha de la izquierda, de forma que el libro quede perfecto al encuadernar. Y, cuando llevemos escritas 500 pginas, se nos ocurre que queremos un ndice al principio: no hay problema, basta un \tableofcontents despus del \maketitle. Eso s, posiblemente haya que ejecutar latex dos o tres veces seguidas para que genere los ficheros auxiliares que necesita para construir el ndice, pero pronto apreciaremos la potencia de LaTeX y como la curva de aprendizaje necesario para dominarlo se compensa con las funcionalidades que proprociona. Llegado este punto, slo queda utilizar Latex y probar diferentes cosas. En la Tabla 2 hemos seleccionado las instrucciones de Latex que se corresponden con la barra de herramientas estndar de un procesador de textos. Probad a meter unos entornos enumerate o itemize dentro de otros! Desde luego, esto es tan slo una primera aproximacin a Latex, centrada en lo que se puede hacer con el mnimo esfuerzo. Para explicar las frmulas matemticas, las tablas y las figuras, o cmo modificar el formato de pgina, se requiere ms espacio y, de hecho, es un tema que abordaremos el mes que viene, aqu, en nuestro curso de I LaTeX.
Hace ya ms de una dcada que Miguel Atencia viene administrando sistemas y redes en distintos organismos. Posteriormente, estudi matemticas y consagr su vida a la enseanza y a la ciencia. No obstante, sigue en contacto con el mundo de la informtica, pues no ha podido an librarse de desatascar impresoras y formatear ordenadores.

90

Nmero 01

www.linuxmagazine.com.es

EL AUTOR

buenas razones para suscribirse

SI UTILIZAS LINUX, NECESITAS LINUX MAGAZINE 1 2 3


AHORRO
Ms del 15% descuento con respecto al precio de portada: Consigue 12 nmeros por el precio de 10 y 4 DVDs Gratis!

4 5

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

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

GARANTA DE DEVOLUCIN DE DINERO


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

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

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


o utiliza el formulario al dorso
W W W. L I N U X M A G A Z I N E . C O M . E S / S U B S

Formulario Suscripcin
Para un servicio ms rpido, realice su pedido online en: www.linuxmagazine.com.es

(+ 34) 951 010 516

S
Nmero Inicial Zona

Direccin Facturacin

Modo de Pago Direccin Envo

Condiciones

Proyectos

COMUNIDAD

Software Libre y sus Creadores

Proyectos en Marcha
El software libre incluyes un abanico tan amplio de aplicaciones que puede ser difcil encontrar la herramienta perfecta. En esta seccin, escogemos lo mejor de la cosecha. Este mes miramosel suministrador de servicios IPv6 Sixxs, un ISP que ofrece conexin al Internet IPv6 gratis para as promocionar el protocolo. POR MARTIN LOSCHWITZ
pesar de que an existen bastantes direcciones IP para los Estados Unidos, las voces de alarma ya llevan tiempo sonando en otras partes del mundo, especialmente en Japn. Los pesimista auguran que las direcciones IPv4 (Internet Protocole Versin 4, la versin actual), con sus cuatro billones de direcciones, se quedar sin espacio en un futuro no muy lejano. En entornos de todos los tamaos, desde minsculas redes domsticas hasta enormes redes empresariales, los usuarios han migrado a Network Address Translation (Traduccin de Direcciones de Red o NAT) para evitar el coste que supone la adquisicin de direcciones IP que puede que no se lleguen a utilizar y todo ello a pesar de que NAT puede plantear serios problemas para segn que aplicaciones. El hecho de que la mayora de las direcciones IP se asignan dinmicamente tambin ha dado lugar a atajos como los DNS dinmicos. La tendencia de conectar todo tipo de dispositivo electrnico, desde telfonos mviles, PDAs y televisores hasta neveras, a Internet, no hace ms que agravar la situacin. Si contina la expansin de la conexin de dispositivos capacitados para IP, podemos esperar agotar el espacio de direcciones reservado para IPv4 bastante rpidamente. El Internet Engineering Task Force desarroll la versin 6 del protocolo de Internet para subsanar el problema hace ms de diez aos. Cuenta con suficientes direcciones como para dotar de IP hasta la ltima tostadora, pero Internet es lenta en reaccionar. IPv6 no ha tenido la repercusin esperada y

existen pocos proveedores de servicios de Internet que anuncian soporte para IPv6. Por tanto, IPv6 permanece en el reino de los usuarios y programadores tcnicamente competentes. Algunas de las columnas vertebrales de Internet slo son accesibles a travs de IPv6, pero, debido a que la mayor parte de la red de redes sigue utilizando IPv4, los usuarios que utilicen este protocolo han de utilizar tneles a travs de la parte de la red IPv4.

IPv6 para la Conexin de LANs


Sixxs.net [1] es un intermediario para el tunelado que da a los usuarios acceso gratuito al Internet IPv6. Sixxs ofrece un tnel IPv6 con una nica direccin IPv6. Sixxs tambin ofrece subredes completas IPv6, lo que permite a usuarios y empresas aadir un LAN completo. Sixxs utiliza un sistema de puntos para administrar la calidad del servicio. Otorgan 25 crditos por registrarse. Esos 25 crditos sirven para comprar un tnel IPv6 y una sola direccin IP (de hecho,

esto slo cuesta 15 crditos). A los usuarios se les otorga 5 crditos por cada semana que permanece accesible su punto final IPv6. Despus de una semana se dispone de suficientes crditos para solicitar una subred completa, que tambin cuesta 15 crditos. Despus de otra semana, se puede aadir un servidor de nombres para registros de bsquedas inversas en la subred. Pero tambin existen los crditos negativos. Se deducen 5 crditos si el punto final IPv6 no se encuentra accesible durante un da. Tras una semana de inactividad, el punto final y toda la subred adjunta se deshabilita. Sixxs utiliza este sofisticado sistema de crditos para mantener actualizadas la base de datos de usuarios y los tneles registrados. Si se descubre a algn usuario abusando del tnel de Sixxs, ese usuario pierde todos sus privilegios de acceso. La conexin de un ordenador a la red IPv6 exige algo de preparacin. Uno de los requisitos es un sistema operativo que hable IPv6. Aparte de Linux, la mayora de los sistemas operativos modernos, incluyendo Windows 2000 y XP, pueden utilizar este nuevo protocolo. Se puede consultar un HOWTO de como se configura en una mquina un tnel IPv6 en [8]. Para soportar a toda una red IPv6, lo normal es utilizar radvd. Se necesita un ordenador en la red que manipule la asignacin de direcciones y la informacin de enrutado. Los clientes recogen una direccin de esta mquina y los demoI nios de enrutado definen las rutas.

www.linuxmagazine.com.es

Ronald Raefle, visipix.com

RECURSOS
[1] Sixxs, servicio IPv6 http://www.sixx.net

Nmero 01

93

LINUX MAGAZINE

Eventos

Eventos Seleccionados

LinuxWorld Expo
Fecha: 1417 Febrero Ciudad: Boston, MA, EE.UU. Sitio Web: www.linuxworld expo.com
Calendario de Eventos Evento 21C3 Chaos Communication Congress OSDL Enterprise Linux Summit SAINT 2005 CodeCon 4.0 Southern California Linux Expo LinuxWorld Conference & Expo UKUUG LISA/Winter Conference FOSDEM 2005 Solutions Linux Linux Park CeBIT 2005 OReilly Emerging Technology Conference Novell BrainShare 2005 YAPC::Taipei 2005 LinuxWorld Conference & Expo, Canada MySQL Users Conference & Expo 2005 linux.conf.au 3rd International Linux Audio Conference Informacin de Contacto
Director Paul C. Brown Coolaboradores Paul C. Brown, Miguel Atencia, Juan Rafael Fernndez, Pedro Orantes, Jos Mara Ruz Traductores Paqui Martn Vergara, Paul C. Brown, Jess Reyes Delgado, Antonio Rueda. Maquetacin Judith Erb, Elgin Grabe, Klaus Rehfeld Diseo de Portada Pinball, info@pinball-werbeagentur.de Publicidad www.linuxmagazine.com.es/pub/ Para Espaa Paul C. Brown pbrown@linuxmagazine.com.es pbrown@linuxnewmedia.es Tel.: (+ 34) 951 010 556 Mvil.: (+ 34) 655 036 836 Fax.: (+ 34) 951 010 516 Jillian Kay, jkay@linuxmagazine.com.es Tel.: (+ 34) 952 402 877 Mvil.: (+ 34) 630 624 926 Para Alemania, Austria y Suiza Osmund Schmidt anzeigen@linux-magazine.com Tel.: (+49) 6335 9110 Fax.: (+49) 6335 7779

FOSDEM 2005
Fecha: 2627 Febrero Ciudad: Bruselas, Blgica Sitio Web: www.fosdem.org

LinuxPark CeBIT 2005


Fecha: 10-16 Marzo Ciudad: Hannover, Alemania Sitio Web: www.cebit.de/ homepage_e

Fecha 2729 Diciembre 31 Enero 02 Febrero 31 Enero04 Febrero 11-13 Febrero 12 Febrero 14-17 Febrero 24-25 Febrero 26-27 Febrero 01-03 Marzo 10-16 Marzo 14-17 Marzo 20-25 Marzo 26-27 Marzo 18-20 Abril 18-21 Abril 18-23 Abril 21-24 Abril

Ciudad Berln, Alemania Burlingame, CA, EE.UU. Trento, Italia San Francisco, CA, EE.UU. Los Angeles, CA, EE.UU. Boston, MA, EE.UU. Birmingham, R.U. Bruselas, Blgica Pars, Francia Hannover, Alemania San Diego, CA, EE.UU. Salt Lake City, UT, EE.UU. Taipei,Taiwan Toronto, Canad Santa Clara, CA, EE.UU. Canberra, Australia Karlsruhe, Alemania

Sitio Web www.ccc.de www.osdllinuxsummit.org www.saint2005.org www.codecon.org/2005 www.socallinuxexpo.org www.linuxworldexpo.com www.ukuug.org/events/winter2005 www.fosdem.org www.solutionslinux.fr www.cebit.de/homepage_e conferences.oreillynet.com/etech www.novell.com/brainshare taipei.pm.org www.linuxworldcanada.com www.mysql.com/news-and-events/usersconference conf.linux.org.au/ www.zkm.de:81/lac

Para el Resto del Mundo Brian Osborn ads@linux-magazine.com Tel.: (+49) 6509 910 495 Fax.: (+49) 6509 910 497 Director Editorial Paul C. Brown Director de Produccin Hans-Jrg Ehren, hjehren@linux-magazine.com Subscripciones: www.linuxmagazine.com.es/ magazine/subs Precios Subscripcin (12 nmeros + 1 DVD cada 3 nmeros) Espaa: 49,50 Resto del Mundo: 74,46 Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516 subs@linuxmagazine.com.es Linux Magazine Linux New Media Spain, S.L. Avda. Juan Lpez Pealver, 21 29590 - Campanillas Mlaga ESPAA info@linuxnewmedia.es Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516 www.linuxmagazine.com.es - Espaa www.linux-magazine.com - Mundo www.linux-magazine.de - Alemania

Si bien se toman todas las medidas posibles para garantizar la precisin del contenido de los artculos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores en sus artculos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupulosamente para confirmar que est libre de virus y errores.

Copyright y Marcas Registradas 2004 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohbe la reproduccin total o parcial de los contenidos de Linux Magazine sin su permiso previo y por escrito. Linux es una Marca Registrada de Linus Torvalds. Impreso en Alemania Impresin: Dierichs Druck + Media GmBH Distribucin: SGEL

94

Nmero 01

www.linuxmagazine.com.es

Humor

LINUX MAGAZINE

Noticias del no tan Ms All

Hechos Patentes(P)
l parlamento de la Comunidad Econmica Europea ha llevado a cabo un espectacular salto hacia delante en lo que se refiere a jurisprudencia relacionada con las patentes: tras un acuerdo unnime en la votacin sobre la nueva Ley de Patentabilidad de Actividades (LPA), se amplia el marco legal de la patentabilidad para englobar en l, no slo productos, procesos e ideas, sino todas y cada una de las actividades humanas. Con esta medida declar el presidente Comisin en Pro de la Patentibilidad de las Actividades Humanas (CPPAH), Adolfo Fetuccinni pretendemos impulsar la estancada actividad econmica en nuestra comunidad y ponernos un paso por delante de otros reas econmicas competitivas dijo, en clara alusin a los Estados Unidos. Adems, para que la aplicacin prctica de la ley no se vea impedida por obstculos burocrticos, se crea el modelo de la patente rpida, donde a una corporacin solicitante se le exime de tener que demostrar la propiedad intelectual sobre la actividad a patentar: su propiedad slo ser examinada si es contestada por un organismo oficial u otra empresas, abriendo de paso nuevas vas de negocio basadas en modelos litigantes y estimulando la contratacin de abogados, un sector ste en clara recesin. Las actividades registradas como patentes rpidas son gravables a partir del da en que se solicitan. La LPA, revolucionaria por su atrevimiento, establece que toda actividad humana es susceptible de ser patentada. Sin embargo, en aras de asegurar el bien-

Ejemplos de Actividades Humanas Patentadas


No gravables
Sentir Escozor Comer Defecar Sentirse Estafado

Gravables
Rascarse Cocinar,Masticar,Deglutir Hacerlo en un inodoro Limpiarse Manifestarlo

estar de la sociedad, las actividades humanas se dividen en patentables bsicos no gravables (PBNGs) y patentables elaborados gravables (o PEGs). Patente no gravable es aquella que se considera de necesidad fisiolgica bsica y se adjudican al estado. Para cada patente gravable, el patentente (individuo, organizacin o empresa que pretenda registrar una patente) ha de solicitar y abonar una licencia de uso de una de las actividades PBNG. A continuacin, segn el tipo de actividad que se desee patentar, tendr que solicitar una o varias licencias que elaboran sobre cada uno de los PEGs cedidas a las entidades privadas que las solicitaron en su da. Estas entidades pueden, libremente, otorgar o denegar licencias sobre sus patentes, cederlas gratuitamente o por un canon y, en este ltimo caso, establecer libremente la cuota de la misma segn sus propios criterios. Por ejemplo, imaginemos que una empresa pretenda patentar el andar a pasitos cortos y de puntillas a lo Chiquito de la Calzada. Primero tendra que obtener licencia de la patente n EU34362-22-9008176788 genrica para desplazamiento motor frontal bpedo. A continuacin tendra que solicitar la licencia de la actividad de Andar propiamente dicha (patente n AC0997-22-8989943812, cedida a Andares y Caminares, C.B.), la de Pasos Cortos (patente n AC0997-222851734788, cedida a la misma entidad que la anterior) y la de Puntillas (patente n MG0743-22-3260762311, cedida a The Motion Group, Spain S.L.). Este mecanismo as establecido impide el abuso del sistema. Aunque los PBNGs son relativamente asequibles (entre unos 600 y 800 euros, en segn que pases de la unin), los gravmenes pblicos y privados en los que se pueden incurrir por la acumulacin de licencias de patentes hace impracticable una avalancha de patentes por parte de individuos privados desaprensivos y con pocos escrpulos. De hecho, las nicas entidades que pueden aspirar a patentar

actividades de una manera consistente son las grandes corporaciones empresariales (Microsoft, I0BM, Sun) y organismos sin nimo de lucro (SGAE, RIAA) que ya han demostrado en el pasado su responsabilidad civil para con el bien social de la mayora de los ciudadanos. Sin embargo, debido a problemas con patentes solicitadas, sta es la ltima columna de esta seccin, as como el fin de la mayor parte de la industria de la comunicacin tal y como la conocemos, ya que, si bien la actividad de pensar se incluye bajo el epgrafe de actividad patentada no gravable, la actividad de expresar lo que uno piensa es actividad patentada gravable y t intenta difundir tus ideas por algn medio, ya sea impreso(P), electrnico o por paloma mensajera(P), y es que te funden los I plomos, colega.

GLOSARIO
impatente (adj.) dcese de persona fsica o legal que no tiene ningn patente a su nombre. Ejemplo de uso:Ya s que no es cosa de risa, pero ah donde lo ves, es impatente(P). patentado (sust.) persona fsica o legal que acumula gran cantidad de patentes a su nombre. Ejemplo de uso: Est forrado. Es todo un patentado. prepatente (adj.) dcese de aquel/la que se opone al estado de patentabilidad total y aora tiempos anteriores. Ejemplo de uso: Cuando te comportas de una manera tan prepatente no hay Dios(P) que te aguante.

www.linuxmagazine.com.es

Nmero 01

95

DVD

Fedora Core 3

En el DVD de Linux Magazine

Fedora Core 3
Durante aos, Red Hat fue con diferencia la distribucin Linux ms popular, slo siendo ensombrecida por Debian. Pero mientras ste ltimo era el preferido de la comunidad hacker y favorito de los que escogan el camino de hgaselo-usted-mismo, Red Hat era el favorito de los usuarios buscando productividad inmediata, de la empresa y de aquellos que queran entrar ms suavemente en el mundo Linux.
n este sentido, Red Hat siempre trato con mimo a sus usuarios: invent el sistema de paquetes rpm, el cual facilitaba enormemente la instalacin de software y que ha sido adoptada por una amplia variedad de distribuciones, desde Mandrake hasta SuSE. Desde hace ya algunas versiones, se ha adoptado el sistema de instalacin Anaconda, que reduce sensiblemente el estrs que supona hasta entonces la instalacin de Linux en una nueva mquina, y que la gente de Debian estn pensando en incorporar a su propio sistema. Y desarrollaron mil y un asistentes para ayudar al usuario a configurar, ajustar y poner en funcionamiento todas las caractersticas del sistema. Tanta fue su influencia en los primeros aos de Linux que, a partir de la prolifba que todos los medios del sistema operativo gratuito se volcaban en Fedora, una organizacin comunitaria, dedicada hasta ese momento a crear paquetes suplementarios a los ofrecidos oficialmente por Red Hat. A pesar de los llantos de los ms agoreros, Fedora prosper. Hoy en da siempre ocupa algn puesto entre los cinco primeros del ranking de las distros ms populares. Es un sistema operativo maduro, estable y llena de recursos. Cuenta, no slo con el apoyo de Red Hat, sino con el apoyo de una comunidad amplia y experta, lo que garantiza su supervivencia mucho ms que lo que pueda hacer una compaa privada. Y Linux Magazine te lo trae en DVD.

eracin de distribuciones que vivimos hoy en da, y durante mucho tiempo, se dividieron las nuevas distros que iban apareciendo en Debian-based y Red Hatbased. De entre estos ltimos podemos distinguir distros tan populares como: Mandrake, SuSE y, hoy en da, Fedora. De hecho, Fedora es la distribucin heredera ms directa de Red Hat. Cuando Red Hat anunci en el 2003 que no iba a seguir produciendo su versin gratuita de su sistema operativo, sino que iba a concentrar sus esfuerzos en la comercializacin de soluciones empresariales de pago, muchos usuarios se rasgaron las vestiduras mientras se preguntaban que iban a hacer ahora. Tal fue la consternacin, que pocos prestaron su debida atencin a la segunda parte del comunicado de prensa donde se explica-

Instalacin
Como ya mencionamos en la seccin anterior, Fedora cuenta con el instalador grfico Anaconda para facilitar la instalacin del sistema en el disco duro.

Figura 1: Podemos elegir el perfil del SO que vayamos a instalar

Figura 2: Eleccin de la franja horaria

96

Nmero 01

www.linuxmagazine.com.es

Fedora Core 3

DVD

Figura 3: Seleccin de paquetes

Figura 4: Instalacin de paquetes

Una vez elegidos detalles como el idioma, tipo de instalacin (Personal, Estacin de Trabajo, Servidor o A Medida - ver Figura 1), tipo de teclado, zona horaria y locales (ver Figura 2) y ratn, pasamos a particionar el disco duro (de ser necesario). Como en cualquier distribucin moderna, Anaconda utiliza para este proceso, una herramienta visual que permite establecer exactamente el qu y el cmo vamos a distribuir las particiones en nuestro disco duro. Una vez realizadas las decisiones, pasamos a seleccionar los paquetes (si no deseamos que Fedora instale los escogidos por defecto - ver Figura 3) y Anaconda empieza a copiarlos al disco duro (ver Figura 4). Una vez acabada la instalacin de paquetes, es el momento de dotar al usuario root de una contrasea y de crear usuarios de privilegios ms bajos para el trabajo del da a da en la mquina. A continuacin podemos configurar el hardware, estableciendo resolucin y nmero de colores de la pantalla, configuracin de red y configuracin de impresoras. A continuacin establecemos como deseamos arrancar el sistema (LILO ha sido eliminado, slo queda GRUB, lo que simplifica las cosas para los usuarios noveles. Y si grabamos el gestor de arranque el MBR, disquete, o donde sea) y el sistema rearranca. Si todo ha ido bien (y no hay ningn motivo para pensar que no haya sido as), tendremos el nuevo sistema en pleno funcionamiento y podremos disfrutar de todo el potencial de esta estupenda distribucin.

Caractersticas
Fedora conserva el preciosismo y elegancia de los escritorios heredados de Red Hat, pero si hay alguna cosa que distingue el nuevo Fedora Core de otras distribuciones, es en el apartado de los asistentes. Fiel a la tradicin de Red Hat de acercar Linux al usuario, Fedora Core 3 implementa asistentes para (casi) todas las funcionalidades que queramos configurar en nuestro equipo, desde impresoras a escners en red y dispositivos inalmbricos. Por supuesto, que los ms expertos siguen pudiendo abrir una terminal y correr vi o Emacs para acceder a los archivos de configuracin si as lo desean. Esto sigue siendo Linux despus de todo. Otra de las caractersticas ms interesantes del nuevo Fedora es el que se refiere al apartado denominado Stateless Linux. Bajo esta bastante oscura denominacin, se esconde un proyecto que har las delicias de todo administrador de sistemas que tenga varias mquinas a su cargo y quiera mantener una instalacin sincronizada e idntica en cada una de ellas. Con las herramientas Stateless Linux proporcionadas por Fedora Core, un administrador de sistemas puede realizar una instalacin en una mquina maestra y repetir esa misma instalacin en tantas mquinas quiera con un mnimo esfuerzo. No slo eso, sino que las mquinas esclavo nunca tendrn que ser actualizadas o reconfiguradas individualmente. En vez de eso, se actualiza el maestro y todos los cambios realizados en esta mquina se aplican automticamente a las mquinas esclavo. Se entiende que

Stateless Linux no ser de utilidad para grupos de usuarios donde cada uno tiene unas necesidades muy especficas y diferenciadas de las de los dems o donde se tenga instalado hardware muy divergente, pero nos podemos imaginar el ahorro de coste, de tiempo y recursos humanos que supone el uso de Stateless Linux en entornos como un centro de soporte telefnico con centenares de puestos, donde todas y cada uno de las mquinas ha de ser exactamente igual y tener la misma configuracin que la del vecino. Algo que har a los golosos del software relamerse de anticipacin: Fedora Core 3 no slo soporta la instalacin nativa de paquetes rpm, sino que viene preparado para enlazar con depsitos de software empaquetados en formato apt y YUM. Esto significa que, si no encontramos la aplicacin que buscamos en el formato nativo de Fedora (improbable), siempre podemos echar mano al vasto nmero de paquetes apt disponibles para Debian y todos sus I clones.

Requisitos del Sistema


Procesador: Ordenador Pentium o equivalente; 200 MHz o mayor para sistema en modo texto; 400 Mhz Pentium II o mayor para sistema en modo grfico. Memoria: 64 MB mnimo para sistema en modo texto; 192 MB mnimo para sistema en modo grfico. Hard Disk: 620 MB para instalacin mnima a medida; 1.1 GB para instalacin servidor; 2.3 GB para sistema de escritorio personal; 6.9 GB instalacin a medida completa.

www.linuxmagazine.com.es

Nmero 01

97

PRXIMO NMERO

Nmero 2

Enero 2005: Nmero 2

Prximo Nmero
Especial Hardware
Un ordenador silencioso en la sala de estar? Es posible? Si pensamos que un ordenador ya es mucho ms que un ordenador, no slo ha de ser posible con la tecnologa moderna, sino que es deseable. Acoplndole tarjetas de televisin, reproductores y grabadores de DVDs, altavoces y dems hardware se convierte en un completo centro de entretenimiento. Sin embargo, el ruido de los ventiladores y discos duros y lo poco esttico de sus carcasas pueden ser un impedimento para colocarlo en el saln de nuestra casa. Pero Linux Magazine te da la solucin: un amplio reportaje donde se hace un repaso a todos los dispositivos que pueden convertir tu PC en un equipo que no desentone con el sof y las cortinas. No slo eso, sino que descubrirs como explotar tu cmara digital bajo Linux, que impresora ms te conviene y como sacarle el mximo a tu grabadora de DVDs.

Linux User
Seguiremos con nuestro cursos de XUL y presentaremos nuevas aplicaciones y herramientas que nos harn la vida ms fcil. Continuaremos nuestra serie sobre LaTeX, ahondando en su utilidad para representar ecuaciones e imgenes. Seguiremos conociendo la lnea de

Desarrollo
En la seccin dedicada a la programacin, continuaremos con la segunda parte de la creacin de un juego y veremos como ampliar nuestro interfaz utilizando la librera curses. Tendremos otra aplicacin PHP con el que jugar y ms interesantes scripts realizados en Perl y Python.

comandos para que todos puedan aprovechar el poder de las instrucciones del shell.

SysAdmins
Los administradores de sistemas podrn aprender los diversos mtodos para filtrar contenido web a travs de un proxy, distribuir correo de manera eficiente por medio de un cluster y detectar intrusiones en el sistema con Sleuthkit.

Noticias
Tambin traeremos las noticias ms candentes del mundo Linux, un calendario de eventos completo, informacin sobre los ltimos avances en el kernel e inseguridades de las aplicaciones e informacin sobre los proyectos ms interesantes que se llevan a cabo en el campo del Software Libre.

Boletn Linux Magazine


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

A LA VENTA ENERO 2005


98
Nmero 01
www.linuxmagazine.com.es

Quiere Linux.
Desea que el funcionamiento de sus aplicaciones y la administracin de sus sistemas se realice a travs de un soporte profesional de conanza. Necesita Red Hat. Disponible en 7 distintas arquitecturas y certicado por Oracle, Bea, IBM y Sap, entre otros, le permitir gestionar sus sistemas a travs del canal Red Hat Network.

THE PLATFORM OF CHOICE.


redhat.es | ES 900 800 409

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