Está en la página 1de 100

SDL

Programación de
Konversation
El cliente IRC más fácil
Edición en
Juegos bajo Linux de utilizar Castellano
LINUX MAGAZINE
NÚMERO 01

La nueva versión
de Fedora
en DVD
NÚMERO 1 • P.V.P 4,95 €

Configura, Vigila y Explota

REDES
Redes

Enrutado Linux
Cómo dar acceso a Internet a toda una red
doméstica con una sola conexión p68
Herramientas Linux

Correo Seguro
Servidores y clientes de correo con TLS para
transmisión encriptada de mensajes p60

Herramientas de configuración y monitorización


DHCP

p13
Configuración relajada con DHCP p16
CUPS/SAMBA

Impresión en red con CUPS y SAMBA p23

Fedora Core 3
TLS/SMTP

Te traemos lo
más nuevo de
Fedora Core 3

Red Hat Fedora


para tu PC p96
MediaWiki
Portales Enrutamiento

MediaWiki
8 413042 594505

p54

Cómo instalar y administrar un wiki con Esas Patentes


Después de las patentes de software
¿qué planean para nosotros el
el motor wiki PHP que se esconde tras la
Konversation

gobierno europeo? Echa un vistazo al


Wikipedia futuro de la mano de Paul C. Brown
00001

p95

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

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


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

La solución perfecta para su presencia


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

Consiga más información en


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

Patrocinado por: Presentado por:


Bienvenidos EDITORIAL

Bienve^H^H^H^H^H^H
Estimado Lector de Linux Magazine

Iniciamos una de la línea de comandos (con manguitos,


nueva andadu- aro y vigilante socorrista, no os creáis),
ra con… ¡No! iniciamos al lector en la programación
¡Tacha eso! No (¡no perderse el curso de XUL desde Nos sentimos orgullosos de nue-
puedo caer en cero!) y vemos la aplicación de Linux y stros orígenes como publicación,
el topicazo de el Software Libre en el campo de la edu- que se remonta a los primero días
“nueva anda- cación. Y poco más: Noticias del mundo de la revolución Linux. Nuestra
dura”, “flaman- Linux, noticias empresariales, relación revista hermana, la publicación ale-
mana Linux Magazin, fundada en
te revista” y de inseguridades, relación de eventos
1994, fue la primera revista dedi-
“recién estrenada publicación”. Todo es mundiales, relación de proyectos, recur- cada a Linux en Europa. Desde
cierto - al menos en castellano, pero hete sos, enlaces… y un DVD. Sí señores y aquellas tempranas fechas hasta
que Linux Magazine, o más bien, su señoras, regalamos con este número un hoy, nuestra red y experiencia han
publicación hermana y homónima alem- DVD que contiene la última versión de la crecido y se han expandido a la par
ana, Linux Magazin, lleva más de diez distribución Fedora: la Core 3. Para que que la comunidad Linux a lo ancho y
largo del mundo. Como lector de
años en el mercado, siendo la revista de nadie se lleve a engaño, expliquemos lo
Linux Magazine, te unes a una red
Linux más antigua de Europa y la segun- del DVD: incluiremos un DVD cada 3 de información dedicada a la dis-
da del mundo. Linux New Media publica meses. El precio habitual de Linux tribución del conocimiento y
revistas de Linux en media docena larga Magazine es de 4,95 ?, pero los meses experiencia técnica. No nos limita-
de países, incluyendo sitios tan dispares que salgamos con DVD, Linux Magazine mos a informar sobre el
como Polonia, Brasil y Estados Unidos. valdrá 5,95 ?. “¿Y por qué no salís todos movimiento Linux y de Software
Libre, sino que somos parte integral
Cuenta con un completo catálogo de los meses con DVD y acabamos?” os pre-
de él.
revistas dirigidas a usuarios, desarrol- guntaréis. Pues por que la mayoría de
ladores y administradores a distintos vosotros tenéis acceso a Internet ¿ver-
niveles y lleva años patrocinando gru- dad? Y muchos incluso banda ancha o estamos locos. Nos debemos a la comu-
pos, eventos y proyectos en el ámbito del alguna manera de acceder a ella (trabajo, nidad. Sin la comunidad ni existiría
Software Libre. Así que, en vez de universidad, el vecino del quinto…). Linux, ni Linux Magazine, ni lectores de
“andaduras”, “flamancias” y “estrenos”, Seguramente la mayor parte de vuestro revistas de Linux, ni nada de nada. Por
sería más apropiado hablar de “¡ya era software lo consigáis de ahí. Por tanto tanto, de donde se coge hay que
hora!” o, incluso, “¿a qué narices ¿para qué vamos a inflar el precio de la devolver y agradecidos de poder hacerlo.
estabais esperando?”. revista con un DVD cada mes de dudosa Además, a mayor difusión de cultura
Pero ya estamos aquí. Y, sí, Linux utilidad? Preferimos mantener bajo el Linux, mayor número de usuarios de
Magazine es nueva, es flamante y esta- precio la mayor parte del tiempo y sólo Linux. A mayor número de usuarios de
mos de estreno. Además viene cargadita incluir un DVD cuando exista algo que Linux, más lectores. ¡Ja! Es una
de cosas interesantes. Para empezar ten- realmente valga la pena grabar en él. ecuación infalible. Nuestra web también
emos la sección especial de Portada, Claro que siempre podéis conseguir ofrece foros, ofertas, noticias actual-
donde analizamos y nos explayamos los DVDs gratis… ¿qué cómo? Pues izadas al minuto, contenidos extra y una
sobre la creación y configuración de suscribiéndote. Es fácil: 12 números de vía de comunicación entre nuestros lec-
redes y servidores. Los programadores Linux Magazine con todos los DVDs por tores -vosotros- y la redacción -nosotros-
pueden seguir nuestros artículos sobre 49,50 ?. Si no te convence, ponnos a inmediata y muy fácil de utilizar.
C/C++ y las tres Ps (Perl, Python y prueba. Por poco más de lo que vale Así que, ya sabéis, aquí estamos,
PHP), además de otros temas que capten un ejemplar, por 5 ? para ser exactos, hemos llegado, bienvenidos a Linux
nuestra atención, en la sección de conseguirás tres números de Linux Magazine y que lo disfrutéis.
Desarrollo. Si administras un sistema, te Magazine y el correspondiente DVD.
interesará la sección SysAdmin con los ¡Cinco mortadelos! No es que sea para
mejores trucos y los artículos en más pensárselo mucho. Otra cosa a seguir es
profundidad para el profesional más exi- nuestra web, www.linuxmagazine.es,
gente. Para el usuario final, tenemos la donde publicaremos paulatinamente
sección Linux User, donde se puede TODOS LOS CONTENIDOS de números
aprender a configurar y utilizar aplica- atrasados de Linux Magazine para su Paul C. Brown
ciones, se bucea en las procelosas aguas libre descarga en formato PDF. No, no Director

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

NOTICIAS
13 Herramientas de Red
Las máquinas conectadas a la red ofrecen enormes benefi-
Software ................................................................................................6 cios, pero añaden responsabilidades. Desde el momento en
que conectamos
nuestra máquina a
Negocios ................................................................................................8
la red debemos no
solo conocer todo
Linux .........................................................................................................9 acerca de nuestra
máquina, si no tam-
bién sobre la forma
Inseguridades ..................................................................................10
en que ésta se
comunica con el
PORTADA mundo exterior. Las
herramientas están-
dar de Linux nos
Especial Redes ..................................................................................12 pueden ayudar.

Herramientas de Red ..................................................................13


Todas las herramientas Linux necesarias para la monitor-
ización de redes.

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


Añadir máquinas a una red implica un trabajo extra de
DHCP para la autoconfiguración de clientes de red.
configuración. Una solución centralizada que use un
servidor DHCP
Cambio de perfile con SCPM .................................................21 para asignar las
Mantenimiento dos configuraciones red en una misma direcciones IP y
máquina. otros parámetros
a las máquinas
clientes nos qui-
CUPS sobre SAMBA ......................................................................23
tará un motón de
Proporciona impresión en red para clientes Linux, Windows
dolores de cabe-
y Mac.
za a la hora de
administrarlas.
DESARROLLO

La librería SDL ..................................................................................28


Aprendemos a utilizar SDL en este taller de programación de
juegos.

Interfaces ............................................................................................33
28 SDL: Juegos Bajo Linux
SDL significa Simple DirectMedia Layer y es una API
Con curses podemos desarrollar interfaces de texto rápidos y multi-plataforma para programar aplicaciones multi-
eficientes media, como los juegos. Aporta una base estable sobre la
que los progra-
Cartas a medida .............................................................................38 madores pueden
Perl puede generar cartas y sobres personalizados para trabajar, sin pre-
envíos masivos en formato PostScript. ocuparse de
cómo se encar-
gará el hard-
La API Pear .........................................................................................42
ware de ren-
PEAR proporciona una API para la conexión a bases de
derizarlo o in-
datos que evita el código redundante.
cluso qué hard-
ware lo ejecu-
Introducción a Python ..............................................................48 tará.
Python es un lenguaje todoterreno, útil tanto en scripts web
como en grandes aplicaciones.

2 Número 01 www.linuxmagazine.com.es
Contenido LINUX MAGAZINE

SYSADMIN
54 MediaWiki
La enciclopedia libre Wikipedia usa el motor Mediawiki para
recopilar un enorme base de datos de conocimiento. Si desea
La Columna de Charly ................................................................53
estrenar su pro- Los mejores trucos y consejos del SysAdmin.
pio wiki, este
software basado Colaboración Online ...................................................................54
en PHP es una Instalamos y configuramos MediaWiki, el motor wiki tras la
buena elección popular Wikipedia
que facilita una
funcionalidad
Correo Seguro .................................................................................60
abundante y
Servidores seguros de correo con TLS
llena de poten-
cia.
La Caja Negra ...................................................................................62
Controla tu sistema con Syslog NG.

LINUX USER
74 Programación XUL
Los desarrolladores de Mozilla crearon el lenguaje XUL para Portales de Enrutamiento .....................................................68
proporcionar un método sen- Con una sola máquina Linux conectada a Internet, podemos
cillo y potente para escribir proporcionar acceso al exterior a toda una red.
interfaces web
de gran atrac- Desktopia: Panelizer ..................................................................70
tivo y funcio- Dota un gestor de ventanas minimalista de un panel de con-
nalidades ex- trol con Panelizer.
traordinarias.
En esta serie
aprendemos
Aplicaciones: Konversation ...................................................72
las bases de la El cliente IRC más sexy para KDE.
programación
orientada a web con Curso de Programación: XUL (I) ..........................................74
esta poderosa her- Un lenguaje sencillo para programar interfaces web.
ramienta.
Educación: WIMS ..........................................................................79
Generación de exámenes personalizados con WIMS.

Tipografía con LaTeX (I) ............................................................84


96 DVD Linux Magazine: Fedora Core3 Documentos de aspecto profesional con LaTeX.
Durante años, Red Hat fue con diferencia la distri-
bución Linux más popular, sólo siendo ensombrecida por
COMUNIDAD
Debian. Pero mientras éste último era el preferido de la
comunidad hacker y favorito de los que escogían el camino
de “hágaselo-usted-mismo”, Red Hat era el favorito de los Proyectos ............................................................................................93
usuarios buscando productividad inmediata, de la empresa y
de aquellos que Eventos .................................................................................................94
querían entrar más
suavemente en el
mundo Linux. Contacto ..............................................................................................94
Fedora es la distro
heredera de Red Humor ...................................................................................................95
Hat y Linux
Magazine te lo trae
en DVD.
DVD: Fedora Core3 .......................................................................96

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

www.linuxmagazine.com.es Número 01 3
NOTICIAS Software

Software
■ En el Futuro jugamos a Croquet
”¿Qué pasaría si diseñáramos un sistema wwws.sun.com/
operativo e interfaz de usuario con los software/looking_
conocimientos que tenemos hoy en día, glass/). Sin embar-
hasta dónde podríamos llegar?” La go, va más allá
respuesta posiblemente sea hasta el que aquel al no
campo de croquet más cercano. limitarse al aspec- ratoncito (Linux,
OpenCroquet es un proyecto que imple- to visual, permi- Windows y Mac).
menta un nuevo concepto de sistema tiendo, entre otras Se preve que fu-
operativo, el desarrollo del cual viene cosas, que usuar- turas versiones de
liderado Alan Kay, el hombre que nos ios compartan es- OpenCroquet fun-
dio el portátil, la programación orientada pacios de otros simplemente cruzando cionarán como verdaderos sistemas
a objetos y el interfaz de ventanas tan un “portal” y puedan trabajar conjunta- operativos y no requerirán más software
popular hoy en día. El proyecto pretende mente en un mismo documento o com- que el que traigan consigo. Las exigen-
implementar un sistema operativo e partir su tiempo de ocio a través de cias del hardware básico son muy discre-
interfaz totalmente novedoso que unifica avatares igualmente tridimensionales. tas: OpenCroquet funcionará perfecta-
las últimas tecnologías 3D con la De momento, OpenCroquet funciona uti- mente con un Pentium II a 450 Mhz…
ubicuidad de las redes en un todo que lizando como base Squeak, una imple- siempre y cuando venga equipado con
sólo se puede calificar, ahora sí, como mentación de Smalltalk (otro invento de una potente tarjeta gráfica compatible
“ciberespacio”. En la superficie, Kay) orientada a la educación y, por con OpenGL. Visita el enlace de más
OpenCroquet podría parecer similar al tanto, se puede utilizar en todas las abajo para más información. ■
proyecto “Looking Glass” de Sun (http:// plataformas que soporten el interfaz del http://www.opencroquet.org.

■ Palabras Calientes
No, no se trata de otro servicio 906 (o Los linuxeros más recalcitrantes podrán mino de búsqueda potencial. ¿Lees sobre
sea cual sea el prefijo utilizado para decir lo que quieran de esta distro, pero paellas valenciana y te gustaría saber
hablar con señoritas de dudosa moral los impulsores detrás del sistema, con más? Con un clic aparece un menú con-
hoy en día), sino el último invento de su CEO Michael Robertson a la cabeza, textual que te permite buscar en Google
Linspire, antes conocido como Lindows. son un hervidero de ideas. Ésta vez lle- utilizando “paella” como la palabra
van “la experiencia clave, o consultar noticias sobre paellas
Google” hasta la o incluso comprar paellas en Froogle, el
enésima potencia. Si buscador de productos de consumo de
bien Google parece Google… Bueno, ejem, tal vez no sea un
haberse concentrado buen ejemplo, pero ya pilláis la idea. LIS
mucho en la platafor- se basa en el motor de análisis Gecko, el
ma Windows última- mismo utilizado por Mozilla y Firefox,
mente, con su barra pero, según Robertson, “se han realizado
para MSIE, su escrito- muchos cambios y mejoras” para poder
rio solo-Windows y ofrecer funcionalidades extra e incluso
demás, los únicos que integran Hot Words en el cliente de
podrán disfrutar de correo. Otros productos salidas de la fac-
Hot Words, una man- toría Linspire son PhoneGaim que per-
era de buscar en mite realizar llamadas de voz sobre IP de
Google, son los usuar- cliente Gaim a cliente Gaim y
ios de la Linspire MailMinder, un servicio integrado en el
Internet Suite (LIS). cliente de correo de LIS que permite que
Hot Words funciona mensajes recordatorio se envíen en una
convirtiendo cada pal- fecha determinada. Visita el enalce al pie
abra que aparece en la para más información. ■
navegador en un tér- http://info.linspire.com/suite.html

6 Número 01 www.linuxmagazine.com.es
Software NOTICIAS

■ (Otro) Linux de Bolsillo


Puedes ir por ahí con Linux en un CD, MetroPipe (http://www.metropipe.net)
puedes ir por ahí con Linux en un dis- ha colocado en su sitio web una dis-
quete… Y ahora puedes ir por ahí con tribución completa que funciona
Linux en un pendrive, siempre y cuando desde cualquier dispositivo USB con
cuentes con más de 128 Megabytes de capacidad de lectura y escritura. La
espacio. Lo que es más: ni siquiera ten- distribución, llamada “Virtual Private
drás que rearrancar. La gente de Machine” se puedes llevar en un pen-
drive, se puede llevar en un USB
Watch e incluso se puede llevar en un
iPod. ¿Te sientas a un ordenador cor-
riendo Windows? No hay problema. podrás utilizarla sin tocar un solo fichero
Enchufa tu dispositivo USB a cualquier de configuración. Y cuando te vayas,
puerto, haz clic en el icono que aparece todos los cookies, ficheros y logs estarán
y se cargará un entorno completo Linux en tu pendrive, no en el ordenador
listo para ser utilizado. Sin cerrar cliente, que queda tal como estaba,
Windows, sin rearranques, sin proble- limpio de polvo y paja. La distro VPM se
mas. Si el sistema subyacente, sea encuntra disponible en el enlace al pie. ■
Windows o Linux (para Mac en breve), http://www.metropipe.net/
tiene conexión a Internet o una red local, ProductsPVPM.shtml.

■ PubSub no es para ir de copas ■ El “Access” de OpenOffice


Firefox vuelve a demostrar su im- View/Sidebar/PubSub Sidebar. En una La nueva versión de OpenOffice, número
plantación en el mercado de los naveg- primera instancia, se nos ofrece informa- 2.0, integrará una aplicación similar a
adores. Esta vez nos dan PubSub, una ción genérica (mucha información sobre MS Access, para aquellos que lo echen
barra lateral que nos permitirá navegar la carrera presidencial americana, de menos. La nueva aplicación será más
blogs, grupos de noticias y resúmenes mucho Bush, mucho Kerry, etc.), pero “visible” que la implementación actual
RSS. La barra se instala en la parte podemos configurar la barra que (accesible a través de Tools/Data
izquierda del navegador y permite moni- muestre la información que nosotros Sources) ya que se colgará del menú
torizar en tiempo real cambios de webs deseemos abriendo una cuenta en Files/New, el mismo sitio de donde se
de noticias, grupos de noticias de usenet PubSub.com. Podemos escoger que nos accede a la creación de otros formatos de
y más de tres millones de weblogs. Los sirvan información de varias fuentes y, a documentos en OpenOffice. Los docu-
nuevos elementos aparecen en la barra y través de una formulario, especificamos mentos creados con Base, que así se
podemos expandir la noticia en la ven- las palabras claves que se han de utilizar llama el programa, podrán guardarse en
tana principal del navegador simple- para filtrar las noticias y confirmamos el lugar elegido por el usuario y uti-
mente pulsando en el enlace. Nada más nuestra suscripción pulsando en un lizarán un formato específico de
instalar PubSub, podemos acceder al ser- enlace remitido por correo electrónico. OpenOffice. Sin embargo, la integración
vicio cerrando y rearrancando el naveg- Seguidamente, cambiamos los Options existente con otras bases de datos, que
ador y, a continuación, escogiendo de and Settings en la barra para incluir la permite acceder a datos guardados bajo
dirección de correo electrónico formatos como MSAccess, Oracle, dBase
que utilizamos para suscribirnos y MySQL, se seguirá conservando. Los
y la contraseña que PubSub nos paquetes generados con Base integrarán
envíe. Con desconectar y volver a fuentes de datos, formularios, consultas
conectar al servicio, aparecerán e informes, en un mismo paquete de
las cuentas que hemos habilita- manera similar a como lo hace Access.
do. A los pocos minutos, la barra Para la fuente de datos, el equipo de
empezará a llenarse de noticias a OpenOffice se ha decantado por
medida que se producen a lo HSQLDB, un motor de bases de datos
largo y ancho del blogsphere, basado en Java que se integra perfecta-
Usenet y web. Para aquellos que mente con la implementación gratuita
les va este tipo de cosas, PubSub del lenguaje, Kaffe. HSQLDB destaca por
también se encuentra disponible su pequeño tamaño, rapidez y la posibil-
para MSIE. Descarga la barra del idad mantener los datos en memoria
enalce de más abajo. ■ durante la ejecución. ■
http://www.pubsub.com/ http://dba.openoffice.org/miscellaneous/
sidebar-firefox.php. dba20.html

www.linuxmagazine.com.es Número 01 7
NOTICIAS Negocios

Negocios
■ Hispafuentes y Ceres
La empresa de software libre española
Hispafuentes y la Fábrica Nacional de
Moneda y Timbre-Real Casa de la
Moneda han desarrollado conjuntamente
drivers para tarjeta criptográfica “Ceres”.
■ Novell vs. Ballmer Esta tarjeta abre las puertas a la adminis-
En un documento hecho público a positivamente de tración electrónica y permite acceder a
los medios el 28 de octubre pasado, Linux, y en espe- todos los servicios que, como la Agencia
el vipresidente de Novell, John cial decide omitir Tributaria entre otros, admiten certifica-
Hogan y el senior business analyst, la conclusión, donde dos digitales emitidos por la FNMT que
Barret Coakley desmontan una a una las se dice literalmente: garantizan la autenticación, integridad,
aseveraciones difundidas por Steve “El estudio de TCO confidencialidad y no repudio en las
Ballmer, CEO de Microsoft en un email (Total Cost of Owner- comunicaciones en redes abiertas. Hasta
enviado a clientes y socios de la com- ship) encontró que Linux ofrece sin hoy, esta tarjeta sólo era soportada por
pañía el 27 de octubre en el que Ballmer lugar a dudas ahorros en costes, plataformas Windows de Microsoft,
aseguraba que Windows es más barato, economía en el escalado y ventajas téc- pero, cosa a la que nos tiene acostum-
más rápido y más seguro que Linux. nicas, tal y como pueden atestiguar brados la administración, a partir de
Entre otras cosas, se cuestiona la inde- muchos usuarios satisfechos. Sin embar- ahora, y gracias a Hispafuentes, todos
pendencia de los análisis y la go, los ahorros en costes no son los usuarios de Linux que utilicen naveg-
metodología utilizada. Según revela el automáticos. No se obtienen sin sus adores basados en Mozilla (Mozilla,
documento de Novell, se utilizaron en debidas diligencias y no se aplican nece- Firefox, Netscape, Galeon, etc.), podrán
las pruebas formatos propietarios de MS sariamente a todos los entornos. En últi- beneficiarse de las ventajas de realizar
que Linux tenía que emular con SAMBA, ma instancia, el TCO y ROI (Return On gestiones autentificadas a través de
ingenieros de Redmond realizaron Investment) puede ser más bajo, igual o Internet. La solución se basa en Opensc,
ajustes en el sistema operativo de prueba más alto que los de UNIX o Windows una librería para trabajar con tarjetas
de MS para optimizar los resultados de dependiendo de las circunstancias de inteligentes. La versión desarrollada por
Windows y, sin embargo, no se realizó explotación corporativa individuales”. Hispafuente y la FNMT-RCM en conjun-
ninguna optimización en el sistema Otros aspectos tratados son los de la ción con HispaLinux, aporta soporte
Linux. Asimismo. Hogan y Coakley acu- seguridad, falta de personal cualificado y para tarjetas del tipo PKCS#11, PKCS#15
san a Ballmer de ser demasiado selectivo falta de soporte, todos y cada uno de y manejo de claves y certificados con las
con algunos de los datos publicados en ellos desmantelados por los ejecutivos tarjetas Ceres de FNMT-RCM, lo que, a
un estudio de The Yankee Group titulado de Novell. Concluyen que Ballmer a efectos prácticos, abre las puertas de la
“Linux, UNIX and Windows TCO descontextualizado y manipulado la Administración Electrónica de par en par
Comparison” aparecido en abril de este información ofrecida por estudios “inde- para los usuarios de GNU/Linux. El dri-
mism año. Ballmer no cita ninguno de pendientes” con el fin de influenciar las ver se puede bajar de https://
los muchos apartados donde se habla decisiones de sus clientes. ■ software-libre.org/projects/opensc-ceres/■

■ eBay: Open Source a Subasta ■ SCO on the Rocks


El fundador de eBay y filántropo Pierre intelectual, votación y software social, Las acciones del grupo
Omidyar acaba de de tomar una decisión todo con el ánimo de mejorar a los más SCO han caído en picado
importante en su carrera como benefac- desfavorecidos en el mundo. De entrada, en estos últimos meses. El
tor de la humanidad: a partir esto va a suponer a renunciar de lunes 25 de octubre, sus acciones cer-
de ahora, su fundación, anteri- millones de dólares en exen- raron a 3,01 dólares por acción, lo que
ormente Omidyar Foundation, ciones fiscales, pero según, supone una caída de un 83% con respec-
cambia de nombre y se con- Omidyar, “[nos preguntamos] si to a enero de éste mismo año, cuando
vierte Omidyar Network. El eBay es un tan buen ejemplo de sus valores cotizaban a 18,19 dólares. La
cambio es importante -y caro-, como la gente descubre su poder empresa de Darl McBride ha visto como
ya que con el cambio, el individual, entonces, ¿tiene sen- el volumen de negocio para su sistema
empresario deja de invertir tido como fundación poder operativo Unix ha descendido de 7,3 mil-
exclusivamente en organizaciones sin invertir en algo como eBay?”. De lones de dólares a poco más de 670 mil
ánimo de lucro y abre las puertas a la momento, entre otras organizaciones, se dólares en un año. Los observadores
ayuda a empresas con fines comerciales. han asociado con Sourceforge para apo- financieros achacan esta mala racha a la
Desde junio, la nueva organización a yar y financiar proyectos de software erosión de la imagen de SCO debido a lo
invertido en varias áreas, incluyendo libre. Más información en http://www. que parece ya una batalla legal perdida
microfinanzas, código abierto, propiedad omidyar.net/. ■ contra IBM. ■

8 Número 01 www.linuxmagazine.com.es
Noticias NOTICIAS

Noticias
■ 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 España a lo largo del año pasado.
■ Lexmark lo intenta… ¡Fallaaaa! Esto no debe sorprendernos, máxime
En la eterna partida entre usuarios y con- cuando incluso un medio de comuni-
sumidores contra corporaciones con cación mayoritario basan una campaña
afanes abusivos monopolísticas, el en regalar un CD con Linux a sus lec-
equipo de los consumidores acaba de buena y necesaria dosis de compe- tores. HispaFuentes, por su lado, se
marcar un importante tanto. Ya se sabe titividad al sector. Uno de los jugadores suma a la moción con su propio estudio
que sólo hace falta que una empresa de dicha industria, Static Control donde se afirma que para el 2007 el 25%
aulle “¡Propiedad Intelectual!” para que Components, ni corto ni perezoso, le de los ordenadores a nivel mundial cor-
un ejército de abogados sin nada mejor aplicó la ingeniería inversa al chip y a las rerán una versión u otra de Linux. El
que hacer salga arrastrándose de debajo pocas semanas estaba vendiendo su estudio basa sus conclusiones en la tasa
de las piedras, presto a defender la com- propia versión, el “Smartek”, a fabri- de crecimiento anual, que sitúa a Linux
pañía, el sistemas capitalista y la civi- cantes de toner para que la incorporasen como sistema operativo de mayor crec-
lización moderna tal y como lo concebi- a sus cartuchos. Cómo viene siendo imiento con un índice de expansión del
mos ante la salvaje horda de piratas, habitual, cuando una empresa no puede
usurpadores de copyright y Pedosperos hacer nada en el campo de batalla del
varios que andan a la búsqueda de la mercado, pues se pleitea y punto.
destrucción del mundo. En este caso, fue Lexmark hizo lo propio y arrastró a SCC
la compañía fabricante de impresoras a los tribunales. En un principio,
Lexmark y el artículo de consumo origen Lexmark pareció ganar el tanto, cuando
de la controversia, un… ¿cartucho de un juez, a principios del 2003, falló en
toner? Pues sí, amiguitos y amiguitas, un favor del fabricante de impresoras. Pero
cartucho de toner. En el 2003, el al final ha prevalecido el sentido común 16,6%. Le siguen en segundo lugar
Lexmark tuvo la genial idea de dotar a y en un nuevo fallo de octubre del 2004, Windows (por supuesto) con una tasa de
sus cartuchos de un chip que imple- otro tribunal invalida el primer dicta- crecimiento del 10,5% y el farolillo rojo
mentaba tecnología DMCA (el que se uti- men, alegando que no es de recibo colo- lo componen otros Unices que ven
liza habitualmente para evitar la repro- car dispositivos de DMCA en algo que no descender su implantación a un 4,5%
ducción de medios pirateados e imple- sea un producto con copyright. En con- anual. En lo que se refiere a servidores,
mentado en el sistema Palladium de creto, el fallo reza: “Debemos dejar bien la cuota de mercado será del 58,8% para
Microsoft) para evitar que terceras partes claro que en futuro, empresas como Windows (55,1% en el año 2002), del
creasen clones de sus cartuchos. Como Lexmark no pueden utilizar tecnologías
es bien sabido, existe toda una industria DMCA en conjunción con leyes sobre
dedicada a producir versiones más copyright para crear monopolios de
baratas de consumibles de impresora bienes manufacturados para sí mismos”.
originales, aportando, de paso, una Ámen. ■

■ OpenBSD 3.6
A primeros de noviembre se nuevos interfaces para dis- 32,7% para Linux (23,1% en 2002) y del
liberó la nueva versión de positivos inalámbricos, 5,7% para Unix (11% en 2002), lo que
OpenBSD, la popular ver- Ethernet sobre USB, indica que la implantación de Linux
sión de Unix BSD de código puentes PCI-ISA y afectará bastante más a Unix que al sis-
abierto, para su descarga o sensores varios. En el tema operativo de Microsoft con su
pedido en CD. Aparte de apartado de mejoras, incremento de popularidad. Otra señal
parches y mejoras varias, esta se ha mejorado el de la gradual e imparable implantación
nueva versión soporta SMB en rendimiento y seguridad de Linux en el mercado mundial son las
plataformas i386 y AMD64, se ha en NFS. El catálogo de cifras que se refieren al incremento de
depurado el servidor y clientes software incluye portes para volumen de negocio. El estudio señala
DHCP y se han implementado nuevos más de 2700 aplicaciones y más de 2800 que crecerá de 280 millones de dólares
demonios para vigilar la conexión de paquetes precompilados. Para más infor- (cifra registrada en el 2003) a un apabul-
nuevos dispositivos. Asimismo, se ha mación, dirigirse a http://www.openbsd. lante 3.000 millones de dólares en el
ampliado el catálogo de drivers, con org/es/36.html. ■ 2008. ■

www.linuxmagazine.com.es Número 01 9
NOTICIAS Inseguridades

Inseguridades
una vulnerabilidad en getmail cuando se
configura para correr como root y envía
correo a ficheros maildir/mbox de usuar-
ios locales no de confianza. Un usuario
local malicioso podría explotar una condi-
ción de carrera, o un ataque symlink simi-
■ CUPS 631). El proyecto de Vulnerabilidades y lar y dotar a getmial con la capacidad de
El Common UNIX Printing System Exposiciones Comunes (Common Vulne- crear o sobrescribir ficheros en cualquier
(CUPS) es un sistema de impresión. rabilities and Exposures o CVE - http:// directorio en el sistema. No se debe ejecu-
Álvaro Martínez Echevarria informó de cve.mitre.org) ha asignado el nombre tar getmail como usuario privilegiado ni,
un error en la versión del Protocolo de CAN-2004-0558 a este problema. ■ en la versión 4, utilizar un MDA externo
Impresión de Internet (Internet Pinting Referencia Debian: DSA-545-1 con privilegios de usuarios y grupos
Protocole o IPP) en versiones de CUPS Referencia Gentoo: GLSA 200410-06/cups explícitamente configurados. Todos los
antertiores a 1.1.21. Un atacante podría Referencia Mandrake: MDKSA-2004:097 usuarios de getmail deben actualizar a la
enviar un paquete cuidadosamente Referencia Red Hat: RHSA-2004:449-17 última versión. ■
escrito al puerto IPP, lo que podría provo- Referencia Slackware: SSA:2004-266-01 Referencia Debian: DSA-553-1
car que CUPS dejara de escuchar en ese Referencia Suse: SUSE-SA:2004:031 Referencia Gentoo: GLSA 200409-32/get-
puerto y desencadenar un ataque de mail
denegación de servicio. Para poder ■ getmail Referencia Slackware: SSA:2004-278-01
explotar este error, un atacante tendría getmail es un sustituto fiable de fetchmail
que tener la capacidad de enviar un que soporta Maildir, Mboxrd y envío de ■ Mozilla
paquete UDP al puerto IPP (por defecto, MDAs externos. David Watson descubrió Mozilla es un navegador web de código
abierto, un cliente de correo y grupos de
Políticas de seguridad de la Distribuciones Mayoritarias noticias avanzado, cliente IRC y editor de
Distribuidor Fuente Seguridad Comentario HTML. Se han descubierto recientemente
Debian Info:http://www.debian.org/security/ Los avisos de seguridad actuales se in- varios errores en la suite. Jesse Ruderman
Lista:http://www.debian.org/debian-security-announce/ cluyen en la página de inicio. Los avisos descubrió un error de scripting multido-
Referencia:DSA-…1) se proveen como páginas HTML con minio en Mozilla. Si a un usuario se le
enlaces a los parches. Los avisos también
incluyen una referencia a la lista de
engaña para que arrastre un enlace de
correo. Javascript hasta otro marco o página, se
Gentoo Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para dota al atacante de la capacidad de hurtar
Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de o modificar información sensible de ese
Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la
sitio. Además, si a un usuario se le
Referencia:GLSA:… 1) página principal. Los avisos se presentan
en HTML con códigos para fusionar las engaña para que arrastre secuencialmente
versiones corregidas. dos enlaces a otra ventana (no marco), se
Mandrake Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web le dota al atacante de la capacidad de eje-
Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionadas con
cutar comandos arbitrarios. El proyecto
Referencia:MDKSA:… 1) la seguridad. Entre otras cosas,incluye
de avisos seguridad y referencias a las de Vulnerabilidades y Exposiciones
listas de correo. Los avisos son páginas Comunes (Common Vulnerabilities and
HTML, pero no contienen enlaces a los Exposures o CVE - http://cve.mitre.org)
parches.
ha asignado el nombre CAN-2004-0905 a
Red Hat Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad
Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A
este problema. Gael Delalleau ha descu-
Referencia:RHSA-… 1) continuación los problemas para cada bierto un desbordamiento de entero que
versión de Red Hat se agrupan. Los avisos afecta le código que maneja BMP dentro
de seguridad se proveen como una de Mozilla. Un atacante podría utilizar un
página HTML con enlaces a los parches.
Slackware Info:http://www.slackware.com/security La página de inicio contiene enlaces al
fichero BMP cuidadosamente manipulado
Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. para provocar un cuelgue del programa o
Referencia:[slackware-security]… 1) No existe información adicional sobre que ejecuta código arbitrario cuando se
seguridad en Slackware. visualizase el archivo. El CVE ha asignado
Suse Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de
el nombre CAN-2004-0905 a este proble-
security/index.html seguridad tras un remodelado en el sitio
Parches:http://www.suse.de/en/private/ web de SuSE. Existe información en la ma. Georgi Guninski ha descubierto un
download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de desbordamiento de búfer basado en pila
Referencia:SUSE-SA… 1) seguridad para versiones individuales de en las rutinas de muestra de vCard. Un
SuSE Linux se muestran de color rojo en el
atacante podría crear un vCard cuida-
sitio de actualizaciones generales.
Contiene una corta descripción de la dosamente manipulado que podría hacer
vulnerabilidad que el parche soluciona. que Mozilla se cuelgue o ejecute código
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
arbitrario cuando se muestra. El mismo

10 Número 01 www.linuxmagazine.com.es
Inseguridades NOTICIAS

autor ha descubierto otro desbordamiento también descubrió un desbordamiento de alizar sus sistemas para incluir los paque-
de búfer basado en pila en el módulo de entero en el decodificador de imágenes tes nuevos que solucionan este problema.
“Envío de Página”. El proyecto de ICO. Un atacante podría crear un fichero Los nuevos paquetes contienen un parche
Vulnerabilidades y Exposiciones Comu- ICO cuidadosamente manipulado que retroactivo que no es vulnerable a este
nes (Common Vulnerabilities and Ex- hiciera que una aplicación enlazada con tipo de ataques de denegación de servi-
posures o CVE - http://cve.mitre.org) ha gtk2 se cuelgue cuando la víctima abriese cio. ■
asignado el nombre CAN-2004-0902 a el fichero (CAN-2004-0788). ■ Referencia Red Hat: RHSA-2004:451-05
este problema. Wladimir Palant ha descu- Referencia Debian: DSA-549-1
bierto un fallo en la manera en que Referencia Red Hat: RHSA-2004:466-12 ■ XFree86
Javascript interactúa con el portapapeles. Referencia Slackware: SSA:2004-266-02 XFree86 es una implementación de códi-
Un atacante tiene la posibilidad de utilizar Referencia Suse: SUSE-SA:2004:033 go abierto del sistema de ventanas X.
código malicioso de Javascript para robar Aporta una funcionalidad básica de bajo
datos sensibles que han sido copiados al ■ OpenOffice.org nivel para la que están diseñadas los
portapapeles. El proyecto de Vulnera- OpenOffice.org es un conjunto de aplica- interfaces gráficos de usuario (GUIs) com-
bilidades y Exposiciones Comunes ciones para la productividad ofimática pletos tales como Gnome o KDE. Durante
(Common Vulnerabilities and Exposures que incluye programas de escritorio, una auditoría de código fuente, Chris
o CVE - http://cve.mitre.org) ha asignado como procesadores de texto, hoja de cál- Evans descubrió varios fallos de desbor-
el nombre CAN-2004-0908 a este proble- culo, administrador de presentaciones, damientos de pila y un desbordamiento
ma. ■ editor de fórmulas y un programa de dis- de entero en la librería libXpm de X.org
Referencia Red Hat: RHSA-2004:486-18 eño. La empresa Secunia Research infor- utilizada para decodificar imágenes XPM
Referencia Slackware: SSA:2004-266-03 mó de un problema derivado de la manip- (X PixMap). Un atacante que supiera
Referencia Suse: SUSE-SA:2004:036 ulación de ficheros temporales en aprovechar este problema, podría crear
OpenOffice.org. Un usuario local mali- un fichero XPM cuidadosamente manipu-
■ gtk+ cioso podría utilizar este fallo para acced- lado que haría que una aplicación enlaza-
El paquete gtk2 contiene el kit de her- er a los contenidos de los documentos da con la mencionada librería se colgase y
ramientas de the GIMP (GTK+), una libr- abiertos de otro usuario. El proyecto de ejecutase código arbitrario si el fichero es
ería para la creación de interfaces gráficos Vulnerabilidades y Exposiciones Comu- abierto por la víctima. El proyecto de
de usuario para el sistema de ventanas X. nes (Common Vulnerabilities and Vulnerabilidades y Exposiciones Comu-
Durante las pruebas de un fallo anterior- Exposures o CVE - http://cve.mitre.org) nes (Common Vulnerabilities and
mente corregido en QT (CAN-2004-0691), ha asignado el nombre CAN-2004-0752 a Exposures o CVE - http://cve.mitre.org)
se descubrió un error en el procesador de este problema. Se aconseja a todos los ha asignado los nombres CAN-2004-0687
imágenes BMP de gtk2. Una atacante usuarios de OpenOffice.org que actuali- , CAN-2004-0688 y CAN-2004-0692 a
podría crear un fichero BMP cuidadosa- cen sus programas con los paquetes de estos problemas de seguridad de XFree86.
mente manipulado que podría provocar actualización de OpenOffice.org que con- Se descubrió un fallo en el X Display
que una aplicación entrase en un bucle tienen un parche retroactivo para corregir Manager (XDM). XDM abría un socket
infinito y este problema. ■ TCP chooserFd, aún si el parámetro
no respondiese a las entradas del usuario Referencia Mandrake: MDKSA-2004:103 DisplarManager.requestPort estuviera
cuando fuese abierto por la víctima. Referencia Red Hat: RHSA-2004:446-08 establecido como 0. El efecto de esta
El proyecto de Vulnerabilidades y Ex- situación es que permitía el acceso de
posiciones Comunes (Common Vulnera- ■ SpamAssassin usuarios autorizados al ordenador a
bilities and Exposures o CVE - http:// SpamAssassin aporta maneras de reducir través de X, aún si el administrador del
cve.mitre.org) ha asignado el nombre correos electrónicos comerciales no solici- ordenador hubiera configurado XDM para
CAN-2004-0753 a este problema. Durante tados (SPAM) en las bandejas de correo rechazar conexiones. Aunque XFree86
una auditoría de seguridad, Chris Evans entrante. Se ha encontrado un error de versión 4.3.0 no era vulnerable a este
descubrió un desbordamiento de pila en denegación de servicio en versiones infe- problema, Red Hat Enterprise Linux 3
el decodificador de imágenes XPM. Una riores a 2.64. Un atacante malicioso contenía un parche retroactivo que intro-
atacante podría crear un fichero XPM podría crear un mensaje de tal modo que ducía el error. El proyecto de
cuidadosamente manipulado que podría provocaría que SpamAssassin dejara de Vulnerabilidades y Exposiciones Comu-
hacer que una aplicación enlazada con responder. Este ataque de denegación de nes (Common Vulnerabilities and Expo-
gtk2 se cuelgue o posiblemente ejecute servicio podría provocar que sures o CVE - http://cve.mitre.org) ha
código arbitrario cuando la víctima abra SpamAssassin deje de remitir y filtrar asignado el nombre CAN-2004-0419 a este
el fichero. El proyecto de Vulnerabilidades correo. El proyecto de Vulnerabilidades y problema. ■
y Exposiciones Comunes (Common Exposiciones Comunes (Common Referencia Debian: DSA-561-1
Vulnerabilities and Exposures o CVE - Vulnerabilities and Exposures o CVE - Referencia Gentoo: GLSA 200409-34/X
http://cve.mitre.org) ha asignado los http://cve.mitre.org) ha asignado el nom- Referencia Mandrake: MDKSA-2004:099
nombres CAN-2004-0782 y CAN-2004- bre CAN-2004-0796 a este problema. Los Referencia Red Hat: RHSA-2004:478-13
0783 a este problema. El mismo autor usuario de SpamAssassin deberán actu- Referencia Suse: SUSE-SA:2004:034

www.linuxmagazine.com.es Número 01 11
PORTADA Especial Redes

Los Qués y Cómos de la Administración de LANs

La Enredadera
El ordenador sin conexión es una especie en vías de extinción. Es casi imposible hoy en día concebir una máquina que no

tenga conexión 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 límites para el ocio. POR PATRICIA JUNG

E
l correr de aquí para allá con dis- izan en las empresas se hacen por vía taja de que se encuentran disponibles en
quetes era una cosa común hace electrónica. Si bien la mayor parte de las casi cualquier distribución . Y una vez
escasamente pocos años. Puede oficinas están cableadas, los LANs que se tiene la red montada y en fun-
que el lector recuerde haber utilizado inalámbricos hacen su agosto en los cionamiento, se pueden empezar a
floppys para difundir hojas de cálculo, despachos y redes domésticas. Y una vez asignar tareas a máquinas individuales
transportar el último capítulo de la tesis organizado el aspecto físico de la red, es para el beneficio de toda la red, como,
desde el centro de cálculo de la facultad hora de ponerse serios con el software. por ejemplo, estableciendo una máquina
hasta el ordenador en el departamento o Cada máquina en la red necesita una como servidor DHCP o de impresión. ■
para compartir los últimos cotilleos entre dirección única, ha de conocer en que
amigos y compañeros. En la actualidad, red reside y debe saber a que máquina se COVER STORY
los libros de cocina están siendo exilia- ha de dirigir en el caso de que necesite
dos de su recinto tradicional, siendo enviar datos más allá de los límites de la Herramientas de Red .........13
Desde el momento que conectamos una
sustituidos por portátiles; el equipo de red local, al gran mundo mundial de por
máquina a una red, no sólo se exige saber
música es un sencillo cliente que recoge ahí fuera.
como funciona aisladamente, sino como se
MP3s del servidor alojado en el trastero comunica con el mundo exterior. Las her-
y no hace falta ni mencionar Cuestión de Planteamientos ramientas estándar suministradas con Linux
que la mayor parte de las Las opciones son o meticulosamente pueden ayudarnos a ello.
comunicaciones configurar todas y cada una de las
que se real máquinas o montar un servidor especial
Servidores DHCP................16
La adición de nuevas máquinas a una red
que se encargue del trabajo sucio. El significa más trabajo de configuración. Una
esfuerzo extra inicial que supone la solución centralizada que utilice un servidor
segunda solución, suele tener su recom- DHCP que se encargue de la asignación de
pensa a medio y largo plazo, es- direcciones IP y otros valores a los clientes,
pecialmente si la red tiende a seguir cre- cura eficazmente el dolor de cabeza admin-
ciendo y se hacen necesarios cambios istrativo.
en la configuración. Añádase a la SCPM...................................21
mezcla un par de portátiles que se El cambio del entorno operacional de una
conectan aquí y allá y uno llega a sola máquina entraña mucho trabajo de
apreciar una distro moderna que configuración. SCPM le facilita la vida a los
suministra herramientas que usuarios de SuSE al mantener una base de
datos de perfiles con distintas configura-
facilitan la configuración de
ciones.
cambios de topología, como
SCPM de SuSE. Las nuevas CUPS: Impresión en Red ....23
configuraciones tienden a La compartición de una impresora entre
múltiples usuarios puede ayudar a ahorrar
tener problemas en sus
dinero y recursos. Podemos conectar impre-
infancias. En tal caso, las
soras a un servidor CUPS para dar acceso
herramientas estándar
incluso a clientes de Microsoft o Apple.
de Linux pueden ser
de una gran ayuda.
Aunque es habitual RECURSOS
sentirse incómodos
[1] Guía de Interfaz Humano de Gnome:
con las herrami-
http://developer.gnome.org/projects/
entas estándar gup/hig/
en un principio, [2]Freedesktop.org http://freedesktop.org/
tienen la ven-

12 Número 01 www.linuxmagazine.com.es
Herramientas Red PORTADA

Introducción a Herramientas de Red

Linux en Red
Las máquinas conectadas a la red ofrecen enormes beneficios, pero añaden

responsabilidades. Desde el momento en que conectamos nuestra máquina

a la red debemos no solo conocer todo acerca de nuestra máquina, si no

también sobre la forma en que ésta se comunica con el mundo exterior.

Las herramientas estándar de Linux nos pueden ayudar. POR NICO LUMMA

U
n ordenador sin conexión al Como un navegador
mundo exterior parece un paso Web no necesita saber si la
atrás. Si bien los distribuciones información se transmite
de Linux de hoy en día soportan normal- mediante componentes in-
mente la instalación de componentes de alámbricos o mediante
red, los administradores han de asumir líneas FDDI, ni las líneas
su parte de responsabilidad y, en algunos FDDI necesitan saber si los
casos, su formación puede no haber bytes que transporta corre-
cubierto técnicas de redes. En estos sponden a ficheros HTML,
casos lo lógico es obtener el mayor MP3s o vídeos, los exper- Figura 1: Los numerosos datos de obtenidos por “ip addr” incluyen
conocimiento posible sobre lo que nece- tos en redes utilizan un información crítica de la dirección IP actual e “inet” indica la más-
sita un ordenador para conectarse a una modelo basado en capas cara de red.
red. para describir las redes de
Una red puede no responder o una ordenadores. Al margen de que cada el usado, por ejemplo, por los canales de
máquina aislada (por ejemplo un servi- capa se apoya en la capa subyacente, las Real Audio.
dor Web) puede no estar accesible. Los capas son independientes entre sí. En la siguiente capa es donde las cosas
principales distribuidores de Linux La capa aplicación, como su propio empiezan a ponerse interesantes. Aquí
disponen de herramientas que controlar nombre indica, define como las aplica- es donde los paquetes de información
estas situaciones. ciones como buscadores o programas de (independientemente de su contenido)
correo hablan con servidores Web o de son puestos en un cable e intentan bus-
Fundamentos de redes correo. El medio por el cual ocurre esto car la mejor ruta a su destino. Cada
El componente básico de Internet y de depende de cada aplicación. Por ejem- bloque contiene la dirección de su remi-
numerosos sistemas de red local es el plo, el Protocolo de Trasferencia de tente y de su receptor. Cuando se sirve
TCP/IP. Es una combinación del Proto- Hipertexto, HTTP, es usado para Webs, una página, los paquetes de información
colo de Control de Transmisiones y el mientras que el Protocolo de Transferen- pueden utilizar rutas distintas. Tras acep-
Protocolo de Internet, especificando cia de Ficheros, FTP, es usado tar los paquetes, el receptor debe
como se comunican e intercambian habitualmente para la descarga de asegurarse de que los paquetes se
datos los ordenadores en una red. ficheros. pueden reorganizar en el orden correcto.
La capa de transporte está por debajo Al margen del propio Protocolo de Inter-
GLOSARIO de la capa de aplicaciones. Esta capa net, la capa de red contiene otros
DNS: los servidores DNS contienen bases de establece las conexiones entre orde- protocolos como el Protocolo de Control
datos que se pueden usar para emparejar nadores, permitiéndoles el intercambio de Mensajes de Internet, ICMP, para el
direcciones IP con nombres de Internet (y de datos. TCP proporciona un canal de control de mensajes (por ejemplo, de
viceversa). Buscan en sus bases de datos para garantía (para protocolos de aplicaciones error), el Protocolo de determinación de
responder consultas enviadas por buscadores
como HTTP, SSH, POP o SMTP), asegu- Direcciones, ARP, que confronta direc-
y aplicaciones de Internet desconocidas por
sus usuarios. Un usuario que escribe rando que los bloques de información ciones IP con direcciones de hardware
www.google.com está realmente formu- que fallen son retransmitidos. El Proto- (MAC) y, su homólogo, el Protocolo de
lando una consulta cuya respuesta es la colo Datagram (UDP) es otro protocolo Inversión de Direcciones Determinadas
dirección IP 216.239.39.99. Es con esta direc- importante a este nivel que puede trans- (RARP).
ción con el que el buscador abrirá realmente
mitir bloques de información, pero con La capa inferior del modelo OSI es la
la conexión.
perdidas de paquetes. Este protocolo es capa Física. A este nivel estamos intere-

www.linuxmagazine.com.es Número 01 13
PORTADA Herramientas Red

Figura 2:“ip route” proporciona información IP más clara. Figura 3: La máquina receptora, 192.168.1.1, respondió a los 5 pings enviados.

sados en la transmisión de bits y la antiguos puede que solo tengan los enlace por defecto 192.168.1.1. Si aquí
estandarización de de la negociación de comandos ipconfig y route, que propor- no aparece información crítica como la
protocolos con interfaces eléctricas, cionan la misma información, pero en dirección IP o la puerta de enlace puede
mecánicas y de señalización. Esto un formato distinto. Es posible que si el explicar que nuestro ordenador no se
incluye los estándares RS-232 y X.21. sistema no puede localizar estos coman- comporte en la red como debiese. Si éste
Los componentes de red son identifi- dos sea por que estén instalados en es el caso, debemos ejecutar la her-
cados mediante su dirección IP. TCP /sbin, que no es una ruta habitual de ramienta de configuración de nuestro
puede retransmitir paquetes asegurando búsqueda. Si éste es el caso, simple- distribución (por ejemplo YaST for Suse)
que el receptor dispone del conjunto mente debemos añadir la ruta completa y comprobar nuestra configuración.
completo de paquetes. El protocolo de (por ejemplo, /sbin/ip).
aplicaciones en el nivel superior La opción addr indica al comando ip Ping-Pong
depende de este servicio. Sin un que debe mostrar los detalles de nuestro ping es una herramienta de análisis de
conocimiento básico de estas capas, adaptador de red. Si queremos indicar el redes muy simple y tremendamente
muchas de las herramientas de red no número de adaptador debemos incluir la práctica. Transmite un paquete de datos
tendrían mucho sentido. línea eth0 para la primera tarjeta de red, ICMP desde nuestro ordenador a un
eth1 para la segunda y así sucesiva- objetivo, mostrando el tiempo que la
Comprobación del estado mente. Esto mostrará nuestra dirección respuesta tarda en llegar devuelta a nue-
Antes de comenzar a analizar el tráfico IP (192.168.1.245 en la Figura 1), la más- stro ordenador (suponiendo que el
de red es importante comprobar que cara de red (/24), la dirección de receptor responda). La parte final nos
nuestro ordenador esté utilizando la red difusión (192.168.1.255) y el nombre del muestra el número de paquetes ping
adecuadamente. interfaz de la red, eth0. Los datos transmitidos (cinco en la Figura 3),
Dicho de forma sencilla, cada máquina obtenidos con el comando ip route son cuantas respuestas obtuvimos (cinco de
necesita una dirección IP única para ser más sencillos de leer (ver Figura 2). La nuevo) y cuanto tardo el proceso (4002
capaz de comunicarse con otras primera línea muestra la red (la direc- milisegundos). Si algún paquete se
máquinas en la red. La dirección de la ción de la red en nuestro ejemplo es pierde es mostrado en la sección packet
puerta de enlace permite que los paque- 192.168.1.1), la máscara de la red /24, el loss. Si el receptor no se puede alcanzar
tes de datos destinados al exterior interfaz de la red y finalmente el origen no ocurre nada durante un rato, puesto
abandonen la red local. de los datos (src significa origen), o sea, que ping espera respuestas. ping nom-
El comando ip proporciona detalles de la dirección IP (192.168.1.245). La bredehost lanza un ping hacia el receptor
la configuración actual. Los sistemas segunda línea muestra la puerta de 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 Número 01 www.linuxmagazine.com.es
Herramientas Red PORTADA

Figura 7: ¿Cuantos paquetes van y vienen desde qué dirección? Figura 8:“iptraf” proporciona estadísticas de red detalladas.

lugar podemos especificar ping -c 10 Para mayor precisión… ¿Quién va?


nombredehost para transmitir solo 10 … prueba tcpdump, la herramienta de Tiene sentido la instalación de her-
pings. análisis de redes más versátil que existe. ramientas especializadas que nos eviten
La mayoría de los distribuciones nos perdernos. iptraf es un ejemplo. Nos dice
Rutas proporcionarán un paquete listo para exactamente que está ocurriendo con
Si bien ping simplemente nos informa de usar. Si no es el caso, podemos descargar nuestra tarjeta de red, que protocolos
la respuesta de nuestro objetivo, tracer- uno desde [1] (sin olvidar el archivo está utilizando actualmente y con que
oute (normalmente: /urs/sbintraceroute) libpcap requerido) y compilar la her- máquinas se está comunicando. Es-
nos indica la ruta que los paquetes de ramienta nosotros mismo. Necesita- cribiendo [q] [Intro] se cierra esta
datos han seguida hasta la máquina de mos privilegios de administrador para herramienta.
destino (ver Figura 4). Los asteriscos utilizar esta herramienta puesto que El menú principal (Figura 6) contiene
(***) indican un error en la ruta o que habilita el modo promiscuo de nuestra un monitor de tráfico IP (ver Figura 7)
un cortafuegos no ha permitido el paso a tarjeta de red permitiéndole leer que nos muestra el tráfico de entrada y
este tipo de paquetes IP. Por cierto, cualquier bloque de datos que aparezca salida, permitiendo encontrar los puntos
podemos especificar la opción -n con el en nuestra red local. Esto puede permitir donde las transiciones ocurren.
fin de no mostrar el nombre de equipo. a un usuario leer las contraseñas de otras Por otro lado, el interfaz de esta-
mtr hostdestino (normalmente: /urs/ personas. dísticas detallado (ver Figura 8) no
sbin/mtr) nos proporciona una imagen tcpdump nos va a mostrar cualquier nos muestra que máquinas están
clara (ver Figura 5) de por dónde pasan paquete de datos que nuestra tarjeta de intercambiando datos, pero analiza
nuestros paquetes mientras no presion- red vea. los flujos de tráfico por protocolos.
amos [q]. La herramienta descubre que Esto nos proporciona información
ocurre con los paquetes de datos en cada 11:56:27.833598 192.168.1.245 muy valiosa sobre el rendimiento e
cambio en la ruta. Por tanto, mtr puede .ssh > 192.168.1.20.39258: P indica cuellos de botella. Por ejemplo,
ser considerado como una combinación 1392512:1392720(208) ack 1201 si hay más salidas que entradas,
de ping y traceroute. win 9120 <nop,nop,timestamp podemos suponer que alguien está
2599771999 1711932971> (DF) descargando algo desde nuestra má-
mtr -c 10 -reportU [tos 0x10] quina.
<I>hostdestino<I> Por supuesto que podríamos decir
Podemos ver que 192.168.1.245 ha envi- mucho más acerca de iptraf y las otras
Indica a mtr que deje de transmitir tras 10 ado un paquete de datos ssh a la herramientas mencionadas en este
pings y luego informe de sus hallazgos. máquina 192.168.1.20. Escribe… artículo. Pero si deseas enriquecer tus
La columna HOST indica exactamente conocimientos en esta área no hay alter-
donde esta el paquete de datos; LOSS tcpdump -i eth0 port 80 nativa a los conocimientos básicos de
indica el porcentaje de paquetes perdi- redes. ■
dos; RCVD y SENT informan del número … y nos mostrará los datos del puerto
de paquetes que fueron recibidos y envi- 80, que es el que la mayoría de los bus-
ados; y las columnas BEST, AVG y cadores Web usan. Por otro lado, RECURSOS
WORST indican cuanto tiempo tardaron tcpdump nombrehost nos mostrará el trá-
[1] tcpdump: http://www.tcpdump.org/
los paquetes. fico de red del host destino.

www.linuxmagazine.com.es Número 01 15
PORTADA DHCP

Un servidor DHCP para una red de área local

Redes sin Estrés


Añadir máquinas a una red implica

un trabajo extra de configuración.

Una solución centralizada que use un

servidor DHCP para asignar las direc-

ciones IP y otros parámetros a las

máquinas clientes nos quitará un

motón de dolores de cabeza a la hora

de administrarlas.
POR MICHAEL RENNER

N
o importa si se está trabajando diario se encuentran con problemas de nombres, usar diferentes máscaras de
para una empresa, si se está cuando el número de máquinas conec- red o incluso asignar una dirección 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 sólo puede ser asignada a una públicas), implicará reconfigurar de
un complejo turístico o simplemente te máquina para evitar conflictos en la red. forma manual cada máquina.
estas montando una red en tu propia Incluso suponiendo que se mantenga Los usuarios de ordenadores portátiles
casa, configurar de forma individual cuidadosamente las asignaciones IP (y también tienen que saber cómo y dónde
cada máquina 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 (añadir un servidor conectarse a la red. Para ser honestos:
sistemas puede asignar direc- ¿Sabes cómo configurar los
ciones IP, máscaras de red, Listado 1: Un simple, pero completo parámetros de red en un
puerta de enlace por defecto y dhcpd.conf MacOS 7.6? y ¿quieres admitir
el nombre del servidor. Pero 01 default-lease-time 3600; que sabes como configurar la
intenta hacer esto mismo con 02 max-lease-time 14400; red en Windows 98? El Proto-
un grupo de gente con distin- 03 colo de Configuración
tos niveles de conocimiento y 04 subnet 192.168.2.0 netmask 255.255.255.0 { Dinámico de Hosts (DHCP)
empezarán a surgir los proble- 05 range 192.168.2.50 192.168.2.69; nos proporciona la respuesta.
mas. 06 option domain-name-servers 194.25.2.129; Para usar DHCP se necesita
Incluso los administradores 07 option broadcast-address 192.168.2.255; configurar una máquina como
de redes más experimentados 08 option routers 192.168.2.1; servidor DHCP. Una vez hecho
y que llevan años adminis- 09 } esto, esta máquina será la
trando redes en su trabajo responsable de establecer los

GLOSARIO
Dirección IP: Cada máquina de red se identi- ción IP oficial que asegura un acceso global, redes dentro de una red más amplia . Las
fica con una única dirección IP de 32 bits. Para hay un rango de direcciones que se han máquinas usan máscaras de bits para
que sea legible se usa la notación punto dec- reservado para su uso en redes privadas. averiguar a qué subred pertenece a partir de
imal, donde cada segmento de la dirección es Máscara de red: La máscara de red se usa la dirección IP. En el cuadro 1 se muestra un
un número entre 0 y 255. Además de la direc- para definir los límites de segmento las sub- ejemplo.

16 Número 01 www.linuxmagazine.com.es
DHCP PORTADA

parámetros de configuración de DHCP ISC, dhcpd como


de la red de las demás hace casi todo el mundo.
máquinas que tengamos Si realmente deseas compi-
conectadas dentro de nuestra lar el código tu mismo, el
red. Además de los pará- código fuente está disponible
metros tradicionales, se en [1]. La mayoría de la gente
puede hacer que el servidor se conforma con instalar el
de DHCP establezca parámet- paquete de la distribución.
ros específicos para nuestra Los usuarios de Debian
red de área local, por ejem- pueden teclear algo como lo
plo, estableciendo un ser- siguiente:
vidor de fecha/hora o in-
cluso el nombre de un apt-get install dhcp
servidor WINS.
Los usuarios de otras distribu-
Muchas máquinas… ciones encontrarán el paquete
¿Cómo aplicamos esto en un RPM apropiado en el CD o
caso real? Veamos una Figura 1: A partir de la MAC se puede trazar un mapa de direcciones MAC de DVD de su distribución. Si no
pequeña red privada. En este fabricantes de tarjeta. es así, se puede una búsqueda
caso “privada” significa que en http://rpmfind.net/ con el
la red usa un rango de direcciones IP pri- … y un solo servidor término debería devolver paquets para
vado. Para evitar confusiones, estas La máquina que asignará las IPs necesita nuestra distro o una independiente de
direcciones funcionan en nuestra red , como es lógico, un programa servidor plataforma DHCP.
local pero no en Internet. DHCP. Por desgracia, no existen demasi- Para continuar con la instalación, bus-
Las redes privadas realmente grandes adas implementaciones gratuitas de este caremso en nuestras máquinas el
(las denominadas de clase A) tienen ran- tipo de servidor, por tanto, para ilustrar archivo de configuración dhcpd.conf en
gos de IP asignados que van desde la este artículo, optaremos por el servidor el directorio /etc/. El archivo está bien
10.0.0.0 hasta la 10.255.255.255. Para
redes de tamaño medio se usan las de Tabla 1: Configuración dhcpd
clase B cuyo rango para redes privada Entrada Parámetro Significado
van desde la 172.16.0.0 hasta la default-lease-time Tiempo en segundos Especifica el periodo válido de los valores asignados. El cliente tiene
172.31.255.255. Pero si la red es algo que volver a solicitar la dirección IP dentro de este periodo. Si no lo
hace, la dirección puede ser asignada a otra máquina.
más modesta entonces podremos utilizar
max-lease-time Tiempo en segundos Especifica el máximo valor del periodo de asignación. Si el cliente
las 65023 direcciones disponibles entre
solicita un tiempo excesivo,este parámetro establece el máximo
192.168.0.0 hasta la 192.168.255.255. valor.
Para las pequeñas empresas y los subnet Dirección de red Segmento de red al que aplicar la configuración (Véase el Cuadro 1)
usuarios domésticos, las redes de clase C netmask Máscara de red Máscara para este segmento de red (Véase el Cuadro 1)
se ajustan de forma adecuada. Voy a range Máxima y mínima El rango de direcciones IP a asignar por el servidor DHCP.
usar las direcciones que tengo en mi dirección IP
casa para este ejemplo. Tengo asignada fixed-address Dirección IP o nombre de host Una dirección de red para ser asignada de forma permanente.
la dirección 192.168.2.0 a la red (esto es filename Nombre de archivo Imagen de boot para un cliente específico (Véase la sección
“Técnicas avanzadas de DHCP”).
útil si se pretende montar una red con
hardware ethernet Dirección MAC Dirección hardware del cliente.
los vecinos).

GLOSARIO
Servidor de nombres: Un servidor de nom- local. Un servidor WINS es un servidor de nombres
bres de dominio proporciona la traducción Servidor de Fecha/Hora: Proporciona la de propósito especial. Si se tiene un gran
de los nombres de hosts simbólicos (por fecha y hora correctas en una red. El tiempo número de máquinas Windows en la red, el
ejemplo linux-magazine.com) a una direc- oficial en el Reino Unido es medido desde la servidor WINS puede impedir que se produz-
ción ip (por ejemplo 62.245.157.219) y línea del meridiano de Greenwich. En can broadcasts no previstos. El proyecto
viceversa. DNS es un sistema de base de España, se pueden utilizar los servidores Samba proporciona soporte para WINS.
datos jerárquico distribuido que no requiere hora.oxixares.com y slug.ctv.es. Además de Broadcast: El broadcast se usa para alcanzar
que cada servidor de nombres conozca cada estas fuentes, hay un gran número de servi- múltiples hosts sin necesidad de saber nada
nombre de host, sino que permite a una dores de fecha/hora, más o menos precisos, de ellos. Una broadcast ahorra ancho de
máquina consultar a otras máquinas. en la Web. banda en el caso de necesitar comunicar con
Puerta de enlace por defecto: Es un router en WINS: Es el Servidor de Nombres de Internet un gran número de máquinas, pero típica-
una red local al que se le envían los paquetes de Windows, que relaciona los nombres Net- mente, este tipo de transmisión produce
cuyo destino no tiene una dirección de red BIOS de las máquinas con sus direcciones IP. sobrecarga en la red y debe ser evitado.

www.linuxmagazine.com.es Número 01 17
PORTADA DHCP

documentado, así que, siguiendo las Queremos que el servidor dhcpd asigne El resto de las entradas son usadas por
instrucciones proporcionadas por el IPs en el rango 192.168.2.50 hasta el servidor dhcpd para su propio uso
mismo programa, deberíamos ser 192.168.2.60. También vamos a hacer uso interno. Véase la Tabla 1.
capaces de modificar los valores de los de un domain-name-server para estable-
próximos ejemplos de manera que refle- cer un servidor de nombres y routers para Asignaciones permanentes
jen nuestro propio entorno. Conviene especificar la puerta de enlace. Si no se Si se desea usar DHCP en la red,
tomarse un rato para pensar en el tiene un servidor de nombres en la red, suele haber siempre unas cuantas
número de máquinas que necesitamos usaremos el proporcionado por el provee- máquinas que necesitan una IP estática.
mantener al mismo tiempo en la red. Si dor de Internet (ISP). Después de todo, no tiene sentido tener
estamos organizando una party, un cen- Fijémonos en las llaves que encierran que adivinar la dirección del router o del
tro de asistencia técnica al cliente, o la definición del segmento de red. Cada servidor multimedia para poder acceder
similar, será un número bastante grande. entrada en el archivo de configuración a él.
Para una red doméstica típica tendremos debe terminar con un punto y coma. El archivo /etc/dhcpd.conf se usa para
menos de diez máquinas. las asignaciones de las máquinas
El ejemplo en el Listado 1 es para un Libremente configurable clientes. dhcpd evalúa la dirección MAC,
red considerada pequeña, ya que supone De forma genérica, podemos decir, que que es única, para ser capaz de identi-
que no más de 20 máquinas van a estar existen dos clases de entradas en el ficar y asignar las direcciones correctas a
conectadas a la red al mismo tiempo. archivo de configuración: las que cada máquina que la solicite.
empiezan por la palabra clave option y el La dirección MAC está impresa en los
Dirección IP, máscara de resto. Las opciones (ver Tabla 2) son adaptadores de red PCMCIA y en los
red y dirección de red. pasadas a las máquinas clientes desde el conectores USB Wireless. Si no se es
aAdemás de la dirección IP, la configuración servidor DHCP. Si las máquinas clientes capaz de leer la etiqueta del NIC, se
de un dispositivo de red consta de la direc- pueden o no utilizar esta información, puede consultar la dirección MAC con
ción de broadcast y de la máscara de red. La dependerá del sistema operativo que se ifconfig para los sistemas operativos
máscara de red se usa para subdividir la red tenga instalado. Los administradores basados en UNIX o ipconfig para los de
en subredes más pequeñas. Para compren- podrían querer definir scripts donde esta Microsoft. El listado 2 muestra un ejem-
der la relación entre la dirección IP y la información sea procesada. plo de una máquina Linux cuya
máscara de red, se necesita inspeccionar los
bits a bajo nivel. Para ello, se toman cada Listado 2: Usando ifconfig para descubrir
uno de los números decimales que aparecen
entre los puntos y se escriben en su repre-
la dirección MAC
sentación binaria equivalente: 01 renner@lyra:~$ /sbin/ifconfig eth0
255=1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+ 02 eth0 Link encap:Ethernet HWaddr 00:02:2D:34:90:85
1*2^1+1*2^0 03 inet addr:10.32.130.79 Bcast:10.32.135.255
Así pues, la máscara 255.255.255.0 en for- Mask:255.255.248.0
mato punto decimal se convierte en la 04 UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500
máscara de red en binario: Metric:1
11111111.11111111.11111111.00000000 05 RX packets:15695 errors:0 dropped:0 overruns:0 frame:0
Desde luego, esto no representa mucha 06 TX packets:10988 errors:204 dropped:0 overruns:0 carrier:0
complejidad matemática, ya que se pueden 07 collisions:0 txqueuelen:100
pasar los números de una base a otra fácil- 08 RX bytes:5201433 (4.9 MiB) TX bytes:1559490 (1.4 MiB)
mente. Los 24 unos son interesantes, la red 09 Interrupt:10 Base address:0x100
es referenciada como /24 (barra 24).
Aplicando la misma técnica, podemos ver
que la dirección IP 192.168.2.3 equivale a: Tabla 2: Valores Clientes
11000000.10101000.00000010.00000011 Entrada (sin option) Parametro Significado
routers IP o nombre de host Router o puerta de enlace para acceder a Internet.
La dirección de red es el resultado de aplicar
domain-name-servers IP o nombre de host Servidor de Nombre de Dominio.
la operación AND a nivel de bits entre la
host-name Nombre de host Nombre del host cliente.
dirección IP y la máscara de red. Esta
operación deja un 1 si la IP y la máscara son 1: ntp-servers IP o nombre de host Servidor de tiempo para sincronizar el tiempo.
netbios-node-type 1,2,4,or 8 (recomendado) Resolución de nombres de Windows. 1 significa broadcast,2 unicast,
11000000.10101000.00000010.00000000
4 modo mixto (primero broadcast, luego intenta unicast) y 8 modo
La dirección de red en formato punto deci- híbrido,primero unicast antes de intentar broadcast.
mal es 192.168.2.0 netbios-name-servers Nombre de host Servidor WINS para la resolución de nombres de Internet
Como la dirección IP cero está reservada de Windows.
para la propia red y hay otra dirección reser- domain-name Nombre de dominio Nombre del dominio de la red.
vada para broadcast ( típicamente .255), la nis-domain Nombre de dominio Nombre del dominio NIS.
red del ejemplo puede albergar hasta 254 nis-servers IP o nombre de host Servidor NIS.
máquinas. subnet-mask Máscara de red Máscara de red del segmento de la red.

18 Número 01 www.linuxmagazine.com.es
DHCP PORTADA

Figura 2: Habilitando el cliente de DCHP en Mandrake. Figura 3: MacOS X soporta DHCP.

dirección MAC o de “hardware” es tratando de buscar. En algunos casos IP estática que la relacione en el archivo
00:02:2D:34:90:85. puede ser útil referirse a una base de de configuración dhcpd:
Suponiendo que el servidor DHCP ha datos especial [2] que relacione las direc-
asignado a esa máquina una dirección IP ciones MAC asignadas a cada fabricante host lyraA{
arbitraria; dhcpd mantiene un registro de de tarjetas de red (ver Figura 1), cosa hardware ethernetU
direcciones asignadas y periodos de asi- que acelera la identificación. 00:02:2D:34:90:85;
gnación en /var/lib/dhcp/dhcpd.leases. Después de descubrir la dirección fixed-address lyra.mtr.mynet;
Otra opción sería hacer un ping a hardware, se puede añadir la dirección }
todos los hosts de la red para provocar
una respuesta de los mismos. Una vez Listado 3: Usando ping y arp para descubrir
realizado, con el comando arp -a se la dirección MAC
puede averiguar los hosts y sus direc-
01 renner@lyra:~$ ping -c3 192.168.2.0
ciones MAC (Ver listado 3). Primero hay
02 PING 192.168.2.0 (192.168.2.0): 56 data bytes
que hacer ping, ya que la tabla arp está
03 64 bytes from 192.168.2.1: icmp_seq=0 ttl=64 time=0.2 ms
formada por todas las direcciones MAC
04 64 bytes from 192.168.2.52: icmp_seq=0 ttl=64 time=3.5 ms (DUP!)
de todos los hosts conocidos dentro de la
05 64 bytes from 192.168.2.53: icmp_seq=0 ttl=64 time=4.2 ms (DUP!)
red, incluyendo sólo las direcciones de
06 64 bytes from 192.168.2.62: icmp_seq=0 ttl=64 time=4.7 ms (DUP!)
aquellas máquinas que se han comuni-
07 [...]
cado recientemente con su ordenador.
08 renner@lyra:~$ /usr/sbin/arp -a
09 ? (192.168.2.1) at 00:03:E3:00:18:F1 [ether] on eth0
Pero, ¿Qué dirección MAC
10 ? (192.168.2.52) at 00:30:05:55:02:ED [ether] on eth0
elegimos? 11 ? (192.168.2.53) at 00:0C:6E:1F:32:C4 [ether] on eth0
Sin embargo, aún se necesita averiguar
12 ? (192.168.2.62) at 00:30:05:55:03:7F [ether] on eth0
que dirección MAC es la que estamos

GLOSARIO
Unicast: Cada cliente recibe una copia de un pleta las entradas en los ficheros de configu- bytes. La dirección MAC está grabada dentro
fichero de un servidor. Las conexiones punto ración en las máquinas clientes, por ejemplo, de cada dispositivo Ethernet y permite que el
a punto de este tipo son fáciles de configurar, /etc/passwd, /etc/groups o /etc/hosts. Un dispositivo pueda ser identificado de forma
pero producen una gran carga en el servidor archivo llamado /etc/nsswitch.conf especifica unívoca.
si hay un gran número de clientes en la red. si el servidor NIS debe suministrar informa- Imagen Boot: Es un kernel de Linux o Unix
NIS: Es el Servicio de Información de la Red, ción para los archivos de configuración y, si es que puede ser descargado de la red y ejecu-
que proporciona la distribución de las config- así, que clase de información. Un servidor tado. Se usa en sitios donde las máquinas no
uraciones en la misma. Un servidor NIS DHCP proporciona detalles del servidor NIS tienen discos y que montan el directorio raíz
central suministra información sobre los de la red local. del sistema (/) a través de la red. Las imá-
nombres de usuarios, las contraseñas, los Dirección MAC: O Control de Acceso al genes de boot en la red permiten instalar
directorios home, las asignaciones a grupos y Medio, o de manera más simple, la dirección grandes números de ordenadores sin la
los nombres de hosts. El servidor NIS com- Ethernet, es un número hexadecimal de seis necesidad de usar CDs, floppies,…

www.linuxmagazine.com.es Número 01 19
PORTADA DHCP

Listado 4: Asignación de una imagen tftp dgram udpU Conclusión


wait nobody No hay una gran selección de programas
de Boot /usr/sbin/tcpdU clientes de DHCP en Linux. Uno de ellos
01 host indy {
/usr/sbin/ es pump, que es muy popular dentro de
02 filename "indy_r4k_tftpboot.img";
in.tftpd /boot las mini-distribuciones debido al poco
03 hardware ethernet 08:00:69:08:58:40;
tamaño que ocupa. Las alternativas, que
04 fixed-address 192.168.2.12;
Las distribuciones que ocupan más espacio, son dhcp-client y
05 server-name "cassiopeia.mtr.mynet";
usan el sistema mod- dhcpcd. Sin embargo, apesar de „pesar“
06 option host-name "indy";
erno xinetd, en vez del más, tienen más funcionalidades, como
07 option domain-name "mtr.mynet";
superservidor inetd, la habilidad de ejecutar scripts después
08 option domain-name-servers 192.168.2.53;
deberían tener en /etc/ de completar la configuración.
09 option routers 192.168.2.1;
xinetd.d/tftp un archi- Existe un problema de compatibilidad
10 }
vo como el mostrado entre los paquetes antiguos de dhcp y el
en el Listado 5. kernel 2.6. Esta combinación funcionará,
Si la máquina tiene múltiples NICs (p.e.: Un único servidor DHCP puede man- pero el script /sbin/dhclient comprobará
una máquina con una tarjeta LAN Wire- tener múltiples segmentos de redes al la versión del kernel para dhcp-client. Sin
less adicional), se le puede asignar el mismo tiempo. Para permitir esto, hay embargo, como no reconoce el kernel
mismo nombre de host a ambas direc- que crear múltiples subredes en la con- 2.6, en este punto se parará. Como
ciones MAC: figuración. Las opciones encerradas DHCP sólo necesita distinguir entre el
entre llaves, tales como los detalles del kernel 2.0 o posterior, se puede fácil-
host lyraB{ nombre del servidor o el dominio NIS, mente modificar el script para que
hardware ethernetU deben ser únicos. En la práctica, cada reconozca la versión 2.6 como un kernel
00:80:C7:C1:3D:76; segmento de la red está típicamente aso- válido:
fixed-address lyra.mtr.mynet; ciado a uno de las NIC del servidor
} DHCP 2.[123456].*)
Para que se reconozcan los cam- exec /sbin/dhclient-2.2.xU
En algunos casos, incluso se puede inter- bios, dhcpd debe ser reiniciado. -q "$@"
cambiar las NIC mientras la máquina Como los cambios de este tipo sólo ;;
está funcionando sin interrumpir una ocurren ocasionalmente, los admin-
conexión existente. En vez de un nombre istradores se pueden tumbar y relajar La solución es bien sencilla. Editamos el
de host, que requiere para funcionar la cuando se conecte una nueva máquina a script y tan sólo se necesita añadir un 6
capacidad de resolver nombres, se puede la red. en el lugar adecuado y enseguida
asignar una dirección IP. debería estar todo arreglado y funcio-
El Cliente nando sin ningún problema. ■
Técnicas avanzadas de DHCP Las máquinas recién llegadas no nece-
¡DHCP es capaz de mucho más! DHCP sitan mucha configuración. En vez Listado 5: El archivo
puede comunicarle a un cliente sin disco de ponerles una IP estática, se le habi- /etc/xinetd.d/tftp
duro que se baje el sistema operativo de lita DHCP. Dependiendo del sistema
01 # default: off
la red a partir de una imagen boot. Esto operativo (y posiblemente también de
02
se logra usando TFTP (Protocolo de la distribución), esta tarea se puede
03 service tftp
Transferencia de Ficheros Trivial), un hacer de varias maneras. Si tenemos
04 {
subconjunto de FTP, para transferir la Debian, se añade una línea como la si-
05 disable = no
información por la red. El listado 4 guiente:
06 socket_type = dgram
muestra un ejemplo donde a una
07 protocol = udp
estación de trabajo Indy SGI se le asigna iface eth0 inet dhcp
08 wait = yes
su kernel Linux vía DHCP. Este proced-
09 user = root
imiento de boot no sólo se usa en al fichero /etc/network/interfaces. Otras
10 server =
grandes clusters, para la resolución de distribuciones tienen herramientas de
/usr/sbin/in.tftpd
cálculos matemáticos complejos, por configuración en formato gráfico. Man-
11 server_args = -s /boot
ejemplo, sino también en universidades drake usa el asistente que se muestra en
12 }
e institutos. la figura 2.
Esto sólo funciona si el servidor tftpd Los usuarios de Windows tienen que
está activado en /etc/inetd.conf. Para acceder al icono Red del Panel de INFO
permitir al servidor encontrar la imagen Control. Los que usen el clásico MacOS
[1] Servidor DHCP: http://www.isc.org/
de boot adecuada (indy_r4k_tftpboot. necesitan acceder al Panel de Control / index.pl?/sw/dhcp/
img, en nuestro ejemplo), se necesita TCP/IP en el menú Apple. MacOS X (ver
[2] Base de datos MAC: http://www.coffer.
pasar el directorio con los archivos (tal Figura 3) activa DHCP en Preferencias com/mac_find/
como /boot) al servidor: del Sistema / Internet y Redes.

20 Número 01 www.linuxmagazine.com.es
Especial Redes PORTADA

Modificación de la configuración del sistema con SCPM

Cambio de entorno
La modificación de la configuración

del sistema operativo de una sola

máquina implica bastante trabajo.

SCPM hace esto más fácil a los usuar-

ios de Suse manteniendo perfiles con

distintas configuraciones.

POR FALKO ZURREL

L
inux está invadiendo el mundo de requeridos para adaptarlos a diferentes serán aplicados por el perfil. Por ejem-
los portátiles. Los equipos portátiles entornos con un solo comando. Como plo, SCPM sólo guardará la
son especialmente propensos a los alternativa, sólo se tiene que seleccionar configuración de la impresora si
cambios de entorno. Normalmente se un perfil al arrancar. pertenece al grupo impresora. Si no se
conecta el portátil con un cable a la red o El módulo gestor de perfiles YaST (con marca este recurso, la impresora no se
se usa una WLAN de vez en cuando. interfaz gráfica), que está localizado en verá afectada por un cambio en el perfil,
Otras veces el portátil no se conecta a el grupo System, ayuda a configurar sino simplemente mantendrá la configu-
nada. Aunque en la oficina se conecte el SCPM (ver Figura 1), pero también se ración actual.
portátil a una pantalla externa, en casa puede usar el gestor de perfiles yast2 Cuando se instala SCPM se crean unos
probablemente se use la propia pantalla para lanzar la herramienta directamente. cuantos grupos de recursos predefinidos.
del portátil. Suse Linux viene con SCPM, Los perfiles existentes se muestran en Estos grupos cubren la mayoría de las
el gestor de perfiles del sistema, para la ventana principal del gestor de per- configuraciones e incluyen configura-
ayudar al equipo a adaptarse a estos files. Se puede añadir un nuevo perfil o ciones básicas de red (network), el
cambios. modificar la configuración de uno exis- servicio NTP para la sincronización de
tente. El botón de Options permite fecha y hora a través de Internet (ntpd),
Ajuste de los Perfiles cambiar o crear grupos (ver Figura 2). el cortafuegos (SuSEFirewall2), el monta-
SCPM guarda una colección completa de La configuración actual se usa como dor automático autofs, que montará los
configuraciones (conocidos como per- una plantilla cuando se crea un nuevo discos de forma automática. Si esta
files) del sistema para distintos entornos, perfil. SCPM crea un directorio con el selección no es del gusto del usuario, se
permitiendo restaurarlas cuando sean nuevo perfil en /var/lib/scpm/profiles/ y pueden definir nuevos grupos.
necesarios. Los perfiles no sólo almace- copia los ficheros de configuración para Desafortunadamente, la pantalla de
nan los ficheros de configuración, los grupos indicados en este directorio. información en la ventana principal del
también almacenan información adi- módulo YaST no es de fiar. Insiste en que
cional, tales como si los servicios Grupos el gestor de perfiles está deshabilitado,
específicos están activos o no. Esto hace Los administradores pueden usar los independientemente de su estado actual.
posible realizar todos los cambios grupos para especificar servicios que Si se activa el perfil no debe causar

Tabla 1: Comandos SCPM Listado 1 Acceso a la base de datos SCPM y


Activar SCPM scpm enable creación de un recurso nuevo
Crear un nuevo perfil scpm add nombre_perfil
01 #scpm db
Cambiar a otro perfil scpm switch nombre_perfil
02 SCDB Utility (SCPM version 0.9.4)
Guardar los cambios en el perfil activo scpm save
03 > load
Copiar un perfil scpm copy perfil_fuente perfil_destino
04 > create resource /opt/tomcat/conf/server.xml file
Mostrar el perfil activo scpm active
Mostrar los perfiles disponibles scpm list
05 > save
Recargar la configuración del perfil actual scpm reload 06 > quit

www.linuxmagazine.com.es Número 01 21
PORTADA Especial Redes

Figura 1: YaST2 ayuda a configurar SCPM. Figura 2: Módulo SCPM de YaST2 - configuración.

ningún daño ya que SCPM no sobre- gar el perfil que se quiera la próxima vez datos (ver Listado 1). El comando load
scribe ninguna base de datos existente ni que se arranque. es muy importante aquí, ya que carga la
ningún perfil. A no ser que se le indique base de datos actual para editarla. Si se
explícitamente con una sobrescritura en Configuración desde la línea produce un fallo en la carga de la base de
la línea de comandos. de comandos datos actual y se guarda la configuración
No hay más o menos límite para Aunque YaST2 hace el trabajo de config- actual, la base de datos en uso será
expandir las capacidades del gestor de urar SCPM, arrancar continuamente sobrescrita con un fichero que contiene
perfiles, se le puede indicar al SCPM que YaST para cambiar el perfil es un sólo estos cambios.
lance scripts con un pre-arranque y un engorro. La línea de comandos propor- Aunque se sobrescriba la base de
post-arranque o una pre-parada y post- ciona otra alternativa. Se debe estar datos por error, SCPM guarda las tres
parada cuando se cargue o descargue un seguro de tener privilegios de root - ya últimas versiones de la base de datos en
perfil (ver Figura 3). que, se va a modificar la configuración el directorio /var/lib/scpm/scdb. La base
Cuando se selecciona un perfil difer- del sistema - y usar unos cuantos coman- de datos actual se denomina scbd.db, las
ente, SCPM primero ejecuta los dos dos para acelerar esta tarea. La Tabla 1 copias de seguridad tienen unos cuantos
scripts de parada y avisa en caso de cam- proporciona una lista de los comandos caracteres aleatorios añadidos al nom-
bios no salvados. Acto seguido lanza los más comunes. Por ejemplo, scpm switch bre.
scripts de pre-arranque, recuperando los ISDN activa el perfil llamado ISDN. Para realizar una copia de seguridad
ficheros de configuración del nuevo per- Los cambios sólo pueden aplicarse al del perfil creado sólo se necesita el
fil y los aplica al sistema. SCPM perfil actual, no importa si se usa YaST2 fichero de la base de datos, scdb.db. Para
comprueba si el servicio se está ejecu- o la línea de comandos, el efecto es el almacenar todos los ficheros de configu-
tando y se asegura de que se haya mismo. Para hacerlo así, primero se cam- ración a la vez, se necesita copiar el
aplicado el estado indicado. El último bia la configuración tal y como se hace directorio /var/lib/scpm/profiles/ en un
paso del proceso es llamar al script post- habitualmente. Cuando se tenga todo lugar seguro. ■
parada. funcionando al gusto
Si se especifica un perfil cuando se de uno, simplemente
arranque la máquina, se puede poner el se llama a scpm save
parámetro PROFILE= profile_name en el para salvar los cambios.
menú de inicio que llama Suse para lan- SCPM mostrará los
zarlo con la configuración requerida. El cambios uno a uno y
script /etc/init.d/boot.scpm se asegura de preguntará para confir-
que esto funcione. mar antes de salvarlos
Si se cambia regularmente el perfil al en el perfil.
arrancar, se añadirán unas cuantas Si se necesita cambiar
entradas con parámetros del kernel pre- los ficheros de configu-
configurados a la configuración del ración que SCPM ignora
cargador (YaST2: System / Bootloader debido a la configu-
Configuration). Para hacer esto, se añade ración, se puede real-
una nueva sección con la configuración izar cambios manual-
por defecto del kernel y simplemente se mente en modo in-
cambia el parámetro PROFILE para car- teractivo con la base de Figura 3: Opciones de configuración para los perfiles.

22 Número 01 www.linuxmagazine.com.es
CUPS PORTADA

Configuración de un servidor de impresión CUPS

EL ABC de la Impresión
Compartir una impresora entre

usuarios múltiples puede ahorrarnos

dinero y recursos. Conectemos nues-

tras impresoras a un servidor de

sistemas CUPS para dar acceso a

usuarios de Apple e incluso de

Microsoft.

BY TIM SCHÜRMANN

L
os ordenadores desfasados que han Primeros pasos documentación de CUPS nos propor-
sido reemplazados por nuevos Dos pasos son necesarios para ejecutar ciona más información al respecto. Ver
equipos son ideales como servi- CUPS en un red. Primero necesitamos [2].
dores de impresión en red. No sólo se configurar los ordenadores a los que las No es necesario modificar nuestras
recicla así equipos considerados obsole- impresoras están conectadas. Estas aplicaciones para usar CUPS. Nuestros
tos, sino que un servidor de impresión máquinas pueden ser equipos de programas interactuaran con CUPS de
no solo permite a múltiples usuarios sobremesa normales o servidores dedica- forma natural (es el caso de aplicaciones
compartir una impresora, si no que dos que no necesitan GUI. Las distros KDE) o usaran lo que se ha dado en lla-
además un ordenador dedicado a la actuales instalarán CUPS habitualmente mar comandos de impresión del sistema
impresión descarga parte del trabajo de como parte de la configuración original o V o Berkley. Estas son las herramientas
nuestro equipo, permitiéndole procesar proporcionarán herramientas de configu- de la línea de comandos lp y lpr. CUPS
sus propias tareas a la velocidad máxi- ración que podemos utilizar tras termi- proporciona versiones compatibles de
ma. En algunas redes domésticas, distin- nar la configuración general. Este último estos programas. Estos comandos sim-
tos usuarios enviaran trabajos a impreso- tipo normalmente configura CUPS para ples son útiles si necesitamos enviar un
ras diferentes. Mientras el padre puede que se ejecute al iniciar el sistema. Si archivo a un servidor remoto usando
mandar una carta a la impresora láser los nuestro sistema no dispone de CUPS o sólo la línea de comandos. El manual de
niños pueden estar mandando las fotos queremos actualizar la versión podemos usuario del software CUPS [2] propor-
de su última fiesta de cumpleaños o descargarnos el código fuente desde la ciona detalles al respecto de estos
imásgenes descargadas de Internet a la web de CUPS [1]. comandos.
impresora de inyección. Esto no es muy Antes de CUPS, las distribuciones
diferente del escenario que vemos en solían trabajar con sistemas menos Configuración basada en
algunas empresas donde los Sistemas potentes como BSD o LPRng. Ambos son Navegadores.
Comunes Unix de Impresión (Common difíciles de integrar en un entorno de Al contrario que los antiguos sistemas
Unix Printing System ó CUPS) permiten red. Si tenemos una distribución antigua LPRng, CUPS está perfectamente adapta-
el acceso a cualquier impresora de la red deberíamos considerar reemplazar el sis- do a las redes al estar basado en el Proto-
a clientes de Linux, Microsoft y Apple. tema de impresión antiguo por CUPS. La colo de Impresión de Internet (Internet

www.linuxmagazine.com.es Número 01 23
PORTADA CUPS

Figura 1: La anotación “Allow” permite al ordenador con la dirección IP Figura 2: La página de bienvenida del interfaz web del demonio CUPS.
192.168.0.16 acceder la web remotamente. Suponemos que la configuración de privilegios de accesos correcta.

Printing Protocol, IPP [3]). IPP es una con el nombre del anfitrión de nuestro From 192.168.0.16 permitimos al orde-
extensión del Protocolo de Transporte de ordenador CUPS. localhost se reserva nador con dirección ip 192.168.0.16
Hiper - Texto (Hyptertext Transport Pro- para la máquina local. CUPS no permite acceder al interfaz. Por motivos de
tocol, HTTP), usado para transferir pági- el acceso externo a la configuración por seguridad no se recomienda permitir el
nas Web a través de Internet. Un orde- defecto, por lo que debemos lanzar el acceso con contraseñas en blanco. La
nador, conocido como cliente en el navegador localmente en el sistema que FAQ de CUPS [4] proporciona una visión
lenguaje CUPS, envía datos de impresión estemos configurando. Si deseamos per- general sobre los privilegios de acceso.
al servidor CUPS. El demonio cupsd, que mitir el acceso externo debemos editar el El interfaz Web permite a los usuarios
se está ejecutando en segundo plano, archivo de configuración /etc/cups/ configurar y gestionar CUPS (ver Figura
acepta los datos y realiza algunos proce- cupsd.conf. Buscaremos secciones que 2). También podemos ver los trabajos de
sos adicionales antes de enviar los datos empiecen por <Location /...> y finali- la cola de impresión y administrarlos,
a la salida de la impresora. En otras pal- cen por</Location> (ver figura 1). cancelándolos, parándolos y rearrancán-
abras, cupsd es el núcleo del sistema Las etiquetas de localización con- dolos, si tenemos los permisos necesa-
CUPS. tienen detalles respecto a como CUPS rios. El comando lpstat nos proporciona
Podemos acceder al demonio a través debe controlar el acceso a varias sec- algunas funcionalidades. Si nuestra dis-
de nuestro navegador web escribiendo ciones. <Location /> se refiere al menú tribución tiene un programa de configu-
http:// localhost:631. Simplemente debe- principal y <Location /admin> al obje- ración para establecer impresoras es
mos reemplazar localhost en esta URL to Administration. Añadiendo Allow preferible usar este programa. Por ejem-

LAS CARTA BOCA ARRIBA


Imprimir parece una tarea simple cuando segundo plano esperando nuevos trabajos. PostScript pueden interpretar estos datos
pensamos en ello. Un usuario selecciona Print Otro problema es el inmenso número de mod- directamente y no necesitan un filtro
en el menú y el programa envía los datos a la elos de impresoras. Cada impresora usa específico.
impresora, la cual crea una pila de papel con secuencias de control diferentes, es decir, Los programadores de Código Abierto
los resultados. Sin embargo, imprimir no es hablan distintos lenguajes. Una aplicación (Open Surce) inventaron GhosScript, un
tan trivial como suena. que desee imprimir un documento debe programa que permite a las aplicaciones
El primer problema es el hecho de que el orde- formatearlo de modo que la impresora lo reproducir el formato PostScript en impre-
nador se puede bloquear mientras el trabajo entienda. Desafortunadamente, para soras no compatibles con él. GhostScript
de impresión se esta procesando. La mayoría hacer esto el programa debería hablar el usa un controlador de impresión para
de las impresoras no tienen suficiente memo- mismo lenguaje que todas las impresoras convertir documentos PostScript al lenguaje
ria para cargar un documento completo. Para existentes. Como esto no es realista, los filtros objetivo para la impresora. Cuando se
evitar este problema, el sistema de impresión sirven de traductores entre el spooler y las enfrenta con una impresora que no es capaz
usa un programa diferente, llamado “spooler”, impresoras. Estas herramientas traducen los de interpretar PostScript, el spooler CUPS
que proporciona espacio de una forma lla- datos de entrada al lenguaje de la impresora simplemente llama a GhostScript, que con-
mada cola de impresión. El spooler monitoriza antes de que el trabajo sea impreso. En otras vierte los datos según necesidad.
la impresora y pasa al siguiente trabajo en el palabras, las aplicaciones producen datos en Back-ends son el ultimo eslabón de la
momento en que la impresora está lista. En formato estándar y envían el resultado al cadena. Un back-end representa un puerto
un sistema CUPS, cupsd, el demonio CUPS spooler. Lunix usa el formato PostScript. como un puerto USB o paralelo. La definición
(también conocido como planificador) se Adobe [6] desarrolló PostScript como un de back-end nos permite añadir nuevos
ocupa de esto. El demonio normalmente se lenguaje especial de programación para tipos de interfaces que actualmente no
ejecuta al iniciar la máquina y permanece en gráficos. Las impresoras compatibles con existen.

24 Número 01 www.linuxmagazine.com.es
CUPS PORTADA

Figura 3: La entrada de la configuración CUPS del centro de control KDE. Pul-


saremos el espacio libre para mostrar más opciones útiles como funciones Figura 4: El acceso “Printers” lista las colas de impresión que CUPS reconoce
para reiniciar el demonio. incluyendo sus URIs (dispositivos URI).

plo, Suse Linux tiene la herramienta faz. Al interfaz al que los documentos de seleccionar el interfaz al que nuestra
YaST. Existe una alternativa basada en la una cola de impresión serán enviados se impresora está conectada, el modelo de
línea de comandos, lpadmin, que tiene define por el Identificador de Recursos la impresora y, finalmente, el filtro
pocas opciones adicionales a las men- Uniformes (Uniform Resource Identifier, GhostScript apropiado.
cionadas hasta ahora [2]. Si no nos gusta URI). La notación tiene un aspecto simi- Los siguientes pasos suponen que
ninguna de estas opciones podemos lar al nombre de una página Web: paral- CUPS ha sido configurado correctamente
optar por uno de los muchos programas lel:/dev/lp0 por ejemplo para el primero en cualquier ordenador (servidor) al que
de configuración de terceros. Las ver- puerto paralelo, o usb:/dev/usb/lp0 para ha sido conectado la impresora.
siones más nuevas de KDE tienen com- el primer puerto USB. El comando lpinfo Podemos imprimir una página de prue-
ponentes para estar tareas. Los encon- -v nos proporciona una lista de los inter- bas en la ventana del visualizador pul-
traremos en el centro de control bajo faces disponibles. Volveremos al asunto sando Printers|Print Test Page.
Hardware|Printers (ver figura 3). de los URI más tarde.
Usaremos el interfaz Web en los sigu- Para crear una nueva cola de impre- Configuración del cliente
ientes ejemplos. El acceso Printers en el sión seleccionaremos Administration en El segundo paso es configurar los
interfaz nos da acceso a la lista de la cola nuestro visor web y pulsaremos Add equipos que compartirán nuestra impre-
de impresión (figura 4). Printer. Entonces introduciremos su sora (los clientes). Hay numerosas for-
Cada cola tiene un nombre y especifi- nombre en el apartado name. El número mas de hacerlo, si bien hay un factor
caciones individuales. Podemos asignar máximo de caracteres es de 127. La sigu- común, el demonio CUPS cupsd, que
múltiples colas a una impresora o inter- iente pantalla nos indica que debemos necesita estar ejecutándose como una

Figura 5a: Configuración de impresoras remotas en Suse Linux 8.2. Primero le Figura 5b: … a continuación introducimos el nombre del anfitrión y el
decimos a YaST que queremos acceder a una impresora remota que usa IPP… recordatorio del URI para completar la configuración.

www.linuxmagazine.com.es Número 01 25
PORTADA CUPS

para evitar ejecutar el CUPS. Cada ajuste ocupa una línea 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
configuración /etc/ contienen explicaciones cortas y ejemp-
cups/client.conf. Bus- los.
camos la línea que Si estamos configurando la retrans-
comienza con Server- misión necesitamos las líneas que
Name. Puede que teng- empiezan por Browse. El valor de Brow-
amos que quitar la seInterval define el intervalo en segun-
almohadilla (#). Escribi- dos en el que el servidor retransmitirá
mos un espacio y sus datos de configuración. Por ejemplo,
después el nombre o, BrowseAddress 192.168.0.255 envía los
Figura 6: Tras habilitar el transporte, solo el equipo con IP 192.168.0.20 mejor, la dirección IP datos a cualquier equipo en la subred
necesitará un demonio de impresión. Todos los trabajos de impresión del servidor que proce- 192.168.0.
serán enviados a esta máquina. sará los trabajos de Polling es una alternativa útil a exami-
impresión después de la nar. En este caso el cliente recupera su
tarea en segundo plano. Algunas palabra ServerName (ver figura 6). configuración desde el servidor. Desde el
distribuciones sólo ejecutan el demonio La tercera forma es probablemente la lado del cliente el archivo cupsd.conf fija
automáticamente al iniciar el sistema más conveniente. Cada demonio CUPS el valor de la palabra clave BrowsePoll
si una impresora ha sido configurada retransmite a través de la red su configu- del nombre o dirección IP del servidor.
en la máquina. YaST en Suse Linux 9 ración. Los clientes que reciben la señal Disponemos de múltiples entradas de
tiene una opción para configurar el ser- pueden usar inmediatamente sus colas. BrowsePoll que permiten al cliente bus-
vidor más tarde. Para hacerlo, selec- La ventaja de este procedimiento es una car múltiples servidores. Si activamos
cionamos Change|Advanced y luego configuración extremadamente sencilla. BrowseRelay, se indica al ordenador que
CUPS Server. Si tenemos una distro Simplemente configuramos una nueva transmita cualquier información que
cuya programa de configuración no impresora en la máquina a la que esta aprenda mediante polling a todos los
nos permite esto debemos escribir conectada para permitir que cualquier equipos de la subred.
un archivo de comandos de inicio máquina en la red pueda acceder a ella.
de CUPS y añadirlo los niveles de ejecu- Por supuesto la retransmisión no es el CUPS Reloaded
ción 3 y 5 en nuestro directorio método más seguro. Cualquier orde- Necesitamos reiniciar el demonio CUPS
/etc/init.d/. nador que reciba la señal puede acceder tras cambiar el archivo cupsd.conf. El
a la impresora. En el peor de los casos comando para hacer esto depende de
Introducción de la Impresora esto puede permitir a todo Internet nuestro distribución. Los usuarios de
Necesitamos introducir los detalles de la imprimir en nuestra impresora. la nave- Suse Linux pueden usar /etc/init.d/cups
impresora en el cliente para permitirle gación está activado en los paquetes de restart. Si usamos la herramienta YaST
encontrar esa impresora en la red. Para CUPS antiguos, pero las nuevas ver- para cambiar la configuración también
hacer esto debemos lanzar el interfaz siones no transmiten por defecto. se encarga de reiniciar el demonio. El
Web como hemos descrito con anteriori- La herramienta de configuración nos dialogo KDE Print dispondrá de una lista
dad. Seleccionamos el Internet Printing permite definir las
Protocol (IPP) como el dispositivo opciones de la retrans-
(Device). Después introducimos la URI misión. De nuevo esto
de la impresora remota, por ejemplo significa usar YaST en
ipp://myserver/printers/myprinter. Re- Suse Linux. El objeto
emplazaremos myserver con el nombre o del menú que necesita-
la dirección IP de nuestro servidor de mos está localizado en
impresión y myprinter con el nombre de Change/Advanced/
nuestra cola de impresión. El programa CUPS Server Settings
de configuración proporcionado con la (ver figura 7). Para con-
mayoría de distribuciones tiene opciones figurar un servidor para
similares (las figuras 5a y 5b muestran retransmitir manual-
Suse Linux). Repetimos este proceso mente debemos modi-
para cada cola de impresión externa. Es ficar el archivo de con-
evidente que este procedimiento es far- figuración /etc/cups/
ragoso si tenemos un gran número de cupsd.conf. Las líneas
impresoras. Parece lógico configurar que empiezan con el Figura 7: Habilitación de examinar en Suse’s YaSt. En nuestro ejemplo,
CUPS de forma que use un servidor signo numérico (#) los detalles de la impresora conectada son retransmitidos a la subred
remoto de impresión para cada trabajo serán ignoradas por 192.168.0.

26 Número 01 www.linuxmagazine.com.es
CUPS PORTADA

de impresoras desde este momento (ver En el caso de preferir el controlador de problema a impresoras compartidas por
figura 8). impresión original se hace necesario equipos que corren Windows de
Si examinar parece no funcionar debe- configurar una nueva cola de impresión Microsoft. Nuestra distribución debe
mos comprobar la configuración del en nuestro servidor CUPS. Selec- configurar el back-end correctamente. Si
host. Puede que necesitemos añadir cionamos el dispositivo raw como el no es así, haremos “su” para acceder a
/etc/hosts para que la retransmisión fun- modelo de impresión. Esto indica a root e introduciremos el siguiente
cione. CUPS que debe enviar los datos comando ln -s 'which smbspool' /usr/
entrantes directamente al puerto de sali- lib/cups/backend/smb. Esto nos permite
Integración de sistemas da. Debemos saber que los ordenadores configurar la impresora como cualquier
Apple y Microsoft sin los controladores originales no serán otra en el servidor CUPS. En lugar de
Podemos integrar cualquier sistema capaces de generar resultados útiles en una dirección del tipo ipp://... usaremos
operativo que soporte IPP. Esto incluye nuestra impresora. una entrada como smb://workgroup/
la versión 10.2 o superior de MacOS X.c Los servidores Samba 2.2 o superior server/sharename. Si la impresora está
Si tenemos MasIS el prcedimiento que automáticamente exportan el contro- conectada a un equipo con NT o Win-
debemos seguir es comprobar Printer lador apropiado cuando un cliente Win- dows 9x con contraseñas necesitaremos
Sharing de la configuración del sistema dows intenta imprimir. De la forma que suministrarlas: smb://user:password@
en Services. Esto nos mostrará las im- se usa en los siguientes ejemplos, cup- workgroup/server/sharename.
presoras como Shared printers en el saddsmb solo puede soportar contro-
diálogo de impresión. Versiones de Opciones para Expertos
MacOS más antiguas necesitan el pa- Este articulo solo trata de cómo configu-
quete netatalk. Es un requisito in- rar CUPS en una red. El siguiente paso
despensable el añadir una entrada será su configuración para funciones de
para cada nueva impresora en el archi- acceso y seguridad. Por ejemplo CUPS
vo de configuración papd.conf. En nos permite asignar cuotas y contraseñas
[5] disponemos de más detalles. Lo de impresión. Esto puede que no sea útil
más importante es asegurarnos de en la red de nuestra casa a no ser que
que tenemos el archivo PPD correcto tengamos una cara impresora láser a
desde /etc/cups/ppd para cada impre- Figura 8: Tras completar la configuración, el dial- color. Los administradores deben revisar
sora: ogo de impresión de KDE debe tener un a lista de con detenimiento la documentación.
las impresoras remotas y sus detalles. La opción del menú Classes también
Description:MyPrinter@MyServer:\ nos proporciona opciones útiles. Un
:pr=|/usr/bin/lp -d MyPrinter:\ ladores Adobe [6] PostScript o contro- “class” es un grupo o categoría de impre-
:op=deamon:\ ladores desde su propia pagina de inicio. soras. Cuando un trabajo de impresión
:pd=/etc/cups/ppd/MyPrinter.ppd: Los controladores Adobe están dis- es enviado, CUPS imprime el trabajo en
ponibles solo como archivos EXE. la primera impresora libre del grupo. De
Windows 2000/XP también dispone de Primero necesitaremos ejecutar progra- nuevo, un interfaz Web proporciona un
soporte IPP. Cualquier otra versión nece- mas como Winzip para extraerlos a una simple método de configurar grupos
sita la versión 2.0.6 o superior de Samba. máquina Windows. Debemos guardar usando Classes.
Debemos añadir las siguientes 2 líneas a los controladores en el directorio /usr/ La documentación proporcionada por
la sección [Global] del archivo de config- share/cups/drivers. Los nombre de los nuestro distribuidor puede que contenga
uración smb.conf: printing = cups y archivos deben ser escritos en mayús- información útil en la búsqueda de prob-
printcap name = cups. Las distribu- culas. lemas. Si no es el caso encontraremos
ciones actuales deben tener esta configu- Ahora debemos modificar la configu- información detallada respecto a CUPS
ración por defecto. Los clientes de Win- ración Samba para permitir al servidor en [2]. Los archivos de protocolo dentro
dows necesitan un controlador de impre- de archivos exportar controladores de de /var/log/cups también pueden con-
sora capaz de generar Post-Script como impresión. La documentación de Samba tener indicaciones útiles. ■
el Apple LaserWriter. proporciona información al respecto.
cupsaddsmb -U root -a exportará nues- RECURSOS
GLOSARIO tras impresoras. Estos llevará nuestros
[1] Proyecto CUPS: http://www.cups.org
IPP El Protocolo de Impresión de Internet fue controladores al servidor Samba. Debe-
[2] Documentación CUPS: http://local-
creado por el Grupo de Trabajo de Impresión. mos saber que cupsaddsmb utiliza la
host:631
Si bien esta basado en HTTP 1.1, utiliza el cuenta de root para copiar los archivos
puerto 631 en lugar del 80. De hecho, los 2 con el programa smbclient. Debemos [3] IPP: http://www.pwg.org/ipp/
protocolos están tan relacionados que las asegurarnos, por tanto, de que Samba [4] CUPS FAQ: http://www.danka.de/print-
implementaciones IPP pueden ser accedidas permite el acceso a esta cuenta. pro/faq.html
de forma nativta a través de HTTP. La URI de Samba dispone de un nuevo back-end [5] Netatalk: http://netatalk.sourceforge.net
la impresora será en este caso HTTP://server-
CUPS llamados smbspool que permite a [6] Adobe: http://www.adobe.com
name:631/... en lugar de IPP:// servername/...
equipos Linux acceder sin ningún tipo de

www.linuxmagazine.com.es Número 01 27
DESARROLLO SDL

Creación de un juego

Programación con SDL


En este artículo, el primero de una Gracias al hecho de que se utiliza el
acceso directo (en vez de la emulación) a
serie, Steven Goodwin da un vistazo a los dispositivos del sistema, se puede
lograr un gran nivel de rendimiento en
SDL. Qué es, cómo funciona y, lo que todas las plataformas.

es mucho más importante, cómo ¡Excavad, Excavad, Malditos!


usarlo para escribir un flamante Hay cientos de juegos SDL disponibles
en Internet y muchos de ellos están
juego, Explorer Dug. disponibles con todo su código fuente.
Contribuiremos a esta colección con un
POR STEVEN GOODWIN Figura 1: La pantalla de bienvenida pequeño juego de plataformas llamado
Explorer Dug. Lo programaremos en C

S
DL significa Simple DirectMedia rango de conjuntos de características (ya que probablemente sea la forma en
Layer y es una API multi- desde primitivas gráficas básicas, hasta que se entenderá mejor), aunque se
plataforma para programar apli- redes y soporte para tipografías True puede escribir aplicaciones SDL en
caciones multimedia, como los juegos. Type (TTF). La mayoría de estas librerías muchos otros lenguajes, como PHP,
Aporta una base estable sobre la que los han sido enviadas por usuarios finales y Ruby, Perl, Java y LISP. Principalmente
programadores pueden trabajar, sin pre- no forman parte del paquete principal de nos concentraremos en las característi-
ocuparse de cómo se encargará el SDL. Esto no es un problema en sí cas de SDL y cómo usarlas para producir
hardware de renderizarlo o incluso qué mismo, pero si el propósito principal es un juego. También destacaremos las
hardware lo ejecutará. usar SDL para trabajar desarrollando áreas del desarrollo del juego que
SDL está disponible bajo la licencia para varias plataformas, el desarrollador requiere más trabajo de nosotros los pro-
LGPL (Licencia Pública General Menor), habrá de asegurarse de que las librerías gramadores ¿De acuerdo? ¡Bien!
y como tal no requiere que el código que pretende utilizar se encuentran Comencemos…
fuente de la aplicación que se base en disponibles para las plataformas con las
ella sea publicado. que vaya a trabajar, ya que no todas Gran Bola de Fuego
Actualmente existen buenas imple- están completamente soportadas. La primera tarea es descargar e instalar
mentaciones de SDL para Linux (i386, La herencia de Windows en SDL es SDL. La versión actual estable es la
PPC, y PS2), BSD, Windows, Macintosh muy evidente dentro de la API, tanto es 1.2.7, y está disponible desde [3] como
OS 9/X, Solaris, Irix y BeOS. así que mucha de la terminología (y un archivo tar comprimido con gzip.
muchas de las funciones) son muy pare- Además de distribuirse el código fuente,
Acceso versus Emulación cidas a sus equivalente en DirectX. A están disponibles dos versiones binarias
La API SDL está compuesta de cinco pesar de ello, no se emula Windows de
subsistemas distintos: vídeo, audio, ninguna manera. En cambio, cada lla- Cuadro 1: Drivers
CDROM, entrada de joystick y tempo- mada a la API gráfica de SDL, por SDL no está limitado a X11 como dispositivo
rizadores. Cada uno apunta a un área de ejemplo, utiliza directamente el contro- de salida.También puede usar dga, fbcon ¡y
desarrollo diferente y puede ser inicial- lador desde el sistema operativo hasta aalib! Para hacer uso de estas carac-
izada y usada independientemente de anfitrión, bastante distinto a lo que sería terísticas, debemos asegurarnos de que el
los demás. Además, SDL fomenta el uso un sistema emulado. dispositivo apropiado se compila dentro de
SDL (lo cual requerirá otro ./configure, make,
de librerías que puedan suministrar En Windows, esto implicaría el uso de
make install del paquete). Entonces podrá
nuevas funcionalidades a la API básica. DirectX. Bajo Linux, se utiliza una de las
usar la variable de entorno SDL_VIDEO-
Las dos librerías más comunes son librerías del dispositivo de gráficos,
DRIVER para indicar que dispositivo quiere
SDL_mixer (que proporciona un mejor como X11 o DGA. También está sopor- usar. Por ejemplo:
manejo de audio) y SDL_Image, que pro- tado el control MTR (Memory Type
export SDL_VIDEODRIVER=aalib
porciona soporte para una amplia Range Register, [2]) aplicaciones aceler-
./explore
selección de formatos de ficheros gráfi- adas a pantalla completa (véase el
Puede encontrar una lista de los dispositivos
cos, incluyendo, GIF, JPG, PNG y TGA. Cuadro 1: Dispositivos).
suministrados con SDL tecleando:
El sitio principal de SDL [1] lista 109 libr- La API de audio puede reclutar los ser-
./configure -help | grep U
erías diferentes, actualmente en vicios de OSS, ESD o aRts para
enable-video
producción, suministrando un amplio suministrar música y efectos de sonido.

28 Número 01 www.linuxmagazine.com.es
SDL DESARROLLO

diferentes: Ejecución, runtime, y desar- Todos los programas SDL pueden tarde, deberíamos comenzar siempre con
rollo (development). Naturalmente, la comenzar con una de estas lineas: un SDL_Init, porque incluye la inicial-
última proporciona mejores facilidades ización de otros componentes que
de depuración, lo cual es más útil para #include "SDL.h" SDL_InitSubsystem no tiene. Muestras de
nosotros, como desarrolladores. De todas estos componentes podrían ser: Las
formas recomiendo trabajar con las o: hebras son inicializadas, el ultimo
fuentes ya que esto nos permite un código de error es borrado y el paracaí-
mejor ajuste y el uso completo de un #include "SDL/SDL.h" das es (opcionalmente) desplegado
depurador para introducirnos en el mis- (véase Cuadro Paracaídas).
mísimo código de SDL. Esto no solo es La primera es preferible por motivos de
útil en el seguimiento de errores, tam- portabilidad en varias plataformas, SDL_Init(SDL_INIT_VIDEO | U
bién puede ser muy iluminador. aunque esto requerirá que se añada el SDL_INIT_AUDIO);
El archivo tar.gz se desempaqueta de directorio SDL a la lista de rutas inclu-
la manera habitual: idas que gcc buscará. Todas las demás Es exactamente igual a:
cabeceras de archivos SDL están incor-
tar xfz SDL-1.2.7.tar.gz poradas dentro de ésta para así limitar el SDL_Init(SDL_INIT_VIDEO);
mantenimiento. También necesitamos SDL_InitSubSystem
Y se instala con el proceso igualmente enlazar la librería principal de SDL (lib- (SDL_INIT_AUDIO);
familiar: SDL) dentro de nuestra aplicación. Al
principio solo usaremos las funcionali- Por ahora, solo necesitamos el subsis-
./configure dades de está librería. Según pase el tema de vídeo, por tanto lo
make tiempo y nuestros requisitos crezcan, inicializaremos y comprobaremos si hay
make install añadiremos otras librerías. Hasta errores. SDL adopta el estándar de usar
entonces, los dos requisitos de más valores negativos para indicar un código
Por defecto, esto colocará las librerías arriba pueden satisfacerse en la linea de error. El valor de este número indica
necesarias y los archivos incluidos en comandos con: el error concreto.
/usr/local/lib y /usr/local/include/SDL SDL también suministra la función
respectivamente, aunque esto puede gcc -I/usr/include/SDL -lSDL U SDL_GetError que devuelve el nombre
cambiarse en el proceso de inicio con: test/testsprite.c textual del ultimo error. Pero debe ser
llamado inmediatamente, porque si la
./configure -prefix=/poner/sdl/U Si cambia las rutas de librerías e inclui- subsiguiente función SDL falla, el ante-
algunsitio/encualquierotraparte dos, se puede usar el programa sdl-config rior error se perderá.
para obtener esta información (véase Cerrar el sistema es tan simple como
Además de suministrar dispositivos adi- Cuadro SDLCONFIG). llamar a la función SDL_Quit.
cionales, debería tener pocos motivos
para repetir el proceso ./configure ya que El Mundo en Nuestras Manos void exRelease(void)
SDL es fácil de configurar y muy estable, Nuestra primera incursión en la progra- {
e invariablemente funciona a la primera. mación con SDL será la pantalla de SDL_Quit();
El paquete SDL también contiene un “bienvenida” del juego. Con esto abar- }
extenso juego de páginas de manual caremos un número de conceptos
(sección 3) detallando los parámetros e fundamentales, tal como superficies, Cuadro 2: SDLCONFIG
indicadores de cada función. blitting (de blit: Block Image Transfer) y
sdl-config es un pequeño programa que
actualización de pantalla.
viene empaquetado con SDL y su función es
Arriba con ese muro Cada estructura y función SDL básicamente informar o prefijar, el lugar de
El paquete SDL viene con un pequeño comienza con el prefijo SDL_. Además la instalación de SDL.También se puede usar
conjunto de pruebas que permiten com- envolveremos estas funciones dentro de para dar los indicadores correctos tanto al
probar la integridad de cada subsistema. las nuestras (todas precedidas con ‘ex’) compilador como al enlazador.
Lo encontraremos en el directorio test, y para encapsular mas funcionalidad y $ sdl-config
funcionará nada más terminar la insta- suministrar un lugar común donde Usage: sdl-config [--
lación, siempre que haya salido todo reunir el código del juego y el de SDL. prefix[=DIR]] [--exec-
bien. En el caso de que surjan proble- Esto ayudará en la depuración. prefix[=Dir]] [--version]
mas, buscaremos los mensajes de error La primera etapa es inicializar SDL. [--cflags] [--libs][--static-
que cada prueba envía a la linea de Hay dos funciones para hacer esto, libs]
comandos, ya que pueden indicar si son SDL_Init y SDL_InitSubSystem. SDL_Init $ sdl-config -libs
problemas con el hardware o la configu- puede inicializar uno (o más) subsis- -L/usr/local/lib -Wl, -
ración. Si la maquina es capaz de temas y debería ser la primera función rpath, /usr/local/lib -lSDL -
ejecutar un escritorio, debería estar a la SDL en un programa. Aunque podemos lpthread
altura de cualquier tarea con SDL inicializar subsistemas adicionales más

www.linuxmagazine.com.es Número 01 29
DESARROLLO SDL

De igual modo que se puede inicializar SDL_Surface *pScreen;


un subsistema individualmente, también pScreen = SDL_SetVideoModeU
Cuadro 3: Paracaídas
El paracaídas es una manera de capturar
puede cerrarlo de una manera similar: (640, 480, 16, SDL_HWSURFACE);
señales (tales como fallos de segmentación,
errores de bus, cauces rotos y excepciones de
SDL_QuitSubSystemU Aquí tenemos una configuración de punto flotante) lo cual da a SDL una oportu-
( SDL_INIT_VIDEO ); superficie de vídeo a 640x480. El 16 nidad para llamar a SDL_Quit y liberar sus
indica la profundidad de bit, el cual recursos. El paracaídas se instala automáti-
La función final siempre debe ser refleja el número total de colores camente en la inicialización, si no queremos
SDL_Quit, ya que esto retirará lo mane- disponibles. En este caso, 65.536 (2^16), utilizarlo, debemos empezar la aplicación
jadores de señales del paracaídas y lo cual nos da un buen equilibrio entre con:
terminará cualquier hebra que quede calidad visual y velocidad. Las opciones SDL_Init ( SDL_INIT_VIDEO |
activa. habituales son 8, 16 y 24 aunque SDL SDL_INIT_NOPARACHUTE);
puede soportar 12 y 15 (véase el cuadro La aplicación debe suministrar sus propios
La primera vez que vi tu cara Carga de Profundidad). manejadores de señales si es necesario, si
En SDL todos los gráficos se almacenan Normalmente, en el desarrollo de soft- bien conviene recordar que, en aras de la
en ‘superficies’. Es un termino que se ha ware el programador está limitado por el portabilidad, no todas las plataformas
tomado prestado de DirectX y que sig- hardware con el que trabaja y obligado a soportan todas las señales y algunas
plataformas no soportan señales en abso-
nifica ‘memoria gráfica’. La pantalla es doblegarse a sus exigencias sin rechistar.
luto.
una superficie. La imagen del fondo es Los juegos, afortunadamente, son un
una superficie. Los personajes son super- mundo aparte. Hemos elegido el tamaño
ficies, etcétera. Las superficies pueden de pantalla y la profundidad de bit para Véase el cuadro Funciones de vídeo.
ser creadas y destruidas varias veces a lo hacer alarde de nuestros gráficos en el El parámetro final es un juego de indi-
largo de la vida del juego. Sin embargo, mejor entorno posible. Si no utilizamos cadores a nivel de bit. Estos especifican
sólo puede haber una superficie de pan- suficientes colores, por ejemplo, gráficos atributos para la superficie y la ventana
talla. Es esta superficie de pantalla la que esenciales como la llave o la puerta de en la que es mostrado. El indicador
aparece en el monitor y, por tanto, salida pueden ser difíciles (o imposibles) SDL_HWSURFACE requiere que la super-
cualquier cosa que quiera que sea visible de ver. Esto es injusto para el jugador y ficie de la pantalla, si es posible, deba ser
debe ser dibujada encima de esta super- por eso es admisible salir del juego si creada en memoria de vídeo. Si nos
ficie. esta resolución no se puede conseguir. encontramos que el dispositivo no
Las superficies pueden ser de un Por otra parte, si se está usando SDL soporta superficies de hardware (como
tamaño arbitrario y son retenidas en dos para aplicaciones que no son juegos, o en el caso de X11), o que la memoria
lugares: memoria de vídeo o memoria de no importa la degradación de la imagen, hardware está llena, la superficie puede
sistema. La memoria de vídeo es más se puede usar cualquier modo de vídeo ser creada, pero software.
rápida y es conocida como “superficie de que el usuario pueda tener ajustado en Si es apropiado crear una superficie
hardware”. La memoria de sistema (o su escritorio poniendo la profundidad de hardware para un búfer en particular
memoria software) es parte de la RAM bit a cero: (como por ejemplo para la pantalla prin-
normal y marcada internamente por SDL cipal), seguimos teniendo que invocar
como ‘datos gráficos retenidos’. pScreen = SDL_SetVideoModeU SDL_HWSURFACE. Puede que nosotros
La pantalla se inicializa con el (640, 480, 0, SDL_HWSURFACE); estemos utilizando X11, pero otro
comando especial SetVideoMode, aun- printf("The bit depth is set toU usuario podría no estar haciéndolo y ten-
que la superficie que devuelve no es %d\n", pScreen>format>U emos que darles el mejor juego que
diferente de cualquier otra. BitsPerPixel); podamos.

Listing 1: Initialise Listing 2: First screen


01 BOOL exInitSDL(void) 01 SDL_Surface *pImg;
02 { 02
03 if (SDL_Init(SDL_INIT_VIDEO) 03 if ((pImg = SDL_LoadBMP("welcome.bmp")))
< 0) 04 {
04 { 05 /* Hemos cargado con éxito la imagen */
05 fprintf(stderr, "No se 06
pudo inicializar video SDL: 07 SDL_BlitSurface(pImg, NULL, pScreen, NULL);/* transferir todo */
%s\n", SDL_GetError()); 08 SDL_UpdateRect(pScreen, 0,0,0,0); /* toda la pantalla */
06 return FALSE; 09 SDL_Delay(2*1000); /* 2 segundos */
07 } 10
08 11 /* A continuación liberamos la superficie */
09 return TRUE; 12 SDL_FreeSurface(pImg);
10 } 13 }

30 Número 01 www.linuxmagazine.com.es
SDL DESARROLLO

Además está el parámetro final que , int height, int depth, Uint32U Una forma mucho más fácil es dibujar
permite redimensionar la ventana Rmask, Uint32 Gmask, Uint32 U las imágenes con GIMP y salvarlas como
(SDL_RESIZABLE), quitarle el marco Bmask, Uint32 Amask); un BMP. Entonces se puede cargar la
(SDL_NOFRAME) o soportar renderizado imagen, correctamente formateada y
OpenGL (SDL_OPENGL). A menudo, SDL_Surface *SDL_CreateRGBU copiarla dentro de una flamante superfi-
el primer impulso con un juego es SurfaceFrom(void *pixels, int U cie. SDL permite esta generosa
hacerlo a pantalla completa (SDL_ width, int height, int depth, U funcionalidad con una simple función
FULLSCREEN). int pitch, Uint32 Rmask, Uint32U llamada:
Pero nos quedaremos con una versión Gmask, Uint32 Bmask, Uint32 U
en ventana ya que es más fácil trabajar Amask); SDL_Surface *SDL_LoadBMPU
con ella. Además, es posible hacer que la (const char *file);
máquina se vuelva inutilizable si se está Esto se utiliza raramente por que tiene
ejecutando el juego a pantalla completa, que escribir cada pixel de la imagen SDL solo provee soporte a archivos BMP
desde donde no es siempre posible con- (en el formato correcto) directamente dentro de la librería estándar. Aunque
mutar a otro escritorio virtual y matar el dentro de la superficie. Además, normal- SDL_image suministra soporte para
programa. Esto también ocurre si se mente hay una gran cantidad de muchos otros formatos, nuestro juego se
tropieza con un punto de ruptura en el pixels. limitará a BMPs y hará uso de varias
depurador o se nos olvida aportar algún
mecanismo para abandonar el juego. Cuadro 5: Carga de profundidad
Recordemos que, al igual que un depu-
rador, el paracaídas de SDL captura varias Cuando la profundidad de bit es distinta de tabla se llama la paleta (la cual usa 24 bits
8, los datos del pixel se almacenan en un completos para almacenar la información de
señales (como Ctrl+C) y, por tanto, éstas
“formato empaquetado”. Esto se llama así color) y puede ser configurada con las fun-
no están siempre disponibles.
porque el color se representa con tres ciones SDL_SetColors y SDL_SetPalette.
Cada superficie que se crea (y eso números, uno para cada uno de los compo- Aunque hoy en día ha decaído en lo que se
incluye a la pantalla) debe ser liberada nentes rojo, verde y azul que se empaquetan refiere a la programación de juegos, gracias a
con la función SDL_FreeSurface, una vez juntos (en un simple Uint o Uint32) para este formato, se puede mantener la produc-
que ha dejado de usarse: mostrar el color. Con una profundidad de 24 ción de gráficos de alta calidad en hardware
bits (a veces llamado Color verdadero), cada muy limitado.También se pueden producir
SDL_FreeSurface(pScreen); uno de los componentes RGB ocupa 8 bits. muchos efectos interesantes (y muy rápidos)
Esta es la resolución más alta que probable- cambiando los colores en la paleta sin hacer
Mis Posesiones Terrenales mente necesitemos, pero normalmente es cambios en cada pixel sobre la pantalla. El
Además de la pantalla, necesitamos excesiva para la mayoría de los juegos. mayor problema con las superficies de 8 bits
Desafortunadamente las cosas se vuelven paletizadas es que solo se dispone de 256
algunas superficies de nuestra pro-
más complicadas con el más común de los colores específicos para toda la imagen. Si el
piedad, dentro de las cuales podremos
formatos empaquetados. Me refiero al color fondo usa un juego de 256 colores y el per-
dibujar nuestro gráficos. Hay dos formas de 16 bits. En este caso los componentes RGB sonaje principal usa otro diferente, entonces
principales de crear nuestras propias usan 5, 6, y 5 bits para cada color o ¡5, 5 y 6 o SDL cambiará automáticamente algunos de
superficies. La primera es crear la super- 6, 5 y 5! El formato exacto de la superficie los colores. Si bien esto no es algo demasiado
ficie manualmente con una de las puede variar dependiendo de donde esté malo, los resultados pueden ser impredeci-
siguientes funciones: almacenado y que tarjeta gráfica se esté bles y por lo tanto hará que el trabajo
usando. La orden también puede variar si se artístico sea un poco menos impresionante.
SDL_Surface *SDL_CreateRGBU está usando un PowerPC, por ejemplo, La otra cara de la moneda, sin embargo, es
Surface(Uint32 flags, int widthU debido a la cuestión de la orientación de los que mover datos de 8 bits es el doble de
datos (endian). Sin embargo, esto no es algo rápido que mover datos de 16 bits y, por
de lo que debamos preocuparnos, ya que
Cuadro 4: Funciones de desde SDL se convierten los formatos
tanto, es a menudo un truco empleado para
dispositivos de mano (PDAs, móviles, etc.).
vídeo automáticamente durante una transferen- Para asegurar la compatibilidad en varias
Estas funciones pueden suministrar alguna cia de bloque o blit. Si se necesita plataformas, los tipos estándar de C como
idea útil sobre que modos de vídeo son posi- comprender el formato interno (tal como short e int, no se usan. En su lugar, SDL define
bles con SDL. Las páginas de manual tienen veremos más tarde en esta serie) es agrad- los suyos propios, que son usados por toda la
prototipos completos y una explicación de able saber que SDL suministra la función API. Estos tipos pueden cambiarse sobre
estas funciones. SDL_MapRGB para ayudarnos. En verdad, nuevas plataformas para asegurar que un
SDL_GetVideoinfo Recupera información acerca este problema con el formato de los paque- Uint16, por ejemplo, es siempre de 16 bits.
del hardware de vídeo. tes también se manifiesta con el modo de
typedef unsigned char Uint8;
SDL_VideoDriverName Da el nombre del dispositivo de color de 24 bits, pero es menos pronunciado.
typedef signed char Sint8;
vídeo. Las reglas cambian cuando se especifica una
profundidad de bit de 8. En vez de separar los typedef unsigned short Uint16;
SDL_ListModes Enumera todas las resolucio-
nes de pantalla disponibles. 8 bits dentro del componente RGB, cada typedef signed short Sint16;
SDL_VideoModeOK Determina si un modo especi valor (desde 0 a 255) referencia a una tabla typedef unsigned int Uint32;
fico de vídeo está disponible. separada que indica el color actual. Esta typedef signed int Sint32;

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

superficies cargadas de esta manera. cualquiera de las dos superficies, fuente cie pantalla que hemos configurado no
Cada superficie retendrá un juego de grá- o destino. Esto es muy útil, ya que es la imagen que se visualiza en la ven-
ficos específico: Uno para el telón de podemos dibujar gráficos en posiciones tana. Esa imagen se controla por el
fondo, otro para el jugador, otro para el tales como (-4, -2) o (600, 450), lo cual dispositivo (tal como X11), no por SDL.
enemigo, etcétera. permite dividir suavemente nuestros grá- A fin de ver la imagen, debemos decirle
La imagen final del juego, por tanto, se ficos por el borde de la pantalla. SDL a SDL que actualice el dispositivo con el
construirá a partir de muchas copias de resuelve como representar la porción vis- gráfico de nuestra superficie. Para hacer
superficies a superficie (recordemos que ible óptimamente. esto usaremos la función SDL_
la pantalla es solo una superficie), UpdateRect.
aunque gobernadas por la lógica del SDL_Rect srcrect = U
juego. Este proceso de copiado se llama {600, 450, 64, 64}; void SDL_UpdateRect(U
blitting y es la abreviatura de BLock SDL_Surface *screen, Sint32 x, U
Image Transfer. Solo transferiremos bloques desde 600, Sint32 y, Sint32 w, Sint32 h);
450 a 639, 479 aunque la extensión sea
El Baile del Blit 663, 513. Si se quiere transferir en Sólo un pequeña porción rectangular de
Podemos transferir bloques (blits) entre bloque la superficie entera (como hici- la pantalla es actualizada (lo cual es nat-
dos superficies cualquiera y eso incluye mos en la pantalla de bienvenida) uralmente más rápido que si
desde una superficie a sí misma. Tam- entonces pasaremos srcrect como NULL. actualizamos toda la superficie). Como
bién podemos transferir bloques desde Solo usamos las coordenadas x, y de alternativa, podemos elegir pasar ceros a
una porción de una superficie, a una por- dstrect refiriéndonos a la esquina supe- cada uno de los parámetros y actualizar
ción diferente de otra superficie. La rior izquierda del área de destino, todo el área de golpe. Por ejemplo:
única limitación es que el tamaño de porque no somos capaces de estirar y
ambas porciones (la fuente y el destino) transferir bloques. Pasando NULL como SDL_UpdateRectU
deben ser del mismo tamaño. La valor dstrc le diremos a SDL que (pScreen, 0, 0, 0, 0);
operación de transferencia de bloques se comience la transferencia de bloque
puede (si ambas superficies están en desde (0,0). Si la extensión del bloque Ahora hemos transferido algunos blo-
memoria de vídeo) ejecutar por hard- transferido excede la superficie de des- ques a nuestra pantalla y provocado la
ware, lo cual es increíblemente rápido. tino la imagen se recortará normalmente. actualización del monitor y así actu-
No todos los dispositivos gráficos, no Esta área recortada puede ser limitada alizarlo con nuestra propia imagen. De
obstante, soportan la aceleración por artificialmente con: esta manera, si añadimos un pequeño
hardware, así que para un breve recorda- retraso, completaremos nuestra primera
torio, véase el cuadro Dispositivos. void SDL_SetClipRect(U pantalla.
Hay una sola función para hacer trans- SDL_Surface *surface, U Producir un nivel del juego o person-
ferencias de bloques. Es única así que es SDL_Rect *rect); ajes animados, es simplemente una
sencillo de recordar: cuestión de mas transferencias de blo-
Y cualquier futura transferencia de ques, en más lugares, desde más
int SDL_BlitSurface(U bloque a esa superficie solo ocurrirá den- superficies. No implica nada más que lo
SDL_Surface *src, U tro del área especificada en el que ya hemos visto. Desafortunada-
SDL_Rect *srcrect, U rectángulo. Como dije más arriba, mente, hay buenas y malas manera de
SDL_Surface *dst, U pasando NULL como puntero SDL_Rect, hacer esto. El próximo mes le daremos
SDL_Rect *dstrect); le estamos diciendo a SDL que use el un vistazo a las buenas maneras,
área completa de la superficie, lo que mostraremos como las superficies
Desde esta función no se dispone de la efectivamente eliminara el área recor- pueden ser usadas para crear la pantalla
capacidad de estirar o rotar la superficie; tada. Esta característica nos permite del juego ¡y daremos vida a algunos de
para esto deberemos recurrir a mantener un área de la pantalla pura y los malos! ■
cualquiera de las librerías SDL_gfx [4] o sagrada, sin tener en cuenta que compo-
SGE [5]. Como el estirar bitmaps con- nentes del juego intenten transferir INFO
sume mucho tiempo de proceso no lo bloques allí, protegiendo información tal
[1] SDL: http://www.libsdl.org
usaremos en nuestro juego, ya que esta- cómo la puntuación, o el número de
[2] Memory Type Range Register: http://
mos aspirando a la máxima velocidad. vidas.
www.linuxvideo.org/user/mtrr.txt
Por tanto generaremos nuestros gráficos
al tamaño exacto que necesitemos. ¡Bienvenidos! [3] Descargas de SDL: http://www.libsdl.org/
SDL_Rect es una estructura simple Así que ahora podemos cargar una ima- download-1.2.php
para indicar el tamaño del área que quer- gen en una superficie y transferir un [4] Librería SDL_gfx: http://www.ferzkopp.
emos transferir, tomando como x, y, la bloque de esa superficie a otra superficie net/~aschiffler/Software/SDL_gfx-2.0/
anchura y la altura. SDL cortará (tal como la pantalla). A fin de ver como [5] Librería SGE: http://www.etek.chalmers.
automáticamente nuestras coordenadas queda nuestro trabajo, debemos dar a se/~e8cal1/sge/index.html
internamente si excedemos los límites de conocer una revelación más. La superfi-

32 Número 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 común de la

economía. Más o menos nuestra máxima podría rezar así:“¿Para qué más?”. Efectivamente: ¿para qué? ¿Qué necesidad

tiene un almacén de piezas de recambio de automóviles de un Pentium VII a un millón de gigaherzios con pantallas de

plasma de tropocientos pixels y mogollomiles de colores? Tal vez sería más realista escoger máquinas más básicas,

incluso de las consideradas obsoletas, e invertir lo que se ahorre en hardware (y software, como después veremos) en

otro sitio. POR PAUL C. BROWN

M
ucho más práctico, digo, es
tener una pantalla en blanco y
negro, con buen contraste, un
ordenador sencillito. Sinceramente, los
interfaces amigables con muchos col-
orines e iconos de diseño están
sobrevalorados. No sólo eso, sino que
pueden inducir a confusión. Si se piensa
racionalmente, muchas aplicaciones (la
mayoría) no necesitan de interfaz grá-
fico. Perfectamente podrían apañarse
con un interfaz de botones, menús y
ventanas basadas en texto. Amén de
resultar menos exigente con el hardware,
también serían más claros y más sencil-
los de utilizar. Precisamente para Aplicándose a la tarea un bucle while que se encargase de
desarrollar interfaces para aplicaciones Tal vez la manera más racional de enfo- procesar los tecleos y pasarlos a la clase
de estas características existe curses, una car el desarrollo de la aplicación (al application y, al final, cuando se pulsase
librería que facilita enormemente la menos es la que funciona para mí) es el la tecla que precipitase la salida del
creación de ventanas, menús y widgets de concebirlo desde arriba hacia abajo. bucle, se llamase al destructor del objeto
en terminales de texto. Por supuesto que Es decir, piensa en como quieres que se y todo se recogiese limpia y ordenada-
las librerías curses están disponibles para vea y ya te encargarás del trabajo sucio mente. Sencillo. El corazón de dicha
la mayoría de los Unixes, incluyendo después. Normalmente esto implica clase se puede apreciar en el Listado 1.
Linux y suelen incorporarse con casi empezar con la función main() y No es muy impresionante ¿verdad? Eso
todas las distribuciones e incluso existen reducirlo a unas pocas llamadas – y es por que la mayor parte del “trabajo
versiones para otras plataformas lo que cuando digo unas pocas, quiero decir sucio” se lleva a cabo en window, que al
asegura, hasta cierto punto, la portabili- unas poquísimas. Si la función main() ser heredado por application, recibe una
dad del código (véase [1]). En este puede contener como mucho 10 líneas llamada a su constructor cuando se crea
primer capítulo destinado a curses de código, es que vamos bien. Después un objeto application. Y es en el con-
vamos a ver como emplear la librería vamos implementando clases de las más structor de window donde se inicializa
imbuida en la infraestructura de una generales a las más específicas, siendo toda la infraestructura de curses,
aplicación desarrollada en C++. Una estas últimas las que de verdad interac- preparándola para mostrar las ventana.
advertencia: el C++ no es el entorno túan con las librerías específicas, curses Se puede apreciar la herencia de window
natural de curses y, al menos en un caso, en este caso. Así que, yo ¿cómo quería por parte de application en el fichero de
no conseguiremos unas compilaciones que se viese? Pues quería que en main() inclusión application.h, no listado en
cien por cien limpias (es decir, sin adver- se inicializase un objeto x de una clase, este artículo, pero que puede ser descar-
tencias), si bien esto es más bien un llamémosle application, y que esa clase gado desde la web de la revista en [2].
problema del compilador g++ que del se ocupase de mostrar la ventana princi- Un poco más adelante volveremos sobre
código de muestra o de un defecto de pal de la aplicación, colocara los menús la clase window. Volviendo al construc-
curses, como después veremos. etc. El resto de main() se ocuparía con tor de application, lo primero que se

www.linuxmagazine.com.es Número 01 33
DESARROLLO Interfaces

hace es realizar una llamada al macro de utos. Ver [2]). Fijémonos que window aplicación vamos a ocupar todo el termi-
fabricación casera makeString() que cuenta con dos constructores sobrecar- nal visible. Por ello, al invocar al
sirve para convertir una cadena con un gados. Uno, el que no tiene parámetros, constructor de la ventana de fondo de la
número de argumentos opcionales en sirve de constructor cuando se crea un aplicación en el constructor de applica-
una sola cadena tipo string que se uti- objeto application y crea el entorno tion, utilizamos el alto y ancho máximo
lizará como título (asignado, pues, a la curses. Este constructor se llamará una disponible al arrancar el programa. De
propiedad de la clase title). Veremos más sola vez por aplicación y monta la ven- hecho, lo primero que se hace en este
sobre este macro en la sección Parámet- tana stdscr, el “contenedor” de todas las segundo constructor es crear una ven-
ros Indefinidos más abajo. Lo siguiente demás ventanas. En el código se aprecia tana con la función curses newwin() y
es abrir una ventana con la que podamos como usa los métodos estándar de ini- asignar el puntero que devuelve al atrib-
trabajar. Esta ventana será la del fondo, cializar la pantalla y librería de curses uto w_Handle. Este atributo nos será útil
la madre de todas las subsiguientes ven- utilizando (initscr()) y como se activa el más adelante para referirnos a cada una
tanas y donde se alojará el menú mapeado del teclado (keypad(), esto de las ventanas cuando contemos con
principal del programa. La llamada es un sirve para que las teclas de función, cur- más de uno. A continuación, proce-
método de la clase window, heredada sores, etc. devuelvan caracteres que el samos el título de la ventana de manera
por application y que veremos en la sigu- programa pueda procesar, permitiendo, similar que hacíamos en el constructor
iente sección. El destructor de la clase por ejemplo, que si el usuario pulsa la de application y establecemos al atributo
contiene una única instrucción, end- tecla F1, se active el sistema de ayuda, frame para dibujar (o no) un marco
win(), la función de curses utilizado etc.). A continuación, deshabilitamos la alrededor de la ventana. Lo siguiente es
para recoger la basura y para devolver la secuencia de Nueva Línea + Retorno de asignar la ventana a un panel. Los pane-
terminal al estado que tenía antes de la Carro cada vez que se produce una sal- les en curses añaden propiedades a las
llamada a initscr(). De momento es todo ida con la llamada a nonl() y le decimos ventanas permitiendo que estas se apilen
lo que necesitaremos para salir elegante- a la aplicación que ha de capturar las por capas y se solapen de manera consis-
mente de curses. pulsaciones en cuanto se produzcan sin tente. Para entendernos, sería muy difícil
esperar a un carácter de nueva línea con tener ventanas de diálogos, ventanas
Abriendo la Ventanas el procedimiento cbreak(). Esto último móviles y ventanas apiladas sin que
En la siguiente capa de nuestra apli- nos permitirá procesar cada tecleo del estas participaran de las funcionalidades
cación, estaría la clase que administraría usuario como es debido, activando que les atribuyen los paneles. La conver-
cada una de las ventanas que se fuesen alguna funcionalidad del programa si sión de una ventana “normal” en un
creando, incluyendo la principal. Esta pulsa un tecla de un carácter no imprim- ventana panel es tan sencilla como se ve
capa viene representada por la clase win- ible o colocando una letra en la ventana en el listado: basta invocar a la función
dow, la implementación de la cual se apropiada si el usuario desea escribir curses new_panel() con el handle de la
puede ver en el Listado 2 (o al menos algo. Por fin, evitamos que se visualicen ventana a convertir. La función devuelve
parte. Se han dejado fuera los métodos inmediatamente las entradas desde el un handle al panel creado que
get y set correspondientes a varios atrib- teclado con la función noecho(). De esta guardamos en el atributo p_Handle para
manera, podremos capturar los tecleos y referencias futuras. Luego llamamos al
Listado 1: application.cpp procesarlos como nos convenga en el método de la clase putTitle() (que se ve
contexto de la aplicación. Todas estas un poco más abajo en el listado). Éste
01 #include "application.h"
funciones pertenecen a la librería de método, como su nombre indica, coloca
02
curses y su uso es bastante estándar en el título de la ventana en el ángulo supe-
03 application::application(bool
el arranque de cualquier aplicación que rior izquierdo y, de paso, dibuja el marco
frame=TRUE,string
utilice el paquete. El segundo construc- para la ventana. El siguiente método,
app_Name="Untitled"...)
tor, window::window( int wide = showPanels(), también perteneciente a la
04 {
COLS,int high = LINES, int posX = 0,int clase window, muestra el panel lla-
05 makeString(app_Name);
posY = 0, bool frame = TRUE, string mando a update_panels() (que actualiza
06 title=app_Name;
win_Name = "Untitled"...), sirve para el aspecto del panel) y doupdate() (que
07
crear las ventanas con las que podremos actualiza la pantalla con la nueva infor-
08 window
interactuar. Si nos fijamos, el constructor mación), ambas funciones perten-
app_window(COLS,LINES,0,0,TRU
de la clase application utiliza este con- ecientes a la librería curses. El método
UE,title);
structor para generar el fondo visible de putTitle() a su vez invoca al método
09 }
la aplicación, con un marco (establecido wWrite(), que es el método de la clase
10
por el parámetro frame) y de un tamaño encargado gestionar el paso de cadenas a
11 application::~application()
igual a la del terminal donde se las ventanas de curses. Recibe tres o más
12 {
mostrará. El tamaño de la terminal se parámetros: los dos primeros establecen
13 endwin();
establece en líneas (LINES) y columnas la posición x e y de la cadena (tercer
14 }
(COLS), siendo estas dos variables gen- parámetro) que se montará junto con los
15
eradas por curses a la hora de inicializar parámetros indefinidos que le siguen. La
16 // ... Y 'gets' varios
el motor y para la ventana principal de la función mvwprintw(), perteneciente a la

34 Número 01 www.linuxmagazine.com.es
Interfaces DESARROLLO

Listado 2: window.cpp
01 #include "window.h" 42 }
02 43
03 window::window() 44 void window::showPanels()
04 { 45 {
05 w_Handle=initscr(); 46 update_panels();
06 keypad(stdscr, TRUE); 47 doupdate();
07 nonl(); 48 }
08 cbreak(); 49
09 noecho(); 50 void window::wWrite(int px, int py, string
10 } my_String...)
11 51 {
12 window::window(int wide=COLS,int high=LINES,int 52 if (has_Frame)
posX=0,int posY=0,bool frame=TRUE,string 53 {
win_Name="Untitled"...) 54 px++;py++;
13 { 55 }
14 w_Handle=newwin(high,wide,posY,posX); 56 makeString(my_String);
15 57 mvwprintw(w_Handle,py,px,my_String.c_str());
16 makeString(win_Name); 58 wrefresh(w_Handle);
17 title=win_Name; 59 showWindow();
18 has_Frame=frame; 60 }
19 61
20 p_Handle=new_panel(w_Handle); 62 void window::showWindow()
21 63 {
22 putTitle(); 64 nodelay(w_Handle,TRUE);
23 showPanels(); 65 wgetch(w_Handle);
24 } 66 nodelay(w_Handle,FALSE);
25 67 showPanels();
26 68 }
27 void window::closeWindow() 69
28 { 70 void window::drawFrame()
29 delwin(w_Handle); 71 {
30 refresh(); 72 wborder(w_Handle, ACS_VLINE, ACS_VLINE,
31 } ACS_HLINE, ACS_HLINE, ACS_ULCORNER, ACS_URCORNER,
32 ACS_LLCORNER, ACS_LRCORNER);
33 void window::putTitle() 73
34 { 74 }
35 int px=1,py=0; 75
36 if(has_Frame) 76 int window::wGetch()
37 { 77 {
38 drawFrame(); 78 return(wgetch(w_Handle));
39 px=0;py=-1; 79 }
40 } 80
41 wWrite(px,py,title); 81 // Gets y sets varios aquí

librería curses, es la encargada de colo- cadena, llamamos wrefresh() que datos desde el teclado. Bueno, más bien,
car la cadena en la ventana indicada por refresca la ventana que acabamos de si no se intentaba conseguir una entrada
el handle que se le pasa. Nótese como, a modificar, que no la pantalla. El refresco desde el teclado. Por ello lo único que
pesar de que la mayoría nosotros esta- de la pantalla para que se puedan ver las hace esta rutina es anular la espera para
mos acostumbrados a referirnos primero modificaciones se produce en el método una entrada (nodelay()), leer el búfer de
al eje de las x y después al eje de las y, showWindow(), que llamamos a contin- entrada (wgetch() – normalmente dicho
curses lo hace a la inversa, más bien uación. El método showWindow() es un búfer estará vacío, puesto que no espera
porque cuando hablamos de terminales parche en la ya larga tradición de los a que el usuario teclee nada) y volver a
de texto, es habitual hablar primero de famosos parches de Paul C. Brown. activar la espera de entrada para, a con-
líneas (componente vertical) y después Nació cuando me dí cuenta de que curses tinuación, actualizar los paneles
de columnas (componente horizontal) no me actualizaba satisfactoriamente las llamando a showPanels(). Sin este pro-
en ese orden. Después de colocar la ventanas si no había una entrada de cedimiento, los paneles no se actualizan

www.linuxmagazine.com.es Número 01 35
DESARROLLO Interfaces

hasta una nueva entrada por parte del que acepta, además de una serie de que fuera iterando sobre la lista de argu-
usuario y no se mostrarán de motu pro- parámetros definidos, un número mentos hasta que o (a) se leyese hasta el
pio cosa como los títulos o el borde. En indefinido de otros parámetros. Hay número de argumentos preestablecido o
cuanto a drawFrame(), su nombre lo varias maneras de leer los parámetros (b) se llegase hasta el argumento que
dice todo: dibuja un marco alrededor de indefinidos a variables. Una sería la de fuese igual al argumento definido como
la ventana utilizando para ello la rutina pasar como argumento definido el el último. Ambos métodos ofenden mi
curses wborder() y los valores pre- número de argumentos indefinidos. Otra sentido de la estética de la progra-
definidos de curses para la barra vertical la de incluir como definido un argu- mación, 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 crearíamos un bucle (en el primer caso método (c), que consiste en que todos
superior e inferior ; y los gráficos 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 Listado 3: va.h leyendo e integrando en el
izquierdo), ACS_ argumento plantilla. Esto no
01 #include <stdlib.h>
URCORNER (esquina su- sería un problema si no fuera
02
perior derecho), ACS_ porque con curses, el uso de
03 #define makeString(return_String) \
LLCORNER (esquina infe- 04 { \
una cadena de longitud
rior izquierdo), ACS_ 05 char *fmt; \ indefinida (tipo char *cadena)
LRCORNER (esquina infe- 06 if ((fmt=(char*) genera un fallo de seg-
rior derecho). Por fin, el malloc(sizeof(char)*return_String.length()))==NULL)\ mentación. En concreto, si
método wGetch() se en- 07 printf("ERROR: Memoria insuficiente");\ utilizamos una cadena de lon-
carga de recoger las 08 else \ gitud indefinida *buf en un
entradas procedentes del 09 { \ programa C o C++ “normal”
teclado referidas a la ven- 10 strcpy(fmt,return_String.c_str()); \ (es decir, que no cargue libr-
tana para que puedan ser 11 va_list args; \ ería “raros” como curses) no
procesadas. 12 char *p; \ pasa nada:
13 int n, size=10; \
Parámetros 14 if((p = (char*) malloc(size)) == NULL)\ function ejemplo2U
indefinidos 15 printf("ERROR: Memoria insuficiente");\ (char *plant, ...)
Conviene explicar en un 16 else \ {
aparte lo referente a las 17 { \ char *buf;
funciones con parámetros 18 while(1) \ va_list args;
indefinidos. Estas fun- 19 { \ va_start(args, plant);
ciones permiten que 20 va_start(args,fmt); \ vsprintf(buf,plant,args);
funcionen, por ejemplo, 21 n=vsnprintf(p,size,fmt,args); \ va_end(args);
el socorrido printf() de C. 22 va_end(args); \ return(buf);
Si nos fijamos en como 23 if (n < size) \ }
funciona, si hacemos 24 { \
25 break; \ El código anterior funcionará
printf("Tengo %iU 26 } \ sin ningún problema. Pero con
muñeca vestida deU 27 else \ curses, si se utiliza una cadena
%s...",1,"azul"); 28 { \ de longitud indeterminada y
29 size = n+1; \ después se utiliza sprintf() o
devolverá la cadena 30 if((p = (char *) realloc(p,size)) == vsprinf() con una plantilla y
NULL)\
“Tengo 1 muñeca vestida varios argumentos, el resul-
31 { \
de azul...” y compro- tado es el dichoso error de
32 printf("ERROR: Memoria Insuficiente");\
bamos que a printf(), que fallo de segmentación, uno de
33 break; \
no es más que otra fun- los errores más irritantes que
34 } \
ción de las librerías tiene la insidiosa costumbre de
35 } \
estándar de C, puede aparecer en el momento de la
36 } \
recibir tantos parámetros ejecución, después de una
37 } \
como gustemos… siem- compilación exitosa. Otra pega
38 return_String=p; \
pre y cuando el primero un tanto engorrosa es que
39 free(p); \
sea el que indique el for- va_start() y va_end() han de
40 free(fmt); \
mato del mensaje a estar en la misma función que
41 } \
mostrar. Eso es por que 42 }
recibe los parámetros in-
printf() es una función definidos, por tanto veréis la

36 Número 01 www.linuxmagazine.com.es
Interfaces DESARROLLO

misma secuencia de comandos nuestro programa es harto sen-


repetida una y otra vez a lo cillo. Incluimos el fichero de
largo de las clases que estamos inclusión application.h que con-
analizando y no hay manera de tiene la definición de la clase
separarlos en una función application. A continuación,
aparte. El tercer problema es declaramos una variable tipo
que sólo se nos permite operar char para contener las pulsa-
con cadenas tipo char *, lo que ciones del teclado y un objeto
teóricamente nos despoja del tipo application. Llegados a este
privilegio de utilizar cadenas de punto, se visualizará en la ter-
tipo string, con la de ventajas y minal la ventana principal de la
facilidades que aportan, caray. aplicación, tal y como se ve en
Todos y cada uno de estos la Figura 1. Seguidamente,
inconvenientes se resuelven con Figura 1: Nuestra primera aplicación, con marco y título. entramos en un bucle a la espera
el macro que se puede ver en el de que el usuario pulse la tecla
Listado 3. ¿Cómo funciona? Pues, como que size, es que se ha truncado la INICIO o HOME, lo que cierra el bucle,
se puede observar en el listado, lo cadena. En este caso lo que hemos de desencadenando la destrucción del
primero que hacemos es asignar espacio hacer es aumentar el valor de size hasta objeto application y cerrando el pro-
a una variable de tipo char* llamado fmt, n+1 (la longitud total más el crácter grama.
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- Compilación
(return_String). A continuación copi- tinuación. Una vez que tenemos el Para la compilación con curses, hemos
amos el contenido de return_String a tamaño adecuado, volvemos a asignar la de enlazar con la librería ncurses. Si
fmt. a continuación asignamos un poco cadena a p y podemos salir del bucle y además empleamos paneles para poder
de espacio (size en bytes) a otra variable asignar la cadena contenida en p a solapar ventanas, hemos de incluir la
char* llamado p. Esta variable contendrá return_String y proceder a liberar la librería panels y, por supuesto, hemos de
la cadena procesada. Seguidamente, memoria asignada a p y a fmt. Este inge- enlazar las clases que hemos creado.
creamos la cadena final con un límite de nioso truco viene de la página man de Para todo ello existe un sencillo Makefile
size bytes. La función vsnprintf() asigna vsnprintf(), si bien ha sido adaptado que se puede descargar junto con el resto
tantos bytes a p como los indicados en para que por un extremo entre una vari- del código fuente de [2].
size, por tanto, no es posible excedernos able tipo string sin los otros parámetros
de la cantidad de memoria asignada a p para formatear y por el otro salga una Conclusión
y evitamos posibles fallos de seg- variable string con todos los parámetros Si bien parece que es poco lo obtenido
mentación. Ahora bien, si toda la cadena dispuestos limpiamente en su interior. hasta ahora, hemos sentado las bases
no cabe en esos size bytes, vsnprintf() Toda la basura se recoge, la memoria para una aplicación mucho más com-
devuelve el número de bytes que hubiera reservada para las cadenas se libera, pleja. Podríamos tomar lo desarrollado
cabido. Es decir, si n resulta ser mayor todo queda inmaculadamente limpio tras como una plantilla para un programa
su ejecución. Este macro no produce una funcional e ir insertando nuevas fun-
Listado 4: principal.cpp compilación limpia. A la hora de compi- cionalidades con un de mínimo esfuerzo.
lar con g++ genera una advertencia El mes que viene seguiremos utilizando
01 #include "application.h"
allá donde se emplee que reza: curses para implementar una aplicación
02
y veremos como crear ventanas modales
03 int main()
warning: second parameter ofU de diálogo, como crear botones y otras
04 {
`va_start' not lastnamedU funcionalidades que nos demostrarán
05 int ch;
argument que los interfaces de texto siguen
06 application my_App(TRUE,"Mi
estando vivitos y coleando ■
Aplicación número %i",1);
Esta advertencia surge debido a que el
07
08
compilador es incapaz de reconocer una RECURSOS
cadena de tipo string como el último [1] Curses en plataformas Windows:
while((ch=my_App.wGetch())!=KE
argumento definido antes de la ristra de http://www.funet.fi/pub/win-nt/curses/
Y_HOME)
argumentos indefinidos. Sin embargo, el http://www.crystalcom.com/crs_swin.
09 {
programa acaba compilando y se ejecuta htm http://www.eunet.bg/simtel.net/
10
sin problemas. msdos/screen.html
11 }
12 [2] Las fuentes completas, con ficheros de
13 my_App.~application();
Explotación
inclusión, para el programa descrito en
Por fin hemos llegado al momento de ver
14 exit(0); este artículo http://www.linuxnewmedia.
nuestras clases en acción. Si miramos el
15 } es/magazine/numero1/descargas/curses
Listado 4, vemos que la función main de

www.linuxmagazine.com.es Número 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 módulos Perl de Post-

Script, una base de datos y el listado

de este artículo forman una solución

perfecta para crear sobres para

envíos masivos de correo.

POR MICHAEL SCHILLI

Prajuab Manklang, visipix.com


L
inux puede hacer más o menos no perderme, el menú de arranque, y datos Windows no fue un problema al
cualquier cosa. Leer imágenes digi- meterme en mi semi-olvidada insta- usar el formato de separadores mediante
tales desde cámaras, reproducir lación de Windows, desde el cual, por comas (CSV). Todo lo que tuve que
pistas digitales, escribir CDs, incluso supuesto, no tenía acceso ni a la mitad hacer a continuación fue generar un
conseguir que un escáner USB funcione de las herramientas a las que Linux me archivo PostScript para cada sobre y
(con algo de ayuda de Xsane). Pero a tiene acostumbrado y sin las cuales me luego enviar esos archivos a la impre-
título personal tenía que utilizar Win- siento totalmente desamparado. Un sora. Y esto es un juego de niños con
dows de vez en cuando para realizar una montón de trabajo para imprimir unos módulos CPAN como PostScript::File y
tarea en concreto: a la hora de remitir sobres. Solía usar un viejo programa de PostScript::TextBlock, como [2] nos dirá.
varias cartas iguales a distintos desti- Windows para esta tarea, pero eso se PostScript es básicamente otro lenguaje
natarios, las direcciones de los cuales se acabó. Existe un utilísimo programa bajo de programación. Los archivos Post-
extraía de una base de datos, tenía que Linux que llamado Ghostscript que Script están hechos de texto ASCII
slirme de mi adorado Linux, rearrancar puede convertir nuestra vieja impresora legible y contienen una lista de coman-
el ordenador, no distraerme ni ir a por un doméstica en una fabulosas máquina dos necesarios para generar una página
café mientras la máquina arrancaba para PostScript. impresa.
Si nuestra distribución no se ha ocu-
Michael Schilli tra- pado ya de esto, véase [1] para saber Pintando mediante números
baja como ingeniero como se hace. Como muestra la figura 1, No obstante, PostScript usa el llamado
Web en la empresa
THE AUTHOR

la exportación de datos desde la base de sistema de coordenadas matemáticas y


AOL/Netscape en
Mountain View, Cali-
fornia. Escribió “Perl
Power“for Addison-
Wesley y puede ser
contactado en la dirección
mschilli@perlmeister.com. Su página
web es http://perlmeister.com.
Figura 1: Los campos en el archivo de dirección separados por comas.

38 Número 01 www.linuxmagazine.com.es
Perl DESARROLLO

esto algo muy poco habitual en un cio del campo dirección, si no que Trabajo Manual vs
programa de composición. El origen del indicamos la posición de la esquina Automatizado
sistema coordeandas es la esquina derecha inferior del bloque de texto. Esto La línea 23 interpreta cualquier línea que
inferior izquierda de la página. Los nos asegura que el bloque siempre comienza con el símbolo # y un espacio
valores positivos del eje x arrancan acabará en la misma posición al margen en blanco como comentarios. Esto es
desde la izquierda y se extienden hacia de las variables que usemos o la larga muy útil si solo queremos imprimir algu-
la derecha y los valores positivos de y que sea la dirección. nas entradas. Facilita muchísimo la tarea
van incrementando de valor de abajo En cuanto al programa, el código de poder “comentar” y excluir todas las
arriba, tal y como nos enseño nuestro ejemplo que se muestra en el listado 1 entradas que queramos evitar imprimir-
viejo maestro de matemáticas en nuestro define una constante Sender (línea 14). con el símbolo #. El comando split de la
colegio de secundaria. PostScript usa Ésta lee los datos de un archivo .csv e línea 24 divide líneas donde aparecen
puntos pica o PostScript, que miden imprime un sobre como los mostrados comas separadoras. map elimina las
aproximadamente 1/3 de milímetro. en las figuras 2 ó 3 para cada dirección comillas dobles. Como la sustitución
Como ejemplo de lo que se puede con- que encuentre. s/"//g; no devuelve una cadena como
seguir con PostScript, los siguientes resultado válido, $_; simplemente se
comandos imprimirán el nombre John Importación desde Windows añade.
Doe en el recuadro de la dirección de un $ADDR_CSV en la línea 13 especificamos La línea 27 crea un objeto
sobre: el nombre del archivo de direcciones que PostScript::File que usa la palabra clave
debe tener la misma estructura que el landscape para rotar el formato de la
0 setgray 401.95 156 moveto mostrado en la figura 2. El comando para página. reencode => 'ISOLatin1Encod-
/Helvetica-iso findfont enviar un archivo PostScript a nuestra ing' proporciona soporte para todos las
18 scalefont setfont impresora se define en la línea 17 caracteres Latin1. El formato del sobre se
(John Doe) show ($PRINT_CMD). Si deseamos hacer una fija en Envelope-DL. Si necesitamos un
prueba sin malgastar papel sustituiremos formato diferente para utilizar un sobre
Empezando en la esquina izquierda infe- "lpr" por "ghostview" para enviar sobres de distinto tamaño no tendremos
rior del sobre, nos iríamos casi 402 virtuales para que se visualicen en nues- ninguna dificultad para modificar el
puntos hacia la izquierda y 156 hacia tra pantalla. archivo. Un sobre DIN A6 tienen unas
arriba para imprimir las letras que ven El código de la línea 19 abre el archivo medidas aproximadas de 10.47 centímet-
entre los paréntesis en la fuente especifi- de direcciones y el bloque while que ros de alto por 14.81 centímetros de
cada (Helvetica-iso) y con el tamaño comienza en la línea 22 se repite con las ancho. Para que esto se aplique en nue-
especificado (18 puntos) y de izquierda a entradas que son analizadas usando stro porgrama, utilizaremos el siguiente
derecha del papel. expresiones regulares. En lugar de esta bloque de código:
Para empezar a programar con Post- técnica podríamos haber usado el
Script bajo Perl, CPAN proporciona los módulo CPAN Text::CSV_XS, aunque my $ps = new PostScript::File(
módulos PostScript::File y PostScript:: esto podría haber sido excesivo para las landscape => 1,
TextBlock para simplificar el asunto. El direcciones de nuestro ejemplo, pues son reencode => 'ISOLatin1Encoding',
primero sirve para insertar la cabecera extremadamente simples y no tienen width => cm(10.47),
PostScript de la siguiente manera: complicaciones como comillas o comas height => cm(14.81),
embebidas. );
%!PS-Adobe-3.0

lo cual se ocupa de cosas como la ori-


entación de la página, los bordes y el
orden de la página. PostScript::TextBlock
acepta líneas múltiples y escribe desde la
coordenadas indicadas. No obstante
podemos esperar muchas horas de diver-
sión realiyando ajustes en los
parámetros de cada módulo hasta que
consigamos producir el formato deseado
en el lugar adecuado de la página.
Normalmente se utiliza el siguiente
formato: el bloque de texto con la direc-
ción del remitente comienza aproxi-
madamente 20 milímetros por encima de
la esquina inferior derecha en las direc-
ciones 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 Número 01 39
DESARROLLO Perl

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

40 Número 01 www.linuxmagazine.com.es
Perl DESARROLLO

archivo, pero como no espera el sufijo


.ps, el sufijo se quita primero de la línea
55 y luego el resultado es escrito a $base.
Tras llamar al comando de impresión
en la línea 59, depende de la línea 63 el
que se elimine el archivo temporal obso-
leto. textbox() en la línea 68 crea un
Nuevo objeto PostScript::TextBlock y
llama al método addText. Éste espera el
nombre de la fuente y su tamaño, el
valor del espaciado interlineal ($leading)
y el texto que se debe fijar.
Para determinar el tamaño de la caja
de texto que se generará, se llama a
tb_width() y tb_height() (tb significa
bloque de texto), definidas más abajo.
Mientras que tb_height simplemente
necesita multiplicar el espacio interlineal
Figura 3: … o largo, el offset se mantiene inalterado por el número de líneas, calcular el espa-
cio horizontal usado es más complicado
La línea 36 guarda los campos de direc- sobre y simplemente debemos restar debido a la variación en la anchura de
ción en las variables $last, $first, $city y cm(2) de esta en la línea 42. los caracteres.
$str. La línea 39 llama a la función Debemos saber que PostScript::File
textbox() (ver una descripción en mantiene la noción de ancho y alto al Asistente para Medir Fuentes
detalles de esta función más adelante), margen de que usemos el modo land- Afortunadamente hay un módulo lla-
que espera unas líneas que contengan el scape en el que el papel se rota 90º. En mada PostScript::Metrics con una función
nombre de la fuente y su tamaño y el nuestro caso, get_width() nos muestra la llamada stringwidth() que usa tablas
espaciado interlineal en puntos Post- altura y get_height() la anchura. Write incrustadas de fuentes para resolver
Script. Hemos decidido usar Helvetica-iso devuelve una lista en la que el primer estos problemas. La mala noticia es que
por que está instalada por defecto. El elemento es el código PostScript del el módulo nunca ha oído hablar de Hel-
sufijo -iso también soporta caracteres bloque de texto. La línea 43 añade este vetica-iso. Simplemente quitando el
acentuados. textbox() nos devuelve 3 código a la página PostScript actual. sufijo -iso de la línea 96 resolvemos este
valores: un objeto Post- Script::TextBlock Se utiliza el mismo procedimiento para problema, pero impedimos que funcio-
y el ancho y alto de la caja de texto gen- el destinatario: la línea 46 concatena nen caracteres especiales. Esto nos lleva
erada en puntos PostScript. nombre y apellidos, la calle y la ciudad. a otra solución en la línea 101, donde
Más adelante, la línea 41 llama el La función addresseetextbox() usa una unos pocos caracteres son simplemente
método Write() usado por el objeto Post- fuente un poco mayor al igual que con el reemplazados por la letra A. si bien esto
Script::TextBlock para crear el código espacio interlineal. El offset en x desde la no genera un resultado preciso, sí solu-
PostScript. Write() espera 4 parámetros: esquina superior izquierda de la caja de cionó el problema de nuestro ejemplo.
ancho y alto del bloque de texto y las texto hasta el origen del PostScript se Reconozco que he tenido que usar
distancias en x e y desde el origen. La calcula restando a la longitud del sobre unos pocos de trucos en esta ocasión,
anchura y altura las proporciona la fun- ($ps ->get_height()) el ancho de la caja pero mi excusa es que he tenido que
ción textbox() llamada con anterioridad. de texto ($bw) menos 2 centímetros de encontrar la manera de resolver la
borde (cm(2)). El offset en y es la distan- incompleta implementación de los
Pensando en Offsets cia desde el borde superior de la caja de módulos PostScript::*. Es un precio que
El offset en x (la distancia desde el mar- texto hasta el límite inferior del sobre y estoy dispuesto de pagar, pues me per-
gen izquierdo) es de unos 2 centímetros, es el resultado de sumar 2 centímetros a mite elegir la libertad de Linux y evitar
que puede ser expresada utilizando la la altura de la caja de texto ($bh + todos esos arranques superfluos de Win-
función cm(), definida más abajo para cm(2)). dows. ■
convertir centímetros a puntos Post-
Script. El offset en y es más complicado Vida corta INFO
puesto que Write() espera una distancia La función tempfile() del modulo
[1] Como instalar impresoras en Linux:
desde el margen inferior cuando File::Temp crea un archive temporal con http://www.linuxprinting.org
nosotros necesitamos 2 centímetros el sufijo PostScript .ps en la línea 34 y
[2] Shawn Wallace,“Perl Graphics Program-
desde el margen superior. No debemos devuelve un handle de archivo que ming”: O’Reilly,2002
preocuparnos puesto que el método admite escritura y el nombre del archivo.
[3] Más información sobre PostScript: http://
$ps->get_ width() del objeto Post- El método output() llamado en la línea
www.mathematik.uni-ulm.de/help/pstut/
Script::File nos proporciona la altura del 56 escribe los datos PostScript a este

www.linuxmagazine.com.es Número 01 41
DESARROLLO Pear

Con forma de Pera

Cobertura Total
Si se escribe código en un lenguaje de alto nivel, como PHP, se asegura su fun-

cionalidad 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

L
a respuesta a esta preguntas está vidas sean más fáciles gracias a las
contenida en las palabras “API abstracciones. Cada función, expresión y
Genérica“. Haciendo uso de una API sentencia abstrae algún detalle especí-
genérica, nuestro código puede fun- fico del hardware del procesador al
cionar con diferentes servidores de bases programador por medio del lenguaje C. Aunque
de datos sin necesidad de tener que Esto se conoce como abstracción de bajo la may-
modificar los archivos de código fuente. nivel. oría de estos
Los desarrolladores de PHP son muy Otro ejemplo de abstracción se pro- parámetros son
conscientes de esta ventaja y, en los últi- duce cada vey que interactuamos con opcionales, la migración de código entre
mos años se han dirigido esfuerzos a una base de datos a través de cualquier bases de datos es aún más ardua. Toda
solventar la carencia de la que adolecía motor SQL. La programación de bases de conexión, consulta y manejo de errores
PHP en este área. Este mes, en nuestra datos por medio de SQL es una abstrac- debe ser reescrito para ajustarse a la
sección dedicada a PHP, Steven Goodwin ción de alto nivel. La base de datos (ya nueva base de datos cada vez que se
presenta PEAR:DB. sea MySQL, PostgreSQL u Oracle) puede desee utiliyar un sistema de almace-
funcionar de cualquier forma, ajustarse a namiento y su correspondiente motor
Arte Abstracto cualquier algoritmo y hacer uso de diferentes. Esto no sólo supone una
PEAR::DB es un módulo de PHP que per- cualquier archivo. Pero usando un modficiación en lo que se refiere al
mite el control de una base de datos sin lenguaje genérico (SQL) con el que nombre de la función sino que también
necesidad de especificar ningún servidor comunicarnos, no necesitamos preocu- cambia la estructura y el formato de los
de bases de datos en concreto. Esto sig- parnos más por los aspectos específicos. argumentos. Otro problema es que los
nifica que el mismo código se puede Al contrario, podemos dedicar nuestro códigos de error devueltos por el motor
utilizar para acceder a MySQL y Oracle, tiempo a tareas más importantes, como varían de sistema sitema, lo que hace
por poner un ejemplo. Así pues, ¿cómo crear consultas select e inner joins efi- que sean difíciles de interpretar. La solu-
funciona? Gracias a la abstracción, que cientes. ción a todos estos dilemas, ya la hemos
permite hacer una generalización de un Esta abstracción no se extiende a la mencionado, consiste en abstraer la fun-
sistema, o de una API, de modo que los forma en que programamos las bases de ción database_connect de la base de
detalles queden ocultos. La mayoría de datos, ya que cada una de ellas tiene su datos específica y usar una llamada a
nosotros usamos abstracciones (a propia API. Esto se ve en PHP, donde se una API genérica. Esto debe hacerse para
menudo sin darnos cuenta de ello). puede empezar un diálogo con una base cada función específica de la base de
Incluso los programadores de C, supues- de datos MySQL llamada fredbloggs datos. Desafortunadamente, si pre-
tamente los tipos más duros del mundo usando, tendemos crear la APi nosotros mismos,
del desarrollo software, hacen que sus esta tarea supone mucho trabajo
$db = Pero, al fin y al cabo, estamos
Acerca de Pear mysql_connect("localhost",U hablando de código libre, con una comu-
"myuser", "mypass"); nidad de desarrolladores muy activa, y
PEAR son las siglas de PHP Extension and
mysql_select_db("fredbloggs"); las buenas noticias son que alguien ya lo
Application Repository (aunque algunos
ha hecho por nosotros. Hay un par de
prefieren sustituir Application por Add-on) y
mientras que PostgreSQL necesita, APIs de bases de datos para PHP. El obje-
es una biblioteca de funciones de código
PHP, similar a CPAN de Perl. Además del tivo de este artículo es PEAR::DB, uno de
módulo para el manejo de bases de datos $db = los muchos módulos PEAR (ver cuadro
(DB), también hay código para el manejo de pg_connect("host=localhostU Acerca de PEAR) disponible en [1]. Está
HTML, autenticación y criptografía. dbname=fredbloggs user=myuserU bajo desarrollo constante e incluye a
password=mypass"); algunos miembros del equipo del núcleo

42 Número 01 www.linuxmagazine.com.es
Pear DESARROLLO

de PHP. La versión actual considerada de la claridad) nos encontramos con no


estable es la 1.6.0. Para aquellos que menos de 5 referencias separadas a
DSN as array
01 $dsn = array(
quieran comparar alternativas están tam- MySQL. En vez de referenciar la tabla
02 'phptype' => "mysql",
bién ADOdb [2], Metabase [3] y PHPlib con tv.channels, algunos programadores
03 'hostspec' => "localhost",
[4]. prefieren especificar una base de datos
04 'database' => "tv",
La adopción de MySQL ha sido, a la por defecto usando:
05 'username' => "www-data",
vey que una bendición, una maldición
06 'password' => ""
para los desarrolladores de PHP. En el mysql_select_db("tv");
07 );
lado positivo podemos dqecir que se
08 $db = DB::connect($dsn);
integra bien con la instalación por Esta función es equivalente al comando
defecto, significando que cualquiera use en el prompt de MySQL, pero añade
puede desarrollar buenos sitios webs con otra llamada específica a MySQL. PEAR el manual on-line en [6] contiene
bases de datos con el mínimo esfuerzo. En el momento de cambiar a un nuevo toda la información necesaria para llevar
Desafortunadamente, esto lleva a creer a servidor de base de datos, nos encon- a cabo la instalación y configuración del
muchos desarrolladores que no hay otros tramos conq que cada referencia a mysql paquete. Otra opción consiste en copiar
sistemas de bases de datos. O que no tendría que ser rescrita. Con más fun- los archivos en el directorio home
están bien soportadas. Nada más lejos de ciones, manipulando más bases de (~/pear/) y modificar el path de PHP.
la realidad, como puede verse en la tabla datos, la cantidad de código redundante Esta alternativa será necesaria cuando el
2, Bases de datos soportadas. Para mayor crece de manera exponencial hasta el usuario no tenga los permisos de root en
información se puede consultar el punto de ser inmanejable. Normalmente la máquina, como es el caso de muchos
archivo docs/STATUS. la única concesión a la hora de mantener servicios de hosting. Por ejemplo:
En este artículo utilizaremos el código al migrar a otro host consiste
PEAR::DB con MySQL para adminsitrar en un archivo independiente con el nom- <?php ini_set('include_path',U
una base de datos que contenga informa- bre del host, el usuario y la contraseña, '~/pear/lib'.PATH_SEPARATOR.iniU
ción sobre cadenas de televisión y su por ejemplo, podemos tener un fichero _get('include_path'));?>
sintonía. Esto podrías servir, por ejem- como dbase.inc:
plo, para controlar programáticamente Ahora se dispondrá de acceso a nuevas
una tarjeta de televisión, permitiendo $dbhost = 'localhost'; funciones de bases de datos, todas ellas
que se sintonizase cada canal a través de $dbuser = 'www-data'; de acuerdo con las convenciones de
una aplicación. $dbpass = ''; nombrado de PEAR. ¿Dónde empezar? El
$dbname = 'tv'; lugar obvio es por las funciones básicas,
Manos a la obra connect y close. Habiéndole echado un
Pondremos las entradas (emisoras, Pero normalmentes esto suele ser muy vistazo previo a las versiones de MySQL
canales y nombres) en una base de insuficiente. Parte de lo anterior, necesi- y PostgreSQL, para empeyar a utilizar
datos. De modo que pueda ser usado tamos una capa de abstracción, como PEAR::DB se requiere que el desarrol-
como parte de una aplicación para el PEAR::DB. La mayoría de las instala- lador adopte un ligero cambio de
control de una cadena de TV más ciones PHP incluyen la biblioteca perspectiva.
grande, ver Listado 1. PEAR::DB por defecto, y se puede encon- Por ejemplo, para bases de datos que
Para empezar, hay que tomar este sql- trar los módulos que lo componen en precisan más (o menos) parámetros que
dump e introducirlo en la base de datos /usr/share/pear. Para confirmar que está las dos mencionadas, una función
de la forma habitual, permitiendo el instalado en el sistema y que se halla en simple que sustituya los parámetros
acceso al usuario apropiado (www-data, la ruta de acceso a ficherso de inclusión no funcionará. En vez de esto, debe-
por ejemplo). Esta base de datos puede de PHP, podemos crear una fichero test- mos especificar un Nombre de Fuente
ser accedida por MySQL con el Listado 2. pear.php con el siguiente contenido: de Datos o DSN. Esto incluye todos los
En esta sección de código (de la que se posibles argumentos dentro de una
ha extraído el manejo de errores en aras <?php require_once 'DB.php'; ?> cadena única con formato. El formato
completo es:
Tabla 1: Opciones de portabilidad Si lo anterior no
Opción Descripción funciona, se pue- phptype(dbsyntax)://username:U
DB_PORTABILITY_LOWERCASE Convierte los nombres de campos y tablas a minúscu de instalar o bien password@protocol+hostspec/U
las (en los fetch y get) usando el PEAR databasename
DB_PORTABILITY_RTRIM Elimina los espacios en blanco de la derecha Packet Manager
DB_PORTABILITY_DELETE_COUNT Informa siempre del número de filas borradas (tecleando pear El DSN tiene el aspecto de una URL.
DB_PORTABILITY_NUMROWS Una copia del numRows de Oracle install DB), o Describe donde conectarse, como conec-
DB_PORTABILITY_ERRORS Convierte los números de error entre distintas bases manualmente con tarse y que base de datos y opciones
de datos
un tarball. Para utilizar una vez establecida la conexión.
DB_PORTABILITY_NULL_TO_EMPTY Convierte los nulls en cadenas vacías(en los fetch y
más detalles de la Estas líneas recogen dos partes. La
get) porque Oracle no los diferencia
instalación de primera parte describe los parámetros

www.linuxmagazine.com.es Número 01 43
DESARROLLO Pear

específicos del servidor de base de datos dantes de desarrollo (para controlar la Entonces, tendremos que adaptar nues-
e incluye el tipo de base de datos (lla- cantidad de mensajes de depuración pro- tras funciones existentes para usar el
mado phptype, ej. mysql) y cualquier ducidos). Como estas opciones pueden nuevo objeto y sus funciones miembros
opción específica dada por dbsyntax. variar entre consultas específicas, no las asociadas. Esto no es difícil, ya que
Una lista de phptypes se muestra en la incluiremos dentro del DSN. Por el con- tienen nombres muy parecidas a las ver-
Tabla 2. El ejemplo citado de dbsyntax es trario crearemos un array detallando las siones originales de MySQL pero
el nombre de un driver específico opciones y lo pasaremos como argu- siguiendo las convenciones de nombres
cuando se usa una conexión ODBC (ej. mento a la función DB::connect de forma de PEAR. Así pues, mysql_query se con-
access, db2, mssql). Esto no es difícil de separada. vierte en query, por poner un ejemplo.
determinar, pero afecta más a los usuar- Las funciones básicas aparecen en el Lis-
ios de Windows que a nosotros, por ello // Recordar que estas variablesU tado 3.
no tenemos que profundizar más en este han de ser declaradas de formaU
tema. global Al grano
La segunda parte del DSN contiene $dsn = "$dbbackend://$dbuserU Como todas las peticiones a la base de
todo aquello que es dependiente de la @$dbhost/$dbname"; datos pasan por el controlador
base de datos, como el nombre del host, $options = array('debug' => 2); PEAR::DB, el código tiene que tener la
el puerto, el nombre del usuario y la con- $db =& DB::connect($dsn,U habilidad de cambiar y modificarse en
traseña. Como en la típica función $options); las peticiones. Esto se hace en aras de
mysql_connect, no todos los parámetros una mayor portabilidad. Y podemos
son obligatorios y pueden ser omitidos si Tenemos la posibilidad de realizar modi- darle más o menos opciones haciendo
no son necesarios. Por ejemplo: ficaciones en estos parámetros en uso del método setOption que ya hemos
cualquier momento con la utilización de visto con anterioridad. Este método per-
mysql://www-data@localhost/tv la siguiente función: mite establecer un número diferente de
opciones conforme a las necesidades que
Naturalmente, nuestro código final alma- $db->setOption('debug', 0); precisemos.
cenará todos estos parámetros en un Estas opciones normalmente están
archivo genérico dbase.inc, como se En el caso de que la conexión no falle para facilitar la portabilidad a costa del
mostró antes. El DSN no tiene por qué por algún motivo (echaremos un vistazo rendimiento, y dependen de una manera
ser especificado por una cadena. Tam- a las posibilidades del manejo de errores muy específica de cada aplicación. Otro
bién puede ser definido por un array más adelante), tendremos un objeto de uso al que se pueden aplicar es para per-
(como se muestra en el cuadro DSN base de datos llamado $db que se uti- mitir la coexistencia de código antiguo
como Array), haciendo ligeramente más lizará en todas las llamadas a esta base dentro de PEAR::DB. Dentro del
rápida la inicialización ya que no se ha de datos en concreto. Por ejemplo, para desarollo con bases de datos, la conevn-
de analizar la cadena. cerrar la conexión después de su uso, sión dicat que la mayoría de los nombres
El DSN nos permite especificar las haremos: de tablas aparecen en minúsculas. Si una
opciones de inicialización usando un aplicación está intentando obtener filas
método inspirado en una URL $db->disconnect(); usando una mezcla de mayúsculas y
?opcion1=valor1&opcion2=valor2. minúsculas, por ejemplo, entonces estos
Hay varias opciones disponibles, Tabla3: Soporte de provides nombres se convertirán de forma
incluyendo tanto características prácticas automática a minúsculas.
Cadena Funcionalidad
de conexión (uso de SSL) como ayu-
prepare Pre-comprueba la consulta SQL
$db->setOption('portability',U
pconnect Conexiones persistentes
Tabla 2: Bases de Datos transactions Activa el soporte de transac-
DB_PORTABILITY_LOWERCASE);
soportadas ciones
Nombre Palabra reservada limit Limita las consultas select Esto elimina las sorpresas que pueden
dBase dbase surgir cuando un trozo de código
FrontBase fbsql desconocido se ejecuta y da un error de
InterBase ibase Tabla 4: Diferencias entre ejecución. Otras opciones pueden verse
Informix ifx versiones de SQL en la Tabla 1.
Mini SQL msql Base de Dato Sintaxis SQL Los valores por defecto para estas
Microsoft SQL Server mssql DB2 select * from table fetch first 10 opciones tienen como objetivo mejorar
MySQL mysql rows only el rendimiento, pero está a la elección de
MySQL >=4.1 mysql4 Informix select first 10 * from table uno determinar cuales se deben estable-
Oracle 7/8/9 oci8 Microsoft SQL Server select top 10 * from table cer en la aplicación. Hay también
ODBC odbc MySQL select * from table limit 10 definiciones para DB_PORTABILITY_ALL
PostgreSQL pgsql Oracle 8i select * from (select * from y DB_PORTABILITY_NONE que permiten
SQLite sqlite table) where rownum <= 10
el activar todas las opciones o desacti-
Sybase sybase PostgreSQL select * from table limit 10
varlas respectivamente.

44 Número 01 www.linuxmagazine.com.es
Pear DESARROLLO

Sigamos adelante errores de PEAR_Error. Pero si una fun- 12 ob_end_clean();


No toda la funcionalidad está dirigida a ción de PEAR::DB produce un fallo, la 13 print "Se ha producido un
que el acceso a la base de datos sea más mayoría devolverá una instancia de la ERROR (".$err->
fácil. fetchRow, por ejemplo, hace mas clase error, desde connect hasta getRow. getMessage().")");
fácil obtener datos en un formato pro- Esta clase no solo controla los errores de 14 exit;
gramático más amigable. Actualmente PEAR, sino que también proporciona 15 }
PEAR_DB soporta tres formatos de este información extra al depurador, lo cual
tipo. Por defecto se usa un array, index- es útil a la hora de detectar problemas. Rizando el rizo
ado desde cero, como se muestra en el PEAR::DB realmente es tan fácil como
cuadro adjunto. Los parámetros opcio- $db=& DB::connect (&dsn); U parece. La complejidad viene del SQL.
nales de DB_FECTHMODE_ORDERED //DB::Error es los mismo queU PEAR::DB sólo sirve para protegerte en
han sido omitidos en el ejemplo anterior. PEAR::isError cierta medida de esto. SQL existe desde
Esto es útil para manejar bases de datos if (DB::isError($db)) hace muchos años. Debido a las guerras
genéricas o para mostrar tablas sin la { comerciales entre distintos vendedores,
necesidad de saber el nombre de sus print $db->getMessage(); han surgido distintas variantes de SQL
campos. print $db->getDebugInfo(); que son incompatibles entre sí.
En la mayoría de las situaciones, sin } Aunque ANSI ha intentado
embargo, los índices numéricos no son estandarizar algunas partes del lenguaje
lo suficientemente descriptivos y ten- Los errores también pueden ser captura- (las versiones básicas de select, insert y
emos que solicitar que los datos nos dos usando el manejo de errores update, las cuales son bastante porta-
sean devueltos en un array asociativo. estándar de PEAR. Esto se hace con unas bles), existen aún muchas diferencias.
De esta forma los resultados aparecen en funciones definidas por el usuario que Escribir SQL estándar es una tarea árdua
el código de una forma más legible a serán llamadas cada vez que un modulo en sí misma y hay que saber y adoptar
costa de sacrificar generalidad. de PEAR (como DB) genere un error. varias reglas. La mayoría de los progra-
Esta función puede usarse para generar madores expertos en bases de datos las
while($row = $result->fetchRowU una página HTML estándar para el conocen de forma instintiva, el resto de
(DB_FETCHMODE_ASSOC)) { usuario, al mismo tiempo que también los mortales tienen que aprenderlas de
print $row['station']." puede alertar al administrador del prob- tutoriales tales como [7].
- U lema. En algunos casos, podríamos desear
".$row['name']." (".$rowU El manejo de errores tradicionalmente usar diferentes consultas dependiendo
['channel'].")<br>"; } está combinado con las características de de como reaccione la base de datos. Esto
escritura en el buffer de salida de PHP, requiere trabajo extra ya sea de nosotros
Por último, fetchRow proporciona un permitiendo a cualquier página parcial- o de PEAR::DB. Desafortunadamente,
medio para usar las características de la mente generada sea eliminada del flujo una vez que hemos sacado la base de
orientación a objetos de PHP para de salida HTML. Como esto es una car- datos de la ecuación, no tenemos forma
devolver un objeto por cada fila de la acterística de PEAR, no de PHP, los alguna de saber si es capaz de hacer lo
tabla de resultados. Cada columna está errores tradicionales (como la división que pretendemos. PEAR::DB tiene
etiquetada como un atributo. De nuevo, por cero) no serán capturados por este conocimiento de este problema y utiliza
esto hace que el código sea más fácil de método. un método llamado provides.
leer, pero hace que la aplicación sea provides indica las características
menos genérica. 01 // Preparación del handler propias del servidor de base de datos
02 PEAR::setErrorHandling U que se esté usando, nos permite cambiar
while($row = $result->fetchRowU (PEAR_ERROR_CALLBACK,U entre dos consultas ‘afinadas a mano’
(DB_FETCHMODE_OBJECT)) { 'error_function'); para ayudarnos a mejorar el rendimiento
print $row->station." - U 03 //Activamos el buffer deU en casos especiales. Usamos las capaci-
".$row->name." (".$row->U salida dades (otra abstracción) en vez de
channel.")<br>"; } 04 ob_start(); funciones específicas de la base de datos
05 // Realizamos alguna tarea porque las cosas cambian. Por ejemplo,
Allanando el camino 06 PearVersion(); una versión posterior de la base de datos
Ningún programa está terminado sin un 07 // Volcamos el buffer aU podría soportar nuevas características o
control de manejo de errores y la docu- la salida (si todo ha ido U podría aparecer un nuevo tipo de servi-
mentación correspondiente. Ninguno de bien) dor en el mercado. El método PEAR::DB
los dos son atractivos desde el punto de 08 ob_end_flush(); provides suministra un medio para usar
vista del programador pero son muy 09 // Preparamos nuestro U la consulta más óptima en la base de
necesarios. Las opciones de manejo de handler datos sin la necesidad de entender nada
errores de PEAR::DB han sido unificadas 10 function U acerca de las nuevas bases de datos.
(como los códigos de error) y hacen uso error_function($err)
de las capacidades básicas de manejo de 11 { if ($db->providesU

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

Listado 1: La Base de Datos TV Listado 3: Convenciones para los


01 CREATE DATABASE IF NOT EXISTS tv; nombres PEAR
02 USE tv; 01 function PearVersion()
03 drop table IF EXISTS channels; 02 {
04 CREATE TABLE channels ( 03 global $dbname, $dbhost, $dbuser, $dbbackend;
05 station smallint(2) NOT NULL default '0', 04 $dsn = "$dbbackend://$dbuser@$dbhost/$dbname";
06 channel smallint(2) default NULL, 05 $db =& DB::connect($dsn);
07 name varchar(10) default NULL, 06 $query = 'SELECT * FROM channels';
08 PRIMARY KEY (station) 07 $result = $db->query($query);
09 ) TYPE=MyISAM; 08 while ($row = $result->fetchRow()) {
10 INSERT INTO channel VALUES (1,55,'TVE1'); 09 print "$row[0] - $row[2]($row[1])<br>";
11 INSERT INTO channel VALUES (2,62,'La 2'); 10 }
12 INSERT INTO channel VALUES (3,59,'Telecinco'); 11 $result->free();
13 INSERT INTO channel VALUES (4,65,'Antena 3'); 12 $db->disconnect();
14 INSERT INTO channel VALUES (5,37,'Canal +'); 13 }

('transactions')) explícitamente provocaría un montón de índice 2. Como empezamos a contar


print "OK! Están soportadas"; trabajo extra. desde 0, esto significa la tercera entrada.
También, como no podemos probar Si la consulta SQL select puede ser
El abanico de características para las que cada base de datos (incluidas las nuevas, modificada para crear una cadena ade-
podemos usar provides se muestran en la incluso las no escritas aún) nuestro cuada para la base de datos en cuestión,
Tabla 3. código se volvería no-portable de forma $db->provides("limit") ; devolverá alter,
En cada caso es posible que la base de muy rápida. Este problema es fácil de y la consulta será modificada por el con-
datos no soporte de forma nativa la car- resolver, sin embargo, empleando el trolador de PEAR::DB antes de ser
acterística. La palabra clave aquí es mismo principio de abstracción. pasada al servidor. Por otro lado, pro-
“nativa”, porque hay que diferenciar PEAR::DB proporciona un método lla- vides puede devolver emulate, porque el
entre el servidor de la base de datos y el mado limitQuery que oculta la sintaxis driver es capaz de capturar los resulta-
driver PEAR::DB. Por ejemplo, si la base precisa al usuario final y adapta de dos de las consultas fila a fila. O
de datos no soporta comandos forma adecuada la consulta al servidor. devolver false. Se debería siempre pre-
prepare/execute, el driver soportará la Esto obviamente tiene más sentido que guntar por las características de las bases
apariencia del comando de forma simu- escribir consultas separadas para cada de datos usando provides en vez de con-
lada. una de las bases de datos por nosotros fiar en nuestra experiencia o en la
Se puede estar tentado a usar provides mismos. memoria. Sin embargo, por compara-
para crear consultas completamente ción, el conjunto de controladores
diferentes para cada base de datos de $query = "SELECT name FROMU actuales proporcionan la funcionalidad
forma manual. En la mayoría de los channels";// sin referenciasU que muestra en la Tabla 5.
casos esto es innecesario y desde luego a límites aquí! En algunos casos raros, es necesario
es Una mala IdeaTM. La razón (algunos $result = limitQueryU saber la base de datos que se está uti-
dirían excusa) para este comportamiento ($query, 2, 1); lizando de forma precisa. Normalmente
viene de las extensiones que aparecen en debido a bugs conocidos en la base de
SQL. El ejemplo típico de este problema Este comando extrae una línea de resul- datos misma. Son un hecho de vida.
viene de las consultas select limitadas, tado de la consulta, empezando por el Pero si no podemos eliminarlos, ten-
que paran de pro- dremos que saber donde están para al
ducir resultados Listado 2: Acceso a MySQL menos poder evitarlos.
después de las
01 function GetStationsList()
primeras, digamos, print $db->phptype;
02 {
10 filas. La mayoría
03 $db = mysql_connect("localhost","www-data", "");
de las bases de Utiliza los mismos identificadores que se
04 $query = "SELECT * FROM tv.channels";
datos actuales son muestran en la tabla 2. Los detalles refer-
05 $result = mysql_query($query);
capaces de tener entes a los bugs conocidos en bases de
06 while ($row =
este comportam- datos concretas, van más allá del obje-
mysql_fetch_array($result,MYSQL_NUM)) {
iento, pero con tivo de este artículo.
07 print "$row[0] - $row[2]($row[1])<br>";
cadenas de consul-
08 }
tas SQL diferentes,
09 mysql_free_result($result);
Sólo para Ti
como se muestra Como complemento especial, PEAR::DB
10 mysql_close($db);
en la tabla 4. Codi- no sólo proporciona abstracciones de
11 }
ficar cada ejemplo bases de datos. También incluye algunas

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

Info que proporciona información sobre ciales, de manera que se pueda ejecutar
Example Interface Files cada columna del resultado, como es su múltiples veces con los datos diferentes
01 $tableinfo = nombre y tipo. Esto no es sólo útil mien- contenidos en dichas variables. Ver lis-
$result->tableInfo()); tras estamos depurando el programa, tado 6.
02 for($col=0; $col < sino incluso para crear aplicaciones de El método executeMultiple se evalúa a
$result->numCols(); $col++) { bases de datos generalizadas. Podemos la consulta SQL,
03 print colorear cada columna según su tipo, o
$tableinfo[$col]['name']." es resaltar algún campo clave. Para ver INSERT INTO channels (station,U
un ".$tableinfo[$col]['type']; como funciona esto, ver listado 4. name, channel) VALUES (6,
04 } Además del nombre y del tipo, se "Video",U
puede consultar la longitud de cada 0);
columna, flags (que indiquen si son INSERT INTO channels (station,U
ayudas para el manejo de datos, como claves primarias) y el nombre de la name, channel) VALUES (7,U
son numRows y numCols. tabla, usando la sintaxis apropiada. "PS2", 39);
Aunque la mayoría de las API soportan
print "La consulta selectU las consultas select, hay aún algunos executeMultiple se parará al primer error
produjo ".$result->numRows()U problemillas a solventar con otros tipos que ocurra. Para evitar esto, se necesi-
. " filas"; de consultas como los insert. Un método tará ejecutar cada consulta cada vez con
print "La consulta selectU interesante es affectedRows. Este el método execute. Por ejemplo,
produjo ".result->numCols()U método, como podrá se adivinar,
. " columnas"; devuelve el número de filas que han sido foreach ($data as $row) {
afectadas por una consulta insert, delete $db->execute($generic, $row);
Los resultados de estas consultas son o update. Hay también soporte para }
bastante autoexplicativas, y pueden ser generar IDs únicos usando funciones de
deducidas de la propia consulta select. secuencia, nextID, que es útil para Conivene siempre recordar que el array
Cuando la consulta es generada generar claves únicas, algo no soportado de datos empieza a indexarse desde cero.
automáticamente, podemos evitar tener de forma nativa en MySQL. Por ejemplo: En la mayoría de los casos se podrá ver
que contar las columnas manualmente. una mejora en la velocidad cuando
Podríamos usar estos valores para iterar // Obtención de un nuevo ID. varias entradas se introduzcan en la base
sobre los resultados. $id = $db->nextID('sequence'); U de datos de una vez. Este beneficio pre-
Hay también un método llamado table- // La secuencia será creada deU supone que la base de datos soporta esta
no existir característica de forma nativa, algo que
Listado 5 : assertExtension no siempre sucede.
Otra característica útil es el método de
01
if(DB::assertExtension("oci8")
clase (declarado static) assertExtension. Conclusión
Este método, siendo de clase, no Con PEAR::DB en el arsenal, se pueden
)
requiere de una instancia de la clase atacar la mayoría de las bases de datos,
02 print "Usamos Oracle si
base de datos para ser invocado e indi- sin tener que preocuparse de característi-
tenemos que...";
cará que características están incluidas cas no soportadas o de funciones no
03 if
en la instalación actual. En su forma disponibles. Usando las funciones y el
(DB::assertExtension("mysql"))
más útil, se puede determinar que bases amplio rango de métodos disponibles,
04 print "Usamos MySQL porque lo
de datos están instaladas en el sistema y podemos escribir en PHP buenas aplica-
entendemos mejor...";
seleccionar la más adecuada para usarla ciones para múltiples plataformas sin
en la aplicación. Ver Listado 5. preocuparnos de las minucias de la
Listado 6: Preparando una A pesar de su nombre, esto no es una batalla y así pues, podremos concen-
consulta aserción tal y como se suele entender trarnos en pensar en las estrategias para
tradicionalmente en programación, ya ganar la guerra. ■
01 $generic =
que no imprime ningún error y no tiene
$db->prepare("INSERT INTO
channels (station, name,
que cumplirse ninguna condición. Sim- INFO
plemente indica si una extensión existe o [1] PEAR: http://www.pear.php.net [2]
channel) VALUES (?, ?, ?)");
no. ADOdb: http://php.weblogs.com/adodb
02 $data = array (
Antes de terminar, mencionaremos de [3] Metabase: http://freshmeat.net/
03 array(6, "Video", 0),
pasada la pareja prepare y execute. pre- projects/metabase/ [4] PHPlib:http: //
04 array(7, "PS2", 39)
pare prepara (valga la redundancia) una phplib.sourceforge.net/ [6] Manula de
05 );
consulta para una ejecución repetida PEAR: http://www.pear.php.net/manual/
06 $res =
precompilándola en tokens. La consulta en/installation.cli.php [7] Como Escribir
$db->executeMultiple($generic, Código SQL Portable: http://php.weblogs.
estará preparada para admitir distinta
$data); com/portable_sql
información en unas variables espe-

www.linuxmagazine.com.es Número 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 dispone de otras características


que lo convierten en el lenguaje favorito
de una comunidad de desarrolladores
cada vez más amplia. Por ejemplo, per-
mite la declaración dinámica de vari-
ables, es decir, no tenemos que declarar
las variables y no tenemos que tener en
Python es un lenguaje potente, seguro, flexible… pero sobre todo sencillo y cuenta su tamaño, ya que son completa-
mente dinámicas. Dispone también de
rápido de aprender, que nos permite crear todo lo que necesitamos en nuestras un gestor de memoria que, de manera
similar al recolector de basuras de java,
aplicaciones, de forma rápida y eficaz. se encargará de liberar la memoria de
objetos no utilizados. Sin embargo, y al
POR JOSÉ MARÍA RUÍZ Y JOSÉ PEDRO ORANTES
igual que Java, no nos permite referirnos
a zonas de memoria a bajo nivel, como
puede hacerse con C.

P
ara empezar, debemos saber por estén desarrolladas, o bien podremos Además se puede combinar con otros
qué Python es interesante, por qué compilarlo obteniendo un Bytecode al múltiples lenguajes de programación.
es tan famoso y cada vez es más igual que java. Es portable y nos permite Podemos mezclar en nuestras aplica-
utilizado. Mirando un poco por Internet, ejecutar nuestros programas en ciones Python y Java (Jython), por ejem-
se pueden encontrar multitud de aplica- cualquier sistema operativo y/o arquitec- plo. O Python con C/C++, lo cual hace
ciones que nos muestran un poco las tura teniendo previamente el intérprete que resulte mas potente si cabe. Python
capacidades de este lenguaje de alto instalado en nuestro ordenador. Realizar también cuenta con una amplia bibliote-
nivel. Primero, Python es un lenguaje un programa bajo este lenguaje, segura- ca de módulos que, al estilo de las bib-
orientado a objetos, esto no significa mente nos costaría entre la mitad o la liotecas en C, permiten un desarrollo
que lo sea exclusivamente, podemos uti- cuarta parte del tiempo que tardaríamos rápido y eficiente.
lizarlo como queramos, aunque es mas en desarrollar el mismo programa en C/ La sencillez de Python también ayuda
natural utilizar su implementación de la C++ o Java esto hace que sea muy a que los programas escritos en este
OOP. Además, es libre y gratuito pudi- potente. Veamos una breve comparativa lenguaje sean muy sintéticos. Como
endo descargar el intérprete y su código con otros lenguajes: podemos ver en la comparativa anterior,
fuente. Nos permite programarlo como Hola Mundo en C. la simplicidad llega a ser asombrosa y
script, lo que posibilita ver el código solo hemos escrito un simple ejemplo. Si
fuente de aquellas aplicaciones que así main () este programa ya supone ahorrarte unas

48 Número 01 www.linuxmagazine.com.es
Python DESARROLLO

líneas de código, con una sintaxis tan Esto es importante porque, mientras la En lo que se refiere al tema de los
sencilla y ordenada podemos imaginar norma en la mayoría de los lenguajes es bucles en Python es algo especial. Puede
que un programa de 1000 lineas en Java, dejar al programador la decisión de la que estemos acostumbrados a los bucles
en Python podrían ser alrededor de 250. manera en que deben ser formateados tipo C:
Muy bien, ¿pero como se usa? los archivos fuente, en Python es obliga-
torio seguir una metodología. En Python for(int a = 1; a < 10; a++)U
Uso todo se hace de una sola manera, es printf("%d\n",a);
Para empezar a matar el gusanillo, parte de su filosofía: Solo Hay Una
podemos ir haciendo algunas pruebas Manera de Hacer Las Cosas. Sin embargo, en Python, se toma un
interesantes. Vayamos al intérprete Comencemos con lo más simple en todo enfoque funcional prestado de otros
Python. Para esto, basta con escribir lenguaje, la asignación a una variable: lenguajes como Lisp o Haskell. Se utiliza
‘python’ en cualquier shell en cualquier una función especial llamada range que
versión de Linux que tenga instalado el cantidad = 166.386 genera una lista de números:
intérprete (si no lo tienes instalado,
hazte con la última versión en [1]). Lo primero que hay que apreciar es que range(1,10)
Entonces podemos probar el “Hello no se usa el ;. Esto es una característica
World”: de las muchas que hacen a Python difer- generará una ristra de números del 1 al
ente. Una instrucción acaba con el 9. De manera que podemos utilizar una
>>> print 'Hello World' retorno de carro, aunque el ; se puede función range para crear un bucle for en
Hello World utilizar cuando tenemos dos sentencias Python de la siguiente manera:
están en la misma línea:
Simple, ¿verdad?, ahora podemos probar for i in range(1,10)
a utilizar algunas variables: cantidad = 166.386; pesetasU
= 3000 Este bucle iteraría con i desde 1 a 9,
>>> suma = 15 + 16 ambos inclusive. La versión del bucle
>>> Como es un lenguaje dinámico no hay while en Python es más normal…
>>> print 'el resultado de laU que declarar el tipo de las variables, pero
suma es: ', suma una vez han sido definidas, lo que se while(<I><condición><I>)
el resultado de la suma es: 31 hace asignándoles un valor, éstas
guardan su tipo y no lo cambiarán a lo al igual que if…
Es recomendable trastear un poco con largo de la ejecución del programa.
esto, antes de ponernos a programar algo Tenemos a nuestra disposición los oper- if (<I><condición><I>)
más complicado, ya que de esta manera adores de siempre (+, -, *, /, etc) y una
es más sencillo hacerse con la sintaxis vez que sabemos como manejarlos y ¿Por qué no hay puestos cuerpos de
mucho mas rápidamente viendo los como asignar las variables, podemos ejemplo en esos bucles? Pues porque
resultados de cada prueba. realizar algo útil, pero lineal. Para que la ahora viene otra novedad. En Python no
Veamos ahora alguna propiedad ejecución no sea lineal necesitamos los se usan las famosas { y } de C, Java y
interesante de Python. Los ficheros en bucles y los condicionales. otros lenguajes. Se decidió, y no a todo
Python, no tienen por que llevar exten-
sión ninguna aunque seguramente quer-
remos tenerlos diferenciados del resto de
nuestros ficheros. Para ello se utiliza la
extensión .py o bien .pyw. Imaginemos
que tenemos un ejemplo ejemplo.py, al
permitirnos usarlo como script, podemos
indicarle la ruta del intérprete en el ini-
cio (#!/usr/bin/python en nuestro caso)
y dándole permisos de ejecución (en este
caso, chmod +x ejemplo.py) obtenemos
un programa listo para correr
./ejemplo.py.

#! /usr/bin/python
print 'Hello World'<C>

Después de toda la introducción técnica


va siendo hora de que veamos como es
el formato de los programas en Python. Figura 1: Utilización de Python como una calculadora

www.linuxmagazine.com.es Número 01 49
DESARROLLO Python

el mundo le gusta, que se usaría la posi-


Listado 2: Adición y eliminación de elementos
ción como delimitador. Esto así suena
algo extraño, pero si se ve es mucho más
de una lista
sencillo: 01 >>> b = [ 1 , 2 , 1 ] 15 [2, 57, 1, 3]
02 >>> b.append(3) 16 >>> b.append(1)
>>> cantidad = 2 03 >>> b.append(4) 17 >>> b
>>> for i in range(1,10): 04 >>> b 18 [2, 57, 1, 3, 1]
print cantidad*i 05 [1 , 2 , 1 , 3 , 4 ] 19 >>> b.count(1)
06 >>> b.remove(1) 20 2
Comencemos mirando a ese :. Los dos 07 >>> b 21 >>> b.index(57)
puntos marcan el inicio de un bloque de 08 [2, 1, 3, 4] 22 1
código Python. Ese bloque aparecerá en 09 >>> b.pop() 23 >>> b.sort()
bucles, funciones o métodos. Si nos 10 4 24 >>> b
fijamos bien en la sangría de la siguiente 11 >>> b 25 [1, 1, 2, 3, 57]
línea, vemos una serie de espacios 12 [2, 1, 3] 26 >>> b.reverse()
(logrados pulsando la tecla TABU- 13 >>> b.insert(1,57) 27 >>> b
LADOR) y una sentencia. Esos espacios 14 >>> b 28 [57, 3, 2, 1, 1]
son vitales ya que marcan la existencia
de un bloque de código. Además, son
obligatorios. los argumentos no se les asignan tipo. Objeto y podemos utilizar sus métodos:
Este es uno de hechos más controver- Existen muchas posibilidades en los
tidos de Python, pero también mejora argumentos pero los veremos más tarde, >>> print a.getCantidad()
mucho la legibilidad del código. Sólo de momento veamos un ejemplo sencil- 20
existe una manera de escribir Python así lo: >>> a.setCantidad(12)
que todo el código Python se parece y es >>> print a.getCantidad()
más fácil de entender. El bloque acaba >>> def imprime (texto): 12
cuando desaparecen esos espacios: print texto
>>> imprime("Hola mundo") No hay que preocuparse por la adminis-
>>> for i in range(1,10): Hola mundo tración de la memoria del objeto ya que,
print cantidad*i >>> cuando a no apunte hacia él, el gestor de
cantidad = cantidad + 1 memoria liberará su memoria. Ya ten-
... Vuelve a ser sencillo. ¿Y los objetos? emos las bases para construir algo
>>> Pues también son bastante simples de interesante. Por supuesto nos dejamos
implementar. Podemos ver un ejemplo infinidad de cosas en el tintero, pero
Funciones y Objetos en el Listado 1. Con class declaramos el siempre es mejor comenzar con un
Tenemos ya las piezas fundamentales nombre de la clase, y los def de su interi- pequeño conjunto de herramientas para
para entender las funciones y los obje- or son los métodos. El método __init__ empezar a usarlas.
tos. La declaración de una función en es el constructor, donde se asignan los
Python tiene una sintaxis muy simple: valores iniciales a las variables. __init__ Estructuras de datos
def nombre_funcion (<listaßß argu- es un método estándar y predefinido, lo Una de las razones por las que los pro-
mentos>): <CUERPO> que quiere decir que tendremos que usar
Fácil ¿no? Al igual que las variables, a ese y no otro para inicializar el objeto. Listado 3: Ejemplo de un
Todos los métodos, aunque diccionario
Listado 1: Una clase sencilla no acepten valores, poseen un 01 >>> dic = {}
parámetro self. Éste es otro
01 >>> class Objeto: 02 >>> dic["Perro"] = "hace guau
punto controvertido en
02 def __init__ (self, cantidad): guau"
Python, self es obligatorio,
03 self.cantidad = 03 >>> dic["Gato"] = "hace miau
pero no se usa al invocar el
cantidad método. Se puede ver un miau"
04 ejemplo de clase en el Listado 04 >>> dic["Pollito"] = "hace pio
05 def getCantidad(self): 1. ¿Cómo se crea el objeto? pio"
06 return self.cantidad Fácil: 05 >>> dic
07 06 {'Perro': 'hace guau guau',
08 def setCantidad(self, >>> a = Objeto(20) 07 'Gato': 'hace miau miau',
cantidad): 08 'Pollito': 'hace pio pio'}
09 self.cantidad = Es como llamar a una fun- 09 >>> dic["Perro"]
cantidad
ción. A partir de este momen- 10 'hace guau guau'
to a es una instancia de

50 Número 01 www.linuxmagazine.com.es
Python DESARROLLO

gramas scripts de Python resultan tan


potentes es que nos permiten manejar
estructuras de datos muy versátiles de
manera muy sencilla. En Python estas
estructuras son las Listas y los
Diccionarios (también 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 fábrica. Las listas de
Python también vienen provistas de
muchas más opciones que sus seme-
jantes en otros lenguajes. Por ejemplo,
vamos a definir una lista que guarde una
serie de palabras:

>>> a = ["Hola", "Adios",U


"Buenas Tardes"] Figura 2: Definición de una función en Python
>>> a
['Hola', 'Adios', 'BuenasU ahí que su nombre sea diccionario implementar algo que sea creativo. Este
Tardes'] (véase el Listado 3). Las listas y los dic- programa es el que se usa en el libro “La
cionarios se pueden mezclar: diccio- práctica de la programación” de Pike y
Python indexa comenzando desde 0, de narios de listas, listas de diccionarios, Kernighan para ilustrar como un buen
manera que ‘Hola’ es el elemento 0, diccionarios de listas de diccionarios, diseño sobrepasa al lenguaje que usemos
‘Adios’ el 1 y ‘Buenas Tardes’ el 2, y la etc. Ambas estructuras combinadas para ejecutarlo. En el libro se implemen-
longitud de la lista es 3. Podemos com- poseen una enorme potencia. ta el diseño en C, C++, Java, Perl y
probarlo de esta forma: AWK. Nosotros lo haremos en Python
Algoritmos + Estructuras de (ver Listado 4).
>>> a[1] datos = Programas El programa acepta un texto como
'Adios' Ahora nos toca poner todo esto en prác- entrada y genera un texto como salida,
>>> len(a) tica. Lo normal es hacer un programa pero este segundo texto no tiene sentido.
3 sencillo. Pero en lugar de eso vamos a Lo que queremos hacer es generar texto

Podemos añadir elementos a las listas de


varias maneras. Nos contentaremos con
ver las más normales. Añadamos un ele-
mento y eliminemos otro (ver Listado 2).
Las listas también se pueden comportar
como una Pila, con las operaciones
append y pop. Con insert hemos intro-
ducido un elemento en la posición
especificada (recuerda que siempre
comenzamos a contar desde 0). La facili-
dad con la que Python trata las listas nos
permite usarlas para multitud de tareas
lo que simplificará mucho nuestro traba-
jo.
A pesar de su potencia, las listas no
pueden hacerlo todo y existe otra estruc-
tura que rivaliza con ellas en utilidad, los
Diccionarios. Mientras las listas nos per-
miten referenciar a un elemento usando
un número, los diccionarios nos per-
miten hacerlo con cualquier otro tipo de
dato. Por ejemplo, con cadenas, bueno
más bien casi siempre con cadenas, de Figura 3: El programa de ejemplo aplicado al prólogo de El Quijote

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

sin sentido pero con estructuras que sí lo plo alguna noticia de política de un crearemos un diccionario de la siguiente
tengan. Puede parecer algo muy compli- diario digital o alguna parrafada de forma:
cado, pero no lo es tanto si usamos la cualquier weblog de moda. En nuestro
técnica de las cadenas de Markov. La caso, hemos escogido parte de la intro- >>> dict['La', 'gente'] =U
idea es comenzar con las dos primeras ducción a la obra maestra de la ['está']
palabras, ver si esa combinación se Literatura española, “El Ingenioso >>> dict['La',U
repite en el texto, hacer una lista con las Hidalgo, Don quijote de la Mancha”. 'gente'].append('opina')
palabras que siguen a alguna de las ocur- Este programa es especialmente intere- >>> dict['La', 'gente']
rencias de esa combinación, elegir una sante y didáctico porque nos permitirá ['está','opina']
palabra al azar de las que las suceda y utilizar las estructuras de datos que
reemplazar la primera por la segunda y Python implementa, en particular en los Vamos haciendo esto de manera sucesi-
la segunda por la palabra escogida. De diccionarios y las listas, para generar una va con todos los conjuntos de dos pal-
esta manera vamos generando un texto tabla donde los índice serán cadenas de abras adyacentes y obtendremos un dic-
que, aunque carece de sentido, normal- texto. cionario en el que muchas entradas ref-
mente se corresponde con la estructura Veamos como funciona. Lo primero es erenciarán a una lista de más de un ele-
de un texto normal aunque disparatado. ir introduciendo en el diccionario dos mento, cuantas más haya mejor.
Para hacer las pruebas es recomend- prefijos como índice y las palabras que La magia aparece cuando generamos
able conseguir un texto de gran tamaño, les siguen en el texto dentro de una lista el texto, puesto que lo que hacemos es
en textos pequeños no surtirá tanto efec- referenciada por ellos. Eso es un dic- comenzar por imprimir las dos primeras
to nuestro programa. En el proyecto cionario con dos palabras como índice palabras y cuando existan varias posibil-
Gütenberg podemos conseguir infinidad que contiene una lista: idades para esa combinación (como con
de textos clásicos de enorme tamaño en el ejemplo de ‘La’ y ‘gente’), escogere-
ASCII. Pero somos conocedores de que DICCIONARIO[ palabra 1,U mos aleatoriamente entre ellas.
no todo el mundo entiende el idioma palabra 2] -> LISTA[palabra,...] Imaginemos que escogemos ‘opina’,
anglosajón, así que en lugar del proyecto entonces escribimos ‘opina’ por la pan-
Gütenberg podemos coger cualquier O sea, si tenemos las palabras “La gente talla y buscamos en la entrada de dic-
texto que queramos modificar, por ejem- está … La gente opina” en nuestro texto, cionario ['gente','opina'] y así sucesiva-
mente, hasta llegar a no_palabra. Para
Listado 4: markov.py genera un texto no-tan-aleatorio entender mejor el funcionamiento del
01 #!/usr/local/bin/python 23 w1 = w2 programa, te recomendamos que copies
02 24 w2 = palabra
el código fuente y le pases unos ejemplos
(por ejemplo con cat texto.txt |
03 #Importamos dos módulos 25
./markov.py) para que veas los resulta-
04 26 # Fin de archivo
dos. Después podemos intentar realizar
05 import random 27 dict.setdefault((w1, w2), []
cambios en el programa, por ejemplo, en
06 #utilizado para escoger un ).append(no_palabra) lugar de utilizar 2 palabras como índice
elementos 28 del diccionario podemos probar con 1 o
07 #aleatorio de una lista 29 # GENERAMOS LA SALIDA con 3, y también con el tamaño del texto
08 30 w1 = no_palabra que se le pase. Con un poco de experi-
09 import sys 31 w2 = no_palabra mentación es posible conseguir resulta-
10 #permite acceder a algunas 32 dos muy interesantes. ■
clases 33 # puedes modificarlo
11 #utilizadas por el intérprete 34 max_palabras = 10000 RECURSOS
12 35 [1] Decargas de Python
13 no_palabra = "\n" 36 for i in xrange(max_palabras): http://www.python.org/download/
14 w1 = no_palabra 37 nueva_palabra =
15 w2 = no_palabra random.choice(dict[(w1, w2)])
José María Ruíz está realizando el
16 38 Proyecto Fín de Carrera de Ingeniería
17 # GENERAMOS EL DICCIONARIO 39 if nueva_palabra == Técnica en informática de Sistemas y
LOS AUTORES

18 dict = {} no_palabra: lleva 7 años usando y desarrollando


software libre, y desde hace dos en
19 40 sys.exit() FreeBSD. José Pedro Orantes está cur-
20 for linea in sys.stdin: 41 sando 3º de Ingeniería Técnica en
21 for palabra in 42 print nueva_palabra; Informática de Sistemas y 3º de Inge-
niería Técnica en Informática de
linea.split(): 43
Gestión, lleva mas de seis años uti-
22 dict.setdefault( (w1, 44 w1 = w2 lizando Linux como escritorio y
w2), [] ).append(palabra) 45 w2 = nueva_palabra herramienta de trabajo.

52 Número 01 www.linuxmagazine.com.es
Charly ADMINISTRACIÓN

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 pérdida de memoria gradual. Es decir, a

menos que tengamos PS-Watcher. PS-Watcher automatiza las tareas de vigi-

lancia, ayuda a reducir la presión y actúa como un sistema de alerta temprana.

POR CHARLY KÜHNAST

A
fortunado el administrador de sis- configure, make, make install, que un proceso, el demonio compilador
temas que reconoce un problema suponiendo que los módulos de Perl de C distribuido, Distccd en este ejem-
desde su inicio antes de que las Sys::Syslog, File::Basename, Getopt:: plo, utilice más de 5 mbytes de memoria
líneas de atención al cliente estén en Long and Config::IniFiles estén instala- principal. Mi nuevo fichero de configu-
serios problemas. dos. Instálalos de CPAN si te falta ración pswatch.conf será como sigue:
Esto es cierto en asuntos clave como alguno.
los requerimientos de memoria de fun- El siguiente paso es crear el fichero de [(/usr/sbin/)distccd?]
cionamiento de procesos de mi servidor. configuración. Para probar la her- trigger = $vsz > 5000
Se me ocurren numerosas cosas que ramienta, quiero que monitorice los # Output size in Kbytes
hacer mejor que estar pendiente de cada procesos mingetty y que anote en un action = echo "El procesoßß
proceso todo el día, a pesar de que el archivo de registro si ocurren más de tres $command está ocupando $vszßß
nombre de la aplicación parezca sugerir procesos. Mi fichero de configuración, KB de memoria"
lo contrario. /etc/pswatch.conf, para esta tarea tiene el
La solución es PS-Watcher [1], una siguiente aspecto: Podemos especificar cualquier otro
herramienta que analiza la tabla de pro- comando en lugar de echo. Por ejemplo,
cesos, filtrándola mediante la aplicación [(/sbin/)?mingetty?] puede desear mandar un correo elec-
de expresiones regulares almacenadas en trigger = $count > 3 trónico al administrador.
el fichero de configuración. Este fichero action = echo "$countßß Como PS-Watcher repite la alerta cada
también especifica como PS-Watcher $command procesos en ejecución" pocos minutos, en función del parámetro
debe reaccionar ante la ocurrencia o no -**sleep N, a pesar de que puede ha-
de determinadas expresiones. Puedo A continuación ejecutamos PS-Watcher cerlo, no sería una buena idea mandar
indicarle a PS-Watcher que termine un como un demonio en Segundo plano: mensajes al teléfono móvil, o al menos
proceso que utiliza demasiada RAM, no es una idea que yo considere opor-
monitorizando a la vez los procesos hijos ps-watcher --config /etc/ßß tuna. La página principal contiene
generados por otro. pswatch.conf --log /var/log/ßß numerosas pistas y ejemplos. ■
El programa, escrito en lenguaje Perl pswatch.logs
viene como tarball de 114 kbytes que se Recursos
instala mediante el proceso estándar de El demonio cuenta el número de proce-
[1] PS-Watcher:http://ps-watcher.
sos mingetty activos cada cinco minutos. sourceforge.net
SYSADMIN Si estos comienzan a dispararse, aparece
WikiMedia .....................................54 un mensaje del estilo de “4 procesos
mingetty en ejecución” en /var/log/ Charly Kühnast es un
Vemos como se comparte conociemientos administrador de sis-
pswatch. Si es necesario, se puede incre-
con el motor wiki de la Wikipedia temas bajo entorno
mentar el intervalo por defecto desde Linux en el centro de
EL AUTOR

TLS sobre SMTP ...........................60 cinco minutos a 15 minutos especifi- datos de Moers, cerca
La solución inteligente para la encriptación cando el comando -sleep 900. del Rin, el famoso río
de correo Alemán. Sus tareas
Creciendo Juntos incluyen asegurar la
Syslog ...............................................62 seguridad y disponibilidad del cortafue-
La herramienta fuente de información del Veamos un ejemplo de una aplicación gos y el mantenimiento del DMZ (zona
adminitrador de sistemas más práctica. Quiero que PS-Watch desmilitarizada).
anote en un archivo de registro cada vez

www.linuxmagazine.com.es Número 01 53
ADMINISTRACIÓN Wikipedia

Instalación y mantenimiento de Mediawiki

Edición 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 elección que

facilita una funcionalidad abundante

y llena de potencia.

POR ERIK MÖLLER

W
iki, la palabra de moda en recopilar ejemplos de tareas comunes de el navegador. Los corchetes era todo lo
todos los medios, significa programación entre un grupo de desar- que se necesitaba para realizar un enlace
rápido en hawaiano y la tec- rolladores, los wikis se han establecido con una cadena de texto dentro. Si la
nología wiki basada en web se ha como una manera de colaborar en red página ya existía, el enlace se crea; si no,
establecido de manera extraordinaria- casi universal. La idea de Cunningham se facilita el acceso al usuario a una caja
mente rápida. Desde que Ward era sencilla: desarrollar un motor qur de edición donde podía crear una nueva
Cunningham tuvo la idea en 1995, cuan- permitiese modificar cada página wiki, página con el encabezamiento adecuado
do estaba buscando un método para un HTML generado dinámicamente, en (ver figura 1). Una sintaxis fácil y com-
prensible aligera el trabajo de formateo.
Un viaje al mundo de los wikis Tecleando un asterisco al comienzo de
Aunque se desarrollo especialmente para la proyecto Wikibooks en http://www. una linea creamos un listado; el texto
Wikipedia, Mediawiki no se limita a las enci- wikibooks.org no está relacionado con la enmarcado entre signos de igual, se con-
clopedias. Además de la Wikipedia, la comu- Wikipedia en en lo que a contenidos se vierten en un encabezado. Actualmente
nidad Wikipedia lanzo el Wikcionario refiere, pero proporciona material de hay mas de 100 motores wiki [1].
(Wiktionary) http://www.wiktionary.org en enseñanza libre para asuntos diversos. El Mediawiki [2] es un ejemplo muy popu-
diciembre del 2002. Este diccionario propor- proyecto puede convertirse en un archivo
lar. Suministra la tecnología subyacente
ciona una definición inglesa y la traducción a central para planes de lecciones para la
un cierto número de lenguajes para cada pal- enseñanza universitaria. para la enciclopedia Copyleft, Wikipedia,
abra. El modelo wiki es ideal para este tipo de el modelo a imitar para la mayoría de
Enciclopedia de Propaganda
tareas ya que permite a usuarios de todo el otros wikis (vea el cuadro “Un viaje al
Una lista de los Mediawikis esta disponible
mundo proporcionar las traducciones. mundo de los wikis”). En su primer año,
en Wikipedia [10]. Algunos notorios ejemplos
Citas y libros de texto de la enciclopedia de propaganda son, Wikipedia uso usemod wiki [3], que esta
Wikiquote http://www.wikiquote.org es una Disinfopedia http://www.disinfopedia.org. El escrito en Perl. Pero la tarea demostró
colección por categorías de frases celebres coautor de Mediawiki Evan Prodromou tiene ser un desafío excesivo para usemod,
(citas),Wikisource http://www.wikisource.org en marcha una guia de viajes llamada que amenazo con colapsarse bajo la
añade material de investigación original Wikitravel en http://www.wikitravel.org, y el carga de miles de artículos y visitantes.
para complementar la Wikipedia. El material autor de la base de conocimiento sobre soft-
Esto llevo a los wikipedistas a desarrollar
pertenece tanto al dominio publico, como ware de fuente abierta, Openfacts esta
obras publicadas bajo licencias libres. El disponible en http://openfacts.berlios.de/. el motor Mediawiki en PHP, apoyado por
una base de datos MySQL. La habili-

54 Número 01 www.linuxmagazine.com.es
Wikipedia ADMINISTRACIÓN

Selección 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 simple-
mente necesita configurar las variables
$wgInputEncoding y $wgOutputEncoding
a UTF-8. El guión de instalación crea 3
usuarios MySQL diferenciados y con dis-
tintas 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 nor-
males de base de datos, mientras que el
usuario SQL $wgDBsqluser solamente
tiene privilegio de lectura. Esta cuenta
se usa para una página especial que
permite a los operadores del sistema
Figura 1: La ventana de edición de Mediawiki tiene una barra de herramientas Javascript para ayudar a (sysops) realizar consultas SQL, para,
los principiantes con las tareas de formateo. Los corchetes dobles indican un enlace a otra página. por ejemplo, localizar y dar la bien-
venida a los usuarios que se han regis-
dades de PHP son útiles si se necesita el toolkit Imagemagick, o añadir la trado recientemente. El operador del
configurar y modificar un wiki. Pero biblioteca gd desde la versión actual wiki también puede añadir la cuenta
aunque no se sepa PHP, Mediawiki nos de PHP. Imagemagick permite muchos de usuario de administrador MySQL
permitirá configurar un wiki que fun- mas formatos de archivo que gd. $wgDBadminuser y poner contraseña al
ciona correctamente y que sea fácil de El script install.php en el directorio raíz archivo AdminSettings.php. Esta cuenta
usar. del programa comenzará la instalación. tiene privilegio de escritura y es usada
Pero antes de instalar, necesitara ejecu- por los guiones para tareas de insta-
Estable o experimental tar algunos tareas de configuración. lación y mantenimiento. Para instalar el
Mediawiki, como casi todos los proyec- El administrador debe copiar los ejemp- wiki, hay asegurarse de ser root y teclear
tos de código abierto, está disponible en los de configuración, LocalSettings.sam- php install.php. Algunas distribuciones
2 sabores. La versión estable está ple y AdminSettings.sample, a Local llaman al interprete de ordenes php4
disponible como descarga desde la pági- Settings.php y AdminSettings.php. El antes que php. Entre otras cosas, el
na de inicio en [2]. La versión en desar- cuadro 1 muestra las variables Local guión nos pedirá la contraseña del
rollo puede funcionar, pero contiene fun- Settings.php que deben ser configu- administrador (root) de MySQL y creará
ciones experimentales y puede plantear radas. la base de datos, las tablas y los usuarios
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 directorio “phase3” contiene el soft-


ware, 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 imá- Figura 2: Un típico articulo Wikipedia muestra que los wikis no tienen por que ser feos. La tabla de con-
genes automáticamente, puede optar por tenidos se genera automáticamente a partir de los encabezados.

www.linuxmagazine.com.es Número 01 55
ADMINISTRACIÓN Wikipedia

MySQL. Finalmente, ofrecerá crear dos


cuentas de usuario del wiki, un operador
(sysop) y un desarrollador. Esto es
recomendable. Sin esta opción, nece-
sitaremos asignar manualmente los priv-
ilegios de acceso en una etapa posterior.
Para configurar el servidor web, añadi-
mos phtml como extensión PHP a
httpd.conf:

AddType
application/x-httpd-phpßß
.php .phtml

En el directorio upload creado por la


instalación (donde Mediawiki almacena
los archivos cargados) la ejecución de
PHP o la representación HTML debe pro-
hibirse.

<Directory Figura 3: El modo de vista diff resalta las diferencias entre dos versiones, mostrando que se ha modifi-
"/path/to/ßßuploaddirectory"> cado y borrado. Los operadores (Sysops) pueden apuntar y hacer clic para restablecer las versiones
AllowOverride None previas.
AddType text/plain .htmlßß
.htm .shtml los enlaces a ./LocalSettings.php en los base de datos que ya existe,debemos vig-
php_admin_flag engine off archivos phtml con el enlace a ilar que el nombre de la tabla no entre en
</Directory> LocalSettings.php y añadimos la nueva conflicto con tablas ya existentes, ya que
ruta al include_path en el archivo Mediawiki no utiliza un prefijo y se
Necesitamos habilitar algunas variables php.ini. Hay que notar que en la actual podrían sobreescribir base de datos que
globales para el directorio de guiones. versión inestable, que para cuando esto ya tuviéramos. Importaremos las tablas
Debemos asegurarnos de que la configu- salga al quisocos, será la estable, los desde tables.sql e indexes.sql en el direc-
ración de las directrices del directorio archivos .phtml están desaprobados. Si torio de mantenimiento:
php_value register_globals sea 1. Como tarbajamos con la última versión y este
alternativa, podemos modificar el archi- es el caos, copiaremos index.php y redi- mysql -u root -p databasenameßß
vo php.ini, el cual suele residir en /etc o rect.php al nuevo directorio del servidor < filename,sql
en /etc/php4. web y copiaremos el resto de ficheros
.php a un directorio seguro desde el que Necesitaremos un conjunto mínimo de
Consolidación se puedan añadir. configuraciones en LocalSettings.php;
El guión de instalación copia todos los omita el usuario SQL e ignore
archivos PHP al directorio del servidor Instalación manual AdminSettings.php. Por supuesto que
web. Y esto es una de las cosas que más Si no se tiene acceso de administrador debe disponer de un usuario principal de
hay que vigilar, ya que cuantos mas (root) al servidor, o si falla el guión de la base de datos. Copie cualquier archivo
guiones con acceso externo tengamos. , instalación, podemos instalar Mediawiki .php y .phtml de los directorios includes,
mayor sera el riesgo de que un atacante manualmente. El primer paso es crear languages, stylesheets e images al direc-
pueda conseguir acceso a las funciones una base de datos. Si utilizamos una torio principal del servidor. Puede ejecu-
internas. Esto es particularmente im-
portante para register_globals, como Tabla 1: Configuración Básica
parámetros de URL que le autorizan a Variable Entorno local.
configurar variables de guiones internos. $IP Ruta local en el servidor donde esta copiando el wiki,por ejemplo >c>/var/www/wiki
Solo son realmente importantes los $wgServer Elemento de dirección del servidor antes de la primera barra,por ejemplo http://www.
archivos que puedan estar almacenados mywiki.com
en el directorio del servidor Web, esto es, $wgScriptPath Subdirectorio con los archivos PHP,por ejemplo wiki; dejaremos esto en blanco (“”””) si
los archivos están en el directorio principal
cualquier cosa terminado con .phtml,
$wgEmergencyContact Dirección de email del administrador que se mostrará en caso de problemas
imágenes y hojas de estilo. Lo mejor es
$wgDBserver Nombre de la base de datos MySQL
mover cualquier archivo terminado en
$wgDBuser y $wgDBpassword Usuarioa MySQL para el acceso normal a la base de datos
.php a un directorio distinto de document
$wgDBsqluser y $wgDBsqlpassword Usuario MySQL para consultas SQL vía interfaz Web; solo tiene acceso de lectura
root después de la instalación. Después
$wgLanguageCode Código de dos letras para el idioma a usar,por ejemplo es para español
de mover los archivos, reemplazaremos

56 Número 01 www.linuxmagazine.com.es
Wikipedia ADMINISTRACIÓN

tar en su navegador el archivo un usuario en sysop, developer o editor, usuarios polémicos y tenaces bloqueán-
wiki.phtml con la ruta elegida en el paso por ejemplo: doles sus direcciones IP. Desafortuna-
anterior para acceder a la página del damente, los usuarios no registrados con
recién instalado Mediawiki. De un vista- USE Databasename; conexiones telefónicas temporales (dial-
zo al entorno y pruebe las características UPDATE SET user_rights='sysop' U up) cambian constantemente sus IPs.
del software (mire el cuadro Mediawiki WHERE user_name='nombreusuario'; Por esta razón, una IP se bloqueará, de
101). Si el servido web no reconoce manera predeterminada, durante sola-
phtml, renombre el archivo index.php. La versión de desarrollo ahora tiene un mente 24 horas (opción $wgIPBlock
En ese caso también necesitara editar las tipo de usuario bureaucrat. Los Expiration). En general, la desfiguración
variables $wgScript y $wgRedirectScript. burócratas usan una página especial es una cuestión sobrestimada. Las cues-
Hay un ejemplo en DefaultSettings.php. para designar otros usuarios como oper- tiones sociales son más espinosas ¿Que
adores (sysops). Para hacer esto, el tipo de páginas y que tipo de conducta
Privilegios de usuario usuario necesita privilegios de operador permitirá el wiki? Definitivamente los
La mayoría de los wikis permiten a los y burócrata. Un historial de cambios nos operadores tienen la necesidad de con-
usuarios anónimos editar sus páginas. permite supervisar los últimos acontec- vertir algunas de estas cuestiones a
Esto plantea la cuestión acerca de como imientos en nuestro wiki. Mediawiki políticas de uso. El operador del wiki
el operador del wiki maneja el contenido facilita una funcionalidad diff que resalta deberá definir cuidadosamente las
indeseable o incluso la desfiguración. las diferencias entre dos revisiones (ver opciones predeterminadas,en la estruc-
Mediawiki tiene unos cuantos mecanis- la Figura 3). El historial de cambios tura $wgDefaultUserOptionsEn dentro
mos de defensa. Puede restringir la lec- graba las modificaciones en una página del archivo Language.php o sus equiva-
tura o edición de contenidos a grupos de para volver directamente a la versión lentes locales. Opciones tales como
usuarios específicos. Los indicadores original. El historial de versiones nos quickbar (0 = sin barra de navegación ,
$wgWhitelistEdit y $wgWhitelistRead en permite recargar versiones previas y sal- 1 = barra de navegación a la izquierda,
LocalSettings.php le ayudaran a realizar- varlas de nuevo, si fuese necesario. Por 2 = a la derecha) son importantes. edi-
lo de esa manera. La estructura (array) ultimo, los usuarios tienen la función tondblclick abrirá la ventana de edición
$wgWhitelistAccount define los grupos User contributions que les permite ver cuando se hacer doble clic sobre la pági-
que tienen accesos de lectura o escritura: todo el contenido creado por un usuario na. showtoc genera una tabla de con-
especifico. Los operadores pueden tenidos por cada página que tenga mas
$wgWhitelistAccount=array(U" deshacer entradas desde esta lista, per- de tres encabezados y showtoolbar
user" => 0, "sysop" => 1, U mitiéndoles la reparación de desfigura- habilita la caja de herramientas de
"developer" => 1) ciones en cuestión de segundos. Si se Javascript en la ventana de edición (mire
origina una controversia sobre el con- la Figura 1). La opción editsection pre-
Estos ajustes restringen las modifica- tenido de una página, el operador puede senta un enlace Edit junto a cada
ciones a operadores (sysops) y desarrol- temporalmente proteger la página. Los encabezamiento. Esto permite la edición
ladores. Lo siguiente añadirá un nuevo administradores pueden censurar a los directa de una sección especifica y es
usuario llamado editor: particularmente
cómodo para páginas
$wgWhitelistAccountU largas, reduciendo la
=array("editor" =>U necesidad de navegar
1,"user" => 0U por la ventana de edi-
"sysop" => 1,U ción. Por el contrario
"developer" => 1) los enlaces de este
tipo pueden estropear
Habiendo creado el tipo de su diseño. Si se
usuario, el operador puede habilita la opción
proseguir asignando privi- editsectiononrightclick,
legios de lectura o escritu- hacer clic con el
ra mediante la configu- botón derecho sobre
ración del valor en el un encabezado tendrá
campo de la base de datos el mismo efecto. Esto
user_rights del usuario a provocó alguna vez el
editor. En el momento de fallo de Konqueror en
escribir esto, Mediawiki nuestro laboratorio.
no posee una herramienta
genérica de gestión de Espacio para los
privilegios, esto significa nombres
que hay que formular con- Figura 4: Viendo los cambios recientes en el wiki con la piel CologneBlue. El enlace Recent Wikipedia hizo frente
sultas SQL para convertir a Changes dirige directamente al modo de vista diff de la página actual. rápidamente a la

www.linuxmagazine.com.es Número 01 57
ADMINISTRACIÓN Wikipedia

cuestión de separar información sobre el este espacio de nombres supone el para editar todos los elementos de texto
wiki, políticas o discusiones sobre los valor de la variable $wgSitename en del software dentro del wiki, ayudando
artículos de la enciclopedia. Por ejemplo, DefaultSettings.php. La FAQ de la Wiki- de ese modo a las traducciones. Los
hay un articulo sobre las FAQs y una FAQ pedia esta almacenada en [[Wikipedia: nombres de las variables de texto se
oficial de Wikipedia. Para separar acer- FAQ]]. Esto resuelve el conflicto referido almacenan en Language.php.
tadamente las dos, Mediawiki introduce anteriormente, pero hace las cosas difí-
los denominados espacios de nombres ciles para los sitios pequeños. Si, por Atajos para bloques de texto
(namespaces), los cuales son defini- ejemplo, se borran los espacios de El contenido de cualquier página creada
ciones en Language.php o su traducción nombres 4 y 5 de la estructura en este espacio de nombres puede ser
local. Por omisión, estos son el espacio $wgNamespaceNamesDe en el archivo incrustado en cualquier punto dentro del
de nombres principal, el espacio de nom- LanguageDe.php, también serán retira- wiki. Por ejemplo, para proporcionar un
bres de debates múltiples, un espacio de dos del interfaz de usuario. Una carac- texto de bienvenida predeterminado,
nombre para imágenes, un espacio de terística que Mediawiki mantiene creamos una página llamada MediaWiki:
nombres para páginas de usuario, un después de la migración desde usemod greeting. {{msg:greeting}} desplegará el
espacio de nombres especial y un espa- es la subpágina. Por ejemplo, un articulo contenido de la página en otras páginas.
cio de nombres Mediawiki muy especial. llamado Linux puede tener una subpági- Cualquier cambio en la página
Los artículos fuera del espacio de nom- na llamada Linux/Consejos Kernel. La Mediawiki es inmediatamente aplicado a
bres principal siempre tendrán un prefi- página Consejos Kernel tendrá automáti- cualquier otra página que utilice
jo. [[Discussion:Mainpage]] apunta hacia camente un enlace de vuelta a Linux. {{msg}} para su acceso. La orden
la página de debate al que pertenece a la Las subpáginas pueden ser habilitadas {{subst:greeting}} añade el texto en la
página principal, [[User:Troll]] es la pági- individualmente para un espacio de localización actual pero sin la caracterís-
na personal perteneciente al usuario nombres mediante la configuración de la tica de la actualización automática.
Troll. Si no se ha propuesto poner en variable $wgNamepacesWithSubpages. Observese que en las páginas del espacio
funcionamiento un wiki gigantesco, El espacio de nombres Mediawiki se de nombres Mediawiki no están permiti-
podemos ahorrarnos al problema del habilita a través de $wgUseDatabase dos los caracteres no estándar o espacios
meta espacio de nombres. Por omisión, Messages, que autoriza a los usuarios en sus cabeceras. Como cada texto del

Manual Práctico de Mediawiki


El elemento principal de navegación en debate llamado Discussion:Linux. Un enlace cionamos una versión haciendo clic en el
Mediwiki es el recuadro a la izquierda de la llamado enviar un comentario (Post a com- enlace de fecha (timestamp), editamos la
pantalla (ver la Figura 1). Recent changes es ment) esta disponible en la barra lateral de página que estamos viendo y la almacen-
uno de los enlaces mas importantes para los este tipo de página. Se puede pulsar en el amos. El enlace versión actual (Current revi-
visitantes habituales del wiki. Despliega las enlace para abrir una ventana de edición sion) también es bastante útil y muestra las
páginas donde están actualmente trabajan- vacía y añadir un comentario. Después de diferencias entre cualquier versión y la actu-
do los colaboradores del wiki (ver la Figura 4). hacer clic en Save Page, el comentario sera al. Upload nos permite cargar cualquier
Los usuarios registrados pueden hacer clic en añadido al final de la página. fichero en la bitácora y puede ser insertado
el enlace Watch this page para añadirla a su usando la sintaxis [[Image:file.jpg]] o
Una página y su Historial
lista. La lista muestra los cambios habidos en [[Media:file.zip]]. Mediawiki muestra enlaces
esas páginas durante la ultima semana. Esto Para añadir un nueva página, simplemente de imágenes al vuelo. Los enlaces a los
permite a los colaboradores supervisar las creamos un enlace en una página existente, medios apuntan al archivo.
páginas donde han incluido contenido. Move por ejemplo [[Mi nueva página]], y entonces Relaciones Conocidas
page permite renombrar una página. Aun pulsamos en el enlace rojo. El enlace página
Una razón para migrar a una solución de
así, el titulo anterior sigue siendo válido; los de historial (Page history) nos conduce a una
base de datos centralizada era que los
usuarios que sigan enlaces a la página serán página con las versiones anteriores de la
wikipedistas demandaban búsquedas avan-
llevados al nuevo enlace. El enlace Discussion página actual (ver la Figura 4). Esta vista
zadas. Por ejemplo, Mediawiki usa páginas
apunta al debate de la página actual. Por puede también usarse para reincorporar ver-
especiales para mostrar las páginas nueva o
ejemplo una página llamada Linux tendrá un siones anteriores. Para hacerlo, selec-
huérfanas, las páginas que no están señal-
adas por ningún enlace. Funciones adi-
cionales de listado de artículos por orden
alfabético o por longitud. La página especial
Most wanted articles muestra una visión
general de las palabras clave mas usadas que
no se corresponden con una página. El enlace
What links here enlaza a una vista de los
enlaces a esa página. Related Changes nos
permite ver los cambios en los artículos
enlazados desde la página y de esa manera
Figura 6: El historial permite al operador (sysop) supervisar el desarrollo de un articulo de la supervisar temas concretos. El manual oficial
Wikipedia. de Mediawiki [4] ofrece mas detalles.

58 Número 01 www.linuxmagazine.com.es
Wikipedia ADMINISTRACIÓN

turar las contraseñas. Ahora podemos


habilitar las opciones $wgCompress
Revisions, $wgUseMemCached, $wg
SessionsInMemcached y $wgLinkCache
Memcached. $wgCompressRevisions usa
gzip para comprimir viejas revisiones de
página, y de ese modo se ahorra un mon-
tón de espacio en el servidor.

Próximamente: Wikitex
Aún no está en la versión oficial, pero
véase [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 música, varios
macros Latex que generan formulaciones
matemáticas y químicas o tableros de
Figura 5: El interfaz Wikitex permite a Mediawiki mostrar partituras de música, formulación químicas y ajedrez que ilustran el discurrir de una
matemáticas o incluso juegos de ajedrez. Haciendo clic sobre las notas se generara automáticamente partida (ver la Figura 5). Al principio
un archivo midi. puede que los nuevos usuarios encuen-
tren la mayoría de las características algo
programa se recupera desde la base de tiempo tales como una lista de los artícu- confusas. En el caso de tener alguna pre-
datos, se puede usar esta característica los mas largos. Sin duda alguna es lógico gunta o para resolver dudas, la comu-
solamente en combinación con mem- habilitar la opción de cache de página, nidad Mediawiki, que es tan solícita
cached (descrita más adelante). $wgUseFileCache. Esto servirá páginas como lo son la mayoría de las comu-
HTML estáticas a los usuarios anónimos nidades de desarrollo de pryectos de
Manejo de un wiki y de este modo facilitará un considerable software libre, estará encantada de echar
Una vez configurado y en marcha, aumento del rendimiento. Si uno está una mano, por tanto, se recomienda
Mediwiki da pocos quebraderos de dispuesto a dedicar algo de tiempo y aprovechar los canales de las que se
cabey. Ejecutar Mediawiki durante un esfuerzo en la puesta a punto de su wiki, dispone. Conviene apuntarse a la lista de
largo periodo de tiempo es de hecho con- puede intentar memcached [6] y zlib. correo mediawiki-l [9] y también visitar
siderablemente menos estresante que Memcached reduce los accesos a la base el canal de IRC #mediawiki en irc.freen-
lograr instalarlo adecuadamente. En un de datos mediante el almacenamiento ode.net. ■
mundo perfecto, el operador del wiki temporal de los datos de usuario y la
solamente necesitará asignar privilegios información vinculada. Zlib comprime INFO
de operador (sysop) y desarrollador. Para las revisiones de páginas antiguas. Esta [1] Lista maestra de motores wiki: http://c2.
hacer una copia de seguridad de la base opción supone que se ha compilado PHP com/cgi/wiki?WikiEngines
de datos se aconseja mysqldump o con las opciones --enable-sockets y --with [2] Mediawiki: http://www.mediawiki.org
phpMyAdmin. Cuando importamos -zlib. Podemos escribir <?phpinfo()?>
[3] Wiki Usemod: http://www.usemod.com
grandes conjuntos de datos tales como en una página PHP de prueba para
[4] Manual Mediawiki: http://meta.
artículos de la Wikipedia en [5], eje- averiguarlo.
wikipedia.org/wiki/
cutaremos el guión maintenance/rebuil- MediaWiki_User%27s_Guide
dall.php en el directorio de instalación. Memcached
[5] Volcado SQL de la Wikipedia: http://
Como próximo paso, para evitar pregun- El demonio deberá ejecutarse en segun- download.wikimedia.org
tas del tipo Que enlazo aquí y otras do plano con las opciones -d -l 127.0.0.1
[6] Memcached: http://www.danga.com/
dudas por el estilo. Mediawiki tiene -p 11000 -m 64 habilitadas. Esto asigna memcached
un número de opciones de puesta a 64 MBytes de RAM como memoria cache
[7] Prueba de Wikitex: http://wikisophia.org
punto, hay ejemplos en DefaultSettings. para aplicaciones locales. Memcached
[8] Lilypond: http://lilypond.org/web
php. Asegurese que copia las modifica- no facilita características de autentifi-
ciones en LocalSettings.php para evitar cación. Los usuario locales tienen acceso [9] Lista de correo del proyecto: http://mail.
wikipedia.org/mailman/listinfo/
sobreescribirlas durante una actual- sin restricciones. Conviene evitar la eje-
mediawiki-l
ización. Mediawiki tiene la opción cución de memcached en un sistema con
[10]Proyectos que usan Mediawiki: http://
$wgMiserMode para wikis de gran exten- múltiples usuarios locales. Sin un fire-
meta.wikimedia.org/wiki/
sión. Habilitando la opción se desactivan wall o el parametro -l, los usuarios exter- Sites_using_MediaWiki
las consultas que consumen mucho nos pueden acceder al servidor y cap-

www.linuxmagazine.com.es Número 01 59
ADMINISTRACIÓN SMTP

SMTP vía TLS con Evolution, Kmail y Mutt.

Correo Más Seguro


La transmisión segura de correo electrónico mediante la

Seguridad de la Capa de Transporte (TSL) no puede

reemplazar la encriptación individual de mensajes de

correo. Desafortunadamente, a pesar de que los progra-

mas modernos de correo son capaces de usar los méto-

dos mencionados, tienden a complicar la vida innece-

sariamente de cualquier usuario que desee aprovechar

los beneficios de la confidencialidad y seguridad.

POR PATRICIA JUNG

Agentes Secretos

L
os mensajes de correo electrónico el uso de sólidos métodos de
son como una postal - cualquier encriptación se convierte en una prueba Esta solución ofrece adicionalmente la
“cartero” los puede leer. Si bien la de definitiva en contra de todos esos ventaja de ser libre de mantenimiento
mayoría de los administradores de sis- “criminales” que demandan confiden- tras la configuración inicial del servidor.
temas escrupulosos evitarán leer el cialidad en sus mensajes de correo. Si tanto el cliente y el servidor de correo
correo privado de otras personas, al Sine embargo, cada vez más provee- “hablan” TLS, ellos negociarán un inter-
menos en teoría, los privilegiados posee- dores de correo están intercambiando el cambio seguro sin necesidad de
dores de la contraseña root, autorizados corre por medio túneles TSL (Transport intervención exterior. Para permitir esto,
o no (pienso en los hackers), de una Layer Security - Seguridad de la Capa de ambos ordenadores intercambian certifi-
máquina usada para remitir o almacenar Transporte) encriptados en lugar de al cados durante el saludo inicial
correo tendrán acceso a los mensajes. descubierto, previniendo por tanto facilitando la identificación mutua. Es
Los servicios secretos de todo el mundo ataques de búsqueda. Hay otras razones como si cada ordenador le muestra su
aclaman exultantes a los padres (y para seguir la tendencia de alejarse de pasaporte al otro. Por motivos prácticos,
madres) fundadores de Internet, que los mensajes transmitidos en texto libre, solo será necesario que se autentifique el
fueron tan confiados que concibieron la usando SSH en lugar del venerable pro- receptor principal en el entorno del
transmisión de todo tipo de datos a tocolo telnet o el protocolo https para correo, no habiendo diferencia entre si el
través de la red de forma transparente. páginas web que piden datos personales. receptor es otro servidor de correo o el
Encriptar, por ejemplo con GnuPG y La introducción de una política que programa de correo del usuario. Como el
PGP, es el equivalente electrónico de un impone el uso de correo encriptado en cliente ya puede confiar en el servidor,
sobre en el mundo real. Sin embargo, los una empresa con distintas sedes puede las dos máquinas acuerdan un algoritmo
métodos anteriores plantean un prob- provocar ciertos inconvenientes: ¿Qué y una llave secreta de encriptación se uti-
lema: si un país niega a sus ciudadanos ocurre si una tercera persona necesita lizarán para codificar el tráfico
el acceso a métodos seguros de acceder al correo posteriormente? ¿Qué resultante.
encriptación - típicamente argumen- ocurre con las claves utilizadas por una
tando que es en ayuda de la lucha contra persona de la empresa que deja de traba- GLOSARIO
el crimen - el protocolo de transporte de jar en ella, o con su correspondencia
https: Si bien puede que sorprenda saberlo,
correo, SMTP (Protocolo de Transporte encriptada? Como la encriptación nor- pero https no es un protocolo independiente.
de Correo Simple), se convertirá en un malmente solo se utiliza para prevenir La comunicación entre buscadores y servi-
delator. El contenido de mensajes encrip- que datos sensibles crucen la red al des- dores en sitios Web que usan URLs https sigue
tados con PGP o GnuPG descubiertos en cubierto, un sistema de encriptación que estando basada en el “Hypertext Transfer
la red no pueden ser leídos, pero funcione en el servidor y que sea trans- Protocol”HTTP (Protocolo de Trasferencia de
podemos observar cuales han sido parente para los usuarios, como SMTP/ Hiper Texto), pero encapsulado en un túnel
TLS.
encriptados y cuales no. De esta forma, TLS es una buena solución.

60 Número 01 www.linuxmagazine.com.es
SMTP ADMINISTRACIÓN

La gente tiende a confiar Preferences (Preferencias del


en las contraseñas porque se correo).
fían de la autoridad que las La versión 1.2 resuelve los
otorga. De forma similar, el dos problemas, si bien el
cliente de correo solo acep- asistente o el cuadro de diál-
tará los certificados de un ogo de Use secure connection
servidor si confía en que la (SSL) (figura 2) se refiere de
autoridad que lo certifica ha nuevo sólo a SSL, sin men-
hecho el proceso con consis- cionar TLS, éste último
tencia. La autoridad auten- protocolo también esta
tifica el certificado firmán- soportado. Solo Dios sabe por
dolo con su propio certi- que el valor Whenever possi-
ficado, que a su vez ha sido ble (Cuando sea posible) no
firmado por un proveedor es el valor por defecto.
seguro de mayor rango. Cuando intentamos enviar
A pesar de todo, para con- correo encriptado por pri-
fiar en una autoridad, el mera vez, Evolution nos
cliente necesitará almacenar mostrará información del cer-
los certificados de las autori- Figura 1: KMail deja en manos del usuario descubrir si el servidor de correo tificado del servidor y nos
dades de confianza superior, conoce TLS. solicitará que lo aceptemos o
los certificados raíz. que no utilicemos el túnel
la pestaña Sending de la opción Network SSL/TLS (ver figura 3). Como el pro-
Cómo se Hace o modificamos una cuenta existente, grama no nos ayuda a tomar esta
Mientras que los servidores de correo (o necesitamos seleccionar adicionalmente decisión (por ejemplo, que significa si
Agentes de Transferencia de Correo) la pestaña Security en el cuadro de dial- una firma es BAD), puede que sea mejor
como Postfix o Sendmail usarán ogo que aparece (figura 1). Esto al dejar que el programa tome la decisión él
automáticamente TLS si ambas partes menos nos proporcionará la opción de mismo en lugar de preocupar al usuario
son capaces de hacerlo, los desarrol- marcar en Check what the server supports preguntándoselo.
ladores de clientes de correo actuales [1] para verificar lo amigable que es la El programa de la línea de comandos
(los llamados Agentes de Usuarios de encriptación del anfitrión inteligente mutt es ejemplar: como siempre usa
Correo) tienden a prestar poca atención seleccionado en la pestaña General. Si la servidores de correo local para transmitir
a la facilidad de uso. En lugar de precon- repuesta es positiva (la alternativa, SSL - el correo mediante el interfaz
figurar sus programas para usar SMTP/ Capa de conexión 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á automáti-
usuarios sean los que conozcan la mate- OK para asegurar que Kmail usará comu- camente un camino seguro a través de la
ria y que elijan y sepan implementar nicaciones encriptadas. red si el Agente Local de Transferencia
estos valores seguros. La versión 1.0.x de Evolution propor- de Correo y el servidor de destino lo
En el caso de KMail sobre KDE3.x, si ciona una opción segura SSL para el pueden proporcionar sin ninguna inter-
seleccionamos Settings/Configure… y anfitrión inteligente. Desafortunada- acción por parte del usuario. Pero no
después añadimos una nueva cuenta de mente, marcando Use secure connection podemos evitar proporcionar a nuestro
salida (Outgoing account) con SMTP en (SSL) (Usar conexión segura) se con- servidor de correo local de este potencial
vierte en un escollo en muchos casos. La en nuestro propio ordenador. ■
mayoría de los servidores no soportan el
método obsoleto de SMTP vía SSL; por
otro lado, Evolution 1.0.x no habla TLS.
Si intentamos transmitir correo con esta
configuración, el programa de correo no
cooperará y emitirá un mensaje muy
explicito como Connection to
name.of.mailservers (Port 465) could not
be established. The connection was reset Figura 3: ¿Confías en este certificado?
by the communication partner. (La
conexión con nombre.de.los.servidores RECURSOS
(puerto 165) no se pudo establecer. La [1] Patricia Jung y Andrea Müller:“Mail and
conexión fue restablecida por el asistente more”, Linux Magazine International,
de comunicación). El cliente ni siquiera número 29, abril del 2003, página 44,
Figura 2: ¿Por qué no es esta la opción por intentará la comunicación no encriptada http://www.linux-magazine.com/issue/
29/MailUserAgents.pdf
defecto? hasta que quitemos la marca en Mail

www.linuxmagazine.com.es Número 01 61
ADMINISTRACIÓN Syslog

Registro de Sistema de Próxima Generación: 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 más difundidos es Syslog-NG (Syslog espiar los mensajes y conseguir el acceso
de próxima generación) que se lanzó a la información privilegiada.
bajo licencia GPL. Muchas distribu- • Configuración poco flexible
ciones Linux ya han adoptado Syslog- La configuración de Syslog usa un sis-
NG. Otras alternativas disponibles son tema poco flexible con 20 posibles orí-
Reliable Syslog, en su primera imple- genes y 8 prioridades. Esto puede ser un
mentación, SDSC Secure Syslog [5] y obstáculo en grandes redes o para servi-
Syslog Sign. El último todavía está en dores con múltiples servicios.
fase beta. • Uso inconsistente de orígenes y pri-
oridades
Problemas con BSD Syslog Para la mayoría de las aplicaciones los

S
yslog permite a los administradores El servicio syslog tradicional se presentó administradores no tienen una opción
obtener información de registro en en Septiembre de 1983 en la Universidad para administrar mensajes bajo un ori-
sus sistemas de manera uniforme de California (Berkeley). No tenía docu- gen específico. En algunos casos se
para toda la red. Realizando la tarea de mentos de diseño y el software estaba puede establecer una opción cuando se
guardar, analizar y procesar los archivos pobremente documentado. Pasados 18 compila la aplicación, pero en tiempo de
de registro fácilmente, pero lo que la años BSD Syslog se terminó de docu- ejecución hay realmente pocas opciones
gente espera de los registros del sistema mentar en el RFC 3164 [7]. disponibles.
ha cambiado en los últimos años y el ser- Syslog se ha convertido en un estándar • No registra el origen de la fuente
vicio Syslog tradicional simplemente no de facto. El servicio es fácil de configu- Cuando un mensaje pasa por distintos
lo puede ofrecer. Syslog-NG [1] cubre rar, usando un fichero de configuración servidores de registro es imposible des-
este hueco. central llamado syslog.conf. Pero hay cubrir la fuente del mismo. Syslog no
Los registros tradicionalmente se usan unas cuantas buenas razones para no almacena el FQDN (Fully Qualified
para comprobar la salud del sistema. estar satisfecho con la funcionalidad de Domain Name) del host. Cada host que
Muchos administradores ni siquiera se syslogd: propaga un mensaje modifica la direc-
molestan en mirar los registros a menos ción IP registrada.
que se encuentren con un problema en el Falta de métodos de • Uso de transferencia de mensajes no
sistema. Pero hoy, es también una autenticación orientado a la conexión (UDP)
cuestión de mejorar la fiabilidad, esto es, Syslogd no puede distinguir entre distin- Syslogd solo puede usar el protocolo
usar el sistema como una alerta tem- tos hosts. Si el servicio se lanza con la UDP para transferir los mensajes. Si un
prana para impedir que las cosas vayan a opción -r, acepta mensajes UDP en el paquete se pierde por problemas en la
peor. La integridad de los mensajes de puerto 514 sin importar cual es su ori- red el mensaje nunca llegará al destino.
un sistema es también ahora más impor- gen. Esto permite a los atacantes invadir
tante que nunca, ya que permiten a los el servidor de registro con paquetes UDP Syslog-NG
administradores levantar defensas o transmitir mensajes manipulados. Existen grupos de desarrolladores que
basadas en datos reales. Los admin- Aparte de utilizar la funcionalidad de un están trabajando para eliminar estos
istradores también buscan habitual- firewall simple, no hay forma de proteger problemas y desarrollando un sistema de
mente más flexibilidad en la configu- al servidor de registros. registros (ver los cuadros “Syslog-Sign” y
ración y en el manejo de las redes. • Mensajes en texto claro “Reliable Syslog”). Actualmente Syslog-
Han salido varios proyectos que inten- Syslog siempre usa texto claro (texto no NG es el mejor de ellos. Este desarrollo
tan conseguir este objetivo de mejorar el cifrado) para transmitir mensajes a se basa en el servicio Syslog tradicional
servicio del Syslog tradicional. Uno de través de la red. Esto permite fácilmente al que se le han añadido nuevas carac-

62 Número 01 www.linuxmagazine.com.es
Syslog ADMINISTRACIÓN

SHA-1 DSA/DH
PRI Header Message N Hash
Private
SHA-1 DSA/DH Key
PRI Header Message N+1 Hash

Other Messages

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

PRI Header H(N) H(N+1) ... H(N+M) SIG

SHA-1 DSA/DH
Hash

Figura 1: Syslog-Sign aplica una función hash a cada mensaje que se envía. Después transfiere un paquete con todos los valores hash de un grupo de mensajes,
notificándolo al administrador de la transmisión además de las firmas de los mensajes.

terísticas sin sacrificar la compatibilidad TCP para proporcionar más fiabilidad en redirigir los mensajes. El controlador file
con el RFC 3164. Aunque actualmente la entrega de mensajes. En este caso, la se encarga de klogd, por ejemplo leyendo
carece de características tales como la herramienta usa el puerto 514 por defec- los mensajes del kernel desde
firma digital y encriptación, los desarrol- to. Aunque actualmente el puerto 514 /proc/kmsg.
ladores están intentando añadir la está reservado para rlogin. Si quiere que Cada uno de estos controladores tiene
encriptación en una versión futura. los dos funcionen al mismo tiempo una o más opciones, que pueden especi-
Actualmente se necesita stunnel [4] para habrá que reconfigurar el servidor. ficarse entre paréntesis seguido del nom-
manejar la encriptación. Muchas distribuciones incluyen bre del controlador, por ejemplo, TCP y
Syslog-NG puede cambiarse de UDP a actualmente Syslog-NG. Si se quiere usar UDP necesitan saber el número de puer-
el sucesor de Syslog en SuSE, hay que
Syslog-Sign escribir la siguiente línea en /etc/syscon- Reliable Syslog
Syslog-Sign es una extensión del RFC 3164 fig/syslog y relanzar el servicio. Reliable-Syslog [8], que está especificado en
[7] que mantiene la compatibilidad hacia el RFC 3195, usa BEEP (Block Extensible
atrás con el BSD Syslog. Como sugiere su SYSLOG_DAEMON='syslog-ng' Exchange Protocol) para transferir los men-
nombre, este nuevo desarrollo usa la firma sajes. Este protocolo del nivel de aplicación
digital para proteger los mensajes de ser El archivo de configuración central, está basado en TCP. Está orientado a la
manipulados por un atacante. En el /etc/syslog-ng/syslog-ng.conf, es ligera- conexión y tiene mecanismos de autenti-
arranque, cada host crea un par de claves mente más complejo que el tradicional cación y verificación.Y proporciona protec-
asimétricas que son usadas para firmar cada ción contra ataques.
del syslogd. En vez de incluir original y
grupo de mensajes. Luego el host transmite Usa dos tipos de formato de mensajes: El
priority, contiene el llamado logpaths
el grupo de mensajes al servidor de registro modo RAW que es compatible con el estilo
que está formado por source, filter y des-
en un único mensaje (véase la figura 1). Este del servidor syslog RFC 3164.Y el modo
método es particularmente útil para prote-
tination.
COOKED que usa un formato de mensaje
ger los mensajes almacenados. Como Hay ocho controladores fuente difer-
XML. Los mensajes COOKED además alma-
mantiene la compatibilidad con el RFC 3164, entes (véase Tabla 1). El controlador
cenan atributos adicionales como direc-
Syslog-Sign usa UDP para transmitir los internal es obligatorio. Syslog-NG usa ciones IP, FQDNs y tipos de dispositivos. La
mensajes. Los mensajes se pueden perder esta fuente especial para transmitir men- longitud del mensaje puede ser arbitraria.
por la red y al no estar encriptados en sí mis- sajes que tienen que ver con el propio SDSC (San Diego Supercomputer Center)
mos, un atacante espiando la red podría servicio. usa una implementación de Reliable-Syslog
acceder a información privilegiada. con la licencia BSD-licensed Secure Syslog
La verificación de la clave aun no está clara. Fuentes [5]. Está versión es compatible con el BSD
Un atacante podría ser capaz de distribuir Cuidado: Los controladores file y pipe no Syslog. Requiere de las bibliotecas
claves manipuladas ya que Syslog-Sign uti- deben confundirse con las acciones de Roadrunner BEEP, OpenSSL, Glib2 y Pkg-
liza un mensaje normal para distribuir la Config. Además de los perfiles RAW y
syslogd, file y pipe. Syslog-NG los usa
clave pública. Aún se está trabajando en una COOKED, también soporta el perfil llamado
como fuente desde las cuales el servicio
implementación para FreeBSD [6] Security Profile.
lee mensajes y no como destino a los que

www.linuxmagazine.com.es Número 01 63
ADMINISTRACIÓN Syslog

Las funciones de filtro (véase la Tabla mensajes del kernel desde /proc/kmsg.
Tabla 1: Controladotes
2) pueden conectarse usando operadores La próxima seccion crea una fuente de
fuentes booleanos (and, or, not y paréntesis). red:
Fuente Descripción Para aplicar un filtro el resultado de la
internal Controlador para el propio
operación debe ser true. Algunas fun- source remote {
servidor de mensajes. Obligatorio.
ciones de filtros pueden manejar expre- tcp(
unix-stream Abre un socket Unix específico en
modo SOCK_STREAM y se queda a
siones regulares como opciones. ip(192.168.0.24) port(3333)U
la escucha de mensajes. Los destinos especifican donde y por max-connections(10)
unix-dgram Abre un socket Unix en modo qué medios un mensaje debe ser redirigi- );
SOCK_DGRAM y recibe mensajes a do y procesado. Tal y como en las };
través de él. fuentes hay disponibles un número de
file Abre el fichero especificado. controladores de destino, cada uno de Esta fuente se referencia como remote; y
pipe, fifo Abre el pipe especificado y lee mensajes.
los cuales pueden tener distintas su controlador es tcp. Syslog-NG ahora
udp Escucha mensajes en un puerto UDP.
opciones. La Tabla 3 proporciona una escuchará los mensajes en el puerto TCP
tcp Escucha mensajes en un puerto TCP.
lista de controladores disponibles. 3333. Incluso si el ordenador tiene múlti-
sun-stream Abre el dispositivo de flujo especificado
(sólo Solaris)
Syslog-NG llama al controlador una ples direcciones IP el servidor sólo
sola vez y lo mantiene ejecutándose escuchará en 192.168.0.24. La opcion
hasta que el servicio recibe la señal max-connections está establecida en 10;
to en el que escuchar y file necesita el SIGHUP y termina. Esto hace que el con- el ordenador aceptará un máximo de 10
nombre del archivo. Los sistemas Linux trolador sea muy eficiente. Si Syslog-NG conexiones concurrentes al Syslog-NG.
usan el controlador unix-stream local- se lanzase por un programa externo por No es necesario especificar una única
mente; el controlador usa un socket de cada mensaje entrante un atacante fuente para los mensajes remotos.
dominio Unix orientado a la conexión. podría lanzar múltiples procesos que Muchos administradores crean una
Cada conexión abierta requiere su propio sería similar a un ataque tipo DoS contra fuente individual que maneja todos los
proceso, un hecho que un atacante el sistema. controladores. Dicho esto, fuentes sepa-
podría explotar para realizar un DoS Syslog-NG también tiene un número radas suministraran una estructura más
(ataque por denegación de servicio). de opciones globales. Por ejemplo, limpia.
max-connections puede impedir esto chain_hostname y sep_hostname especif-
especificando un número máximo de ican como Sislog-NG debe manejar los Selección de Mensajes
conexiones concurrentes al servicio sys- nombres de host cuando pasa un men- Ahora a por los filtros. Nuestro primer
log. Está establecido a 10 por defecto. El saje a través de múltiples servidores de ejemplo maneja mensajes cuyo nivel de
manual de referencia [2] contiene una registros. Esto permite a los admin- registro corresponde a los valores warn,
lista completa de los controladores istradores descubrir donde se originó el err, crit:
fuente. mensaje. El manual de referencia [2]
contiene una lista completa de opciones filter warning {
Filtros y Destinos globales. level(warn, err, crit);
Los filtros describen como Syslog-NG };
debería manejar los mensajes que recibe Ejemplo de Configuración
de las diversas fuentes. Éste es uno de Para ilustrar la estructura de Esta regla simple, que aplica los filtros
los puntos fuertes del nuevo sistema de syslog-ng.conf la siguiente sección mues- basados en las prioridades, es bastante
registro. Los administradores pueden tra un archivo de configuración simple
usar filtros para ordenar los mensajes y dividido en secciones. Si está interesado Tabla 3: Controladores
pasarlos a los destinos apropiados. en hacer un archivo más complejo puede destinos
consultarlo en [3]. Destino Descripción
Tabla 2: Funciones filtro file Escribe el mensaje al archivo especificado.
Filtro Descripción source local { pipe, fifo Pasa el mensaje al pipe especificado.
facility Se refiere a los mensajes que origina la internal (); unix-stream Reenvía el mensaje al socket Unix
utilidad especificada. unix-stream("/dev/log"); SOCK_STREAM.
level, priority Se refiere a los mensajes con la file("/proc/kmsg"); unix-dgram Reenvía el mensaje al socket Unix
prioridad especificada. SOCK_DGRAM.
};
program Filtra los mensajes donde el campo udp Envía el mensaje al puerto UDP
nombre del programa contienen la especificado.
expresión regular especificada La fuente especifica aquí está identifica- tcp Envía el mensaje al puerto TCP
host Filtra los mensajes donde el campo da por su nombre local y comprende un especificado.
nombre de host contiene la expresión número de fuentes locales. Los contro- usertty Envía el mensaje a la consola especificada
regular especificada. ladores fuentes son internal (obligatoria- por el usuario,si el usuario está conectado.
match Aplica la expresión regular especificada mente) y el controlador unix-stream, los program Lanza el programa especificado y envía
al mensaje entero. cuales usan el archivo de dispositivo un mensaje a la entrada estándar de
filter Llama a otra regla de filtro. programa (Stdin).
/dev/log y el controlador file que lee los

64 Número 01 www.linuxmagazine.com.es
Syslog ADMINISTRACIÓN

Message Message Message

TCP-Port 601 UDP-Port 514

Loghost 1 Loghost 2 Loghost 3


Figura 2: Dependiendo de la configuración, Syslog-NG utiliza TCP o UDP para reenviar mensajes a través de la red. Esto permite modificar Syslog-NG para su
uso en entornos segmentados con múltiples cortafuegos.

común al tradicional syslogd. La mayor originado por la utilidad authpriv, y tro hasta el destino. Es una regla que
ventaja de la variante Syslog-NG es el todos los avisos del Kernel. El filtro email engloba el nombre de la fuente, un filtro
uso de las expresiones regulares. Una sólo permite pasar los mensajes del sis- y un destino. La primera de las sigu-
introducción a esta técnica la podemos tema de correo. ientes reglas lee mensajes desde la
encontrar en diversos libros de Perl, así fuente local y manda las entradas que
como en la documentación para el pro- Los Destinos coinciden con la regla de filtro konsole al
grama Logsurfer [9]. Esta herramienta Todo lo que necesitamos ahora son unos destino konsole. La segunda regla alma-
automática de análisis de archivos de cuantos destinos a los que mandar los cena los mensajes del sistema de correo
registro hace un uso intensivo de las mensajes. La siguiente entrada de con- local en /var/log/mail.
expresiones regulares y proporciona una figuración le dice a Syslog-NG que escri-
referencia de 50 páginas. ba los mensajes al archivo de registro 01 log {
Veamos una expresión regular /var/log/mail (nombre de destino: email) 02 source(local);
extremadamente simple que busca todos o a la consola /dev/tty10. 03 filter(console);
los mensajes que tienen algo que ver con 04 destination(console);
FTP, que se cumple si la cadena ftp destination email { 05 };
aparece en cualquier parte del mensaje: file("/var/log/mail"); 06
}; 07 log {
filter ftp { match("ftp"); }; 08 source(local);
destination console { 09 filter(console),
Y aquí tenemos otra regla de filtro que file("/dev/tty10"); 10 destination(email);
sólo permite a los mensajes críticos }; 11 };
pasar y que también es útil para la salida
a TTY10. La salida por consola no Una ruta de registro describe la ruta Si un host necesita reenviar los mensajes
debería ser muy verbosa: completa desde la fuente, a través del fil- recibidos a través de la red desde una
fuente a otro host de registro,
filter console {U simplemente hay que configu-
level(err) andU rar un destino apropiado para
not facilityU Syslog-NG.
(authpriv) orU
level(warn) andU destination loghost {
facility(kern); udp(ip(172.16.0.33)
}; port(514));
};
filter email {U
facility(mail)U; log {
}; source(remote);
filter(ftp);
El filtro console usa fun- destination(loghost);
ciones, valores y expre- };
siones booleanas. Esta
regla trata cualquier men- Figura 3: El servidor Syslog de Kiwi Enterprises permite a los administradores Lo importante es que el servi-
saje de error que no se ha incluir ordenadores con Windows en su configuración de registros. dor de registro, loghost, esté

www.linuxmagazine.com.es Número 01 65
ADMINISTRACIÓN Syslog

escuchando el puerto 514 definido por la options { se está preparado para realizar un traba-
dirección IP 172.16.0.33 en su archivo de keep_hostname(no); jo extra [4]. Si se precisa integrar las util-
configuración. Este método de conver- chain_hostname(yes); idades de encriptación, autenticación y
sión de direcciones puede ser extremada- sync(0); no repudio, se debe ver SDSC Secure
mente útil (Véase la figura 2). }; Syslog. Sin embargo, este servidor
requiere más mantenimiento.
Opciones Globales La opción sync especifica el número de Sin duda, Syslog-NG es el más comple-
Para completar el archivo de configu- líneas que Syslog-NG guardará en la to, ya que se puede configurar para
ración, ahora hace falta poner las caché, antes de escribirla en el archivo. soportar su infraestructura con muy
opciones globales, que se colocan al Un número alto aumentará el rendimien- poco esfuerzo. ■
principio del archivo. Alguna de las to, pero incrementará el riesgo de perder
opciones especifican como Syslog-NG los mensajes si el sistema cae. Syslog y Windows
manejará los nombres de hosts de los El listado 1 contiene un archivo de Muchas redes tienen PCs Linux y Windows.
mensajes, cuando redirigir los mensajes configuración. Éste ilustra como de Bajo circunstancias ideales, una solución
a otro servidor de registro. Habilitando avanzado es Syslog-NG con respecto a centralizada de registro debería admitir
keep_hostname> se le dice a Syslog-NG los conceptos de flexibilidad y escalabili- ambos sistemas. Sin embargo, se requiere
que mantenga los nombres existentes. dad, en comparación con su predecesor. software extra para permitir que los sis-
Si se deshabilita keep_hostname, temas Windows envíen y reciban mensajes
Casi Perfecto syslog.
chain_hostname (alias: long_hostname)
decide lo que hacer con el nombre. Sin el Las funciones filtros permiten a los El servidor de Syslog de la empresa Kiwi
http://www.kiwisyslog.com es un ejemplo
encadenamiento (chain_hostname), el administradores hacer los registros a
de programa que proporciona este servicio.
servidor de registro insertará su propio medida, para reflejar las infraestructuras
Soporta Windows 9x, NT, 2000 y XP. Además
nombre, con encadenamiento añadirá su de redes complejas. La configuración es
de la versión gratuita, hay una versión com-
nombre al nombre ya existente. Esto per- clara a pesar de su flexibilidad. Incluso ercial con funcionalidades ampliadas.
mite a los administradores trazar la ruta se puede compensar la carencia de utili-
La versión gratuita es adecuada para simple-
de los mensajes hasta su origen. dades de encriptación y autenticación, si mente añadir máquinas Windows a los
entornos syslog de Linux. Se configura por
Listado 1: Configuración Syslog-NG medio de una interfaz gráfica y se puede
lanzar tanto como un servidor de registro
01 # Opciones Globales
como un cliente. Como Syslog-NG, el soft-
02 options { keep_hostname(no); chain_hostnames(yes); sync(0); };
ware de Kiwi puede usar TCP o UDP para
03
enviar los mensajes. Además tiene algunas
04 # Fuentes bonitas, aunque superfluas, florituras como
05 source local { internal(); unix-stream("/dev/log"); gráficos de barras de colores y otros gráficos
file("/proc/kmsg"); }; estadísticos.
06 source remote { tcp(ip 192.168.0.24) port(3333)
max-connections(10);};
07 RECURSOS
08 # Filtros [1] Pagina de inicio de Syslog-NG: http://
09 filter warning { level(warn, err, crit); }; www.balabit.com/products/syslog_ng/
10 filter email { facility(mail); }; [2] Manual de Syslog-NG: http://www.
11 filter ftp { match("ftp"); }; balabit.com/products/syslog_ng/
12 filter console { reference/book1.html
13 level(err) and not facility(authpriv) [3] Configuración de ejemplo: http://www.
14 or level(warn) and facility(kern); campin.net/syslog-ng.conf
15 }; [4] Syslog-NG encryption howto: http://
16 venus.ece.ndsu.nodak.edu/~jezerr/linux/
17 # Manda mensajes críticos a TTY10 secure-remote-ogging.html
18 destination console { file("/dev/tty10"); }; [5] Secure Syslog por SDSC: http://security.
19 log { source(local); filter(console); destination(console); }; sdsc.edu/software/sdsc-syslog/
20 [6] Syslog-sec: http://sf.net/projects/
21 # Escribe mensajes de correo a un archivo syslog-sec/
22 destination email { file ("/var/log/mail"); }; [7] RFC 3164,“The BSD Syslog Protocol”:
23 log { source(local); filter(email); destination(email); }; http://www.ietf.org/rfc/rfc3164.txt
24 [8] RFC 3195,“Reliable Delivery for Syslog”:
25 # Redirige los mensajes a otra red http://www.ietf.org/rfc/rfc3195.txt
26 destination loghost { udp(ip(172.16.0.33) port(514)); }; [9] Logsurfer: http://www.cert.dfn.de/eng/
27 log { source(remote); filter(ftp); destination(loghost); }; logsurf/

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

Herramientas: Portal de Acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68


Tienes una red, pero sólo una de las máquinas tiene acceso a Internet. ¿Cómo hacer
para que las demás puedan conectarse concurrentemente? Necesitas un portal o
router y con Linux es fácil crear uno. Aprende cómo se hace en este artículo.

Desktopia: Panelizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70


Muchos de los gestores de ventanas más sencillos son rápidos, 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 máquina.

Aplicaciones: Konversation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72


¿Cómo mantenerse en contacto con la gente sin apartarte de tu escritorio? La
respuesta está en Konversation, el último y más novedoso de los clientes IRC de
KDE. Ideal para chateadores que disfrutarán de su amigable interfaz.

Programación Básica: XUL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74


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

Educación: WIMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79


¿Necesitas poder generar ejercicios para tus alumnos? Puede que WIMS sea la
respuesta. Este servidor educacional permite crear ejercicios, exámenes y tests;
además 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 código abierto.

Linea de Comandos: Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84


El problema ya no es que no exista documentación sobre un tema concreto, sino
como encontrarla entre todas las descargas en nuestros discos duros. Grep es la her-
ramienta de búsqueda todoterreno de los entornos Linux: pequeño, rápido y muy,
muy eficiente.

Iniciación a Latex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86


Para conseguir efectos tipográficos profesionales, no hace falta costosos programas
de autoedición corriendo en costosos equipos. De hecho, no hace falta ni un proce-
sador de textos. Con un pequeño editor y unos pocos comandos podemos generar
documentos formateados elegantemente, con cuadros, tablas y notaciones
matemáticas 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 solución es uti-

lizar un router, también denominado puerta de enlace. En este artículo vemos

a explicar como configurar nuestro PC Linux como puerta de enlace, un inter-

faz entre nuestra red local e Internet. BY HEIKE JURZIK

L
os routers se utilizan para intercam- Change… para modificar la configu- dispositivos y pulsamos Edit en la
biar datos entre redes. En el caso de ración de una tarjeta previamente config- barra de herramientas. Alternativa-
una pequeña red, el sistema Linux urada. Entonces, seleccionamos la tarje- mente podemos elegir New para crear
que se ejecuta en nuestro ordenador ta de red de nuestra red de la lista que una conexión nueva.
puede realizar esta tarea de forma ade- aparece y pulsamos Edit. 2. Nos aseguramos de que la opción
cuada. Por supuesto, suponemos que 7. Pulsamos en Routing - y verificamos Make this connection the default route
tenemos una conexión a Internet y una que la casilla Enable IP Forwarding está (Establecer esta conexión por defecto)
conexión a la red local en el mismo orde- marcada (ver figura 2). en la sección Advanced está marcada
nador. Este taller nos muestra la manera En las pruebas que realizamos en la (ver figura 3).
de configurar nuestro ordenador Linux redacción, esto no fue suficiente para 3. Salvamos los cambios y salimos del
para que nos ofrezca capacidades de acabar la configuración. Debimos iniciar programa.
enrutado. la sección Security and Users de nuestro Necesitamos hacer una visita rápida a la
YaST2 y el módulo Firewall (Cor- línea de comandos para activar la redi-
SuSE Linux tafuegos). Aquí encontramos la opción rección IP. La configuración para Red
Si tenemos instalado SuSE para permi- Forward Traffic and do masquerading Hat Linux 9 y 8.0 es:
tirnos acceso a Internet, los siguientes (Remitir Tráfico y hacer enmascaramien- 1. Abrimos una consola: la forma más
pasos adicionales serán necesarios para to), que debimos marcar como activa. rápida de hacerlo es pulsando [Alt-F2]
configurar el ordenador como una puerta y escribiendo konsole.
de enlace estándar: Red Hat Linux 2. Asumimos privilegios de superusuario
1. Arrancamos YaST2 e introducimos Los pasos de configuración en Red Hat escribiendo su, en la línea de coman-
nuestra contraseña. Linux son algo más complejos. Debido a dos y pulsamos [Enter] y escribiendo
2. Pulsamos sobre Network Devices que la herramienta GUI no nos permite la contraseña de root.
(dispositivos de red) en la versión SuSE habilitar la redirección IP, necesitamos 3. Comprobamos que el modulo NAT
Linux 8.2 o Network/Basic (red/básico) acceder a la línea de
en SuSE Linux 8.1. Ahora debemos comandos para este
seleccionar un dispositivo adecuado: paso. Primero inici-
módem, RDSI, ADSL o tarjeta de red. amos la herramienta
3. Pulsamos Configure… (configurar) redhat-config-net-
para añadir una conexión de Internet, o work (redhat-config-
Change (cambiar) para reconfigurar una uración-red) pulsan-
existente. do en el menú K,
4. Debemos asegurarnos de marcar la Systems Settings
casilla Default Route en IP_Details dentro (configuración del
del diálogo de configuración (ver figura sistema) y finalmente
1). Network (redes). Tras
5. Salvamos la configuración y volve- introducir la con-
mos a Network Devices o Network/Basic. traseña debemos
6. Ahora debemos comprobar la con- seguir estos pasos:
figuración de Network card para asegu- 1. Seleccionamos una
rarnos de que el transporte IP esté habili- conexion de Inter-
tado. Para hacer esto, pulsamos net de la lista de Figura 1: Conversión del ordenador en un router.

68 Número 01 www.linuxmagazine.com.es
Portal LINUX USER

esta cargado: puerta de enlace por defecto).


4. Salvamos los cambios y salimos del
/sbin/lsmod | grep iptable_nat programa.

Sí esta prueba no nos proporciona Puerta de Enlace con


ningún resultado deberemos cargar el Microsoft Windows
modulo escribiendo: Para permitir que un cliente de Windows
acceda a Internet mediante un router
/sbin/modprobe iptable_nat Linux debemos seguir los siguientes
pasos en función de la versión de
4. Ahora introducimos el siguiente Windows:
comando:
Figura 2: Habilitando la redirección IP en SuSE Windows 95/98/Me
/sbin/iptables -t nat -A Linux. 1. Abrimos Inicio/Configuración/Panel de
POSTROßß Control y hacemos doble clic sobre el
2. Pulsamos en Network Devices (SuSE icono Red.
Linux 8.2) o Network/Basic (SuSE 2. En la lista de componentes de red
UTING -o ppp0 -j MASQUERADE Linux 8.1) y luego Network card (SuSE localizamos la entrada TCP/IP y pul-
Linux 8.2) o Network card configura- samos Propiedades.
5. Salvamos la configuración escribien- tion (SuSE Linux 8.1). 3. Ahora abrimos la pestaña Puerta de
do: 3.Ahora pulsamos Change… para cam- Enlace y escribimos la dirección local
biar la configuración de la tarjeta exis- IP de nuestro router Linux en la caja
/sbin/service iptables save tente seleccionándola de la lista y pul- Nueva Puerta de Enlace. Pulsamos
sando Edit. Añadir y salvamos la nueva configu-
6. Ahora usamos el siguiente comando 4. En Detailed settings, pulsamos ración.
para activar la redirección IP: Routing e introducimos la dirección
local IP de nuestro router en la casilla Windows 2000
echo "1" > /proc/sys/net/ipv4/ßß Default Gateway. 1. Abrimos Inicio/Configuración/Panel de
ip_forward En el caso de Red Hat Linux, necesitare- Control/Red y conexiones, pulsamos
mos de Nuevo el programa redhat-config- con el botón derecho sobre Conexión
Para asegurarnos de que la redirección network: Área Local y seleccionamos Pro-
IP se mantiene habilitada después 1. Iniciamos la herramienta redhat-con- piedades en el menú.
de reiniciar el sistema podemos usar fig-network con la secuencia desde la 2. Seleccionamos Protocolo Internet
nuestro editor favorito para modificar opción de K Menú, System Settings/ (TCP/IP) y pulsamos Propiedades.
/etc/sysctl.conf, donde reemplazare- Network, e introducimos la contraseña 3. En Utilizar la siguiente dirección IP:
mos el “0” que aparece en net.ipv4.ip_ de root. escribimos la dirección de nuestro
forward = 0 y lo sustituiremos por 2. Seleccionamos la tarjeta de red de la router de Linux en el cuadro Puerta de
un “1”. lista de dispositivos y pulsamos el Enlace por Defecto:.
7. Esta configuración es aplicada cuando botón Edit. 4. Finalizamos pulsando Aceptar.
reiniciamos el equipo. Si sólo cam- 3. En General escribimos la dirección
biamos sysctl.conf sin escribir “1” local IP del router en al campo Default Windows XP
en ip_forward ahora podemos escribir: Gateway Address (Dirección de la 1. Pulsamos sucesivamente en Inicio/
Panel de Control y luego Red y
/sbin/sysctl -p Conexiones Internet.
2. Abrimos las conexiones de red en
para realizar el cambio en el sistema Conexiones de Red.
mientras se ejecuta. 3. Con el botón derecho accedemos al
8. Cerramos la consola presionando menú del icono Conexiones de Área
[Ctrl-d] 2 veces. Local donde seleccionamos Propie-
dades.
Configuración Cliente Linux 4. En la pestaña General seleccionamos
Ahora debemos configurar los orde- Protocolo Internet (TCP/IP) y pulsamos
nadores Linux de nuestra red local para sobre Propiedades.
que utilicen la puerta de enlace de 5. En Utilizar la siguiente dirección IP:
Internet. Para hacer esto en SuSE Linux escribimos la dirección de nuestro
procederemos de la siguiente manera: router de Linux en el cuadro Puerta de
1. Iniciamos YaST2 e introducimos la Figura 3: Configuración de la ruta por defecto en Enlace por Defecto:.
contraseña root. Red Hat Linux. 6. Pulsamos Aceptar para confirmar. ■

www.linuxmagazine.com.es Número 01 69
LINUX USER Desktopia

Panelizer

Aplicaciones a Raya
Los gestores de ventanas simples ofrecen una serie de ventajas en comparación con los entornos de escritorio más com-

plejos: exigen pocos recursos, son rápidos y sumamente configurables. Desafortunadamente, la mayoría carecen de un

panel para añadir funcionalidades adicionales al entorno. POR ANDREA MÜLLER

I
ndependientemente de lo contento
que uno esté con sus actuales
gestores de ventanas, la mayoría de
los usuarios Linux echarán de menos
una pequeña característica, un panel lat-
eral con reloj y menú. Los paquetes inte-
grados 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

www.yukonhostels.com
búsqueda. Se ejecuta en la mayoría de
gestores de ventanas y proporciona una
serie de agradables extras como un mon-
itor de correo y applets para montar dis-
positivos o monitorizar tráfico de redes
al margen de las funciones básicas.
Increíblemente, la aplicación ocupa tan evitar perdernos en el proceso. ROX, que ya disponen de un panel, nece-
64kbytes, ocupando solo 236 kbytes si se Después de gestionar adecuadamente sitan otro.
activan todos los applets disponibles. las numerosas dependencias, podemos
empezar a compilar Panelizer. Des- Simple, ordenado y
Instalación compleja. comprimimos el archivo- 0.5.tar.gz (que funcional.
No existen paquetes precompilados del podemos descargarnos desde [1]) con Tras completar el proceso de instalación
panel, por lo que debemos utilizar nue- tar -xzf panelizer-0.5.tar.gz. A contin- podemos ejecutar el panel escribiendo
stro compilador. Aparte de la librería uación cambiamos al nuevo directorio de panelizer &. La figura 1 muestra la con-
GTK versión 1.2.0 o superior (excepto Panelizer que hemos creado. Puesto que figuración estándar, si bien no muestra
gtk-2.x) y libxml, necesitaremos el el programa no dispone de archivo de mucho. Pulsando la flecha de la izquier-
paquete de desarrollo del Panelizer y, configuración, será necesario usar un da minimizamos el panel, dejando solo
por supuesto, un compilador. Como el editor de texto para añadir nuestras pref- un botón a la vista. Pulsando la aspa
GUI de Panelizer fue desarrollado uti- erencias al archivo Config.mak. No negra cerraremos el panel. Si bien esto
lizando glade, necesitaremos tener insta- obstante, los útiles valores por defecto nos permite un ahorro de espacio signi-
lado este paquete antes de poder compi- (como la instalación en /usr/local) hacen ficativo, es muy posible que necesitemos
lar el panel. El gestor del paquete glade que la personalización no sea impre- algo más de funcionalidad que un botón
suele tender a instalar numerosas libr- scindible. con calendario y reloj. El icono del editor
erías GNOME adicionales localizadas Ya podemos lanzar el compilador de texto no guía hacia el editor de la con-
normalmente en el CD de instalación. escribiendo make, e instalar escribiendo figuración (Figura 2). Lo primero que
Afortunadamente, éstas solo make install. Como alterna- debemos decidir es que queremos que
son esenciales para compilar tiva, también podemos in-
Panelizer, por lo que el soft- Figura 1: Primera ejecu- stalar Panelizer como un GLOSARIO
ware puede ser borrado ción de Panelizer. ROX applet [2] utilizando el
Punto de Montaje: directorio donde el archi-
después de la compilación. Es comando roxinstall. Si bien
vo del sistema de un volumen esta unido al
una buena idea tomar nota de todos las en la teoría esto es una buena opción, árbol local de archivos del sistema.
librerías añadidas al instalar glade para uno se pregunta porque los usuarios de

70 Número 01 www.linuxmagazine.com.es
Desktopia LINUX USER

muestre el panel. Pul- Mount directory en la pes-


sando Add abrimos el taña Paths & Commands. Por
diálogo de selección. Esta defecto, se analiza la carpeta
sección incluye un con- apps de la instalación
junto de útiles herramien- GNOME 1.4 (que puede exis-
tas, como un monitor de tir o no) en busca de infor-
mensajes de entrada en el mación. Es posible person-
buzón de correo (llamado alizar la ruta para permitir a
Mail Counter en la docu- Panelizer tener acceso a los
mentación), un applet archivos .desktop de una
para montar dispositivos instalación GNOME 2.2, si
(Mount Applet), un con- bien las aplicaciones no
mutador de silencio para están agrupadas en cate-
la tarjeta de sonido, un gorías, sino mostradas indi-
menú de inicio para pro- vidualmente (ver Figura 3).
gramas y herramientas de La ubicación de nuestra
monitorización para la instalación de GNOME de-
CPU, memoria y tráfico pende de nuestra distribu-
de red. Figura 3: Panelizer mostrando el menú de GNOME 2. ción. Los usuarios de Red
Debemos prestar aten- Hat deben introducir /usr/
ción al deskswitch (aplicación de con- cuando pulsemos el icono del correo en share/applications para ubicar el menú
mutación). Como la mayoría de las apli- el panel, es decir, abrir el programa que GNOME 2.
caciones de conmutación no funciona utilicemos. Desafortunadamente, Panelizer es
con todos los gestores de ventanas, pero, Debemos prestar también atención a la totalmente incapaz de emular el fun-
en lugar de simplemente negarse a fun- función de silencio. La configuración por cionamiento del menú de KDE 3.1.x. A
cionar con candidatos no adecuados, defecto ejecuta esd (“Enlightenment pesar de que el panel muestra las aplica-
Panelizer se cuelga cuando llamamos al Sound Daemon”). Si utilizamos otro ciones individualmente si especificamos
applet. Podemos ejecutar Panelizer sin servidor de sonido, debemos indicarle la como nuestra carpeta de menú /usr/
problemas de cuelgues con entornos nomenclatura correcta para su manipu- share/applnk, Panelizer proporciona los
como WindowMaker, Enlightenment or lación. Por ejemplo, para trabajar con parámetros incorrectos cuanto tratamos
IceWM. No podemos utilizarlo con aumix la sintaxis correcta es aumix -v0 y de ejecutar cualquier programa. Para lan-
waimea, PWM or Blackbox. aumix -v75. Este texto debe ser escrito zar el panel por defecto cuando intro-
en los recuadros When pushed on y ducimos el comando startx, debemos
El baile de la configuración. When pushed off respectivamente. Esta añadir el comando /usr/local/bin/panel-
Algunas herramientas del Panelizer fun- configuración apagará el sonido cuando izer & a nuestro fichero .xinitrc antes de
cionan bastante bien con la configu- pulsemos el icono del altavoz una vez, lo llamar a nuestro gestor de ventanas. ■
ración por defecto, pero otras necesitan volverá a conectar cuando lo pulsemos
algunos cambios. Pera realizar cambios de nuevo, subiéndolo al 75 % si pul-
en un applet, debemos seleccionarlo en samos el botón una tercera vez. La apli- RECURSOS
la ventana de configuración y pulsar el cación de redes necesita saber que inter-
[1] http://www.fcoutant.freesurf.fr/
botón Configure. Por ejemplo, para per- faz debe monitorizar, mostrando la panelizer.html
mitir que el monitor de correo (biff) fun- velocidad de conexión cuando esté con-
[2] Jo Moskalewski:“RISC rocks”,Linux Maga-
cione, debemos indicarle donde esta figurado. Los usuarios de módems y DSL zine del 24 de octubre de 2002,página 73
almacenado nuestro buzón de correo y pueden usar el dispositivo ppp0 para
especificarle que acción debe realizar monitorizar su conexión a Internet, sien-
do eth0 el dispositivo habitual utilizado Andrea Müller es una
para redes locales. estudiante de dere-
cho que se entretiene
Si deseamos monitorizar ambos tipos
con Linux siempre
de redes, debemos iniciar dos aplica- que se cansa de
LA AUTORA:

ciones de red. Panelizer permite la selec- teorías legales.


ción de símbolos en la ventana de con- Cuando el tiempo se
figuración con el objeto de ayudarnos a lo permite, le gusta
estudiar otros sistemas operativos
distinguir aplicaciones. Podemos utilizar como QNX, BeOS y NetBSD, e intenta
los mismos pasos para añadir múltiples mejorar sus habilidades con Python. Al
applets escalonados para diversos con- margen de Linux y sus estudios univer-
troladores y particiones de nuestro sis- sitarios, los intereses de Andrea se
decantan hacia la literatura, la histo-
Figura 2: Un práctico editor nos ayuda con las tar- tema. No debemos olvidar introducir el
ria Europea y el ciclismo.
eas de configuración. punto de montaje adecuado para el

www.linuxmagazine.com.es Número 01 71
LINUX USER Schlagwort

Konversation

¡Habla conmigo!
¿Por qué deambular por ahí en busca de compañía cuando hay una sala de chat

en tu misma casa? A los amantes de la tertulia virtual les va a encantar Konver-

sation, la última herramienta IRC de KDE, por su amigable entorno.

BY STEFANIE TEUFEL

S
i pagas mucho en tú factura de No hay paquetes disponibles para en la red IRC más importante, IRCNet, y
teléfono y casi no aprovechas tú SuSE 8.1 y algunas otras distribuciones, después introducir el canal KDE pulsando
tarifa plana, en lugar de usar el pero tras descomprimir el paquete #kdeusers. Tras abrir la ventana de con-
teléfono conversa con tus amigos lejanos konversation-0.12.tar.gz desde /usr/- versación que aparece podemos selec-
mediante el teclado. El servicio IRC, local/kde/bin, la configuración estándar, cionar Settings/Konversation Configure
abreviatura de "Internet Relay Chat" configure; make; make install funcionará para volver al diálogo de configuración.
(Conversación Transmitida por Internet) perfectamente. Este procedimiento su- Para conectarnos a servidores chat de
es ideal para esto. pone que los paquetes KDE3 y Qt3-Dev y otras redes IRC debemos pulsar el acceso
Para casi cualquier tema existe una las herramientas estándar de compi- New Server (Nuevo Servidor) en la figura
sala de conversación apropiada o canal lación están instaladas. 1 y escribir los detalles del servidor en la
IRC disponible. Y si no está disponibles Para arrancar el programa, podemos ir ventana de la figura 2 (p. ej.: Freenode
puedes crear uno adecuado al tema que al acceso Internet/Konversation en el [2]). Al mismo tiempo podemos selec-
te interese discutir. Para hacerlo, todo lo menú K o escribir konversation & en la cionar un canal para conectar de forma
que necesitamos es un cliente IRC y ventana terminal de nuestra elección. Si inmediata con el nuevo servidor. Este
conexión a cualquiera de los muchos el programa lo compilamos nosotros, pequeño truco nos puede ahorrar mucho
servidores IRC disponibles en Internet. Si hay que introducir la ruta correcta. tiempo más adelante. Si deseamos
bien hay muchos clientes de IRC La ventana principal (figura 1) es el conectarnos a un servidor específico
disponibles, vamos a tratar sobre centro de comandos donde configu- cada vez que iniciemos el programa
Konversation [1], un programa KDE real- raremos el programa de acuerdo a nues- debemos marcar la casilla del servidor
izado con este propósito que destaca tras necesidades concretas. El punto de deseado en Server List.
sobre el resto por su facilidad de uso. entrada, una caja de diálogo llamada La anotación Identity (Identidad) en la
"Extra Gear" (http://extragear.kde. Server list (Lista de Servidores) se utiliza lista de selección a la izquierda de la
org/) es una colección de programas para gestionar los
sueltos de KDE que por distintas razones diversos servidores
no están incluidas en el paquete Core IRC.
KDE. Puede ser descargado desde http:// Desafortunadamente,
konversation.sourceforge.net/. Al igual aquí es donde trope-
que el código fuente, también hay diver- zamos con uno de los
sos paquetes RPM para los distribu- únicos defectos del pro-
ciones más conocidas, desde Debian grama. A diferencia de
hasta SuSE de las que puedes elegir. programas similares,
Programas como rpm, kpackage o dpkg y los desarrolladores de
apt pueden facilitarnos el proceso de Konversation no pro-
instalación. porcionan una lista de
las redes IRC más pop-
APLICACIONES ulares y los datos de Figura 1: Nuestra ventana al mundo IRC

En esta columna presentamos herramientas sus correspondientes


mensualmente que han demostrado ser servidores.
especialmente útiles para trabajar bajo KDE, Debemos seleccionar
resuelven problemas que de otra forma la única opción dis-
serían ignorados o simplemente son de las ponible, pulsar Connect
cosas más bonitas de la vida, que, una vez
(Conectar) para contac-
descubiertas, no queremos dejar pasar.
tar el servidor KDE IRC Figura 2: ¡Nuevos servidores, por favor!

72 Número 01 www.linuxmagazine.com.es
Schlagwort LINUX USER

figura 1 también es impor- en General settings/ com-


tante. Mientras que los apo- mand char, los comandos de
dos no son bien recibidos en nuestro sistema empezarán
los grupos de noticias, aquí con una barra invertida /. Si
son recomendados e, incluso, escribimos /help (Ayuda) nos
se anima a su uso.Por tanto mostrará los comandos
debemos escoger un Nick disponibles. Podemos encon-
(Apodo) apropiado e intro- trar una ayuda rápida en
ducirlo en el campo adecuado IRChelp [3].
(ver figura 3). Debido a que Esta página hace un uso
hay muchos usuarios, el intensivo del término IRC Op.
apodo elegido puede estar pil- Este tiene el siguiente signifi-
lado. Konversation propor- cado: a un usuario que entre
ciona 3 campos adicionales en un canal recién creado se
de apodos donde podemos le asignan más privilegios
introducir alternativas. El pro- que a otro usuario que entre
grama itera sobre la lista si más tarde. Como Operador
nuestra primera opción no Figura 3: Una identidad adecuada para cada mundo del canal podemos expulsar
está disponible. (kick) del canal a otros usuar-
Konversation tiene la capacidad de chat cada vez que ocurra algo en el ios por mal comportamiento o por
estar en una red IRC con un apodo deter- canal. Esto puede ocurrir por ejemplo motivos personales.
minado y con otro distinto en otra red. El cuando alguien escriba un mensaje o un Los comandos más importantes de los
botón Add new identity (Añadir nueva usuario entre o abandone el canal. Ops se encuentran debajo de la lista de
identidad) nos permite ponernos un Al margen de chatear, el IRC puede uti- usuarios de la derecha. Podemos pulsar
nuevo “disfraz”. Mientras el nombre lizarse para el intercambio de archivos kick para expulsar usuarios y Ban
estándar New Identity no es muy especí- de datos. Las conexiones de clientes (Prohibición) para proscribir usuarios
fico, lo podemos cambiar con el botón directos (DCCs - Direct Client Con- del canal. Un Op también nos permite
Rename (Renombrar). En cuanto salve- nections) se usan con este fin. Dos asignar privilegios de Op a otros usuar-
mos nuestro nuevo “apodo” estará clientes IRC pueden establecer una ios, mientras DeOp se los revocará. Si
disponible en el menú desplegable conexión directa sin necesidad de pasar deseamos aplicar un comando a más de
Identity. También estará disponible en a través del servidor IRC. Podemos uti- un usuario debemos usar [Ctrl] y el
Server Lists tras realizar los cambios lizar DCC settings para configurar la botón izquierdo del ratón para selec-
oportunos usando el botón Edit. Esto nos conexión. cionar los usuarios.
permite personalizar cada servidor con La opción DCC accept downloads auto- Los usuarios que utilizan mucho tiem-
una identidad distinta. matically (DCC aceptar descargas po IRC están destinado s a hacer amigos.
El comportamiento de nuestro cliente automáticamente) debe ser utilizada con Konversation nos ayuda a mantener
IRC puede ser modificado en General set- precaución, puesto que permite a estos contactos monitorizando si nue-
tings.Si activamos las opciones Auto- Konversation descargar cualquier cosa stros amigos están en línea. Podemos
matically Connect (Conectar Auto- ofrecida sin hacer ninguna pregunta, desplegar el menú Windows/Notify list
máticamente) y Automatically Enter pudiendo descargar códigos de progra- (Ventana/lista de notificación) e intro-
(Entrar Automáticamente), Konversation mas nocivos. Si deseamos que el progra- ducir los apodos adecuados usando el
intentará conectarse de Nuevo si la ma incluya el nombre del remitente en botón New (nuevo). Konversation nos
conexión se interrumpe. Una marca en las descargas, simplemente debemos notificará cuando estos usuarios estén o
blinking tabs (Etiquetas intermitentes) le activar la casilla Sender in data name entren en un canal.
indica a Konversation que debe encender (Nombre del emisor de datos). De la misma forma que podemos estar
un pequeño indicador en la barra del muy contentos con unos usuarios, hay
Preparados, listos, ¡CHAT! otros que pueden ser un problema. Pero
GLOSARIO Una vez en el canal elegido, no hay nada por suerte, el programa nos resuelve este
Core: Todos los programas que son oficial- que nos impida tener conversaciones problema con una lista de usuarios que
mente sacados al mercado son asignados a excitantes. La ventana del canal está deseamos ignorar Windows/Ignore list. ■
los llamados paquetes “Core”. Mientras dividida en 3 áreas (ver figura 4).Los
“kdelibs”y “kdebase”deben estar instalados, mensajes de nuestro compañero o servi-
otros paquetes, organizados por materias
como “kdeadmin”o “kdemultimedia”,
dor aparecen en la ventana principal. A RECURSOS
pueden dejarse aparte. la derecha, Konversation lista los usuar- [1] Konversation: http://konversation.
IRC-Network: Podemos acceder a todos los ios actualmente en el canal. sourceforge.net/
usuarios de todos los servidores de una red Nuestros propios mensajes son [2] Freenode: http://www.freenode.net
IRC específica. Pero los usuarios de redes difer- escritos en la línea de comandos inferior.
entes no pueden conectarse a otras redes. [3] IRC help: http://www.irchelp.org
Si mantenemos los valores por defecto

www.linuxmagazine.com.es Número 01 73
LINUX USER XUL

El Kit de Construcción de Mozilla

Programación XUL
De todas las invenciones de los últi-

mos 50 años, solo unos pocos

productos realmente innovadores

han llegado a un punto en el cual

todos los usamos habitualmente

todos los días de nuestra vida. A pesar

de ello no tenemos por qué

quedarnos estancados en sus defec-

tos iniciales de diseño.

POR JONO BACON

A
pesar de que joyas como el otras cosas. Al margen de las políticas de crea un entorno donde los cambios más
Sinclair C5, la moto tipo Chopper, las guerras de navegadores, la incompe- dinámicos de la página son los más difí-
el refresco Tab Clear o Microsoft tente implementación de estándares y ciles de realizar, dándole a la Web una
FoxPro se hayan quedado en el camino, los intentos de censura por parte de cier- clara sensación de “pesada”.
hay algunos productos y tecnologías que tos políticos americanos, la Web ha
se han mantenido. Una de esas tec- demostrado ser un medio atrayente al Introducción a XUL
nologías es la Web. Hay pocas dudas al que el acceso se supone. Hay veces que La dependencia de HTML y su esperada
respecto de que la Web ha causado un puedo oír por ahí la frase “¿Cómo que no funcionalidad de búsqueda es realmente
gran impacto en la forma en que nos tienes Internet?” (enunciada en tono de una piedra de toque del problema que
comunicamos, compramos o hacemos asombro). Al margen de la popular- acabamos de describir. A pesar de que
ización de la Web, sus limitaciones son tecnologías como el HTML Dinámico
Jono Bacon is a evidentes. La más visible es el hecho de (DHTML) y el Modelo de Objetos de
writer/journalist, con-
que la interfaz entera debe ser reinventa- Documentos (DOM) han aparecido para
sultant and developer
based in England. Jono da cada vez que se desarrolla un sitio atacar el problema, éstas necesitan un
EL AUTOR

has been actively web. Además, la interfaz debe ser recar- poco de mimo para hacerlas funcionar
involved with Linux gada cada vez que se realiza un cambio conjuntamente. Los desarrolladores del
since 1998 and has
en la página por muy pequeño que sea. popular buscador Mozilla tuvieron una
worked on a number of
different projects including KDE, Esto es ineficiente no solo por el hecho idea diferente. Con grandes dosis de dis-
KDE::Enteprise, KDE Usability Study, de que HTML redundante necesita ser cusiones y diseño, los programadores
Kafka and Linux UK.You can find his enviado y recibido una y otra vez entre trabajaron juntos hasta crear el Lenguaje
website at http://www.jonobacon.org.
el servidor y el navegador, si no porque de Interfaz del Usuario de XML (XUL)

74 Número 01 www.linuxmagazine.com.es
XUL LINUX USER

específica, pudiendo entonces escribir Si bien tenemos 4 líneas de código, esto


software que lea esas etiquetas y las use es realmente una única etiqueta que he
en el contexto que deseemos. XUL sigue subdividido en una serie de líneas para
el mismo concepto, pero las etiquetas hacerla más fácil de leer. De hecho, no
son usadas para crear elementos de importa donde hagamos separaciones de
interfaz específicos. La magia no línea, siempre y cuando no rompamos
comienza, no obstante, hasta que etiiquetas.
Mozilla lee las etiquetas y crea los ele- Cada página XUL que creemos necesita
mentos de la interfaz por nosotros. El una etiqueta <window> que pueda ser
archivo XML es una forma simple de usadas para contener los componentes
especificar lo que queremos como inter- que forman nuestra interfaz. Dentro de
faz y donde. esta etiqueta hemos usado 3 atributos. El
Figura 1: No es exactamente el código XUL más primero (id) es una referencia única que
claro, pero es un inicio. Comencemos apunta a esta etiqueta en XML. El atribu-
Esta es la primera parte de una serie, to id es esencial para ser capaces de
resolviendo el problema parcialmente. donde voy a mostrar como modelar una comunicarnos con etiquetas y actu-
Pronunciado “zool” e inspirado por los interfaz basada en XUL. Esta interfaz alizarlas con cambios e información.
Cazafantasmas (Ghostbusters), el abarcará algunos de los diferentes com- Esto estará más claro cuando usemos
lenguaje XUL en esencia busca recrear ponentes XUL disponibles, y si bien no DOM para actualizar y referenciar real-
las características de la interfaz de veremos como realizar tareas hasta el mente etiquetas. La segunda etiqueta,
usuario típicamente asociadas a paque- próximo capítulo, si sentaremos las title (título), contiene una serie de carac-
tes de herramientas gráficas normales bases de cómo crear nuestra interfaz teres legibles por humanos que se mues-
como Qt y GTK. Características como visual. Para comenzar crearemos un tra en la barra de título cuando lanzamos
botones, barras de desplazamiento, eti- archivo XUL simple que contenga 2 el archivo XUL en la ventana oportuna.
quetas o menús están disponibles en el botones. Para hacer esto, crearemos un Si cargamos el archivo en el navegador
paquete XUL. Muchos de estos simple- archivo llamado xul1.xul al que le añadi- como hemos hecho, este texto es ignora-
mente no están disponibles en formatos remos el siguiente código (ver Listado do. El último atributo es la parte xmlns.
normales HTML. Cada una de estas fun- 1). Tras añadir el código, usaremos Este valor especifica el namespace (espa-
ciones se usa dentro de XUL simple- Archivo | Abrir Archivo para localizarlo y cio de nombres) en el que la etiqueta
mente escribiendo (no es de extrañar) abrirlo en Mozilla. Deberíamos ver algo <window> y todas las etiquetas dentro
archivos XML. Para los que sienten un similar a la figura 1. Cualquier archivo de ella están basadas. Un namespace es
agudo dolor de cabeza cuando leen las XML, independientemente de su fun- como un grupo especial que podemos
letras XML les voy a dar un breve repaso ción, debe tener algunas líneas al princi- especificar para determinar de donde
de lo que es. XML es un conjunto de pio que indican la versión de XML y una viene una etiqueta. Esto ayuda en situa-
reglas y convenciones que nos permiten hoja de estilo si es oportuno. En nuestro ciones en las que tengamos una etiqueta
crear lenguajes que parecen similares al ejemplo tenemos las siguientes 2 líneas: <window> de otro lenguaje XML y una
HTML. Estos lenguajes incluyen etique- etiqueta <window> del lenguaje XUL:
tas, atributos, contenidos y otros concep- <?xml version="1.0"?> namespace las diferencia. Ahora estamos
tos que también se hallan en HTML (de <?xml-stylesheet href="chrome:U listos para poner algo en nuestra pan-
hecho las versiones más modernas de //global/skin/" type="text/css"?> talla. En nuestro ejemplo hemos creado
HTML son “dialectos” XML). La tec- dos botones con nuestro código:
nología XML nos permite crear nuestras Como podemos observar, tenemos una
propias etiquetas y lenguaje que pueden línea de versión que indica que la ver- Listado 1: Xul1.xul
ser usados para nuestros propios fines. sión XML es la 1.0. La segunda línea
<?xml version=“1.0”?>
Por ejemplo, si quisiésemos almacenar indica que nuestra hoja de estilo está en
<?xml-stylesheet href=“chrome://
una dirección en XML crearíamos: la ruta chrome. La ruta chrome contiene
global/skin/” type=“text/css”?>
algunas utilidades internas de Mozilla
<window id=“firstwindow”
<contacto> que gestionan habitualmente las inter-
<nombre>Pepe</nombre> faces de usuario de Mozilla. Las sigu- title=“Primera Ventana XUL”
<apellidos>López</apellidos> ientes líneas contienen nuestras xmlns=“http://www.mozilla.org/
<direccion>13, Rue del Percebe,U primeras etiquetas: keymaster/gatekeeper/
33333 Villaalgo</direccion> there.is.only.xul”>
<telefono>020 344 5443U <window <button id=“button1”
</telefono> id="firstwindow" label=“Primer Botón”/>
</contacto> title="First XUL Window" <button id=“button2”
xmlns="http://www.mozilla.org/U label=“Segundo Botón”/>
Aquí usamos etiquetas específicas para keymaster/gatekeeper/there.is.U
</window>
marcar datos diferentes de información only.xul">

www.linuxmagazine.com.es Número 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>. Verán que este tipo de ata-
jos se usan habitualmente en XML. Para
finalizar nuestro archivo incluimos la eti-
queta de cierre </window>.

Gestión de la composición
Figura 2: Gestor de diseño horizontal. En nuestro primer ejemplo que el segun- Figura 3: Combinación de gestión del diseño hori-
do Botón está debajo del primero. Este es zontal y vertical.
el comportamiento predeterminado de
<button id="button1" label=ßß los componentes cuya distribución no a continuación un ejemplo de gestión
"Primer Botón"/> está especificada. Si bien esto es válido que nos permite disponer nuestros
<button id="button2" label=ßß para páginas sencillas, este método de botones:
"Segundo Botón"/> posicionar componentes no es suficien-
temente flexible. Aquí es cuando se <hbox>
Las líneas del código son muy similares, necesita usar un gestor de distribución. <button id="button1" label=U
pues solo los atributos id y label (etique- La gestión de la distribución es algo "Primer Botón"/>
ta) tienen diferentes contenidos. El atrib- común en la mayoría de los compo- <button id="button2" label=U
uto id se comporta de la misma manera nentes GUI como Qt y GTK. El único req- "Segundo Botón"/>
que el equivalente <window> que uisito es que pongamos nuestros compo- </hbox>
usaremos para referenciar la etiqueta nentes dentro de unos controles invisi-
más tarde. El atributo etiqueta contiene bles que nos coloquen nuestro controles La forma en que funciona la etiqueta
el texto que realmente aparece en el visibles de una manera determinada. La <hbox> es colocando horizontalmente
Botón. Alguno se preguntará que está mayoría de herramientas contienen for- los componentes entre las etiquetas
haciendo la barra invertida (/) en la eti- mas horizontales y verticales de com- <hbox> y </hbox> más cercanas. Los
queta. Al contrario de lo que ocurre en posición. Esta forma estandarizada de resultados de este código los podemos
algunas formas de HTML, donde gestionar las formas se ha transferido a ver en la figura 2.
podemos dejar sueltas etiquetas por ahí, XUL y consecuentemente tenemos las El otro tipo de gestión de la composi-
XML es muy estricto sobre el marcaje etiquetas <hbox> y <vbox>. Veamos ción es la etiqueta <vbox>. Esta etique-

Componentes tipo HTML


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

76 Número 01 www.linuxmagazine.com.es
XUL LINUX USER

zontalmente. Prestemos atención a como


hemos dispuesto el bloque vertical de
botones tras los componentes del bloque
horizontal. Debido a la posición de nue-
stros componentes deberíamos ver algo
parecido a lo que muestra la figura 3.
Una cosa a la que tenemos que estar
atentos cuando posicionemos nuestros
componentes es cómo el gestor maneja
el espacio. En nuestro último ejemplo se
ajustó el ancho de los botones horizon-
tales para acomodar el espacio necesario
Figura 4: Uso de etiquetas y listados. para los botones verticales. Esto es Figura 5: Un interfaz XUL completa.
debido a que el gestor vertical fue anida-
ta se comporta de la misma forma que la do dentro del gestor horizontal afectando En este caso, la pestaña “Editor Textos”
etiqueta <hbox> pero muestra sus los componentes horizontales. será la pestaña de la izquierda y la pes-
componentes hijos (los componentes taña “Lista” la de la derecha. Ahora ten-
entre las etiquetas <vbox> y Componentes Exóticos emos que crear los paneles de la pes-
</vbox>) verticalmente. Si ponemos El verdadero poder de XUL reside en la tañas. Lo hacemos creando primero una
un bloque similar debajo de nuestro forma en que puede eclipsar a HTML en etiqueta de paneles de pestañas gen-
bloque <hbox> podemos ver como fun- la forma de conseguir información del erales:
ciona. (H) en lo botones gestionados usuario. Esta capacidad reside en la
horizontalmente y (V) en los verticales: forma en que podemos usar aplicaciones <tabpanels>
de control GUI normales dentro del con-
01 <hbox> cepto de la web. En el siguiente ejemplo Ahora creamos cada panel por turnos.
02 <button id="button1" label=U vamos a crear dos etiquetas, una con un Primero creamos el panel de la caja de
03 "Primer Botón (H)"/> componente de edición de texto multi- texto. Para ello utilizamos la etiqueta
04 <button id="button2" label=U línea y la otra con un cajetín con una <tabpanel> para crear cada panel y
05 "Segundo Botón (H)"/> lista desplegable. En este ejemplo, las luego la rellenamos con otros compo-
06 </hbox> etiquetas y los cajetines no son típica- nentes:
07 <vbox> mente usados en un entorno web.
08 <button id="button1" label=U Iremos avanzando paso a paso por este <tabpanel id="text">
09 "Primer Botón (V)"/> ejemplo y escribiendo el código a medi- <label value=ßß
10 <button id="button2" label=U da que progresamos. "Escribe un poco de texto:"/>
11 "Segundo Botón (V)"/> Primero creamos un archivo nuevo <textbox id="textbox"U
12 </vbox> con la versión de XML, página de estilo y multiline="true" flex="1"/>
etiquetas <window>, para luego añadir </tabpanel>
Las cosas se ponen realmente intere- las siguientes líneas:
santes cuando intentamos combinar un El lector avispado se habrá dado cuenta
tipo de gestor de composiciones dentro <tabbox> del atributo flex que se ha colado en el
de otro gestor. Miremos el siguiente códi- <tabs> código. Cuando este tiene un valor de 1
go por ejemplo: <tab label="Editor Textos"/> el componente se ajustará para ocupar
<tab label="Lista"/> todo el espacio disponible. Para nuestro
01 <hbox> </tabs> segundo panel crearemos nuestra lista de
02 <button id="button1"·label=U texto dentro del mismo panel. Usaremos
03 "Primer Botón (H)"/> Aquí hemos empezado creando un la etiqueta <listbox> para crear la caja
04 <button id="button2" label=U nuevo componente que contiene solapas principal y luego usaremos la etiqueta
05 "Segundo Botón (H)"/> (<tabbox>). Una caja de solapas con- <listitem> para añadir cada cosa a la
06 <vbox> tendrá un número de solapas que a su caja.
07 <button id="button1" label=U vez puede contener otros componentes.
08 "Primer Botón (V)"/> Entonces abrimos la etiqueta <tabs> <tabpanel id="listbox">
09 <button id="button2" label=U para especificar los nombres de los sola- <label value="¿ColorU
10 "Segundo Botón (V)"/> pas en nuestra interfaz. Para cada solapa Favorito?"/>
11 </vbox> usaremos la etiqueta <tab> para <listbox flex="1">
12 </hbox> especificar que etiqueta debe ser defini- <listitem label="Rojo"/>
da. Nuestros solapas serán añadidos <listitem label="Azul"/>
Aquí hemos puesto el gestor vertical desde la izquierda hacia la derecha en el <listitem label="Amarillo"/>
dentro de los botones gestionados hori- orden que los especifiquemos en XUL. <listitem label="Verde"/>

www.linuxmagazine.com.es Número 01 77
LINUX USER XUL

</listbox> 04 <menuitem label="Nuevo"/> (ver listado 3). El código no es diferente


</tabpanel> 05 <menuitem label="Abrir"/> del ejemplo anterior. Finalmente cer-
06 <menuitem label="Guardar"/> ramos el gestor horizontal y la ventana:
Finalmente cerramos el panel de etique- 07 <menuseparator/>
tas y la caja de pestañas general: 08 <menuitem label="Salir"/> </hbox>
09 </menupopup> </window>
</tabpanels> 10 </menu>
</tabbox> Conclusión
Para crea el menú, primero usamos la En la primera parte de nuestra serie
Podemos ver el interfaz completa en la etiqueta <menu> para crear las hemos cubierto bastante terreno. No
figura 4. entradas del mismo y luego usamos solo nos hemos lanzado pataleando y
<menupopup> para crear el área gritando al mundo de los programas
Interfaces completos desplegable. Finalmente añadimos una XML y XUL, si no que además hemos
Para acabar la primera entrega de progra- serie de elementos con etiquetas podido estudiar las etiquetas estilo
mación XUL miraremos un interfaz XUL <menuitem>. Ahora usamos el mismo HTML, las etiquetas especiales, los
de ejemplo completo. Este interfaz concepto para crear el menú Editar: gestores de diseño, cajas de etiquetas,
incluirá parte del código que ya hemos menús y muchas cosas más. Con el
repasado al igual que algunos menús y <menu id="editmenu" U conocimiento que hemos desarrollado
divisores reajustables. Iremos paso a label="Editar"> hasta ahora tenemos la posibilidad de
paso por todas las líneas del código para <menupopup id="editpopup"> crear interfaces XUL más o menos
asegurar que entendemos todo lo que <menuitem label="Deshacer"/> grandes. Desde luego que hay muchos
hemos tratado. Primero comenzaremos <menuitem label="Rehacer"/> más componentes que cubriremos en
con la definición de etiquetas en XML y </menupopup> otros números. El mes que viene partire-
la creación de una ventana principal (ver </menu> mos del conocimiento de este numero y
listado 2). Los primeros componentes </menubar> lo haremos funcional. Usaremos las
que añadiremos son algunos menús. Su capacidades de JavaScript de Mozilla y
creación sigue el mismo principio que Con nuestros menús creados estamos lis- las uniremos con XUL para conseguir
hemos estado usando con anterioridad tos para crear el área del interfaz princi- que nuestras interfaces interactúen con
creando etiquetas dentro de otras etique- pal. Si miramos la figura5 podemos el usuario. ■
tas para construir los distintos elemen- observar el resultado de nuestro interfaz
tos. Primero creamos una barra de menú y como está construida. Tenemos un lis- Listado 3: Tab box
(la barra en la que el menú se asienta) tado a la izquierda de la pantalla y las
01 <tabbox>
con una etiqueta <menubar>. pestañas a la derecha. Para gestionar
02 <tabs>
esta disposición primero necesitamos
03 <tab label="Editor Textos"/>
<menubar id="menubar"> abrir una etiqueta <hbox> y luego
crear el listado: 04 <tab label="Lista"/>
Luego añadiremos un menú completo. 05 </tabs>
En este caso, el menú Archivo: <hbox> 06 <tabpanels>
<listbox flex="1"> 07 <tabpanel id="text">
01 <menu id="filemenu" U <listitem label="Rojo"/> 08 <label value="Escribe algo de
02 label="Archivo"> <listitem label="Azul"/> texto:"/>
03 <menupopup id="file-popup"> <listitem label="Amarillo"/> 09 <textbox id="textbox"
<listitem label="Verde"/> multiline="true" flex="1"/>
Listado 2: Ventana </listbox>
10 </tabpanel>
principal. 11 <tabpanel id=listbox>
Lo siguiente que vamos ha hacer es usar
01 <?xml version="1.0"?> 12 <label value="¿Color
un componente especial llamado splitter
02 <?xml-stylesheet Favorito?"/>
para añadir una barra reajustable que
03 href="chrome://global/skin/" 13 <listbox flex="1">
permita al usuario ajustar el componente
04 type="text/css"?> a la izquierda y a la derecha del divisor. 14 <listitem label="Rojo"/>
05 <window Usamos la etiqueta <splitter/> para 15 <listitem label="Azul"/>
06 id="complete" crear este componente: 16 <listitem label="Amarillo"/>
07 title="Ejemplo Completo" 17 <listitem label="Verde"/>
08 <splitter/> 18 </listbox>
xmlns="http://www.mozilla.org/ 19 </tabpanel>
keymaster/gatekeeper/there.is. El siguiente montón de código es nuestra 20 </tabpanels>
only.xul> familiar caja de etiquetas que contienen 21 </tabbox>
etiquetas de edición de texto y listados

78 Número 01 www.linuxmagazine.com.es
Educación LINUX USER

El servidor interactivo de actividades matemáticas WIMS

La navaja suiza de las


aplicaciones matemáticas
U
no de los problemas principales Estrenamos esta sección (un saludo a los lectores) presentando una aplicación
que nos planteamos los edu-
cadores cuando nos vemos ante de nombre un poco intimidatorio, el Web Interactive Mathematical Server,
la disponibilidad de ordenadores en un
aula es que, aunque adivinamos que las WIMS. Pero que nadie se asuste, nuestro objetivo en estas páginas es
posibilidades que se nos ofrecen son
demostrar lo fácil que es de utilizar y lo sumamente útil que puede llegar a ser
enormes, se nos hace manifiesta nuestra
ignorancia sobre herramientas y recursos en un aula. POR JUAN RAFAEL FERNÁNDEZ
que nos permitan una explotación
pedagógica eficaz y creativa. Y esto
ocurre tanto si se trabaja con software
privativo como si es software libre; pero cualquier aplicación, un editor de textos este sentido hemos pensado que
en este caso además no contamos con el o un programa para dibujar, puede ser debíamos comenzar por hablar de WIMS
colchón psicológico de lo conocido y las una aplicación educativa, quizás la más porque es una herramienta que responde
inercias nos hacen aferrarnos a solu- útil; la clave está en encontrar los enfo- a una demanda presente en los Centros
ciones que, trataré de demostrarlo, no lo ques y las metodologías para que su uti- educativos.
son nunca a medio plazo: la experiencia lización tenga sentido pedagógicamente.
demuestra que la mejor herramienta pri- Nos centraremos sin embargo en los pro- ¿Qué es WIMS?
vativa ata al usuario a la cadena de actu- gramas específicamente educativos por Aunque tenga nombre de herramienta
alizaciones de versiones de la aplicación la sencilla razón de que son menos cono- para matemáticos, o la documentación lo
y impide su participación en desarrollos cidos. Por supuesto que consideramos presente como un servidor de ejercicios
que se reciben de forma pasiva. A veces esencial escuchar las sugerencias, interactivos, WIMS es la navaja suiza de
se nos olvida que únicamente el software comentarios y críticas de los lectores. las aplicaciones educativas: una platafor-
libre es nuestro y que podemos colaborar Pretendemos que sea una sección clara y ma que permite crear clases virtuales,
en la corrección de los errores y deficien- útil; al plantearnos el criterio de orde- cumple también la función de compartir
cias que evidentemente tiene. nación (podíamos haber seguido una y almacenar cientos de ejercicios y es
Esta sección tiene como objetivo pre- clasificación por materias, o por niveles incluso un entorno de generación de
sentar herramientas y aplicaciones libres educativos) hemos pensado que exámenes, evaluación y seguimiento del
de uso educativo. Evidentemente debíamos regirnos por la urgencia. En progreso del alumno y de una clase. En

Figura 1: Página principal de un servidor WIMS Figura 2: Actividades para el nivel H3

www.linuxmagazine.com.es Número 01 79
LINUX USER Educación

este sentido puede revolucionar la puede utilizarlo o contribuir, es que En el cuadro 1 se pueden leer noticias
dinámica de los controles de un Centro respeta los estándares definidos por los sobre la traducción de las actividades.
educativo; como explica Gang Xiao, no creadores de la web (el consorcio W3C) Las posibilidades de utilización de
es necesario que a todos los examinan- y por tanto funciona con cualquier nave- WIMS escapan al espacio disponible en
dos se les haga las mismas preguntas gador, en cualquier sistema operativo. esta sección. En este primer artículo
ocultas hasta ese momento, simultánea y WIMS lo creó y lo desarrolla Gang vamos a realizar un repaso general de
sincronizadamente, vigilando que no se Xiao, un profesor de matemáticas chino sus capacidades y de las actividades
copien. Porque WIMS permite generar que enseña en la Universidad de Niza, disponibles, con algunos ejemplos de
un conjunto enorme y redundante de Francia; tiene licencia libre (GPL). uso; expondremos primero cómo puede
preguntas, de manera que a cada exami- Georges Khaznadar ha preparado paque- utilizarse en remoto y detallaremos
nando se le asigne aleatoriamente un tes binarios para Debian y contribuye después cómo se instala en un orde-
subconjunto equivalente a los otros sub- decisivamente a su documentación y nador. En el próximo número trataremos
conjuntos. Sólo así se logra la objetivi- divulgación. Existe una red de servidores la creación de una clase virtual, de
dad en la selección de preguntas que se WIMS por todo el mundo, y recopila- actividades nuevas con Createxo y Mod-
le hace a cada alumno[2]. ciones de ejercicios y actividades de tool y lo que en la terminología de WIMS
Y las actividades no tienen que ser de licencia libre. La velocidad de desarrollo se conoce como documentos y cursos.
matemáticas o química, comprobaremos y de incorporación de módulos y traduc-
que con WIMS podemos crear activi- ciones es muy rápida: mientras escribo Conectarse a un servidor
dades de conocimiento del medio o de este artículo se ha pasado de la versión Para probar WIMS no hace falta instalar-
idiomas. Otra gran ventaja de WIMS, 3.42 a la 3.44, y probablemente cuando lo en nuestro ordenador: bastan una
además de ser libre y de que cualquiera esté en los quioscos la versión sea otra. conexión a Internet y un navegador.

Cuadro 2: instalación de WIMS


Hay tres maneras de instalar WIMS: instalar cer la ventaja, es que nos enfrentamos al encontramos (como tantas veces, en Debian
el paquete tar.gz preparado por Xiao, los problema de dar respuesta a la cadena de suele prevalecer el principio de estabilidad
paquetes incorporados a Sid (la versión dependencias que una aplicación tan imbri- frente al de actualidad hasta en su versión
inestable de Debian) o las versiones experi- cada como esta presenta; deberemos ser inestable) ante un paquete en parte roto[4] y
mentales preparadas por Georges Khaz- nosotros los que instalemos las aplicaciones anticuado: entre las versiones 4.36 y la 4.40
nadar. Examinemos las ventajas e inconve- a las que llama, en la versión apropiada.Y Xiao emprendió una reestructuración gener-
nientes de cada opción. debemos decidir un poco a ciegas qué al de las actividades y suprimió gran número
Podemos descargar de http://wims.unice.fr/ paquetes caen bajo los conceptos de de módulos[5]; la consulta del registro de
download/wims el código fuente del servi- ‘recomendados’,‘sugeridos’o son ‘dependen- cambios confirma que es muy aconsejable la
dor y las aplicaciones. Las líneas siguientes cias’cuya ausencia harán que el programa actualización.
ejecutadas desde una terminal bastarán: simplemente no funcione. Para resolver este Los que deseen profundizar en el uso de
problema las distribuciones han creado sus nuestra aplicación deberán añadir la línea
wget
sistemas de gestión de paquetes. Utilicé-
http://wims.unice.fr/download/U deb ftp://developer.ofset.org
moslos.
wims/wims-3.44.tgz sarge main
Para arquitecturas i386 hay paquetes rpm
wget a su fichero sources.list. Si se había instalado
disponibles en http://wims.unice.fr/
http://wims.unice.fr/download/U la versión 3.28 conviene que se la elimine
download/rpms/.
(tras guardar las aportaciones locales)
wims/wims-modules-en-3.44.tgzU
La versión para Sid se instalaría así porque el árbol de dependencias ha variado
wget (suponemos que está actualizada la base de y se dan incompatibilidades entre las dos
http://wims.unice.fr/download/U datos de aplicaciones): versiones. Ahora el ya ritual apt-get update
wims/wims-modules-fr-3.44.tgzU
apt-get install wims nos permite ejecutar
wget
wims-modules-esU apt-get install wims-serverU
http://wims.unice.fr/download/U
wims-modules-en wims-modules-fr U wims-physics wims-modules-enU
wims/wims-modules-en-3.44.tgz
gap yacas octave povray wims-modules-fr wims-older-esU
Tenemos instrucciones sobre cómo compilar
latex2html wims-older-en wims-older-frU
e instalar la aplicación en http://wims.unice.
A estas alturas y hasta que se remedie es gap yacas octave povray
fr/download/wims/README.También se nos
altamente aconsejable instalar los paquetes latex2html
ofrece la opción de descargar la versión 3.42
de módulos franceses e ingleses, salvo que Fijémonos en que el paquete wims ha pasa-
compilada junto con sus dependencias prin-
resulten irremediablemente ininteligibles, o do a ser un paquete virtual y roto en estos
cipales (aviso: son 65 megas)
bien sepamos italiano, chino u holandés o momentos (no puede instalarse y ha sido
wget http://wims.unice.fr/U queramos aprenderlos por este drástico sustituido por wims-server). Recordaremos
download/wims/wims-chroot-i386-U método. He añadido a la línea paquetes que también la reestructuración de módulos que
3.42.tgz figuran como sugeridos o recomendados había realizado Gang Xiao y que ha llevado a
La ventaja de utilizar las fuentes es que pero que son altamente aconsejables para Khaznadar a recuperar las viejas actividades
estaremos ante la versión actualizada por el aprovechar la potencia de WIMS. en paquetes aparte.
autor; el inconveniente, que anula a mi pare- El problema de la versión para Sid es que nos

80 Número 01 www.linuxmagazine.com.es
Educación LINUX USER

Figura 3: Ejercicio de sistemas lineales Figura 4: Ejercicio sobre la tabla periódica

Podríamos utilizar alguno de los espejos comprenden con un ejemplo, aquí va atexo. Advierto que en la interfaz inglesa
españoles, pero vamos a conectarnos uno. aparecen además ‘Quick popup tools’ y
con el servidor principal para estar ‘Sheets of exercises’. Seleccionamos
seguros de contar con la versión más Ejemplo de uso matemático cualquiera de las categorías y dejando el
actualizada, y seleccionaremos la inter- Aunque decíamos que no hace falta ser cuadro de texto en blanco nos apare-
faz en español pinchando en la bandera matemático para sacarle partido a cerán todas las actividades clasificadas
española. WIMS, está hecho por un matemático y por orden de popularidad.
Tecleamos http://wims.unice.fr/wims/ se nota. WIMS incluye una interfaz a Podríamos buscar por tipos de acti-
fr_home.html en nuestro navegador y aplicaciones matemáticas (PARI, Maxi- vidad (es muy llamativo ver los ejer-
obtenemos una página similar a la de la ma, Octave, Yacas, GAP[3]) que permite cicios interactivos, con animaciones
figura 1, salvo que en francés. Aparecerá utilizarlas directamente. Y la mayor que lamentablemente no pueden pre-
al pie de página la versión (3.45a es la parte de los ejercicios y actividades los sentarse en el formato papel de esta
versión actual, al 5 de noviembre) y la han creados profesores universitarios de revista) o por palabras clave pero vamos
fecha de compilación. Tras seleccionar el matemáticas. Afortunadamente ni son a aprender a buscar por niveles edu-
español como idioma (podemos elegir todos ni tienen porqué serlo. cativos. La tabla 1 nos permitirá com-
además inglés, francés, chino o Comenzaremos por aprender a usar el prender la clasificación de Gang Xiao de
holandés) lo primero que nos llamará la buscador. Lo primero que nos llamará la los niveles educativos, que no corre-
atención probablemente es la mezcla de atención son las categorías en que están sponde exactamente con los niveles
lenguas. Porque, y es una peculiaridad clasificadas las actividades: ‘Actividades españoles.
de la aplicación, nos aparecen todas las wims‘ (módulos completos de activi- Vamos a buscar actividades para
versiones de cada módulo, en todas sus dades), ‘Lecciones y referencias‘ (el nom- bachiller, digamos nivel H3. Pondremos
traducciones. bre no miente), ‘Calculadores‘ (traduc- en el buscador la cadena ‘levelH3’. La
Pero vamos a explorar la interfaz. Nos ción de ‘Online calculators‘, ‘herramien- salida de la figura 2 nos muestra que el
fijaremos primeramente en el menú de tas de cálculo en línea’ en las palabras de sistema encuentra cincuenta actividades;
opciones situado sobre las banderas, los franceses), ‘Ejercicios interactivos‘, elegimos para examinarla una actividad
donde vemos que podemos acceder a ‘Recreativas matemáticas‘ y lo que recibe en español, ‘Sistemas lineales 2x2’, y se
páginas de ayuda, configurar preferen- la extraña traducción de ‘Ejercicios reser- nos presenta una página que nos permite
cias, etc. También podemos ver una línea vada‘ y que no son más que ejercicios configurar la actividad. Pinchamos en ‘Ir
de enlaces dedicados a la creación y uti- simples creados en el formato OEF al trabajo’ y el motor de generación nos
lización de clases virtuales. Pero en este (Online Exercise Format, donde el ‘reser- proporciona aleatoriamente un ejercicio;
momento nos interesa sobre todo el bus- vada’ es una mala comprensión de ‘clas- incluso podemos cambiarlo por otro
cador de actividades. Como las cosas se sified’) con la herramienta de WIMS cre- equivalente. El que ha aparecido, figura
3, en esta ocasión está parcialmente tra-
Tabla 1: Niveles educativos en la clasificación de Gang Xiao ducido. Una cuestión es importante en
este momento: la solución del ejercicio
E1 … E6, N cursos de Educación Primaria + Primer ciclo de Secundaria
H1 … H6, N cursos del Segundo Ciclo de Secundaria + Bachiller (la sigla corresponde a High School)
se hará con papel y lápiz, que no van a
U1 … U4, N cursos de Universidad (Undergraduate)
ser sustituidos por la tecnología; ésta se
G, Graduate:Licenciado,con o sin el grado de licenciatura utiliza para almacenar y seleccionar al
R, Research, nivel de investigador azar actividades de carácter equivalente.
Y para crearlas.

www.linuxmagazine.com.es Número 01 81
LINUX USER Educación

Utilización en física y movido en el campo de lo técni-


química co o lo científico-matemático.
Georges Khaznadar es profesor Pero asegurábamos en la pre-
de física y química. ¿Por qué no sentación que nos encon-
vemos qué utilidad puede trábamos ante una aplicación de
encontrar en WIMS un profesor múltiples aprovechamientos;
de química? sólo la inercia y la falta de imagi-
Para ello vamos a buscar la nación pueden explicar que no
cadena ‘química’ en el buscador. busquemos nuevas formas de
Desgraciadamente no devuelve explotar sus posibilidades.
ningún resultado; después busco Como la imaginación se nos
‘chimie’ y aparecen tres módu- supone, como el valor al recluta,
los en francés; tecleo ‘chemistry’ y hay que cumplir las promesas,
y el número de hallazgos sube a mostraremos ejemplos que
seis. Examinemos (lo siento, por pueden adaptarse inmediata-
ahora en inglés) ‘OEF periodic mente a la enseñanza primaria o
table’: averiguamos que se trata al aprendizaje de idiomas.
de un módulo de 32 ejercicios Hablábamos de que había que
configurables que tiene por comenzar por crear los índices:
objeto memorizar la tabla per- Figura 5: Ejemplo de ejercicio de óptica fácil, con la condición (lógica, si
iódica. Elijo las opciones por estamos instalando software) de
defecto y la opción ‘Click on table’ local es la velocidad de acceso y reacción que hay que tener permisos de root para
(teclear en la tabla). Dejo al amable lec- del sistema (importante si los cálculos leer /usr/lib/wims/tmp/log/.wimspas-
tor la duda de si en la escena de la figura que deberán efectuarse no son elemen- sone: pinchar en ‘WIMS online site
4 hemos pinchado en la casilla errónea a tales); pero el argumento fundamental es maintenance’ e introducir la contraseña
propósito. la posibilidad de utilizar una de las de un solo uso generada por el sistema
Para demostrar que WIMS no es una capacidades fundamentales de WIMS: la (para comprobar que tenemos los per-
aplicación de sólo texto, sino que puede creación de clases y la perspectiva que misos necesarios) en el recuadro. Nos
utilizar y que genera al vuelo imágenes y abre de seguimiento de los progresos de aparecerá la imagen 6. Interesa la opción
gráficas, introducimos a continuación los alumnos. ‘Rebuild resource index’; tras un aviso
‘physics’ en el buscador y elegimos ejer- El cuadro 2 nos detalla cómo realiza la lógico de que durante la (re)creación de
cicios de óptica: ‘OEF Optique’. En la instalación de la aplicación. El servidor los índices el servicio quedará suspendi-
figura 5 podemos ver una respuesta WIMS funciona en GNU Linux y en Mac do podemos proceder; la terminación del
incorrecta y su corrección. OS-X. Aunque puede actuar como una proceso quedará señalada por el envío
aplicación independiente, lo habitual es de un correo al administrador (config-
Utilización local: ¿nos integrarlo en el servidor web apache. urable en la página de administración).
conviene instalar WIMS? Es el momento de hacer una pequeña
Cuando hablamos de una utilización WIMS para profesores de comparación con las herramientas de
local nos estamos refiriendo a la insta- letras autor con las que estamos más familiar-
lación de WIMS en una máquina de una Hasta este punto del artículo nos hemos izados; hemos visto que WIMS permite
red local que hará de servidor la creación de tests de respuesta
para toda la red. La utilización única o múltiple (o infinitas;
local frente a la remota tiene evi- Khaznadar pone los siguientes
dentemente sus ventajas e ejemplos: hallar dos enteros rela-
inconvenientes y el usuario tivos de suma 0, con las solu-
deberá sopesarlas en función de ciones (0,0), (-1,1), (-2,2)…, o
sus necesidades y del uso pre- bien dar n ejemplos de expre-
visto; por un lado la disponibili- siones matemáticas que sean
dad inmediata de los servidores equivalentes a 0); también es
WIMS ya instalados y la lib- posible crear ejercicios de rel-
eración de tiempo y de preocu- lenar recuadros, o de ordenación
paciones de instalación, man- de puzzles (en la categoría de
tenimiento y actualizaciones ‘Recreativas matemáticas’ ten-
debe cotejarse con la oportu- emos dos ejemplos, ‘Shifting
nidad de instalar y/o crear puzzle’ y ‘Q-Puzzle’, donde el
(sólo) las actividades que nos movimiento de las piezas está
interesen localmente. Otro argu- vinculado a fórmulas matemáti-
mento a favor de una instalación Figura 6: Página de administración en línea de WIMS cas), de relacionar etiquetas e

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

Figura 7: Configuración del ejercicio de conjugación Figura 8: Ejemplo de ejercicio de idiomas Kuadros.

imágenes mediante el uso del ratón mentales que pueden utilizarse en otros actividades, y aprenderemos algunos
(‘Arithmetic Tables’ o ‘EOF Flags’, donde niveles traducidos o tienen un valor detalles de uso avanzado.
hay que asignar a un país su bandera); o, comunicativo evidente si se usan sin tra- Hasta pronto. ■
mediante el uso de java y javascript, ducir (estoy pensando en ejercicios
cualquier tipo de ejercicio interactivo como ‘OEF Clock’). RECURSOS
(ver ‘Elliptic billard’ o ‘Moving Comet Como podemos ver en la figura 7 ten- [1] El sitio web canónico de WIMS es http://
Shoot’). La limitación de espacio nos emos gran flexibilidad a la hora de elegir wims.unice.fr. Allí podemos encontrar las
impide recoger los ejemplos citados, verbos y tiempos que conjugar; la figura fuentes del programa, módulos, docu-
pero animamos al lector a que visite 8 nos muestra un ejemplo de uso. Cómo mentación…
cualquier servidor y los evalúe; insisto podemos adaptar este ejercicio, cómo [2] Existen live-CDs (CDs vivos, de esos que
especialmente en que ejercicios como podemos crear nuestra propias activi- funcionan directamente desde el CD sin
‘EOF Flags’ o una variación de él son dades, es material para el siguiente tener que instalar los programas en el
disco duro) con WIMS, por ejemplo
perfectamente utilizables en primaria y número.
KNOWIMS (http://wims.unice.fr/
primeros años de secundaria. knowims/).
Un último ejemplo nos está permitido. Conclusión
[3] En el repositorio experimental de la
Ahora la ausencia de traducciones va a En este primer capítulo dedicado al soft- Guadalinex 2004 disponemos de la ver-
ser una ventaja: un idioma se aprende en ware educativo, hemos hecho un repaso sión 3.28, pero podemos descargar los
ese idioma, del mismo modo que a tocar general de las capacidades de WIMS y paquetes .deb de prueba de la versión
la guitarra se aprende tocando la guitar- comprobado que puede utilizarse en 3.40, de developer.ofset.org.
ra. Podemos encontrar un ejercicio (no multitud de circunstancias; también [4] El documento más completo para apren-
muy imaginativo, es verdad) para la hemos aprendido a instalarlo si lo con- der a manejar WIMS es El libro de WIMS,
enseñanza del francés (se llega a él bus- sideramos adecuado. En el próximo de Georges Khaznadar. Está traducido al
español: http://libro-wims.software-libre.
cando conjugaison o verbes y se llama número aprenderemos a crear clases vir-
org.
‘OEF Conjugaison’) y otros ejercicios ele- tuales y a desarrollar nuestras propias

GLOSARIO
End User Licence Agreement, Acuerdo de culos en teoría de los números (factoriza- podría decir que es útil en la simplificación y
aceptación de la licencia por el usuario final. ciones, teoría algebraica de los números, cur- normalización de expresiones formales.
La lectura detallada de cualquiera de ellos es vas elípticas…) y que incluye funciones para Octave es un lenguaje de alto nivel (compat-
muy instructiva sobre cómo el software priv- el cálculo con otras entidades matemáticas ible con Matlab) creado para el cálculo
ativo limita los derechos de los usuarios. como matrices, polinomios, etc. Su uti- numérico.Yet Another Computer Algebra
El desarrollo del razonamiento y la lización en un ejercicio creado con WIMS es System (Yacas) es un lenguaje de álgebra
demostración en términos matemáticos trivial, veamos un ejemplo recogido de la computacional muy flexible y con una sin-
puede seguirse en On Public-Question Tests, FAQ (http://wims.auto.u-psud.fr/wims/faq/ taxis muy similar a la de Mathematica. El sis-
de Gang Xiao, mayo de 2004 (http://wims. fr/logiciel.html.También se presentan ejem- tema Groups, Algorithms and Programming
unice.fr/paper/pqt.pdf). En sus términos un plos de utilización de las otras aplicaciones.): (GAP) está especializado en la teoría de los
public-question test es una prueba cuyas pre- \text{f = pari(factor(20! + 1))} grupos.
guntas pueden publicarse previamente a su El paquete wims_3.28-6.1 no ha pasado a
Maxima es un sistema de álgebra computa-
realización. Sarge porque una de sus dependencias,
cional muy completo y de código libre, que
PARI es un sistema muy utilizado de álgebra permite la manipulación simbólica de poli- texgd, tiene un error crítico (a release critical
computacional creado para optimizar los cál- nomios, matrices, funciones racionales… Se bug en la jerga de Debian).

www.linuxmagazine.com.es Número 01 83
LINUX USER grep

Búsqueda de archivos de texto con grep

De Cacería 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. ¿Cómo 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

L
as cosas que no seamos capaces de en la línea de comandos y grep nos nos mostrará todas la veces que la pal-
recordar las debemos guardar en mostrará los pasajes apropiados del abra blanco aparece en la obra maestra
nuestro ordenador, reza una máx- archivo. Si la búsqueda contiene espacio de Melville (ver figura 1). El asterisco
ima del usuario informático. debemos utilizar comillas. Por ejemplo: significa “cualquier grupo de letras”. El
Ésta no es una mala idea, pero, a diferen- interfaz cambiará esta expresión por el
cia de lo que ocurre con la memoria grep "Jardín del Edén" nombre de cualquier archivo en el direc-
humana, que normalmente recuperará la biblia.txt torio actual que empiece por los carac-
información almacenada de forma teres moby..
fidedigna (excepto en los exámenes Debemos prestar atención y esperar Si los archivos en los que deseamos
finales, por supuesto), no siempre es tan fallos cuando usemos caracteres espe- buscar están distribuidos por diversos
fácil encontrar información en nuestro ciales: *, ? y ! tienen un significado directorios debemos añadir la opción r
disco duro. Podemos perder mucho especial para la línea de comandos. para indicarle a grep que busque en una
tiempo en encontrar un archivo del que Otro grupo de caracteres (., *<C>, carpeta completa:
hemos olvidado su nombre o dónde fue ^<C>, $ y \) no se interpreta por
almacenado. Incluso el saber exacta- grep tal cual. En su lugar, la her- grep -r blanco Melville/obras/
mente que archivo contiene la ramienta supondrá una expresión reg-
información que buscamos puede ser de ular. El lado positivo es que esto nos buscará blanco en el directorio obras y
poca ayuda en caso de archivos de texto permite construir búsquedas muy en los subdirecorios que cuelguen de él.
grandes. potentes y complejas, si bien es posi-
El comando del shell grep, que localiza ble que prefiramos evitar estos carac- VISIÓN GENERAL DE GREP
cadenas de texto en ficheros es útil en teres con grep hasta que nos sinta- Comando Acción
ambos casos. En la situación más simple, mos a gusto con la herramienta. grep patrón fichero búsca en un archivo un patrón
podemos ejecutar grep con la tecla de grep patrón *.htm busca en todos los archivos en
búsqueda y el archivo a buscar. grep nos Si no sabemos que archivo contiene un directorio que acaban con el
mostrará todas las líneas en el archivo el texto que buscamos, podemos eje- sufijo .htm
especificado que contengan el texto bus- cutar grep con un comodín. La obra grep -r patrón realiza una búsqueda recursiva
directorio en un directorio y sus subdirectorios.
cado. Imaginemos que deseamos buscar "Moby Dick" del autor Herman
grep -i patrón ignora la diferencia entre
en el archivo biblia.txt el texto “Jardín Melvilla está compuesta de una colec-
fichero mayúsculas y minúsculas.
del Edén”. Debemos escribir ción de archivos de texto.
grep -A n muestra las siguientes n líneas tras
la línea que contiene la búsqueda.
grep Edén biblia.txt grep blanco moby.*

84 Número 01 www.linuxmagazine.com.es
grep LINUX USER

Ahora presionamos [Esc] ZZ o


[Escape]:wq para almacenar el archi-
vo y salir de vi. Para utilizar nuestro
nuevo alias en el shell, necesitamos
analizar sintácticamente el archivo de
configuración. Para hacerlo debemos
escribir:

. ~/.bashrc

Ahora podemos usar el comando pss


nombreprograma para buscar un progra-
ma 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, números de teléfono y las
direcciones de correo electrónico y de
Figura 1: El libro “Moby Dick” de Melville está subdividido en una serie de archivos de texto. El comodín correo ordinario de nuestros amigos,
“moby.*” indica a grep que busque en todos los archivos del directorio. conocidos y parientes. Una entrada
puede ser como:
Debido a que los gurús del shell suelen
El Trio: ps, grep y kill. ser notablemente perezosos, necesita- Charly Pingüino
grep no es sólo útil para búsquedas de mos encontrar un método para no tener +12345 678
texto filosóficos y teológicos, si no que que escribir este comando cada vez que tux@linux.org
puede ser combinado con otros coman- lo requiramos: en otras palabras, necesi- C/del Polo Sur
dos del shell. Si la respuesta de un tamos un alias. Los alias definidos deben Villatux, Antártica
comando produce mucho texto, grep ser guardados en el archivo .bashrc en el
puede ser utilizado escribiendo tras la directorio raíz. Este archivo se ejecuta Ahora debemos salvar el archive como
instrucción el carácter “|” y grep cada vez que abrimos un shell de direcciones en nuestro directorio raíz y
texto_a_buscar para filtrar el resultado y comandos interactivo. Usaremos nuestro añadir el siguiente alias a .bashrc:
mantener solo las partes en las que esta- editor de texto favorito para abrir el
mos interesados. Un caso típico es en el fichero, por ejemplo kwrite ~/.bashrc & alias tel="cat ~/direcciones |ßß
que usaríamos grep para cerrar un pro- o vi ~/.bashrc en el escritorio, dependi- grep -i -A 4"
grama que se ha bloqueado. endo de nuestras preferencias. Debido a
El comando ps ax nos muestra los pro- que vi no es sencillo, veamos algunos El comando cat nos muestra el contenido
cesos activos. Podemos usar grep para comandos simples. Si escribimos G le del archivo direcciones. El carácter |
aplicar un filtro y encontrar solo el pro- indicamos a vi que debe ir al final del envía este resultado a grep. La opción -i
grama que estamos buscando, Mozilla archivo. Entonces podemos escribir o garantiza que la búsqueda no diferencia-
por ejemplo: para cambiar el editor al modo de intro- rá entre mayúsculas y minúsculas.
ducción de datos. A diferencia de los Finalmente, -A 4 indica a grep que debe
> ps ax | grep mozilla comandos a y i, o indica a vi que inicie la mostrar las 4 líneas siguientes a la
2500 ? S 1:40 /usr/lib/ßß inserción en la línea donde está situado primera coincidencia con la búsqueda.
mozilla-1.3/mozilla-bin el cursor. De nuevo
5645 pts/4 S 0:00 grep mozilla Ahora podemos introducir nuestro
alias en la última línea de .bashrc. En . ~/.bashrc
grep nos muestra dos coincidencias que lugar de pss podemos usar cualquier otro
contienen Mozilla: el buscador y el pro- nombre fácil de recordar pero evitando analizará sintácticamente de nuevo
pio grep. La parte que nos interesa para usar el nombre de un comando exis- nuestro archivo de configuración. En el
cerrar el programa aparece al principio tente: futuro, solo necesitaremos escribir tel
de cada línea: el ID del proceso. Ahora nombre en el shell para recuperar
podemos escribir kill 2500 para cerrar el alias pss="ps ax |ßß la dirección de la persona que busque-
programa deseado. grep" mos. ■

www.linuxmagazine.com.es Número 01 85
LINUX USER LaTeX

LaTeX bajo Linux

Tipografía Profesional
para Todos
Actualmente, todo el mundo tiene ordenadores personales e incluso el usuario más principiante sabe lo que es un

procesador de textos. Pero todo aquél que escribiera un libro en el periodo, digamos, de 1455 a 1985, elaboraba un manu-

scrito que luego mandaba “a imprenta”. La imprenta era un lugar misterioso de donde, por arte de magia, aparecía un

ejemplar impreso donde antes sólo había un montón de cuartillas emborronadas. POR MIGUEL ATENCIA

E
s difícil entender hoy en día el dades que vamos cometiendo. Si no Si al ejecutar el programa latex sale algo
impacto que suponía para un autor queréis complicaros la vida, ignorad a parecido a lo de arriba, ya podemos
ver su obra impresa. LaTeX es el los puristas. pasar directamente a probarlo. Para salir
moderno sustituto del maestro tipógrafo. del prompt con los dos asteriscos, sim-
Con un ordenador personal y una impre- El primer documento LaTeX plemente pulsaremos Ctrl-C. Si no ten-
sora, podemos obtener resultados con el Lo primero es tener LaTeX instalado para emos Latex instalado, podemos instalar-
mismo aspecto profesional que propor- hacer todas las pruebas que vamos lo desde el CD de nuestra distro favorita
ciona una imprenta, tanto si escribimos sugiriendo y las que se os ocurran. mediante un programa de gestión de
un libro de 700 páginas como si hacemos LaTeX y Linux se llevan bien, de hecho, software, ya sea rpm, Kpackage o
un trabajo escolar que incluye gráficos y LaTeX nació en el mundo Unix, la especi- cualquier otro. Como último recurso, se
fórmulas matemáticas. En lo que sigue, ficación es pública y la mayoría de las puede descargar de la Comprehensive
daremos algunas razones por las que distribuciones son de código abierto. Por Tex Archive Network [1] o del mirror
resulta preferible utilizar LaTeX en lugar lo tanto, es muy posible que LaTeX ya español en [2]. Aquí encontraremos la
de un programa de autoedición o un esté en el sistema. Para estar seguros distribución teTex, que es la más
procesador de textos. Nuestro objetivo es hagamos una prueba. En la línea de portable de las distintas que existen.
que todos seamos capaces de obtener comandos escribimos: También podemos encontrar en CTAN
resultados brillantes con LaTeX lo antes [3] alguna documentación sobre Latex,
posible (veréis que no es tan difícil) y $ latex la mayoría en formato… Latex. Esto es
posiblemente algún purista de LaTeX se This is TeX, Version ... uno de los principales problemas de
moleste en señalar todos las irregulari- ** Latex: en general, la ayuda es bastante

Figura 1: Aspecto de un documento básico en Latex. Los márgenes y tipos de Figura 2: Aspecto de un documento básico en OpenOffice. El resultado es
letra están ya ajustados a una presentación profesional menos profesional

86 Número 01 www.linuxmagazine.com.es
LaTeX LINUX USER

pobre. Con la distribución teTex se pro- saje bastante incomprensible. El texto observamos el resultado. A la vista de
porciona una ayuda muy básica, en for- anterior podemos guardarlo, por ejemp- este ejemplo, alguien podría preguntar si
mato info, que puede verse ejecutando lo, con el nombre hola.tex y ejecutamos no habríamos hecho lo mismo con un
info latex. Existen excelentes libros sobre desde la línea de comandos: procesador de textos, como OpenOffice.
Latex en cualquier librería especializada La respuesta es sí, pero con algunos
pero no es imprescindible comprarse un $ latex hola inconvenientes. Para empezar, podemos
libro para obtener resultados brillantes comparar el aspecto de nuestro fichero
en Latex. Supongamos que todo ha ido bien e DVI (Figura 1) con la previsualización de
LaTeX no tiene interfaz de usuario, ya ignoramos la ristra de mensajes que OpenOffice (Figura 2). Esto es subjetivo,
que no es un programa interactivo, sino salen. Con esto hemos completado con pero a mí me parece que el aspecto del
que se ejecuta desde la línea de coman- éxito nuestro primer documento Latex. documento DVI es mucho más profe-
dos. Esto será muy fácil de entender para Ahora bien, ¿qué hemos sacado en claro? sional, más parecido a un libro “de ver-
el que haya programado en algún Si hubiéramos compilado un programa, dad”. Naturalmente que en OpenOffice
lenguaje (no en un entorno visual): habríamos obtenido un ejecutable. Al se puede imitar el aspecto de Latex
LaTeX es como un compilador. Por tanto, ejecutar Latex correctamente, obtenemos eligiendo los tipos de letra adecuados,
prepararemos el documento LaTeX en un fichero DVI, que significa algo así márgenes, etc. Pero me parece intere-
nuestro editor preferido. Algunos edi- como “fichero independiente del disposi- sante comparar los documentos que se
tores tienen facilidades que ayudan a la tivo”. Un fichero DVI es como un PDF y, obtienen con un mínimo de esfuerzo.
escritura de documentos LaTeX. Por al igual que un PDF, necesita un progra- También resulta ventajoso Latex al usar
ejemplo, si se usa el entorno gráfico ma para visualizarlo. Todas las distribu- documentos en texto plano:
KDE, Kate reconoce los comandos LaTeX ciones de Linux decentes incluyen el
(aunque no todos) y los representa con xdvi pero, además, en el menú de gráfi- $ ls -al hola.*
distintos colores. De esta forma, cos del entorno KDE (o ejecutando kdvi) ... 5238 sep 19 12:42 hola.sxw
podemos detectar errores de sintaxis disponemos del KDVI, que resulta ... 74 sep 19 12:33 hola.tex
antes de “compilar”. También se mucho más cómodo. En cualquier caso,
recomienda vim, con la ventaja de que visualizamos nuestro fichero hola.dvi y ¡El documento Latex es 70 veces más
funciona incluso sin entorno gráfico.
Muchos intrépidos utilizan emacs o Listado 1: libro.tex
Xemacs, por las posibilidades de person- 01 % Clase de documento
alización que tienen. Si alguien tiene la 02 \documentclass[a4paper]{report}
desgracia de verse obligado a utilizar 03 % Paquetes adicionales
Windows, la mejor combinación es el 04 \usepackage[spanish]{babel}
editor WinEdit (de pago, aunque muy 05 \usepackage[latin1]{inputenc}
barato) con la distribución MiKTeX. Si 06 % Fin del preámbulo. Comienza el documento
estamos acostumbrados a un procesador 07 \begin{document}
de textos, tal como el de OpenOffice, 08 % Página de títulos
podemos seguir usándolo tranquila- 09 \title{El maestro de los collares}
mente y disfrutar de las facilidades 10 \author{J.R. Talco}
habituales (el corrector ortográfico, el 11 \maketitle
sistema de autocompletado, etc.). Eso sí, 12 % Fin de los títulos. Comienza el texto normal
hay que guardar el documento como 13 \chapter{De los jovis}
texto plano y se perderá cualquier forma- 14
to que se introduzca. 15 Este libro trata principalmente de los jovis, y el lector
Ya estamos preparados para el primer descubrirá en
documento Latex, que será el embrión 16 sus páginas mucho del carácter y algo de la historia de este pueblo...
de nuestra gran obra, el best-seller con 17
que nos haremos famosos. Escribamos 18
en el editor el siguiente texto: 19 No obstante, muchos querrán saber desde un principio algo más de
este pueblo
\documentclass[a4paper]{book} 20 notable y quizás a algunos no les haya dado la gana comprarse el libro
\begin{document} 21 anterior...
Hola, mundo 22
\end{document} 23 Los jovis son un pueblo complicado pero muy joven, cada
vez más
Al que sea totalmente inexperto en 24 numeroso. Amaban la guerra, el follón y la caza...
Latex, le recomiendo copiarlo con cuida- 25
26 % Fin del documento
do, porque si se comete algún error,
27 \end{document}
probablemente Latex lanzará un men-

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

Figura 3: Aspecto del documento en OpenOffice. El resultado impreso arras- Figura 4: Extracto de un documento completo en Latex, que introduce
trará todas las imperfecciones cometidas al teclear, al ser un programa automáticamente cabeceras de capítulos, página de títulos y demás detalles
WYSIWYG de formato

pequeño! Baste decir que mi tesis doc- rafo con tabuladores y otras no, algunas guntarnos nuestra opinión. Para apren-
toral de casi 200 páginas, con cientos de palabras están separadas con más de un der a hacer nuestros propios documen-
fórmulas y más de 20 figuras, cabe en un espacio, algunos párrafos están separa- tos, cada vez más perfeccionados, estu-
disquete y la escribí en un Pentium 1. dos con dos saltos de línea, etc. Como se diaremos en detalle nuestro “programa”
Intentad hacer eso mismo con observa en la Figura 3, el resultado no es Latex.
OpenOffice, no hablemos ya de MS muy estético, así que luego habrá que En primer lugar, la sintaxis de Latex es
Word. Por último, la facilidad de manejo: pagarle a un tipógrafo para que haga la bastante simple: todas las instrucciones
Latex tiene fama de ser muy difícil de composición… o podemos usar Latex. empiezan con un backslash (la barra
usar, asequible sólo para matemáticos y Vamos a introducir el texto en la “plantil- hacia atrás \), seguidas del nombre de la
demás gente de mal vivir. Bueno, ya la” del apartado anterior, aunque le instrucción. La mayoría de las instruc-
hemos visto que no es para tanto. Esto es añadiremos algunos detalles, quedando ciones requieren especificar uno o más
como todo, lo básico e imprescindible es como el Listado 1. parámetros, aunque para algunas basta
simple, después podemos ir complicán- Sólo queda ejecutar latex y ver el escribir su nombre, por ejemplo \maketi-
dolo todo lo necesario. Incluso resultado (ver la Figura 4). Im- tle. Los parámetros opcionales, que se
podríamos usar el documento que presionante, ¿verdad? Aparte de corregir pueden omitir, van entre corchetes tras el
hemos hecho como plantilla y escribir en el espaciado, la tabulación y la justifi- nombre de la instrucción, mientras que
el “hueco” entre \begin{document} y cación, uno puede preguntarse de dónde los parámetros que son obligatorios en
\end{document}, sin aprender nada más ha salido la palabra “Capítulo” o la fecha una instrucción se escriben entre llaves,
de Latex. En realidad, esto de usar plan- actual en la página de título, o quién ha al final de la instrucción. Hay básica-
tillas hechas por otros es un pecado que, definido los márgenes. Todos esos mente dos clases de instrucciones: los
más o menos, cometemos todos los detalles de formato están a cargo de mandatos simples y los entornos. Estos
usuarios de Latex. Cuando empecé a Latex, que los resuelve a la perfección, últimos son los que se definen con una
usar Latex, me aconsejaron que jamás aunque también es verdad que sin pre- pareja de instrucciones \begin ... \end.
empezara un documento desde En el documento anterior, sólo
cero, siempre debía partir de Tabla 1. Algunas opciones de la hay un entorno: el entorno doc-
una plantilla hecha por otro. He instrucción \documentclass ument, que debe existir en todo
seguido este consejo y no me ha Opciones Significado Opción por defecto documento Latex. Natural-
ido del todo mal. 10pt / 11pt / 12 pt Tamaño de letra 10 pt mente, sólo puede haber un
oneside / twoside Impresión a doble cara twoside en book,oneside en report y entorno document, pero si
Capítulo I… article alguien está preparado para
Ha llegado el momento de openright / Empezar capítulos en openright en book,openany afrontar la gestión de errores de
empezar nuestro libro/trabajo/ openany página impar Latex, puede probar qué pasa
artículo/carta o lo que a cada en report cuando se incluye más de uno.
uno le dicte la inspiración. onecolumn / Texto en una o onecolumn Lo que hay dentro del entorno
twocolumn dos columnas
Como estamos bajo el influjo de document es propiamente el
titlepage / Salto de página tras titlepage en book y
las musas, no es el momento de contenido de nuestro documen-
notitlepage los títulos
fijarnos en detalles de formato: to, como su propio nombre
report, notitlepage en article
unas veces empezamos el pár- indica, mientras que lo anterior

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

a \begin{document} es el preámbulo, ejemplo, cambiamos la clase a book en que recargar el documento DVI porque
donde se definen algunas características nuestro documento, el único cambio se ha recompilado el fuente Latex.
generales del documento. Como ya se aparente es la introducción de una pági- Las otras dos líneas del preámbulo de
habrá adivinado, se pueden introducir na en blanco después del título. ¿Por qué nuestro documento son instrucciones
comentarios en cualquier punto, comen- aparece esta página? Porque, en un libro, \usepackage, que cargan paquetes adi-
zando la línea con el símbolo %, de todos los capítulos empiezan en una cionales. La posibilidad de extensión de
forma que estas líneas no afectan en página impar, es decir, en la página de la Latex con paquetes externos es lo que le
nada al documento impreso. derecha, tal como la vemos si manten- da una enorme potencia a Latex. Para
emos el libro abierto. Para que esto sirva cualquier cosa que queramos hacer,
El preámbulo del documento para algo, tenemos que imprimir el doc- seguro que alguien ha hecho ya el corre-
La primera instrucción del documento es umento a doble cara. En cambio, si cam- spondiente paquete y sólo tendremos
la instrucción \documentclass: biamos a la clase article, se elimina la que encontrarlo. Incluso podemos
página de portada con el título. Además, encontrar clases enteras para propósitos
\documentclass[a4paper]{report} se pierde el formato del título del capítu- específicos, distintas de book, report y
lo porque, en realidad, un artículo no article. Además, hay algunos paquetes
Esto define la “clase” del documento. En puede tener capítulos, sino “secciones”. tan útiles que se han convertido en parte
Latex hay predefinidas tres clases de uso Volveremos a esta cuestión pronto, al de la distribución estándar de Latex.
general: book, report y article. Existen estudiar la estructura del documento. Veamos cuáles son los dos paquetes que
también las clases letter (para cartas, con Habiendo seleccionado la clase de hemos incluido en nuestro documento,
una gestión muy potente de etiquetas nuestro documento, se pueden configu- empezando por babel. Es gracias a la
para hacer envíos masivos de cartas per- rar diferentes variantes, dando parámet- línea…
sonalizadas) y slides (¡se pueden hacer ros opcionales en la instrucción \docu-
presentaciones con Latex!) pero tienen mentclass. Por ejemplo, en nuestro docu- \usepackage[spanish]{babel}
muchas instrucciones específicas y mento hemos especificado que el
requieren un estudio especial. No hay tamaño de papel es A4, con la opción …como Latex ha sabido escribir
grandes diferencias entre book, report y a4paper. Podíamos también haber elegi- “Capítulo”. Para aprender idiomas, basta
article, más que en cuestiones de forma- do a5paper (14,8 x 21), letterpaper (la cambiar spanish por german o serbian y
to. En principio, la clase book está pen- opción por defecto: 8,5 x 11 pulgadas) o observar la fecha y el título del capítulo.
sada para libros o documentos muy lar- incluso otros más exóticos, pero es poco Los códigos de las lenguas oficiales de
gos, la clase article se orienta a artículos probable que se necesiten. Incluyo otras España, además de spanish, son basque,
de revistas, más cortos y con la clase opciones, cuyo significado es autoex- catalan y galician. ¿Adivináis cuál es el
report, que estaría en un punto interme- plicativo, en la Tabla 1. Obsérvese que idioma por defecto si no se carga babel?
dio entre las otras dos, se hacen informes con estas opciones se puede cambiar el Por cierto, al hacer cambios de idioma y
técnicos. Seguramente, para hacer un comportamiento por defecto de una recompilar, puede que se nos produzca
trabajo escolar, la clase más adecuada clase. Por ejemplo, se puede usar la clase un error. Se debe a que Latex guardó
sea report, de todas formas, lo más book sin página de títulos (notitlepage), algunas características del documento en
recomendable es probar con las tres para o la clase report empezando los capítulos un fichero auxiliar, que ahora ya no
decidir cuál se adapta más a las carac- en página impar (openright). Eso no resulta coherente con el documento.
terísticas de nuestro trabajo. Si, por quiere decir que todas las combinaciones Para evitar el error y garantizar que par-
tengan sentido, por ejemp- timos de cero en cada compilación, basta
Tabla 2. Algunas instrucciones y lo, es absurdo usar open- con borrar este fichero que, en nuestro
entornos usuales en Latex. right u openany en la clase caso, se llamaría libro.aux.
Instrucción Uso article, que no tiene capítu- El otro paquete que hemos cargado en
\begin{center} Justificación centrada (se puede cambiar center por los. Lo mejor es probar el preámbulo es inputenc, al escribir la
... flushright -derecha-o flushleft -izquierda-) hasta dar con el aspecto línea:
\end{center} deseado. Especialmente
\begin{enumerate} Relación numerada (se puede cambiar
recomiendo la opción \usepackage[latin1]{inputenc}
\item …. enumerate por itemize -viñetas-) …
\item …
twocolumn: con una sola
\end{enumerate} palabra, obtenemos el dis- La utilidad de este paquete es tanta, que
\footnote{Nota} Nota al pie eño en dos columnas típico casi no se puede explicar con palabras:
\label{etiqueta} Marca una posición para referenciarla de periódicos o revistas.
\ref{etiqueta} Referencia a una posición marcada Por cierto, al hacer todas RECURSOS
$…$ Fórmulas matemáticas en el texto estas pruebas, notaréis una [1] Comprehensive Tex Archive Network:
\begin{equation} Fórmulas matemáticas en una línea aparte, de las principales ventajas http://www.ctan.org [2]Mirror español de
... con número de ecuación de la mayoría de los progra- CTAN: ftp://ftp.rediris.es/sites/ftp.dante.
\end{equation} de/tex-archive/systems/linux [3]Ayuda de
mas visualizadores de
_{texto} Texto en subíndice. ¡ Sólo en fórmulas ! Latex dentro de CTAN: http://www.ctan.
ficheros DVI: el propio pro-
^{texto} Texto en superíndice. ¡ Sólo en fórmulas ! org/tex-archive/info
grama detecta cuándo tiene

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

basta con quitar esta línea (o Naturalmente, Latex controla la


ponerle un % al principio) y numeración de las secciones a la per-
ver qué pasa. En los tiempos fección: si queremos cambiar de
de los terminales alfanuméri- orden dos capítulos basta con cortar
cos, había que teclear com- y pegar sus contenidos y, mientras
binaciones como {\'e} para que en un procesador de textos ten-
escribir una letra ‘e’ con dríamos que revisar la numeración,
acento. Afortunadamente, con LaTeX, los capítulos se numeran
esto es prehistoria tecnoló- automáticamente. Basta con escribir
gica y teniendo el teclado varias páginas para darnos cuenta de
bien configurado podemos todo lo que hace automáticamente
escribir normalmente gracias este maravilloso, por ejemplo, las
al paquete inputenc que, cabeceras de página incluyen el
por cierto, significa INPUT número de página y el título del capí-
ENCoding. Se pueden usar tulo actual y se distinguen la página
otras codificaciones de carac- derecha de la izquierda, de forma
teres en lugar de latin1, como Figura 5: El símbolo de LaTeX se genera con... LaTeX que el libro quede perfecto al
ansinew, pero, al menos para encuadernar. Y, cuando llevemos
textos en español o inglés, la diferencia \\ Siete para las señorasU escritas 500 páginas, se nos ocurre que
es inapreciable. grandotas en castillos deU queremos un índice al principio: no hay
mármol}} problema, basta un \tableofcontents
La página de títulos \author{J.R. Talco \\ después del \maketitle. Eso sí, posible-
El entorno document empieza con los Traducción: Un servidor} mente haya que ejecutar latex dos o tres
títulos, que se definen con las instruc- \date{2004 \\ veces seguidas para que genere los
ciones \title, \author y, opcionalmente, \textsc{Málaga}} ficheros auxiliares que necesita para con-
\date. Cada uno de estos comandos toma \maketitle struir el índice, pero pronto apreciare-
como argumento un texto, que Latex mos la potencia de LaTeX y como la
imprimirá con el tipo y tamaño de letra La instrucción \\ incluye una línea en curva de aprendizaje necesario para
adecuados. Este texto puede ser vacío. blanco y, si le sigue una longitud entre dominarlo se compensa con las fun-
Por ejemplo, al imprimir la versión final corchetes, añade un espacio vertical adi- cionalidades que proprociona.
de un libro no es habitual poner la fecha, cional. En general, es preferible evitar Llegado este punto, sólo queda utilizar
así que escribiríamos \date{}. Una vez este tipo de cosas en el texto, porque Latex y probar diferentes cosas. En la
definidos estos campos, la instrucción Latex ya pone el espaciado adecuado, Tabla 2 hemos seleccionado las instruc-
\maketitle los muestra. Lo que debemos pero el título es un caso particular. La ciones de Latex que se corresponden con
entender de este proceso es que el for- instrucción \textsc escribe un texto en un la barra de herramientas estándar de un
mato de la página de títulos está codifi- tipo de letra especial (“Small Capitals”), procesador de textos. ¡Probad a meter
cado al definir la instrucción \maketitle como \textsf (“Sans serif”), \textsl unos entornos enumerate o itemize den-
en la clase y este formato no se puede (“Slanted”) o \texttt (“Typewriter”). El tro de otros! Desde luego, esto es tan
modificar, al menos no fácilmente. Por texto en negrita se incluye con \textbf sólo una primera aproximación a Latex,
ejemplo, si queremos incluir un subtítu- (“Boldface”), mientras que, para la cursi- centrada en lo que se puede hacer con el
lo, a lo mejor se nos ocurre que bastaría va es conveniente utilizar \emph mínimo esfuerzo. Para explicar las fór-
con insertar insertar una línea de texto (“Emphasize”), aunque se puede poner mulas matemáticas, las tablas y las fig-
entre \title y \author. Pero si pasamos el también \textit (“Itálica”). uras, o cómo modificar el formato de
texto por procesador latex, descubrimos página, se requiere más espacio y, de
que esto no va a funcionar, porque Latex El cuerpo del documento hecho, es un tema que abordaremos el
imprimirá primero el texto que está fuera El documento propiamente dicho es lo mes que viene, aquí, en nuestro curso de
de las instrucciones y luego \maketitle más fácil, ya que todo el formato está ya LaTeX. ■
formateará la página de títulos como definido, por lo que sólo hay que escribir
siempre. En cambio, tenemos bastante el texto. Si se quiere, se pueden cambiar Hace ya más de una década que
libertad al definir los textos de título, los tipos de letra con las instrucciones Miguel Atencia viene administrando
autor y fecha, por ejemplo, tras el que comentamos en el párrafo anterior. sistemas y redes en distintos organis-
EL AUTOR

begin{document} podemos escribir: Entre dos párrafos hay que dejar una mos. Posteriormente, estudió
línea en blanco. Para comenzar un matemáticas y consagró su vida a la
enseñanza y a la ciencia. No
\title{El maestro de losU nuevo capítulo, basta dar una nueva
obstante, sigue en contacto con el
collares instrucción \chapter y, además dentro de
mundo de la informática, pues no ha
\\[0.5 cm] {\small TresU cada capítulo, es posible ir definiendo
podido aún librarse de desatascar
collares para los príncipesU estructuras cada vez más pequeñas: \sec-
impresoras y formatear ordenadores.
feos sobre la tierra tion, \subsection y \subsubsection.

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

SI UTILIZAS LINUX, NECESITAS LINUX MAGAZINE


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

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

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

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


o utiliza el formulario al dorso

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

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


pedido online en:
www.linuxmagazine.com.es

Sí Dirección Facturación

Número Inicial

Zona

Modo de Pago

Dirección Envío

Condiciones
Proyectos COMUNIDAD

Software Libre y sus Creadores

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

En esta sección, escogemos lo mejor de la cosecha. Este mes miramosel suministrador de servicios IPv6 Sixxs, un ISP que

ofrece conexión al Internet IPv6 gratis para así promocionar el protocolo. POR MARTIN LOSCHWITZ

A
pesar de que aún existen esto sólo cuesta 15 créditos). A los
bastantes direcciones IP usuarios se les otorga 5 créditos por
para los Estados Unidos, cada semana que permanece accesi-
las voces de alarma ya llevan ble su punto final IPv6. Después de
tiempo sonando en otras partes una semana se dispone de suficientes
del mundo, especialmente en créditos para solicitar una subred
Japón. Los pesimista auguran que completa, que también cuesta 15
las direcciones IPv4 (Internet Pro- créditos. Después de otra semana, se
tocole Versión 4, la versión puede añadir un servidor de nombres
actual), con sus cuatro billones para registros de búsquedas inversas
de direcciones, se quedará sin en la subred.

Ronald Raefle, visipix.com


espacio en un futuro no muy Pero también existen los créditos
lejano. negativos. Se deducen 5 créditos si el
En entornos de todos los punto final IPv6 no se encuentra
tamaños, desde minúsculas redes accesible durante un día. Tras una
domésticas hasta enormes redes semana de inactividad, el punto final
empresariales, los usuarios han y toda la subred adjunta se desha-
migrado a Network Address bilita. Sixxs utiliza este sofisticado
Translation (Traducción de Direcciones existen pocos proveedores de servicios sistema de créditos para mantener actu-
de Red o NAT) para evitar el coste que de Internet que anuncian soporte para alizadas la base de datos de usuarios y
supone la adquisición de direcciones IP IPv6. Por tanto, IPv6 permanece en el los túneles registrados. Si se descubre a
que puede que no se lleguen a utilizar… reino de los usuarios y programadores algún usuario abusando del túnel de
y todo ello a pesar de que NAT puede técnicamente competentes. Algunas de Sixxs, ese usuario pierde todos sus privi-
plantear serios problemas para según las columnas vertebrales de Internet sólo legios de acceso.
que aplicaciones. El hecho de que la son accesibles a través de IPv6, pero, La conexión de un ordenador a la red
mayoría de las direcciones IP se asignan debido a que la mayor parte de la red de IPv6 exige algo de preparación. Uno de
dinámicamente también ha dado lugar a redes sigue utilizando IPv4, los usuarios los requisitos es un sistema operativo
atajos como los DNS dinámicos. La ten- que utilicen este protocolo han de uti- que hable IPv6. Aparte de Linux, la may-
dencia de conectar todo tipo de lizar túneles a través de la parte de la red oría de los sistemas operativos
dispositivo electrónico, desde teléfonos IPv4. modernos, incluyendo Windows 2000 y
móviles, PDAs y televisores hasta nev- XP, pueden utilizar este nuevo protocolo.
eras, a Internet, no hace más que agravar IPv6 para la Conexión de Se puede consultar un HOWTO de como
la situación. LANs se configura en una máquina un túnel
Si continúa la expansión de la conex- Sixxs.net [1] es un intermediario para el IPv6 en [8].
ión de dispositivos capacitados para IP, “tunelado” que da a los usuarios acceso Para soportar a toda una red IPv6, lo
podemos esperar agotar el espacio de gratuito al Internet IPv6. Sixxs ofrece un normal es utilizar radvd. Se necesita un
direcciones reservado para IPv4 bastante túnel IPv6 con una única dirección IPv6. ordenador en la red que manipule la asi-
rápidamente. El Internet Engineering Sixxs también ofrece subredes completas gnación de direcciones y la información
Task Force desarrolló la versión 6 del IPv6, lo que permite a usuarios y empre- de enrutado. Los clientes recogen una
protocolo de Internet para subsanar el sas añadir un LAN completo. dirección de esta máquina y los demo-
problema hace más de diez años. Cuenta Sixxs utiliza un sistema de puntos para nios de enrutado definen las rutas. ■
con suficientes direcciones como para administrar la calidad del servicio. Otor-
dotar de IP hasta la última tostadora, gan 25 créditos por registrarse. Esos 25 RECURSOS
pero Internet es lenta en reaccionar. IPv6 créditos sirven para “comprar” un túnel [1] Sixxs, servicio IPv6 http://www.sixx.net
no ha tenido la repercusión esperada y IPv6 y una sola dirección IP (de hecho,

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

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

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

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

94 Número 01 www.linuxmagazine.com.es
Humor LINUX MAGAZINE

Noticias del no tan Más Allá

Hechos Patentes(P)
E
l parlamento de la Comunidad estar de la sociedad, las actividades
Económica Europea ha llevado a humanas se dividen en “patentables
cabo un espectacular salto hacia básicos no gravables” (PBNGs) y
delante en lo que se refiere a jurispru- “patentables elaborados gravables” (o
dencia relacionada con las patentes: tras PEGs). Patente no gravable es aquella
un acuerdo unánime en la votación que se considera de “necesidad fisiológi-
sobre la nueva Ley de Patentabilidad de ca básica” y se adjudican al estado. Para
Actividades (LPA), se amplia el marco cada “patente gravable”, el patentente
legal de la patentabilidad para englobar (individuo, organización o empresa que
en él, no sólo productos, procesos e pretenda registrar una patente) ha de
ideas, sino todas y cada una de las activi- solicitar y abonar una licencia de uso de
dades humanas. una de las actividades PBNG. A contin-
“Con esta medida” declaró el presidente uación, según el tipo de actividad que se
Comisión en Pro de la Patentibilidad de desee patentar, tendrá que solicitar una o
las Actividades Humanas (CPPAH), varias licencias que elaboran sobre cada actividades de una manera consistente
Adolfo Fetuccinni “pretendemos impul- uno de los PEGs cedidas a las entidades son las grandes corporaciones empresar-
sar la estancada actividad económica en privadas que las solicitaron en su día. iales (Microsoft, I0BM, Sun) y organis-
nuestra comunidad y ponernos un paso Estas entidades pueden, libremente, mos sin ánimo de lucro (SGAE, RIAA)
por delante de otros áreas económicas otorgar o denegar licencias sobre sus que ya han demostrado en el pasado su
competitivas” dijo, en clara alusión a los patentes, cederlas gratuitamente o por responsabilidad civil para con el bien
Estados Unidos. Además, para que la un canon y, en este último caso, estable- social de la mayoría de los ciudadanos.
aplicación práctica de la ley no se vea cer libremente la cuota de la misma Sin embargo, debido a problemas con
impedida por obstáculos burocráticos, se según sus propios criterios. Por ejemplo, patentes solicitadas, ésta es la última
crea el modelo de la “patente rápida”, imaginemos que una empresa pretenda columna de esta sección, así como el fin
donde a una corporación solicitante se le patentar el “andar a pasitos cortos y de de la mayor parte de la industria de la
exime de tener que demostrar la puntillas a lo Chiquito de la Calzada”. comunicación tal y como la conocemos,
propiedad intelectual sobre la actividad a Primero tendría que obtener licencia de ya que, si bien la actividad de pensar se
patentar: su propiedad sólo será exami- la patente nº EU34362-22-9008176788 incluye bajo el epígrafe de “actividad
nada si es contestada por un organismo genérica para “desplazamiento motor patentada no gravable”, la actividad de
oficial u otra empresas, abriendo de paso frontal bípedo”. A continuación tendría expresar lo que uno piensa es actividad
nuevas vías de negocio basadas en mod- que solicitar la licencia de la actividad de patentada gravable… y tú intenta
elos litigantes y estimulando la contrat- “Andar” propiamente dicha (patente nº difundir tus ideas por algún medio, ya
ación de abogados, un sector éste en AC0997-22-8989943812, cedida a sea impreso©(P), electrónico® o por palo-
clara recesión. Las actividades re- “Andares y Caminares, C.B.”), la de ma mensajera™(P), y es que te funden los
gistradas como patentes rápidas son “Pasos Cortos” (patente nº AC0997-22- plomos™, colega™. ■
gravables a partir del día en que se solici- 2851734788, cedida a la misma entidad
tan. que la anterior) y la de “Puntillas” GLOSARIO
La LPA, revolucionaria por su atre- (patente nº MG0743-22-3260762311,
impatente (adj.) dícese de persona física o
vimiento, establece que toda actividad cedida a “The Motion Group, Spain legal que no tiene ningún patente a su nom-
humana es susceptible de ser patentada. S.L.”). Este mecanismo así establecido bre. Ejemplo de uso:“Ya sé que no es cosa de
Sin embargo, en aras de asegurar el bien- impide el abuso del sistema. Aunque los risa, pero ahí donde lo ves, es impatente™(P)”.
PBNGs son relativamente asequibles patentado (sust.) persona física o legal que
Ejemplos de Actividades (entre unos 600 y 800 euros, en según acumula gran cantidad de patentes a su
Humanas Patentadas que países de la unión), los gravámenes nombre. Ejemplo de uso:“Está forrado. Es
públicos y privados en los que se pueden todo un patentado®”.
No gravables Gravables prepatente (adj.) dícese de aquel/la que se
incurrir por la acumulación de licencias
Sentir Escozor Rascarse opone al estado de patentabilidad total y
Comer Cocinar,Masticar,Deglutir
de patentes hace impracticable una
añora tiempos anteriores. Ejemplo de uso:
Defecar Hacerlo en un inodoro
“avalancha” de patentes por parte de
“Cuando te comportas de una manera tan
individuos privados desaprensivos y con
Limpiarse prepatente™®© no hay Dios(P)™ que te
Sentirse Estafado Manifestarlo pocos escrúpulos. De hecho, las únicas aguante”.
entidades que pueden aspirar a patentar

www.linuxmagazine.com.es Número 01 95
DVD Fedora Core 3

En el DVD de Linux Magazine

Fedora Core 3
Durante años, Red Hat fue con diferencia la distribución Linux

más popular, sólo siendo ensombrecida por Debian. Pero mientras

éste último era el preferido de la comunidad hacker y favorito de los

que escogían el camino de “hágaselo-usted-mismo”, Red Hat era el

favorito de los usuarios buscando productividad inmediata, de la


ba que todos los
empresa y de aquellos que querían entrar más suavemente en el medios del sistema operativo gratu-
ito se volcaban en Fedora, una organi-
mundo Linux. zación comunitaria, dedicada hasta ese
momento a crear paquetes suplementar-

E
n este sentido, Red Hat siempre eración de distribuciones que vivimos ios a los ofrecidos oficialmente por Red
trato con mimo a sus usuarios: hoy en día, y durante mucho tiempo, se Hat.
inventó el sistema de paquetes dividieron las nuevas distros que iban A pesar de los llantos de los más
rpm, el cual facilitaba enormemente la apareciendo en Debian-based y Red Hat- agoreros, Fedora prosperó. Hoy en día
instalación de software y que ha sido based. De entre estos últimos podemos siempre ocupa algún puesto entre los
adoptada por una amplia variedad de distinguir distros tan populares como: cinco primeros del ranking de las distros
distribuciones, desde Mandrake hasta Mandrake, SuSE y, hoy en día, Fedora. más populares. Es un sistema operativo
SuSE. Desde hace ya algunas versiones, De hecho, Fedora es la distribución maduro, estable y llena de recursos.
se ha adoptado el sistema de instalación heredera más directa de Red Hat. Cuenta, no sólo con el apoyo de Red Hat,
Anaconda, que reduce sensiblemente el Cuando Red Hat anunció en el 2003 que sino con el apoyo de una comunidad
estrés que suponía hasta entonces la no iba a seguir produciendo su versión amplia y experta, lo que garantiza su
instalación de Linux en una nueva gratuita de su sistema operativo, sino supervivencia mucho más que lo que
máquina, y que la gente de Debian están que iba a concentrar sus esfuerzos en la pueda hacer una compañía privada.
pensando en incorporar a su propio sis- comercialización de soluciones empre- Y Linux Magazine te lo trae en DVD.
tema. Y desarrollaron mil y un asistentes sariales de pago, muchos usuarios se ras-
para ayudar al usuario a configurar, ajus- garon las vestiduras mientras se pregunt- Instalación
tar y poner en funcionamiento todas las aban que iban a hacer ahora. Tal fue la Como ya mencionamos en la sección
características del sistema. consternación, que pocos prestaron su anterior, Fedora cuenta con el instalador
Tanta fue su influencia en los primeros debida atención a la segunda parte del gráfico Anaconda para facilitar la insta-
años de Linux que, a partir de la prolif- comunicado de prensa donde se explica- lación del sistema en el disco duro.

Figura 1: Podemos elegir el perfil del SO que vayamos a instalar Figura 2: Elección de la franja horaria

96 Número 01 www.linuxmagazine.com.es
Fedora Core 3 DVD

Figura 3: Selección de paquetes Figura 4: Instalación de paquetes

Una vez elegidos detalles como el Características Stateless Linux no será de utilidad para
idioma, tipo de instalación (“Personal”, Fedora conserva el preciosismo y ele- grupos de usuarios donde cada uno tiene
“Estación de Trabajo”, “Servidor” o “A gancia de los escritorios heredados de unas necesidades muy específicas y
Medida” - ver Figura 1), tipo de teclado, Red Hat, pero si hay alguna cosa que dis- diferenciadas de las de los demás o
zona horaria y locales (ver Figura 2) y tingue el nuevo Fedora Core de otras dis- donde se tenga instalado hardware muy
ratón, pasamos a particionar el disco tribuciones, es en el apartado de los asis- divergente, pero nos podemos imaginar
duro (de ser necesario). Como en tentes. Fiel a la tradición de Red Hat de el ahorro de coste, de tiempo y recursos
cualquier distribución moderna, Ana- acercar Linux al usuario, Fedora Core 3 humanos que supone el uso de Stateless
conda utiliza para este proceso, una her- implementa asistentes para (casi) todas Linux en entornos como un centro de
ramienta visual que permite establecer las funcionalidades que queramos con- soporte telefónico con centenares de
exactamente el qué y el cómo vamos a figurar en nuestro equipo, desde impre- puestos, donde todas y cada uno de las
distribuir las particiones en nuestro soras a escáners en red y dispositivos máquinas ha de ser exactamente igual y
disco duro. Una vez realizadas las deci- inalámbricos. Por supuesto, que los más tener la misma configuración que la del
siones, pasamos a seleccionar los paque- expertos siguen pudiendo abrir una ter- vecino. Algo que hará a los golosos del
tes (si no deseamos que Fedora instale minal y correr vi o Emacs para acceder a software relamerse de anticipación:
los escogidos por defecto - ver Figura 3) los archivos de configuración si así lo Fedora Core 3 no sólo soporta la insta-
y Anaconda empieza a copiarlos al disco desean. Esto sigue siendo Linux después lación nativa de paquetes rpm, sino que
duro (ver Figura 4). de todo. Otra de las características más viene preparado para enlazar con
Una vez acabada la instalación de interesantes del nuevo Fedora es el que depósitos de software empaquetados en
paquetes, es el momento de dotar al se refiere al apartado denominado formato apt y YUM. Esto significa que, si
usuario root de una contraseña y de Stateless Linux. Bajo esta bastante oscu- no encontramos la aplicación que bus-
crear usuarios de privilegios más bajos ra denominación, se esconde un proyec- camos en el formato nativo de Fedora
para el trabajo del día a día en la to que hará las delicias de todo admin- (improbable), siempre podemos echar
máquina. A continuación podemos con- istrador de sistemas que tenga varias mano al vasto número de paquetes apt
figurar el hardware, estableciendo res- máquinas a su cargo y quiera mantener disponibles para Debian y todos sus
olución y número de colores de la pan- una instalación sincronizada e idéntica clones. ■
talla, configuración de red y configu- en cada una de ellas. Con las herramien-
ración de impresoras. tas Stateless Linux proporcionadas por Requisitos del Sistema
A continuación establecemos como Fedora Core, un administrador de sis-
Procesador: Ordenador Pentium o equiva-
deseamos arrancar el sistema (LILO ha temas puede realizar una instalación en
lente; 200 MHz o mayor para sistema en
sido eliminado, sólo queda GRUB, lo que una máquina “maestra” y repetir esa modo texto; 400 Mhz Pentium II o mayor
simplifica las cosas para los usuarios misma instalación en tantas máquinas para sistema en modo gráfico.
noveles. Y si grabamos el gestor de quiera con un mínimo esfuerzo. No sólo
Memoria: 64 MB mínimo para sistema en
arranque el MBR, disquete, o donde sea) eso, sino que las máquinas esclavo modo texto; 192 MB mínimo para sistema
y el sistema rearranca. Si todo ha ido nunca tendrán que ser actualizadas o en modo gráfico.
bien (y no hay ningún motivo para pen- reconfiguradas individualmente. En vez
Hard Disk: 620 MB para instalación mínima
sar que no haya sido así), tendremos el de eso, se actualiza el “maestro” y todos a medida; 1.1 GB para instalación servidor; 2.3
nuevo sistema en pleno funcionamiento los cambios realizados en esta máquina GB para sistema de escritorio personal; 6.9
y podremos disfrutar de todo el potencial se aplican automáticamente a las GB instalación a medida completa.
de esta estupenda distribución. máquinas “esclavo”. Se entiende que

www.linuxmagazine.com.es Número 01 97
PRÓXIMO NÚMERO Número 2

Enero 2005: Número 2

Próximo Número
Especial Hardware Linux User
¿Un ordenador silencioso en la sala de en un completo centro de entreten- Seguiremos con nuestro cursos de XUL y
estar? ¿Es posible? Si pensamos que un imiento. Sin embargo, el ruido de los presentaremos nuevas aplicaciones y
ordenador ya es mucho más que un ventiladores y discos duros y lo poco herramientas que nos harán la vida más
ordenador, no sólo ha de ser posible con estético de sus carcasas pueden ser un fácil. Continuaremos nuestra serie sobre
la tecnología moderna, sino que es impedimento para colocarlo en el salón LaTeX, ahondando en su utilidad para
deseable. Acoplándole tarjetas de tele- de nuestra casa. Pero Linux Magazine te representar ecuaciones e imágenes.
visión, reproductores da la solución: un amplio reportaje Seguiremos conociendo la línea de
y grabadores de donde se hace un repaso a todos los dis-
DVDs, altavoces positivos que pueden convertir tu PC en
y demás hard- un equipo que no desentone con el sofá
ware se y las cortinas. No sólo eso, sino que des-
convierte cubrirás como explotar tu cámara digital
bajo Linux, que impresora más te con-
viene y como sacarle el máximo a tu
grabadora de DVDs.

Desarrollo
En la sección dedicada a la progra-
mación, continuaremos con la segunda
parte de la creación de un juego y vere-
mos como ampliar nuestro interfaz
utilizando la librería curses. Ten-
dremos otra aplicación PHP con el
que jugar y más interesantes comandos para que todos puedan
scripts realizados en Perl y aprovechar el poder de las instrucciones
Python. del shell.

SysAdmins Noticias
Los administradores de sis- También traeremos las noticias más can-
temas podrán aprender los dentes del mundo Linux, un calendario
diversos métodos para filtrar de eventos completo, información sobre
contenido web a través de un los últimos avances en el kernel e inse-
proxy, distribuir correo de man- guridades de las aplicaciones e
era eficiente por medio de un información sobre los proyectos más
cluster y detectar intrusiones en el interesantes que se llevan a cabo en el
sistema con Sleuthkit. campo del Software Libre.

Boletín Linux Magazine


El Boletín de Linux Magazine te da la oportunidad de ver lo que se avecina en el
siguiente número de Linux Magazine e incluye enlaces a artículos que aparecen
en nuestro sitio web antes de que la versión impresa llegue a los quioscos.
Suscríbete en www.linuxmagazine.com.es/boletin.

A LA VENTA ENERO 2005


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

THE PLATFORM OF CHOICE.

redhat.es | ES 900 800 409

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

También podría gustarte