LINUX MAGAZINE
SUSE LINUX professional
Redes anónimas 9.3
Cómo mantener el anonimato en Internet
Distribución profesional de Suse
NÚMERO 10
DVD 4,2 Gb Versiones 32 y 64 bits
NÚMERO 10 • P.V.P 5,95 €
Integración Linux-Windows
Conectando Windows con Linux
INTEGRACIÓN
GRUB
LINUX-WINDOWS
NTFS
WINE
Cómo crear un sistema de arranque dual perfecto p12 Escritura en particiones NTFS desde Linux p16 Configuración avanzada de WINE p19
GMaps
Gambas
GMaps
Metapixel
Utiliza la potencia de Google Maps en tu propia página web p42
Redes anónimas
Gambas El entorno de desarrollo visual para el lenguaje Basic en Linux p51
Bacula
Xfce 4.2
Ripeando audio
Tellico
Crea grabaciones permanentes de tus streams de audio favoritos p37
WWW.LINUX- MAGAZINE.ES
Edición en Castellano
EDITORIAL
¿HAY ALGUIEN AHÍ? Estimado Lector de Linux Magazine
E
l otro día estaba en el aeropuerto esperando a un colega, y mi hijo (en plena fase “FlightGear”) me pidió que le comprase una revista de aviones para combatir el aburrimiento. Yo, por supuesto que se la compré. Para mí, adquirí un comic de superhéroes. Al cabo de un rato (el vuelo se retrasaba), nos intercambiamos revistas. Cuando me tocó, leí la editorial. En ella, el director se quejaba amargamente de las trabas burocráticas con las que se encuentran los aficionados a la aviación deportiva. Cuentan con mis simpatías, pero no pude evitar pensar lo irrelevante de sus problemas para con la sociedad en general. Sin embargo, a efectos prácticos, nuestra comunidad, la de los desarrolladores y especialistas en software libre, es muy parecida a la de los que vuelan en Cessna. Leemos revistas especializadas que nadie más lee, organizamos eventos a los que nadie más va y hablamos un lenguaje que nadie más entiende. ¿Por qué? La aviación deportiva tiene unos efectos virtualmente nulos en la sociedad. Pero, ¿qué ocurre con nosotros? ¿Acaso lo que hacemos no acaba “calando”? Indudablemente sí, pero ¿por qué tan poco y por qué tarda tanto? Uno de los problemas, a mi parecer, reside precisamente en que, por desgracia, como con cualquier grupo especializado, los programadores no hablan el mismo lenguaje que el hombre de la calle. Si bien, casi todo el mundo tiene ordenador y lo utiliza, pocos entienden los términos interfaz, entorno de ventanas o, siquiera, escritorio. Normalmente, si mencionas uno de estos vocablos en una conversación con un “profano”, la respuesta que obtendrás es algo como “Y eso ¿qué es? Lo de Windows ¿no?”.
Nos sentimos orgullosos de nuestros orígenes como publicación, que se remonta a los primero días de la revolución Linux. Nuestra revista hermana, la publicación alemana Linux Magazin, fundada en 1994, fue la primera revista dedicada a Linux en Europa. Desde aquellas tempranas fechas hasta hoy, nuestra red y experiencia han crecido y se han expandido a la par que la comunidad Linux a lo ancho y largo del mundo. Como lector de Linux Magazine, te unes a una red de información dedicada a la distribución del conocimiento y experiencia técnica. No nos limitamos a informar sobre el movimiento Linux y de Software Libre, sino que somos parte integral de él.
Una de las principales consecuencias de esto es la alienación del usuario con respecto al creador. ¿Sabe el usuario medio que en el mundo del software libre sus preguntas casi siempre obtienen respuestas? ¿Sabe que cuando uno pide una característica para una aplicación los desarrolladores normalmente toman nota? ¿Sabe que los desarrolladores se sienten casi tan huérfanos sin los comentarios de los usuarios como los usuarios sin la ayuda de los desarrolladores? Todos nosotros sabemos que así es, pero casi ninguno de ellos es consciente de que los mecanismos para realizar estas acciones están disponibles desde hace tiempo. Hemos de encontrar una manera de popularizar el trabajo que realizan los especialistas de manera que sea inteligible para el común de los mortales, y la única manera de conseguirlo es abriendo (aún más) el canal de comunicación entre consumidores y creadores. En la Campus Party, una periodista solicitaba a los líderes de cada sección y clan para que explicasen en 20 palabras qué es lo que pretendían o qué estaban haciendo allí. Durante la aKademy, Otro periodista pedía a Kelle Dalheimen, presidente de kde.org, que describiese KDE en una sola oración y “sin tecnicismos”. Desafortunadamente, nada es tan sencillo, de ahí los crasos errores y las burdas simplificaciones que aparecen en la prensa no-especializada y que tanto nos avergüenzan o hacen reír. Sin embargo, estos ejemplos nos demuestran que se nos exigen explicaciones. Se nos exige simplificar los conceptos, adoptar un lenguaje que un usuario final pueda entender. Sólo así popularizaremos nuestro trabajo, aceleraremos la adopción de alternativas y dotaremos a los usuarios finales, el hombre de la calle, del poder al que creemos que tiene derecho y se le ha arrebatado antes de poder disfrutarlo.
WWW.LINUX- MAGAZINE.ES
La influencia de los desarrolladores en el mundo cotidiano, el mundo de la informática de consumo, el mundo de los usuarios finales y de las empresas, es tangible, es real. Pero no podemos confiar en los medios mayoritarios para cerrar el abismo entre usuarios finales y creadores de software, porque, si bien existen especialidades como el periodismo deportivo o el comentario político, no existe todavía un escuela para el periodismo tecnológico. Por otro lado, la experiencia nos demuestra que a las empresas no les interesa dotar al usuario de conocimientos, y las únicas campañas de popularización que organizan son las de sus productos para convertir los ordenadores en electrodomésticos. Por tanto, la tarea recae como siempre en la comunidad. La sobrecargada e infravolarada comunidad. Es la ella la responsable de cerrar la brecha, organizando eventos populares, despojándose de poses elitistas y moderando su lenguaje para hacerlo conciso, llano y ase■ quible.
Paul C. Brown Director
Número 10
3
CONTENIDOS • Linux Magazine nº 10
PORTADA
EVALUACIÓN 28 Zend Studio
14 Boot Vemos distintas posibilidades para el arranque y describiremos cómo configurar nuestro sistema para un arranque dual.
Revisamos el IDE Zend Studio y enseñaremos cómo se puede usar para acelerar el desarrollo en PHP.
33 Xfce 4.2 Si estás preparado para vivir sin KDE o Gnome, tal vez sea hora de probar Xfce, un eficiente, ligero y vistoso escritorio con una enorme colección de herramientas.
47 Redes anónimas Las “redes libres” evitan la censura y que permiten mantener el anonimato y la privacidad de cada uno de sus componentes.
DESARROLLO 51 Gambas Gambas, un IDE gratuito para Linux para la programación en Basic es la respuesta de la comunidad del Software Libre a Visual Basic.
18 Captive NTFS Le invitamos a conocer Captive NTFS – una herramienta gratuita para montar particiones Windows NTFS desde Linux.
21 Wine Configurar Wine es cualquier cosa menos trivial y un poco de experiencia siempre será de ayuda.
PRÁCTICO 37 Audio Streams Enseñamos cómo grabar una emisión de nuestro programa favorito desde la web.
39 Tellico Muchos usuarios únicamente buscan una sencilla aplicación de base de datos. ¡Tellico al resscate!
42 GMaps
LINUX MAGAZINE 3 6 8 10 95 97 97 98
4
Explotamos el API de libre acceso de Google Maps para crear una interesante aplicación para nuestra web.
Editorial DVD Linux Magazine Inseguridades Negocios Suscripciones Eventos Información de Contacto Próximo Número
Número 10
WWW.LINUX- MAGAZINE.ES
54 Perl: Vim Vemos cómo los programadores de Perl pueden ahorrar esfuerzos usando las técnicas de Vim.
61 Python Nos construimos nuestro y centro de control planetario para nuestra web y de paso vemos algunas de las librerías más potentes de Python.
LINUX USER 76 KTools: KPager 2 Si queremos una mejor visualización de los escritorios virtuales, podemos probar Kpager2, un paginador alternativo para KDE.
78 Metapixel Una herramienta libre que crea atractivos fotomosaicos a partir de una colección digital de imágenes.
81 Desktopía JWM es un gestor de ventanas para usuarios de Linux que requieran una interfaz gráfica de usuario eficiente y no les asuste lidiar con un editor de texto para conseguirlo.
ADMINISTRACIÓN 65 La Columna de Charly
SUSE LINUX professional
9.3
Versión profesional ■ DVD de 4,2 Gbs que incluye versiones de 32 y 64 bits ■ Instalación a disco duro asistida ■ Soluciones cliente y servidor listas para utilizar ■
■
Solución ofimática completa y organizador de fotos digitales
Bloqueador de spam, antivirus y protección con cortafuegos Más información en la página 6 ■
84 Educación
66 Bacula Cuando las tareas de backup llegan a ser demasiado complicadas para un script, la herramienta de backup gratuita Bacula puede ser la respuesta.
70 Documentación En el artículo de este mes del Taller del Administrador, examinamos los programas y formatos detrás de la documentación que leemos cada día.
Una reivindicación compartida por los profesores de todo el mundo que utilizan software en sus clases es la necesidad de un catálogo de recursos educativos.
89 Línea de comandos Este mes echamos un vistazo a cómo crear y administrar cuentas de usuarios Linux desde la línea de comandos.
90 Eventos El aKademy 2005 se celebró con gran éxito de público y crítica. Linux Magazine estuvo allí.
WWW.LINUX- MAGAZINE.ES
Número 10
5
DVD LINUX MAGAZINE
DVD DE LINUX MAGAZINE
Requisitos del Sistema Procesador: Memoria: Disco Duro:
Pentium 1-4 o equivalente. Mínimo 128 Mbs; 256 Mbs recomendado. Al menos 500 Mbs para un sistema mínimo; 2,5 Gbs recomendado para un sistema estándar.
Suse Linux Pro 9.3 también viene con F-Spot, una herramienta para la administración de imágenes digitales. Otra nueva incorporación es la del poderoso sistema de virtualización Xen. Xen es un monitor de una máquina virtual que permite a tu sistema Linux soportar múltiples entornos de máquinas virtuales con un coste de CPU mínimo. Xen ofrece testeos y modelados eficientes, a la vez que una administración simplificada de colecciones complejas de entornos virtuales.
YaST
S
use Linux es una de las distribuciones Linux más populares a nivel mundial y Suse Linux Professional es un sistema operativo versátil y repleto de características que tiene algo para todo el mundo. El usuario final doméstico elige Suse Linux Pro debido a su excelente sistema de detección de hardware y sólido soporte para audio y multimedia. Suse Linux es también una excelente opción para el escritorio corporativo, donde ofrece estabilidad y aplicaciones ofimáticas punteras. Pero Suse Linux es igualmente exitoso en el mundo de los servidores, con una amplia colección de servicios de red y algunos extras, cortesía de los expertos en redes de Novell. La versión 9.3 de Suse Linux Pro proporciona algunas interesantes aplicaciones nuevas y es una inteligente opción para usuarios de Linux de cualquier clase y condición. Este mes, en el DVD de Linux Magazine, Suse Linux Professional 9.3.
Instalación Inserta tu DVD de Suse Linux Pro de Linux Magazine en tu lector de DVDs y rearranca tu máquina. El instalador basado en GUI configurará tu sistema
6
Número 10
con un mínimo de problemas. El instalador identifica el hardware y propone una configuración. Se puede aceptar la configuración por defecto o adaptarlo las necesidades de cada cual. Seleccionaremos paquetes, redimensionaremos particiones e incluso podremos configurar el cortafuegos desde el instalador.
Nuevo y Actualizado
Suse Linux viene con YaST, una de la herramientas de configuración mejores y de mejor reputación en todo el mundo Linux. YaST provee de un interfaz conveniente para la administración de software, hardware, redes, configuración de sistema, seguridad y cuentas de usuario. Se puede utilizar YaST para configurar particiones, para la administración energética, ajustes del cortafuegos opciones de arranque. YaST también nos permitirá instalar y eliminar software, configurar servicios de red, resolver problemas con los dispositivos y ver la bitácora del sistema. YaST es una única herramienta para todas y cada una de las cuestiones de configuración, y una vez te acostumbres a utilizarlo, te preguntarás cómo pudiste vivir sin él.
Suse Linux Pro 9.3 viene con una enorme cantidad de paquetes actualizados. Incluimos en el DVD el kernel 2.6.11, KDE 3.4 y GNOME 2.10. Algunos componentes actualizados incluyen GCC 3.3.5, glibc 2.3.4, Mono 1.1.4 y PostgreSQL 8.0 Este versión trae además varias aplicaciones ausentes de versiones anteriores. Uno de los más populares es la inclusión del motor de búsquda Beagle que trae la tecnología de búsqueda de Internet al ordenador doméstico. El objetivo de Beagle es el de proporcionar un acceso rápido y sencillo a cualquier tipo de información. Beagle encuentra ficheFigura 1: Utilizamos el Centro de Control de KDE para ros, música, mensajes y fotos en administrar la configuración del escritorio. una sola búsqueda.
WWW.LINUX- MAGAZINE.ES
DVD LINUX MAGAZINE
Figura 2: El administrador de imágenes digitales F-Spot es un recién llegado al sistema Suse. F-Spot nos ayuda a organizar nuestra colección de fotos digitales.
El Escritorio Dentro de Suse Linux 9.3 Pro, encontraremos una colección muy rica de aplicaciones multimedia. Incluido en DVD, tenemos reproductores de medios como Kaffeine y Realplayer 10, kdetv para la televisión y el reproductor de música JuK. También encontrarás reproductores de CDs, herramienta para la edición de audio y el tostador de CDs, K3b. Asimismo se incluye la versión de prueba del suite ofimático OpenOffice.org 2.0. OpenOffice es un juego completo de aplicaciones orientado a la productividad ofimática e incluye un procesador de textos, una hoja de cálculo, software para la creación y visualización de presentaciones y una base de datos.
Figura 3: YaST proporciona un interfaz unificado para la administración de la configuración de Suse Linux.
El suite de administración de información personal, Kontact, y su alternativa, Evolution, contienen herramientas para administrar tu correo electrónico, tu calendario y libreta de direcciones. Podremos navegar por la web con Firefox y Konquereor o acceder a mensajería instantánea con Gaim y Kopete. Suse 9.3 contiene los programa de administración de imágenes gthumb y gwenview, al igual que los editores gráficos GIMP 2.2 e Inkscape 0.41.
hoy y verás como estarás de acuerdo con los miles de usuarios que a lo largo y ancho del mundo eligen Suse como sus ■ sistema Linux preferido.
Destacamos • Kernel Linux 2.6.11 • Xorg 6.8.2 • KDE 3.4 • OpenOffice Pre 2.0 • GIMP 2.2
Conclusión
• Inkscape 0.41
Suse Linux Pro 9.3 es un sistema Linux rico y versátil que puede adaptarse a casi cualquier situación. Suse es genial para el escritorio, a la vez de que es un sistema servidor estable y fiable. Instálate el DVD Suse Linux 9.3 de Linux Magazine
• F-Spot • Beagle • Xen • GCC 3.3.5 • Eclipse 3.0.1
Figura 4: Síguele la pista a tus citas con el administrador de informa- Figura 5: Akregator de KDE proporciona acceso a noticias RSS. ción personal Kontact.
WWW.LINUX- MAGAZINE.ES
Número 10
7
LINUX USER INSEGURIDADES Schlagwort sollte hier stehen
INSEGURIDADES ■ SPAMASSASSIN SpamAssassin provee una manera de reducir el correo comercial no solicitado (SPAM) de la entrada de correo. Se ha encontrado un error de denegación de servicio de SpamAssassin. Un atacante podría construir un mensaje de tal modo que haría que SpamAssassin consumiera todos los recursos de la CPU. Si se enviaran un determinado número de dichos mensajes, podría conducir a una denegación de servicio, evitando potencialmente la entrega o el filtrado de correo. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common
Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado el nombre CAN-2005-1266 a este problema. Para detalles completos, por favor, diríjanse a la documentación en línea de Spam Assassin en la siguiente dirección: http://wiki.apache.org/spamassassin/ NextRelease. Los usuarios de SpamAssassin deberían actualizarse a los paquetes que contienen la última versión disponible, 3.0.4, la cual no es vulnerable a este pro■ blema y resuelve los ya existentes. -Referencia Debian: DSA-736-1 -Referencia Gentoo: GLSA 200506-17
POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS Distribuidor
Fuente Seguridad
Debian
Info:http://www.debian.org/security/ Lista:http://www.debian.org/debian-security-announce/ Referencia:DSA-…1)
Gentoo
Mandrake
Red Hat
Slackware
Suse
Comentario
Los avisos de seguridad actuales se incluyen en la página de inicio. Los avisos se proveen como páginas HTML con enlaces a los parches. Los avisos también incluyen una referencia a la lista de correo. Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la Referencia:GLSA:… 1) página principal. Los avisos se presentan en HTML con códigos para fusionar las versiones corregidas. Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionados con Referencia:MDKSA:… 1) la seguridad. Entre otras cosas,incluye avisos seguridad y referencias a las listas de correo. Los avisos son páginas HTML,pero no contienen enlaces a los parches. Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A Referencia:RHSA-… 1) continuación los problemas para cada versión de Red Hat se agrupan. Los avisos de seguridad se proveen como una página HTML con enlaces a los parches. Info:http://www.slackware.com/security La página de inicio contiene enlaces al Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. Referencia:[slackware-security]… 1) No existe información adicional sobre seguridad en Slackware. Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de security/index.html seguridad tras un remodelado en el sitio Parches:http://www.suse.de/en/private/ web de SuSE. Existe información en la download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de Referencia:SUSE-SA… 1) seguridad para versiones individuales de SuSE Linux se muestran de color rojo en el sitio de actualizaciones generales. Contiene una corta descripción de la vulnerabilidad que soluciona el parche.
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
8
Número 10
WWW.LINUX- MAGAZINE.ES
-Referencia MAndriva: MDKSA-2005:106 -Referencia Red Hat: RHSA-2005:498-10 -Referencia Suse: SUSE-SA:2005:033
■ TELNET El paquete Telnet suministra un cliente telnet para la línea de comandos. Gael Delalleau descubrió un problema en la revelación de información, y más concretamente, en la manera en la que un cliente telnet manipulaba los mensajes desde un servidor telnet. Un atacante conocedor del problema podría construir un servidor telnet malicioso que recogiera información desde el medio, de cualquier víctima que se conecte a él. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http:// cve.mitre.org) ha asignado el nombre CAN-2005-0488 a ■ este problema. -Referencia Red Hat:RHSA-2005:504-06
■ GAIM La aplicación Gaim es un cliente de mensajería instantánea multiprotocolo. Jacopo Ottaviani descubrió un error en la manera en la que Gaim manipulaba la transferencia de ficheros de Yahoo! Messenger. Para un usuario malicioso es posible enviar la petición de transferencia de un fichero especialmente manipulado que hace que Gaim se estropee. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE -http://cve.mitre.org) ha asignado el nombre CAN-2005-1269 a este problema. Adicionalmente, Hugo de Bokkenrijder descubrió un error en la manera en la que Gaim analiza los mensajes de MSN Messenger. Para un usuario malicioso es posible enviar un mensaje MSN Messenger especialmente manipulado que hiciera que Gaim se colgara. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org)
INSEGURIDADES
ha asignado el nombre CAN-2005-1934 a este problema. ■ -Referencia Debian: DSA-734-1 -Referencia Gentoo: GLSA 200506-11 -Referencia Mandriva: MDKSA-2005:099 -Referencia Red Hat: RHSA-2005:518-03 -Referencia Slackware: SSA:2005-162-01
■ ZLIB Zlib es una librería de compresión de datos sin pérdida de propósito general, usada por múltiples programas deiferentes. Tavys Ormandy descubrió un desbordamiento de búfer que afectaba a la versión 1.2 y versiones siguientes de Zlib. Un atacante que conozca este desbordamiento de búfer podría crear un stream comprimido cuidadosamente manipulado que haría que la aplicación se colgara cuando el usuario abra el stream. Como ejemplo, un atacante podría crear un fichero de imagen PNG malicioso que haría que el navegador web o el visor de correo se estropeara cuando se visiona la imagen.
El proyecto de Vulnerabilidades y Exposiciones Comunes (Common VulnerabilEities and Exposures o CVE – http://cve.mitre.org) ha asignado el nombre CAN-2005-2096 a este problema. ■ -Referencia Debian: DSA-740-1 -Referencia Gentoo: GLSA 200507-05 -Referencia Mandriva: MDKSA-2005:112 -Referencia Red Hat: RHSA-2005:569-03 -Referencia Slackware: SSA:2005-189-01 -Referencia Suse: SUSE-SA:2005:039
■ PHP PHP es un lenguaje de programación embebido en HTML, usado comunmente con el servidor web HTTP Apache. Se descubrió un error en el paquete del servidor PEAR_XML_RPC incluido en PHP. Si se usa un script PHP que implementa a un servidor XML-RPC usando el paquete PEAR XML-RPC, es posible que un atacante remoto construya una demanda XML-RPC que puede hacer que PHP ejecute comandos PHP arbitrarios como el usuario “apache”. El proyecto de
WWW.LINUX- MAGAZINE.ES
Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado el nombre CAN-2005-1921 a este problema. Se descubrió una condición de carrera en la manipulación de los ficheros temporales en el script shtool instalado por PHP. Si un módulo PHP de un tercero que usa shtool es compilado como root, un usuario local podría modificar los ficheros arbitrarios. El proyecto de Vulnerabilidades y Exposiciones Comunes (Common VulnerabilEities and Exposures o CVE – http://cve.mitre.org) ha asignado el nombre CAN-2005-1751 a este problema. Los usuarios de PHP deberían actualizar sus paquetes. Los nuevos paquetes contienen parches retroportadas para ■ estos problemas. -Referencia Gentoo: GLSA 200507-08 -Referencia Mandriva: MDKSA-2005:109 -Referencia Red Hat: RHSA-2005:564-15 -Referencia Suse: SUSE-SA:2005:041
Número 10
9
LINUX USER NOTICIAS
Schlagwort sollte hier stehen
NOTICIAS LINUX 400 (PERO NO TANTAS) Según el Libro Blanco del software en España, el número de empresas que ofrecen soporte a software libre ya superan los 400. En el mes de abril, habían registradas unos 350 empresas en su base de datos, pero el número de registros desde entonces ha subido al vertiginoso ritmo de tres compañías por semana, superándose los 400 firmas registradas al principio de septiembre. Sin embargo, debido al carácter abierto y voluntario de la lista, se observan ciertas “discrepancias” entre lo que se pone y la realidad de la adopción de tecnología basada en software y estándares libre por parte de las empresas que se apuntan como
“proveedores de soporte de soluciones libres”. Así, analizando los sitios web de las diez últimas empresas del listado, sólo cinco de ellas se revelan como explícitamente de soporte o desarrollo de software libre.
De las otras cinco, cuatro son descaradamente proveedores de soluciones propietarias y la última, ni se sabe, ya que su web no está implementada. Si la proporción de “intrusos” se mantiene a lo largo y ancho de la lista, la validez de las cifras son más que cuestionables. Por comunidad autónoma, como era de esperar, los primeros puestos son para Cataluña (91 empresas registradas) y Madrid (88 empresas registradas), seguidas muy de lejos por Andalucía (55 empresas registradas). Las zonas donde es menos probable que te tropieces con una firma que te eche una mano con tu instalación de Linux son las regiones de Baleares, Murcia y Navarra, empatados a 7 empresas cada una, Cantabria (6 empresas) y La Rioja ■ (3 empresas).
MS VS GOOGLE VS MS El último culebrón del verano nos lo traen dos gigantes (tres, si incluimos la República Popular de China) que, obviamente, tienen tanto dinero, que les sobra para quemarlo en abogados y juicios. Ya es de dominio público el rebote que se pilló la empresa de Redmond cuando el Dr. Kai-Fu Lee les abandonaba para irse a Google. Tanto es así, que Microsoft decidió demandar a Google por “incitar a la infracción” del contrato de “no-competencia” que mantenía a Lee atado al gigante de las ventanas. Como respuesta, Google ha interpuesto una contrademanda a Microsoft alegando que los términos en los que se expresa el susodicho contrato son demasiado amplios y que, por tanto, en lo que se deriva es en una de compe-
10
Número 10
tencia ilegítima (¿prácticas monopolítisticas en el mercado de “cerebros” tal vez?) que impide que expertos contratados por el gigante del software elijan marcharse libremente a otras empresas… preferiblemente a Google, se entiende. Según Lee, el mismísimo Gates declaró sentirse “jodido”, no sólo por él, sino por el gobierno y el pueblo Chino en general. Por un lado estaba la deserción de Lee, y por otro están las restrictivas leyes de la República Popular de China que hacen virtualmente imposible repatriar capital extranjero invertido en el país. Y es que los planes de Microsoft para con China han tenido un éxito muy relativo en el mejor de los casos, nulo en la mayoría, sobre todo si se compara con los
millones de dólares invertidos por Redmond en el proyecto. Añádase a esto el hecho de que China no tiene ninguna intención de abandonar su plan de independencia tecnológica (reemplazando Windows por Linux a gran escala), y se entenderá la jodi… Kai-Fu Lee er… el fastidio de Gates. Volviendo a la refriega Microsoft/Google, Redmond ya había sufrido la humillación de ver cómo uno de sus ingenieros más prominentes se marchaba a la Gran G cuando Mark Lucovsky presentó su dimisión a finales
WWW.LINUX- MAGAZINE.ES
del año pasado. Según una declaración jurada de Lucovsky, Steve Ballmer, CEO de MS, agarró una silla y la arrojó contra el mobiliario de su oficina. Después empezaron las invectivas: “Ese jodido Eric Schmidt es una puta mariquita. Voy a joder a ese tío. Lo he hecho antes y lo puedo volver a hacer” gritó, refiriéndose al CEO de Google. “Voy a matar a Google”. Ballmer declaró que la interpretación de la reunión de Lucovsky era una “burda exageración”. En el caso de que no lo fuera, la mamá de Ballmer le debería limpiar la ■ boca con jabón.
Integración Linux-Windows • PORTADA
Herramientas y técnicas para la integración con Windows.
CONVIVIENDO CON WINDOWS P
ensamos que el arranque dual de Linux con Windows es lo más fácil del mundo, así que instalamos nuestra distro Linux favorita encima de un sistema Windows y lo hace perfectamente, sin que derramemos ni una sola gota de sudor. Incluso un práctico menú preguntará qué sistema deseamos iniciar y una vez que arranque el sistema elegido, se comportará como si fuera el único cerebro dentro de la máquina. ¿Pero qué pasa si algo va mal? ¿Y si se ha perdido una partición? ¿Y si Windows se contamina con spyware y tenemos que reinstalar? ¿Y si sólo queremos modificar la configuración, o nos cansamos del arranque dual y solamente queremos acceder a los archivos de Windows, desde Linux? En el tema de portada de este mes, Integración de Windows en Linux, describiremos cómo funciona internamente el arranque dual y explicaremos cómo configurar su propio sistema de arranque dual. En nuestro artículo principal “Puliendo el arranque: Colocando juntos Linux y Windows en el mismo disco duro” explicamos qué hay detrás del
menú de arranque, además de algunas técnicas para personalizar un arranque dual. Aprenderemos cómo manejar el cargador de inicio Grub los sistemas de inicio duales. Mostraremos cómo Grub inicia Windows e incluso enseñaremos cómo configurar el inicio de Linux desde el archivo boot.ini. Nuestra segunda historia, “Entrelazando: Accediendo a particiones en sistemas de arranque dual” describiremos Captive NTFS, una herramienta libre que permite que Linux pueda leer y escribir en particiones NTFS. También veremos algunas herramientas libres para Windows que permiten acceder a los archivos de las particiones ext2. Si estamos buscando otro tipo de integración, donde incluso no sea necesario reiniciar el sistema para hacer funcionar los programas de Windows, les gustará nuestro tercer artículo sobre cómo ejecutar aplicaciones Windows en Linux con Wine. El programa Wine es un tema con una gran cobertura en prensa, puede que incluso hayan visto nuestro artículo
sobre Wine del mes de junio de 2005, pero el artículo de este mes, realizado por un miembro del equipo de desarrollo de Wine, ofrece algunos detalles prácticos que son difíciles de encontrar en otra parte. Si solamente van a leer un artículo sobre Wine este año, éste es el que deben leer. Si de verdad necesitan vivir con Windows ¿Por qué no traer Windows a Linux? Esperamos que disfruten con nuestro tema de portada: Integración de Windows en Linux.■
EN PORTADA Configurando un arranque dual
. .12
Captive NTFS . . . . . . . . . . . . . . . . . . . .16 Wine
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
WWW.LINUX- MAGAZINE.ES
Número10
11
PORTADA • Boot
Instalar InstalarLinux LinuxyyWindows Windowsen enun unmismo mismodisco discoduro duro
ARRANQUE BRILLANTE
Si tenemos dos sistemas que comparten un mismo ordenador, el gestor de arranque nos mostrará los menús para elegir qué sistema arrancar. Veremos distintas posibilidades para el arranque y describiremos cómo configurar nuestro sistema para un arranque dual. POR ANDREA MÜLLER
S
i necesitamos usar aplicaciones como Dreamweaver, Microsoft Office o juegos mordernos, y no nos gusta la solución de usar Wine o VMware, puede que tengamos que echar mano de un sistema Windows. Y si instalamos un sistema Windows junto a Linux en un ordenador, tendremos que configurar un gestor de arranque para poder elegir qué sistema arrancar. Afortunadamente no es necesario adquirir software comercial para ello, ya que la mayoría de las distribuciones proporcionan las herramientas necesarias para una configuración de arranque dual. Lilo, que en su día fue el principal gestor de arranque, ha quedado casi completamente eclipsado por Grub (Grand Unified Bootloader) [1]. El gestor de arranque de Gnu/HURD tiene muchas más características que el sencillo Lilo. Además de soporte para sistemas de ficheros, Grub tiene integrado
12
Número 10
una línea de comandos que permite arrancar los sistemas operativos instalados aunque el archivo del menú esté defectuoso o se haya borrado accidentalmente.
A Su Gusto Si pretendemos instalar Linux y Windows en un mismo ordenador, nos daremos cuenta de que Linux es el menos exigente de los dos. De hecho, Linux se siente igual de cómodo en una partición extendida que en una primaria. Linux puede incluso instalarse en un segundo disco duro sin mayor problema. Por contra, el sistema operativo con base en Redmond no echará a andar a menos que esté en la primera partición primaria activa. Mientras que Windows 95/98/ME necesitan la primera partición primaria activa como disco del sistema, las variantes de NT, Windows 2000 y XP,
WWW.LINUX-MAGAZINE.ES
sólo necesitan tener allí los archivos de arranque: el directorio Windows y el resto del sistema pueden instalarse en una unidad lógica de una partición extendida. Sin embargo, los archivos ntldr y ntdetect.com, así como el archivo de configuración boot.ini (véase Figura 1), tienen que estar en cualquier caso en la primera partición primaria activa. El gestor de arranque de la familia NT no hace uso del registro principal de arranque (MBR), sino del sector de la partición con los archivos de arranque. Caso de existir otro sistema Windows en el disco donde tenemos el XP, la rutina de instalación añade automáticamente el sistema existente al menú de arranque.
Método Estándar El sistema de arranque múltiple más habitual añade Linux por encima del sistema Windows previamente instala-
Boot • PORTADA
Figura 1: El gestor de Windows 2000 y XP lee su configuración desde el archivo boot.ini.
do. La mayoría de las distribuciones usa el gestor de arranque Grub por defecto y añade la instalación de Windows al menú de Grub (véase figura 2). El archivo de configuración de Grub, /boot/grub/menu.lst le indica cómo iniciar Windows. Lo que sigue podría se la variante más simple. Funciona con Windows 95/98/ME y la familia NT. title Windows root (hd0,1) chainloader +1
La línea que comienza por title especifica el nombre de la entrada del menú de Grub. La línea root le indica a Grub qué partición contiene el sistema que queremos iniciar. La sintaxis es ligeramente distinta a la estándar Linux, /dev/hdx. hd0 se refiere al disco duro. Grub comienza a contar desde 0. El primer disco conectado al primer controlador IDE, que debería llamarse /dev/hda en notación Linux, es hd0 para Grub. Tras la coma sigue la partición, y de nuevo Grub comienza a contar desde 0. Por tanto, nuestro ejemplo arrancaría un sistema Windows albergado en /dev/hda2. Es habitual encontrar Windows instalado en la segunda partición primaria, dado que muchos fabricantes configuran una partición de rescate en /dev/hda1. En lugar de una contraseña de administrador, algunas distribuciones usan rootnoverify. Esta contraseña le indica a Grub que no trate de leer el sistema de archivos que empieza en la siguiente partición. Como sólo estamos ejecutando código del sector de arranque de la partición, no hay diferencias entre root y rootnoverify. Las instrucciones para arrancar el sistema Windows contienen una línea chainloader +1. El parámetro +1 le indica a Grub que ejecute el código que sigue a la partición root. Sin embargo, en lugar de esto podríamos especificar la
ruta al archivo con el código de arranque del sistema. Podemos hacer esto haciendo que Linux escriba el sector de arranque de una partición Windows 2000 ó XP en un archivo llamado /boot/ntsector de la siguiente manera: dd if=/dev/hda1 U of=/boot/ntsector U bs=512 count=1
Para ejecutar el NTloader desde este archivo en nuestra partición Linux, necesitamos añadir la siguiente entrada a nuestro archivo menu.lst: title Windows root (hd0,4) chainloader /boot/ U ntsector
realmente hace esta opción es activar el flag para la partición, lo cual es necesario, ya que Windows necesita la partición primaria activa para arrancar. La mayoría de las distribuciones ponen esta entrada en el archivo menu.lst sólo para asegurarse, pero sólo es necesario si tenemos múltiples particiones primarias en nuestro disco duro y una de las particiones noWindows ha activado el flag.
Espacios De Intercambio Existe otro escenario que implica algo de más trabajo para los usuarios que quieran arrancar Windows. La idea es conectar un disco duro a la segunda controladora IDE. Todo Windows XP o 9X rechazará arrancar desde este disco. Pero Grub entra en escena con la opción map que soporta espacio de intercambio virtual en disco. El gestor de arranque aguarda que los discos se intercambien siguiendo lo que marca la opción map. La siguiente entrada intercambiaría /dev/hda y /dev/hdb y arrancaría un sistema Windows instalado en /dev/hdb1: title Windows map (hd0) (hd1) map (hd1) (hd0) root (hd1,0) chainloader +1
Sin embargo, necesitamos especificar root para leer la partición Linux, que es /dev/hda5 en nuestro ejemplo, si queremos que Grub encuentre el archivo. La directiva rootnoverify no funcionará en Es importante señalar que, tras el intereste caso, dado que es necesario el cambio, Grub seguirá refiriéndose al soporte de sistema de archivos de Grub disco conectado a la segunda controlapara leer el sector de arranque desde un dora IDE como hd1, por lo que, en lo archivo. Este método sólo funcionará si concerniente a Grub, el intercambio virel archivo con el código de arranque tual de los discos no tiene efectos está almacenado en una partición con secundarios. un sistema de archivos que soporte Grub. Además de los habituales sistemas de Linux como ext2, ext3, reiser y xfs, también podría ser VFAT de Windows 95, Windows 98 y Windows ME. Así mismo es bastante habitual ver la opción makeactive en las entradas de arranque Windows. La línea debe seguir a la línea Figura 2: La mayoría de las distribuciones configuran el gestor que indique la partide arranque Grub y añaden Windows al menú. ción a Grub. Lo que
WWW.LINUX-MAGAZINE.ES
Número 10
13
PORTADA • Boot
Segundo Puesto para Windows Los usuarios de Linux que quieran añadir Windows a su sistema se enfrentan a mayores problemas. Tanto Windows 95/98/ME como la familia NT sobrescriben el MBR durante la instalación estándar, borrando la instancia de Grub que allí reside. Si estamos pensando en esta posibilidad y tenemos un diskette de arranque Grub, no deberíamos tener problemas en reinstalar Grub a posteriori. Para crear un diskette de instalación de Grub, ejecutamos en primer lugar dd para escribir el archivo stage1 en el sector de arranque del diskette. Suponiendo que hemos instalado y configurado Grub, el archivo se ubicará bajo el directorio /boot/grub, al igual que menu.lst. Tecleamos: dd if=stage1 of=/dev/fd0 U bs=512 count=1
en este directorio enviaremos stage1 al diskette. El siguiente comando: dd if=stage2 U of=/dev/fd0 bs=512 seek=1
hace lo mismo para stage2. El parámetro seek=1 asegura que no sobrescribimos el archivo stage1 transferido en el último paso, sino que guardamos stage2 detrás de stage1. Después de completar estos pasos, nuestro diskette de arranque tiene todo lo necesario para poder reinstalar Grub. Tras arrancar, Grub mostrará la línea de comandos integrada sin menú. El prompt soporta completado con tabulador y tiene también ayuda en línea. Si tecleamos help se mostrará una lista de comandos, y con help nombredelcomando obtendremos una explicación del comando.
Reinstalar Grub Para reinstalar Grub, en primer lugar tenemos que señalarle su partición raíz, es decir, la partición con el directorio /boot/grub y los archivos de estado. Si /boot está situado en /dev/hda5 necesitaremos teclear root (hd0,5) en el prompt de Grub. Admite completado con tabulador, por lo que normalmente no tendremos que teclear el cierre de paréntesis. Por ejemplo, podemos teclear root (hd0 y al presionar el tabulador
14
Número 10
veremos una lista de las particiones en /dev/hda, incluyendo la información del sistema de archivos Si no estamos seguros en qué partición está almacenado /boot, podeFigura 3: La línea de comandos de Grub proporciona ayuda en línea y mos teclear completado con tabulador. find /boot/grub/stage1 para encontrarlo. El archivo bootsec.lin contiene el Grub Este comando lista cualquier partición instalado y debe ser transferido a una con un archivo con ese nombre. Una de las particiones Windows usando un vez que Grub conoce la ubicación del pendrive USB o un diskette si fuese dispositivo raíz, con el comando setup necesario. El directorio raíz del disco c:, (hd0) instalamos Grub en el MBR de que es donde reside boot.ini, es un /dev/hda. buen lugar para guardar el archivo. Añadimos una línea al arhivo boot.ini Cambiar el Cargador de NT que especifique la ubicación de bootSi todo esto suena demasiado arriesgasec.ini. La entrada apunta al archivo do, y suponiendo que simplemente quecon el sector de arranque y el nombre remos probar Linux, podríamos usar el con el que aparecerá en el menú de poco conocido cargador de NT, y su funarranque de Windows. Por ejemplo: ción de arrancar cadenas. Esta técnica supone que tenemos Windows NT o c:\bootsec.lin="Launch Grub" cualquier otro miembro de la familia NT. Los viejos 95/98 y ME no tienen gestor A menos que tengamos timeout a 0, el de arranque. El cargador de cadenas fungestor de arranque de Windows mostraciona de manera similar al ejemplo de rá un menú la próxima vez que encenGrub con el sector de arranque NT. En damos nuestro equipo, permitiendo a contraste con Grub, sin embargo, el carlos usuarios elegir entre Windows y la gador de NT únicamente puede ejecutar entrada Launch Grub. Seleccionando código de arranque de un archivo y sólo Launch Grub entramos en un menú de soporta los sistemas de archivos nativos Grub, donde podemos elegir entre el sisde Windows, VFAT y NTFS. tema Linux o simplemente el cargador Durante la instalación, los usuarios de NT nuevamente. más cautos harán que el sistema no Conclusión escriba el gestor de arranque en el MBR, sino en el sector de arranque de la partiLa mayoría de las distribuciones más ción Linux. Pero esto no funcionará si populares de Linux configuran un usamos el sistema de archivos XFS, que arranque dual automáticamente si insguarda la información de administración talamos Linux encima de un sistema en este área y sobrescribiría el gestor de Windows ya existente. Pero para aquearranque. Podemos arrancar Linux en llos que estén buscando la manera de modo seguro, haciendo uso del soporte instalar Windows en una máquina de la distribución, y ejecutar dd para Linux, o si queremos probar algo distinescribir el sector de arranque en un to, las técnicas descritas en este artículo ■ archivo al llegar a este punto. La sintaxis serán un buen punto de partida. en caso de tener nuestra versión de Linux en /dev/hda5 sería la siguiente: RECURSOS dd if=/dev/hda5 of=bootsec.linU bs=512 count=1
WWW.LINUX-MAGAZINE.ES
[1] Grub: http://www.gnu.org/software/ grub
PORTADA • Captive NTFS
Acceso a Particiones en Sistemas con Arranque Dual
TÚ ENCIMA ¿Porqué reiniciar cada vez que se necesita acceder a los datos del otro sistema operativo? Le invitamos a conocer Captive NTFS – una herramienta gratuita para montar particiones Windows NTFS desde Linux. También le mostraremos unas cuantas herramientas para leer particiones Linux desde Windows. POR THORALF POLET
C
omo el sistema de ficheros Windows NTFS cada vez es más popular, los usuarios de equipos con arranque dual Windows/Linux están continuamente enfrentados a un problema: Linux es incapaz de escribir en particiones NTFS [1]. El kernel de Linux tiene un módulo para ver las particiones
16
Número 10
NTFS, sin embargo, los desarrolladores advierten a los usuarios contra intentos de operaciones de escritura utilizando el módulo del kernel. El anticuado sistema de ficheros FAT era la única forma de compartir datos entre Linux y Windows en un equipo con arranque dual. Sin embargo, Jan
WWW.LINUX-MAGAZINE.ES
“Lace” Kratochvil ha presentado la herramienta gratuita Captive NTFS [2], una utilidad que soporta accesos de escritura en particiones NTFS. Jan Kratochvil es el autor de otras aplicaciones útiles para Linux, incluyendo Surprise, una herramienta para redimensionar particiones [3]. La última versión de Captive NTFS (versión 1.1.5) se desarrolló a principios de este año y llamó la atención su gran aceptación debido a su uso con la versión 3.4 de Knoppix y otros sistemas basados en Knoppix, tales como LinuxDefender Live! de BitDefender. En este artículo se describirá cómo acceder a una partición NTFS desde Linux mediante Captive NTFS. También mostraremos algunas herramientas para acceder a particiones Linux desde Windows.
Acceso Denegado NTFS es uno de los secretos mejores guardados de Microsoft. La compañía nunca ha estado dispuesta a proporcio-
Captive NTFS • PORTADA
ros userland (LUFS) [5], por lo que necesitará instalar LUFS para usar Captive. Puede descargar el código fuente de Captive NTFS o el paquete RPM de la página web del proyecto; y hay un paquete Debian (captive-static-1.1.5-1.deb de 9.6 MB) en [6]. El proceso de instalación sigue los pasos de siempre: dpkg -i captive-static-1.1.5Figura 2: Preparados, listos, ya… 1.deb.apt-get le propociona Figura 1: El programa de instalación de Captive una forma más simple: tan sólo añantoskrnl.exe. Para evitar problemas legabusca drivers en el sistema. dir una entrada para deb http://www. les, debería tener una copia legal de kruyt.org/debian/ a su lista fuente Windows, ya que Microsoft ahora está nar información a segundos sobre cómo /etc/apt/sources.list y a continuación llallevando a juicio los casos del uso ilegal acceder a particiones NTFS. Este inconmar a apt-get update && apt-get install de componentes de su sistema operativo. veniente ha llevado a la comunidad captive-native. Si el servidor está caído, El script captive-install-acquire pone Linux a utilizar pequeños trucos, haciénnecesitará convertir el paquete RPM de especial cuidado en encontrar los fichedose con los drivers originales de la página web del proyecto en [2] utiliros requeridos. El programa tiene tenWindows. Captive NTFS proporciona zando alien captive-static_1.1.5dencia a caer mientras busca en modo una “caja de arena”, un espacio de 0.i386.rpm e instalar mediante dpkg -i gráfico, por lo que sería conveniente memoria separado que simula un subsiscaptive-static_1.1.5_1.i386.deb. establecer la opción --text para forzar el tema con un kernel W32 y garantiza la Antes de utilizar el driver, probablemodo texto. Copiando los ficheros indiestabilidad del sistema durante operaciomente querrá hacer una copia de seguricados antes de su partición Windows a nes de bajo nivel. Captive requiere el dridad de su partición NTFS, por si las /var/lib/captive puede ahorrarle bastanver NTFS, ntfs.sys y el kernel cosas van mal. A pesar de la aceptación te tiempo, ya que la operación de búsntoskrnl.exe. de los usuarios, no hay garantía de opequeda puede ser lento. Los desarrolladores cogen algunas de raciones libre de errores. Después de Si quiere, puede descargar más drivers sus rutinas del proyecto React OS [4], todo, a causa de las políticas de actualizados de la página web del proun emulador gratuito de Windows NT. Microsoft, los desarrolladores no conoyecto. El Acuerdo de Licencia al Usuario A diferencia de Wine, Captive sólo cen todas las especificaciones de NTFS. Final (EULA) requiere una licencia váliimplementa el espacio de usuario. En A tener en cuenta, también, el hecho de da de Windows XP para utilizar los vez de ampliar Wine, como era la idea que Captive utiliza una caja de arena lo ficheros. No tiene permiso para descaroriginal, Jan Kratochvil perfeccionó cual ralentiza la velocidad. gar los ficheros automáticamente desde React OS, que proporciona algunas de El programa de setup accede a unos la página web de Microsoft. las rutinas que necesita. Captive coneccuantos ficheros de Windows: cdfs.sys, El programa /usr/bin/captive-installta los drivers como un sistema de ficheext2fsd.sys, fastfat.sys, ntfs.sys y fstab añade cualquier partición que encuentre al fichero /etc/fstab, permitiendo a los usuarios realizar un simple Listado 1: Salida captive-install-fstab mount. Tras detectar las particiones 01 Found NTFS disk partitions are prepared in /etc/fstab. You can mount correctamente, captive-install-fstab them by commands mount(8) or usermount(1), such as: muestra un mensaje como el del 02 mount /mnt/captive-LABEL_C Listado 1. 03 Available captive-ntfs partitions: Las entradas en /etc/fstab de nuestro 04 /mnt/captive-noname ejemplo se muestran en el Listado 2. 05 /mnt/captive-noname2 Por razones de seguridad, debería evi06 /mnt/captive-noname3 tar el montaje automático de particiones. 07 /mnt/captive-noname4 En vez de ello, móntese cada partición que se necesite manualmente, por ejemplo, mount /mnt/captive-noname2. Jan Listado 2: Entradas en /etc/fstab para NTFS Kratochvil recomienda a los usuarios que ejecuten umount para desmontar las 01 /dev/hda5 /mnt/captive-noname captive-ntfs defaults,noauto 0 0 particiones NTFS antes de apagar o reini02 /dev/hda6 /mnt/captive-noname2 captive-ntfs defaults,noauto 0 0 ciar el sistema. 03 /dev/hda12 /mnt/captive-noname3 captive-ntfs defaults,noauto 0 0 Si desea usar puntos de montaje más 04 /dev/hda1 /mnt/captive-noname4 captive-ntfs defaults,noauto 0 0 intuitivos, hay que modificar las entra-
WWW.LINUX-MAGAZINE.ES
Número 10
17
PORTADA • Captive NTFS
El Autor
das de fstab y añadir los asignar una letra a partipuntos de montaje ciones Ext2/Ext3. manualmente. Captive El driver soporta acceso creará tanto un usuario de lectura y escritura para como un grupo con el estas particiones mediannombre captive. te las letras de unidad. A El 31 de Octubre de diferencia de Explore2fs, 2004, Jan Kratochvil el software también puso un mensaje en la soporta acceso de escritulista de correo del proyecra en Ext3. to anunciando el final del Figura 3: El interfaz de Explore2fs es parecido al explorador de Windows. Total Commander trabajo de desarrollo. Afirmó que la versión Para ser justos, no vamos final tenía toda la funcioa olvidar el plugin Ext2 + nalidad que necesitaba, Reiser 1.2 para Total lo cual significa que el Commander [9], que soporte para el Service soporta acceso de lectura Pack 2 no estaba incluipara Ext2 y Ext3, al igual do. Si tiene instalado el que ReiserFS. SP2, le será imposible Los únicos inconveusar los drivers. Figura 4: Ext2IFS integra las particiones Linux como discos normales de nientes con los drivers y Después de actualizar Windows.Grub y añaden Windows al menú. programas para el acceel sistema Windows XP a so a particiones Linux es Windows XP Service Pack 1, los drivers En los últimos años se le han hecho que no hacen caso de los permisos antiguos deberían haber sido copiados menos cambios al programa. El mayor Unix; en otras palabras, se saltan los al directorio -normalmente avance es que la herramienta tiene privilegios de root. Podrá encontrar C:\Windows\$NtServicePackUninstall$ ahora la habilidad de leer fstab para más herramientas para el acceso a parpor seguridad. En este caso, su mejor mostrar el punto de montaje en vez de ticiones Reiser en [10], [11], [12] y opción es copiar los ficheros manual■ un identificador de dispositivo críptico. [13]. mente o realizar la descarga descrita En aspecto, el explorador de Windows anteriormente. Si tiene instalado el que viene con Windows 9x/NT es RECURSOS SP2, su única opción es descargar el mucho más intuitivo -esto puede prosistema de ficheros requerido. porcionarle una pista de porqué John [1] Entrada de NTFS en la Wikipedia: Aparte de los pequeños problemas de Newbigin escogió el nombre de http://en.wikipedia.org/wiki/NTFS velocidad y los problemillas con la insExplore2fs. Opcionalmente puede per[2] Página web de Captive: http://www. talación del driver, Captive ofrece una mitir el acceso de escritura, pero asuma jankratochvil.net/project/captive/ solución sin coste factible para acceder su propio riesgo. [3] Proyecto de Jan Kratochvil: http:// a particiones NTFS desde Linux. Si El programa no puede escribir en parwww.jankratochvil.net necesita acceso de escritura permanente ticiones Ext3 y la opción está deshabilita[4] ReactOS: http://www.reactos.com y mayor rendimiento que el que Captive da permanentemente. Explore2fs recono[5] Sistema de Ficheros LUFS: http://lufs. pueda ofrecerle, podría probar una ce particiones ReiserFS, pero no muestra sourceforge.net/lufs/ herramienta comercial como Paragon el contenido de las particiones. La última [6] Paquete Captive Debian: http://www. NTFS para Linux, que cuesta alrededor versión 1.07 también integra soporte kruyt.org/?sub_item=46 de 70 euros. LVM2 (RHEL3 y FC3). [7] Explore2fs: http://uranus.it.swin.edu. Otra opción es la herramienta au/~jn/linux/ Acceso a Linux Ext2IFS [8], que actualmente es un dri[8] Driver Ext2 para Windows: http:// ver de Windows para particiones Ext2/ La otra parte de la ecuación es cómo www.fs-driver.org Ext3. Tras la instalación de Ext2IFS, acceder a particiones Linux desde [9] Plugins para Total Commander: http:// una entrada IFS Drives aparece en el Windows. Este problema es bastante ghisler.com/plugins.htm control del sistema, mostrando las parfácil de resolver, ya que Linux es un sisticiones y proporcionando a los usuatema abierto que no presenta ningún [10] Visualrfstool: http://sourceforge.net/ projects/visualrfstool/ rios la habilidad de hacer click para obstáculo para tener acceso de escritura. Una de las herramientas más antiguas [11] Rfstool: http://www.p-nand-q.com/ Dos conferencias sobre Unix para acceder a Linux es Explore2fs de download/rfstool.html (1993/94) “engancharon” a Thoralf John Newbigin [7]. Originalmente des[12] RFSGUI: http://www.wolfsheep.com/ Polet. Thoralf es usuario de Linux arrolló un software para Windows NT, map/#RFSGUI desde 1996 y está particularmente pero actualmente soporta cualquier ver[13] LTOOLS: http://www.it.fht-esslingen. interesado en el uso de Linux en sión de Windows desde Windows 95 en de/~zimmerma/software/ltools.html educación. adelante.
18
Número 10
WWW.LINUX-MAGAZINE.ES
Wine • PORTADA
Ejecutando programas Windows con la API Wine
WINE PRÁCTICO La capa de compatibilidad Wine permite a los usuarios de Linux utilizar programas de Windows. Lamentablemente, configurar Wine es cualquier cosa menos trivial y un poco de experiencia siempre será de ayuda. POR JOACHIM VON THADDEN
WWW.LINUX-MAGAZINE.ES
L
inux ofrece toda una serie de opciones a los usuarios que necesiten ejecutar un programa Windows de vez en cuando. Se puede emular una máquina completa con aplicaciones tales como Vmware o Qemu o se puede simular un subconjunto con Win4Lin. Estas soluciones funcionan bastante bien, pero también tienen algunas desventajas: Por un lado, los usuarios deben comprar tanto el entor-
Número 10
19
PORTADA • Wine
Listado 1: Configuración, primera parte 01 [wine] 02 "GraphicsDriver" = "x11drv"; (x11drv, ttydrv) 03 "ShowDotFiles" = "1" 04 "ShowDirSymlinks" = "1" 05 "Path" = "c:\\windows;c:\\windows\\system" 06 "Windows" = "c:\\windows" 07 "System" = "c:\\windows\\system" 08 "Temp" = "t:\\" 09 "Profile" = "c:\\windows\\Profiles\\Admini strator"
no de emulación como el sistema operativo, que además ocupan un valioso espacio en la máquina anfitrión. La emulación también limita el rendimiento y consume memoria. Un programa medio funcionando en un emulador puede lograr sólo de un 50 a un 80 por ciento de su rendimiento trabajando en modo nativo, incluso incrementando el uso de memoria RAM estática en el sistema operativo invitado. Una alternativa a la emulación es simplemente suministrar las bibliotecas de Windows para el sistema Linux. En teoría, este método permitiría que el programa funcionara en Linux. Desafortunadamente, este método es complicado. Primero, las funciones de biblioteca de Windows, conocidas como API (interfaz de programación de aplicación), no están adecuadamente documentadas. Y en muchos casos, sobre todo los programas escritos por Microsoft, llaman a funciones indocumentadas. Como hay un montón de redundancia en la API, uno puede sospechar que Microsoft realmente ha perdido la pista a los millares de lla-
madas al sistema y a sus parámetros, extremadamente complejos de invocar. Además, algunas funciones se adaptan para satisfacer el entorno de Windows y realizan muchas suposiciones sobre el sistema subyacente. Por ejemplo, el sistema de archivos de Linux es absolutamente diferente del sistema de archivos de Windows. Para atenuar este problema, sería útil tener la capacidad de utilizar las bibliotecas originales de Windows. Por supuesto, esto significa poseer una licencia de Windows, pero la mayoría de la gente tiene una de todos modos, así que ¿porqué no hacer algo útil con ella? El proyecto de código abierto Wine proporciona funcionalidad de programación y también integra bibliotecas originales. Las siglas recursivas “Wine”, que significan “Wine is not an emulator” expresan qué es Wine en realidad: no es un emulador del sistema operativo, sino una capa de compatibilidad. Tras un largo periodo de desarrollo y con la ayuda de las empresas comerciales, Wine ha alcanzado una etapa de desarrollo que permite que los usuarios ejecuten un número asombrosamente grande de programas Windows sobre Linux. Este artículo echa una práctica ojeada sobre cómo utilizar Wine.
Instalación de Wine Como Wine está sujeto a ciclos de desarrollo muy rápidos, la versión que utilicemos es crítica. Esto hace que no tenga mucho sentido ir a por la ultima versión, de hecho, es aconsejable adoptar una postura más conservadora y mantener una versión funcional. Dejaremos los experimentos para los sistemas nuevos. La versión de Wine que yo uso, la 20041019, no es la última. Los paquetes de Wine siempre utilizan la fecha de arrancamiento como número de ver-
sión. La edición de octubre de 2004 es extremadamente estable y me da toda la funcionalidad que necesito. Las versiones publicadas desde entonces han sido muy experimentales y no son recomendables para su utilización en producción. La última versión disponible cuando escribía esto, 20050419, parecía prometedora, pero rehusaba cooperar con Microsoft Word. Afortunadamente, instalar Wine se ha convertido en un juego de niños. Los procedimientos de compilación e instalación agotadores son cosa del pasado en la mayoría de las distribuciones, pues el sitio oficial de Wine está bastante al día con paquetes para Suse, Red Hat, Fedora, Mandrake, Slackware e incluso para FreeBSD [1]. También están disponibles los paquetes más antiguos [2]. Después de descargar el paquete, los usuarios con distribuciones basadas en RPM simplemente se han de convertir en root y arrancar la siguiente orden rpm -Uvh wine-200xxxxx-*
para instalar Wine en sus sistemas. Si hay restos de una versión previa, tecleando rpm- e wine se elimina la versión anterior. En Fedora, el mecanismo de seguridad Prelink almacena versiones preenlazadas de todas las bibliotecas del sistema, lo que puede causar algunos problemas. Si no se desea deshabilitar Prelink totalmente, primero hay que hacerse root y después, tras la instalación de Wine, borrar las bibliotecas preenlazadas de la siguiente manera: killall prelink;prelink -uav;U rm /etc/prelink.cache; ldconfig
Como el mecanismo Prelink comprueba las bibliotecas cada 24 horas, el sistema volverá a un estado seguro a las 24 horas como muy tarde. Si se tiene prisa, se puede llamar al guión prelink del cron para restablecer el mecanismo: killall prelink;U /etc/cron.daily/prelink
Los paquetes de Wine suministrados con Debian han ganado un cierto grado de notoriedad por estar pobremente mantenidos y ser altamente impredecibles. Los usuarios de Debian deberán
20
Número 10
WWW.LINUX-MAGAZINE.ES
Wine • PORTADA
de datos del sistema sea fácil de leer y modificar por humanos y máquinas. Wine utiliza enlaces bajo el directorio ~/.wine/dosdevices para proporcionar las letras de unidades que Windows emplea y son exactamente los nombres, a base de letras, que los programas de Windows esperan, esto es c:, d: y así sucesivamente. Por lo tanto, el subdirectorio c está asignado a la unidad c: de Windows, dentro del árbol del sistema de archivos de Linux y aquí es donde comienza la típica colección de archivos de Windows que aparecen cuando se arranca Wine la primera vez. El subdirectorio c/windows tiene unos cuantos enlaFigura 1: La recompensa: programas complejos de Windows, como Microsoft Word, muestran un buen rendices simbólicos a programiento en Linux. mas tales como regedit.exe o notepad.exe; desinstalar cualquier paquete de Wine ción. Si se tiene un directorio Wine estos programas son parte del paquete que descubran, después cambiar de anterior, se debe renombrar, en aras de de Wine y deberían funcionar sin ninrepositorio e instalar los paquetes origila seguridad. Inicializar un nuevo direcguna configuración adicional. Para pronales desde el cuartel general de Wine, torio es muy fácil, solamente teclee bar esto, solamente hay que teclear tal como se indica en [3]. wine en la consola. Esto coloca el archivo de configuración y la base de datos wine notepad Sistema de Directorios de del registro, donde se guardaran los Wine archivos con el sufijo reg, directamente Esto debe arrancar nuestro primer proWine almacena los archivos de configubajo el directorio ~/.wine. Las versiograma en Wine. Algunos paquetes insración y trabajo de los usuarios junto a nes más recientes de Wine no crean un talan estos programas como enlaces los programas Windows de los usuaarchivo de configuración. La siguiente duros en el árbol del sistema de archirios, bajo el directorio del usuario en el orden: vos de Linux, permitiendo a los usuasubdirectorio .wine. Hay que ser cuidarios arrancar la aplicación con sólo doso cuando se ingrese como root. Al cp /usr/share/doc/wine-U teclear notepad. igual que los usuarios de sistemas 20041019/samples/config ~/U Configuración Sencilla Linux sólo ingresan como root para rea.wine lizar tareas administrativas, los usuarios La configuración de Wine la maneja el de Wine no deben usar nunca cuentas copia un archivo de plantilla. Por cierto, archivo config y su estructura es bastancon privilegios. Los programas de Wine no soporta el archivo de Registro te simple. Al igual que en los archivos Windows no destacan precisamente por original de Windows. En su lugar, Wine .ini de Windows, el archivo config abarsu seguridad, entre otros motivos, y utiliza un formato en texto plano, almaca nombres de grupos entre corchetes, pueden comprometer el sistema. Por cenando las colmenas del Registro del seguidos por pares "Clave" = "Valor". otra parte, las llamadas al sistema que sistema y de los usuarios en los archiAl contrario que en Windows, tanto las podrían fallar pueden funcionar para el vos system.reg y user.reg. Como los proclaves como los valores deben estar usuario root y esto puede hacer que el gramas normalmente no acceden direcentrecomillados y los comentarios se comportamiento del programa sea tamente al Registro, sino que usan el indican con el punto y coma. El orden impredecible. método recomendado de acceder a trade los grupos no es relevante. Se necesita un nuevo directorio Wine vés de llamadas al sistema, ésta es una El grupo [wine] (Listado 1) contiene para completar los pasos de la instalabuena manera de conseguir que la base varios parámetros básicos que contro-
WWW.LINUX-MAGAZINE.ES
Número 10
21
PORTADA • Wine
original de Windows es necesario copiarla bajo windows/system en el árbol del sistema de archivos simulado de Windows o en el directorio que contiene la aplicaFigura 3: El desinstalador ofrece una selección de herramientas ción se desea utilide desinstalación. zar. Sin embargo, no todas las DLLs son al configurar la versión a Windows 98, adecuadas o útiles. Por ejemplo, el tendremos la configuración que tiene núcleo de Windows, el sistema de usuamás funcionalidad en la API de Wine. rio y el subsistema gráfico se localizan El cuadro de mandos más potente se en las DLLs kernel.dll, user.dll y gdi.dll localiza bajo [DllOverrides] (Listado 2, y no se pueden utilizar con Wine. Esto línea 6). Aquí es donde se especifican mismo también se aplica a sus equivacuales de las bibliotecas integradas se lentes de 32 bit, kernel32.dll, user32.dll utilizarán y cuales serán sustituidas con y gdi32.dll. Las DLLs de bajo nivel, la las versiones del Windows original. mayoría de los controladores de disposiEstos ajustes pueden ser priorizados. tivo y los archivos VXD son igualmente Por ejemplo, especificando "native, inservibles. builtin" se indica que Wine debe buscar DLLs primero las bibliotecas nativas. Si esta Las DLL de Windows 98 son la mejor biblioteca no está disponible, se utilizaapuesta. Algunas de ellas están disponirá la copia de Wine. Para utilizar la DLL
Listado 2: Configuración, segunda parte
Figura 2: Wine es conocido por funcionar con múltiples aplicaciones de Windows.
lan la estructura del sistema de archivos y el acceso a los recursos del sistema Linux. Es conveniente establecer a 1 los parámetros de "ShowDirSymlinks" y "ShowDotFiles", para permitir al visor de Windows mostrar todos los archivos del sistema Linux. Por ejemplo, ocultar los enlaces simbólicos puede significar la pérdida de un montón de tiempo buscando archivos. El resto de los parámetros se puede dejar como está. La sección [Version] (Listado 2) permite a los usuarios modificar el comportamiento de las bibliotecas Wine. La clave "Windows" puede asumir la mayoría de las versiones desde Windows 3.0 hasta el ultimísimo Windows 2003 y esto es importante para una serie de aplicaciones. Sin embargo, la mayoría de las aplicaciones funcionarán mejor si se selecciona "win98" para este parámetro. Además,
22
Número 10
01 [Versión] 02 ; Versión de Windows a imitar (win95, win98, winme, nt351, nt40, win2k, winxp, win2k3, etc.) 03 "Windows" = "win98" 04 ;"DOS" = "6.22" 05 06 [DllOverrides] 07 ; Algunas dlls no funcionarán, así que los dejamos en builtin. 08 ; No modificar estas líneas. 09 "advapi32" = "builtin";Las versiones nativas no funcionan 10 "avicap32" = "builtin";Relacionado con el Hardware 11 "capi2032" = "builtin";Completamente implementado 12 "comctl32" = "builtin";Las versiones nativas causan errores. 13 "comdlg32" = "builtin";thunk 14 "crtdll" = "builtin";Completamente implementado
WWW.LINUX-MAGAZINE.ES
15 "ctl3d32" ="builtin";thunk 16 "d3d8" = "builtin";Relacionado con el Hardware 17 "d3d9" = "builtin";Relacionado con el Hardware 18 [...] 19 "msi" = "native" 20 "ole32" = "native" 21 "odbc32" = "native,builtin" 22 23 ;algún espía o programas que no queremos que arranquen 24 "*autorun.exe" = "native,builtin" 25 "*ctfmon.exe" = "builtin" 26 "*ddhelp.exe" = "builtin" 27 "eMusicClient.exe" = "builtin" 28 "*findfast.exe" = "builtin" 29 "icwconn1.exe" = "builtin";Evita la carga desde ICW aunque exista la clave del Registro 30 31 ; predeterminado para todas las demás dlls y ejecutables 32 "*" = "native, builtin" 33 ;"*" = "builtin, native"
Wine • PORTADA
comunes en Windows en [5]. Se puede comprobar fácilmente el estado de la implementación de la biblioteca de Wine en [6].
Sustituir DLLs Algunos componentes instalados por Office u otros programas pueden llegar a ser un auténtico tormento. Estos depuradores, con sus ventanas emergentes siempre que Figura 4: El entorno de creación de servicios web de falla una aplicación, pueMacromedia, Flash MX en ejecución bajo WINE. den hacer que la vida sea miserable. El archivo bles en Internet [4] o desde Microsoft. mdm.exe en el directorio Hay que evitar las bibliotecas de windows/system es un típico ejemplo. Windows XP, ya que casi nunca vienen Afortunadamente se pueden deshabililibres de errores. La precaución es recotar este tipo de aplicaciones en la secmendable, incluso con las DLLs de ción DLLOverrides, por ejemWin98. Algunas funcionan bien con plo: algunas aplicaciones, pero la versión "*mdm.exe" = "builincorporada en Wine funciona mejor tin" con otras. En muchos casos, Wine puede influenciar sobre los llamados significa que buscará este controles, es decir, DLLs que proporciocomponente en la colecnan elementos tales como campos de ción de bibliotecas de Wine entradas o cuadros de diálogo, y como este programa no commctrl.dll y commdlg.dll y sus equiexiste en su colección, no valentes de 32 bit. Lo mismo se aplica a funcionará. las DLLs OLE que proporcionan un puerto de funcionalidad COM sin que el Subsistema software de instalación falle. Como todo Gráfico el asunto es tan complicado, básicamente Wine permite que los usuarios El siguiente grupo [x11drv] especifiquen la configuración de DLL (Listado 3) describe las programa a programa, pero esto se verá propiedades del subsistemás tarde. En WineHQ hay notas sobre ma Gráfico, que se encarlos problemas con las DLLs e informaga de convertir las llamación sobre la mayoría de las DLLs más das a la API de Windows al X11 del sistema operativo Unix. Son interesantes las configuraciones "Managed" y "Desktop". Un valor de "Y" para el primero le dice al gestor de ventana X11 que maneje las ventanas de los programas Windows; una configuración a "N" significa que Wine Figura 5: Powerpoint y el solitario funcionan perfeclas manejará. La ventaja tamente. de dejar que sea el gestor
WWW.LINUX-MAGAZINE.ES
de ventanas el que realice este trabajo es integración mejorada con el sistema de ventanas del escritorio. Si en vez de eso permitimos a Wine que maneje el aspecto de las ventanas, obtendremos el típico look & feel de Windows. En muchos casos, los programas sólo funcionarán en este modo. Configurar "Y" como predeterminado es una buena idea en la mayoría de los casos. El parámetro "Desktop" permite que un programa funcione en su propia ventana del escritorio; se puede indicar el tamaño, como por ejemplo 800x600. Esto tiene sentido con programas que estropean el escritorio o insisten en ejecutarse en primer plano. Este modo también se recomienda para juegos, que tienden a conmutar los modos gráficos muy a menudo. Y si un juego se estropea, esto puede dejar al ordenador seleccionado en el modo gráfico. Los diversos miembros de la familia Windows Install Shield también tienden a apropiarse de todo el escritorio e
Número 10
23
PORTADA • Wine
Figura 6: Cedega es una versión de WINE optimizada y orientada a juegos.
interrumpir cualquier cosa que halla. Algunas secciones permiten configuraciones individuales para el controlador de dispositivo X11, pero de nuevo, analizaremos esto con mayor profundidad más adelante.
Figura 7: WINE permite ejecutar bajo Linux programas para los que no existen equivalentes todavía.
El otro ajuste de esta sección controla los modos gráficos acelerados, y la configuración predeterminada debería funcionar bien, esto mismo es válido para los tipos de letras, los puertos e/s y otras secciones. Los paquetes de insta-
Listado 3: Configuración, tercera parte 01 [x11drv] 02 ; Número de colores asignado a la paleta del sistema 03 "AllocSystemColors" = "100" 04 ; Use a private color map 05 "PrivateColorMap" = "N" 06 ; Estimación de la corrección sobre la velocidad en algunas operaciones 07 gráficas 08 "PerfectGraphics" = "N" 09 ; Profundidad de color a usar en pantallas con multi-profundidad 10 ;;"ScreenDepth" = "16" 11 ; Permite al gestor de ventanas gestionar las ventanas creadas 12 "Managed" = "Y" 13 ; Utiliza una ventana de escritorio de 640x480 para Wine 14 ;"Desktop" = "1024x768" 15 ; Usa la extensión XFree86 DGA si está presente 16 ; (make sure /dev/mem is accessible by you !) 17 "UseDGA" = "N" 18 ; Usa la extensión XVidMode si está presente 19 "UseXVidMode" = "Y"
24
Número 10
20 ; Usa la extensión XRandR si está presente 21 "UseXRandR" = "N" 22 ... 23 24 [WinMM] 25 "Drivers" = "wineoss.drv" 26 ; Predeterminado para la mayoría de las configuraciones normales 27 ;"Drivers" = "winearts.drv" 28 ; para KDE 29 ;"Drivers" = "winealsa.drv" 30 ; para usuarios de ALSA 31 ;"Drivers" = "winejack.drv" 32 ; para el servidor de sonido Jack 33 ;"Drivers" = "winenas.drv" 34 ; para el sistema de sonido NAS 35 ;"Drivers" = "wineaudioio.drv" 36 ; para máquinas Solaris 37 ;"Drivers" = "" ; 38 39 [AppDefaults\\_INS0432._MP\\ 40 x11drv] 41 "Desktop" = "1024x768" 42 43 [AppDefaults\\QuickTimePlayer. 44 exe\\DLLOverrides] 45 "ddraw" = ""
WWW.LINUX-MAGAZINE.ES
lación tienen cuidado con las configuraciones específicas de cada distribución.
Configuraciones de sonido La cosa empieza a animarse en la sección "WinMM", que es la que maneja la salida del sonido. Para ello se necesita habilitar el controlador de dispositivo adecuado. El controlador correcto para los usuarios de KDE es "winearts.drv". No todos estos controladores están bien implementados. En particular para la salida de sonido, puede que sea necesario recurrir a "wineoss.drv", asumiendo que se deshabilita el sonido para los demás programas que se hayan configurado antes de esta selección para evitar conflictos. Esta advertencia se aplica especialmente a los servicios de sonido de KDE y GNOME artsd y esd. Las secciones posteriores manejan las configuraciones predeterminadas de las aplicaciones. [AppDefaults\\<programa>\\x11drv] define la salida gráfica para un programa en concreto. Opcionalmente se puede utilizar [AppDefaults\\<programa>\\DllOverri des] para establecer una DLL predeterminada que tendrá prioridad sobre la configuración en la correspondiente sección genérica. Esto permite limitar Install Shield a una ventana o evitar que Quicktime Player 5 utilice DirectDraw . La documentación en [7] ofrece multitud de pautas útiles sobre los parámetros, la configuración y la puesta a punto de Wine. Los expertos preferirán configurar Wine manualmente; es decir, preferirán editar el archivo de configuración. Los recién
Wine • PORTADA
Por desgracia, Microsoft no ha considerado, de momento, especificar un esquema de instalación bien definido, en contraste con los esquemas introducidos hace tiempo como DPKG o RPM. Esto significa que los instaladores son algunos de los Figura 8: WINE permite una migración gradual a Linux. En la imagen, mayores escollos una presentación ejecutándose en Powerpoint. para Wine y esto puede causar prollegados preferirán una herramienta blemas con los programas más compliapropiada, basada en un interfaz gráficados. co. Con winesetuptk se puede realizar Si un programa no se puede instalar de una edición simple o la generación del ninguna manera, se puede intentar instalos archivos .wine/config. larlo primero en Windows 98. Hay que Desgraciadamente, esta herramienta no asegurarse de que se tiene una copia de se ha puesto al día y por eso utiliza seguridad, o mejor aún, exportar el algunas opciones de configuración Registro antes de intentar la instalación. obsoletas. Está en desarrollo una nueva Una vez instalado el programa, se copia herramienta, llamada winecfg, pero en al directorio que corresponda bajo el momento de escribir esto no se había ~/.wine, se vuelve a exportar el Registro terminado. Esto nos deja con la opción y se comparan los resultados. Será necede la configuración manual, las Wine sario usar la herramienta regedit de Wine Tools, basadas en Wine o Crossover para modificar las claves que hayan camOffice. biado. En muchos casos, la instalación añadirá nuevas DLLs y también será Preparados, estabilizados, necesario copiar dichas DLLs al directo¡ya! rio Wine. Con un poco de suerte, el proUna de las ordenes más importantes en grama debe funcionar. Los programas el uso diario de Wine es el reinicio del que no utilizan claves del Registro son sistema Windows. Afortunadamente, mucho más funcionales. Lotus Notes Wine nos ayuda a evitar un auténtico sería un ejemplo. Aunque la instalación reinicio. Tecleando no funciona en Wine, se puede instalar en Windows y después simplemente hay wineboot que copiar la versión 6.51 de Notes al lugar adecuado del iniciaremos el proceso de árbol de directorios arranque al estilo Windows. Wine. Muchos programas utiLos programas lizan Install Shield. que durante
WWW.LINUX-MAGAZINE.ES
Alternativas: CrossOver Office y Cedega Wine ha dado lugar a un importante número de productos comerciales y todos ellos han comenzado en el código base de Wine antes de especializarse en características específicas, adelantando a Wine en esos aspectos. CrossOver Office de CodeWeavers [13] se especializa en el soporte de las principales aplicaciones ofimáticas y hay que decir que CodeWeavers ha hecho un gran trabajo. El hecho de que CodeWeavers aporta sus parches a los desarrolladores de Wine ha permitido que Wine crezca realmente en los últimos 12 meses. CrossOver Office ofrece las bibliotecas más recientes de Wine, un instalador de instalaciones muy apropiado para las aplicaciones que soporta, completa integración del escritorio, y soporte de CodeWeavers. Las desventajas de tener que probar nuevas versiones de Wine, desperdiciando tiempo, sesiones de instalación maratonianas y montones de horas perdidas revisando documentación en la Web, pueden ser cosa del pasado, por solamente 40$ US o 40 Euros, un precio que no tiene nada de caro. Cedega de Transgaming [14] se ha especializado en el uso de Wine como plataforma de juegos y ha impulsado el desarrollo de la emulación de DirectX. El código especial de protección anti-copia, permite a los usuarios ejecutar juegos con protección anti-copia. Este software está disponible como versión de suscripción por 5$ o 5 Euros al mes, con una suscripción mínima de tres meses. Con la excepción del código de protección anti-copia, el código fuente de Cedega está disponible y eso significa que los usuarios pueden compilarse Cedega. Hay paquetes disponibles para varias distribuciones, preparados para instalar en [15].
la instalación solicitan un CD o que inserte el siguiente disquete pueden poner en aprietos a los usuarios menos experimentados. Por supuesto que hará falta montar el CD en Linux, aún así, hay que evitar que el instalador acceda al CD en el directorio de montaje, ya que este intento de acceder al CD bloqueará la unidad, impidiendo que se pueda desmontar cuando haga falta cambiar de disco. Conociendo esta problemática, no habrá dificultad si se responde a la petición de
Número 10
25
PORTADA • Wine
veces no queda más remedio que reiniciar la aplicación. Los programas que no terminan limpiamente pueden dejar componentes funcionando en memoria. Para obtener más detalles hay que teclear ps -ax|grep wine. wineserver -kill
mata cualquier instancia de Wine. Los programas que devoran la pantalla completa y la enredan también son muy molestos. En Wine, la mejor manera de manejar estos programas es, cuando se lancen, ponerlos todos juntos en una ventana, como se explica a continuación: se elimina la etiqueta de comentario de la línea "Desktop" = "1024x768" para ejecutar todas la aplicaciones Windows en ventanas o mejor aún, crear en la configuración una sección específica para la aplicación para que el programa rebelde se ejecute sólo en una ventana. El Centro de Control (Control Center) será de ayuda para manejar los programas que se configuran a través del Windows System Settings. Tecleando la siguiente orden:
Figura 9: WINE ofrece la posibilidad de que el usuarios siga utilizando las herramientas con las que siempre ha trabajado en Windows
cambio de disco, desmontando el CD desde la consola, cambiando el CD y montando el siguiente. El uso diario enseña que algunos programas se han de arrancar desde dentro de sus directorios para que vayan bien. Otros no se toman bien que los usuarios cambien de escritorio virtual en tiempo de ejecución, de hecho, lo más seguro es que se cuelguen y que cueste bastante reanimarlos. La mayoría de las
Futuro Hay algunas cosas con las que hay que tener cuidado antes de poner a Wine en producción. Antes de nada, hay que tener presente que sólo el 30 por ciento de todas las aplicaciones Windows funcionan satisfactoriamente bajo Wine. No podemos esperar mucho del sistema ya que no está diseñado como un sustituto de Windows; si es esto lo que andamos buscando, la respuesta obvia es Linux, con su asombrosa colección de aplicaciones útiles y libres. Lo que Wine nos ofrece es la oportunidad de ejecutar importantes aplicaciones Windows para las que no podemos hallar reemplazo, permitiendo de ese modo una migración gradual. Si hacemos un uso muy intenso de los productos de Office, quedaremos definitivamente convencidos con la posibilidad de poder seguir utilizando estas aplicaciones y probar algo nuevo al mismo tiempo. Las alternativas comerciales, Cedega para juegos y CrossOver Office para los productos Office, son aportaciones muy valiosas, pues proporcionan soporte y ayuda para mantener la velocidad del desarrollo. En un entorno comercial, tendremos dificultades para encontrar un sustituto.
26
Número 10
wine control
se arranca la herramienta y se obtiene el acceso a la configuración de los componentes instalados en el sistema. También se pueden desinstalar
programas utilizando el Centro de Control: wine uninstaller
arranca un applet que ofrece una lista de los programas de desinstalación registrados. Wine tiene un restringido soporte de programas DOS. wine wcmd
arranca el intérprete de órdenes, donde se pueden ejecutar programas DOS, pero con muchas limitaciones. Si se quiere ejecutar programas DOS, es preferible utilizar dosemu o dosbox [8]; sobre todo si se trata de juegos DOS.
Trabajando con el hardware Wine proporciona una capa de emulación para archivos binarios pertenecientes a otros sistemas operativos. Esto incluye unas cuantas restricciones que hacen que en la práctica algunas aplicaciones no se puedan utilizar. Por ejemplo, las aplicaciones que necesitan un controlador de dispositivo de hardware específico no funcionarán. De hecho, el mero intento de instalar controladores de dispositivo de hardware Windows está abocado al fracaso, ya que la forma en que los dos sistemas operativos manejan el hardware es radicalmente diferente. A pesar de esto, algunos programas que necesiten acceso directo al disco duro o al lector de CDROM, funcionarán. Wine ofrece un modo de acceso directo para dar soporte a esto, permitiendo que improbables candidatos a funcionar en Wine, como la versión descargable de Nero Burning ROM funcione, mientras que CloneCD proporciona sus propios controladores para el acceso al dispositivo, controladores que, por desagracia, no se entienden con Wine. Independientemente de la aplicación que se esté pensando instalar, no está de más darse una vuelta por las bases de datos en [9] y [10] para comprobar si alguien ya ha hecho el trabajo duro y posiblemente haya creado un informe o una guia de instalación.
DirectX Figura 10: El programa para la creación de diagramas Visio en funcionamiento bajo WINE.
WWW.LINUX-MAGAZINE.ES
Los juegos que confían en DirectX pueden funcionar bien
Wine • PORTADA
cación que está funcionando en Wine se cuelga. Si no se tiene interés en investigar los motivos, basta con pararlo. Si se prefiere analizar el problema, se puede teclear bt para solicitar información. La mejor manera de tratar con los programas traviesos es probar primero varias configuraciones en la versión Windows. Algunos proFigura 11: El soporte a Photoshop de Adobe es muy estable. gramas son muy exigentes con la ruta desde o pueden fallar. De nuevo, conviene donde se arrancan. Otra vez, hay que acudir a los recursos de Internet para intentar arrancar los programas desde averiguar más. Wine emula el comporsu propio directorio, proporcionando tamiento de DirectX 8 y esto da una una ruta Windows completa o intenauténtica oportunidad de ejecutar juetando la ruta Linux (Listado 4). gos compatibles con DirectX. Por otra Aunque se supone que los ejemplos de parte, ninguno de los que usan protecestas rutas son equivalentes, un proción anti-copia funcionará en Wine. grama Windows no tiene porqué ver Estos mecanismos son de tan bajo las cosas de la misma manera. nivel que están condenados a fallar. La elección de gestor de ventanas Pero, en cualquier caso, no se debe también puede causar unos cuantos instalar nunca el DirectX original. No inconvenientes. En estos casos, cambiar funcionará y además puede destrozar los parámetros Managed y Desktop totalmente la configuración actual del puede hacer milagros, sobre todo cuandirectorio Wine. do un programa funciona, pero no dibuja la ventana del programa correctaDepuración mente. Tarde o temprano los usuarios de Wine Puede que sea razonable especificar se las verán con el depurador winedbg. algunos parámetros de depuración El depurador aparece cuando una aplicuando se arranca un programa: WINEDEBUG="+loaddll" wine program_path arrancará un programa y Listado 4: arrancadores de dirá si las DLLs que utiliza el prograprogramas Alternativos ma son incluidas o nativas. Esta infor01 01 wine "c:\\program mación permite identificar DLLs con files\\microsoft office\\offiuna inadecuada implementación en ce\\winword.exe" Wine y reemplazarlas con las DLLS 02 equivalentes en Windows, lo que a su 03 wine "~/.wine/c/Program vez, se supone, permitirá ejecutar el Files/Microsoft programa elegido. La documentación Office/Office/WINWORD.EXE" de Wine Debug en [11] menciona una 04 serie de parámetros adicionales que 05 cd ~/.wine/c/Program permite a los usuarios sacar compoFiles/Microsoft Office/Office; nentes específicos del entorno de ejewine WINWORD.EXE cución. 06 Si se busca ayuda con Wine, el archi07 cd ~/.wine/c/Program vo de la lista de usuarios de Wine [12] Files/Microsoft Office/Office; tiene un montón de hilos de discusión wine con preguntas y respuestas sobre los 08 "c:\\program files\\microsofproblemas en Wine y, por supuesto toffice\\office\\winword.exe" que las nuevas preguntas son bienveni■ das.
WWW.LINUX-MAGAZINE.ES
RECURSOS [1] Cuartel General de Wine”: http://www. winehq.org/site/download [2] Descarga de Wine: http:// prdownloads.sourceforge.net/wine [3] Descarga de paquetes Debian: http:// www.winehq.org/site/download-deb [4] Fuentes de las DLLs para Windows: http://www.dll-files.com/ [5] Acerca de las DLL: http://www. winehq.com/site/docs/wine-devel/ arch-dlls [6] Estado de implementación de la Biblioteca: http://www.winehq.com/ site/status_dlls [7] Documentación de Wine: http://www. winehq.org/site/documentation [8] Dosbox: http://dosbox.sourceforge. net/ [9] Aplicaciones que funcionan en Wine: http://appdb.winehq.org/ [10] El rincón de Frank, sitio alternativo de Wine: http://frankscorner.org/ [11] Documentación de Depuración: http://winehq.org/site/docs/ wine-user/x1824#AEN1826 [12] Foro de Wine para sus dudas: http:// www.winehq.org/site/forums [13] Crossover Office: http://www. codeweavers.com/ [14] Cedega de Transgaming: http://www. transgaming.Com/ [15] Paquetes de instalación de Transgaming: http://www003. portalis.it/115/
Número 10
27
EVALUACIÓN • Zend Studio 4
Exploración del Entorno de Desarrollo Zend Studio 4
DESARROLLO RÁPIDO Los expertos en PHP consideran a Zend Studio como el entorno IDE más maduro y con más características útiles. La última versión ofrece manipulación avanzada de bases de datos y otras mejoras. Vamos a revisar el IDE Zend Studio y enseñaremos cómo se puede usar para acelerar el desarrollo en PHP. POR CARSTEN MÖHRKE
L
a elección de un entorno de desarrollo integrado es a menudo cuestión de gusto. Muchos desarrolladores de PHP prefieren editores de texto como Emacs o Vim. Los desarrolladores que prefieren una solución más integrada tienen varias opciones en el mundo Linux. El IDE gratuito Quanta Plus, el entorno de código cerrado Maguma e incluso Eclipse (con su conjunto de plug-ins adecuado) son buenas alternativas a un editor. Para los desarrolladores de PHP, Zend Studio tiene la reputación de ser uno de los IDE más maduros y potentes. Zend Studio es la criatura de la empresa Israelí Zend Software, que prefiere ser conocida como “La Compañía del PHP”. Versiones anteriores tenían problemas de rendimiento o inestabilidad, pero la última versión, Zend Studio 4, es un entorno de desarrollo extremadamente potente y estable. Zend Studio no es gratis ni pertenece a la comunidad de Código Abierto, aunque sus 249 dóalres bien
28
Número 10
valen la pena. Se puede descargar una versión de prueba del sitio web de Zend. La versión de prueba es plenamente funcional durante un período de 21 días, tras los cuales se degrada a la “Zend Studio Personal Edition”, una versión no comercial que deshabilita muchas de las características interesantes que hacen que no merezca la pena (véase el cuadro
WWW.LINUX- MAGAZINE.ES
titulado “Zend Edition”).
Studio
Personal
La Instalación Después de descargar el paquete y descomprimir el archivo de 47 Mbytes, se puede ejecutar el programa de instalación directamente. Un asistente le guiará a través del proceso tras solicitarle que
Zend Studio 4 • EVALUACIÓN
La interfaz de usuario (Figura 2) está dividida en varios paneles. La parte de arriba a la izquierda muestra los ficheros, servidores y bases de datos de acceso directo. Debajo se encuentran varios inspectores que proporcionan a los desarrolladores una visión rápida de los ficheros, clases y métodos que Figura 1: Un asistente nos lleva a través del proceso de instapertenecen al proyecto lación de Zend Studio. Asegúrese de instalar el servidor de actual. La parte inferior Zend Studio. de la pantalla está reservada para los mensajes y conteste a algunas preguntas. Además de la ventana de depuración. La segunda las preguntas típicas sobre el directorio ventana proporciona información sobre de instalación, se puede indicar qué verlos valores de las variables, las llamadas a sión de PHP se desea soportar (4 ó 5). la pila y cosas similares. A la derecha se PHP 4 y 5 no son cien por cien compatiencuentra un área que muestra la “pantables y contienen diferentes comandos, lla de salida”. Esta zona muestra el código así que esta selección influirá en el colodel script generado para que se pueda ver reado de la sintaxis y su comprobación. de un vistazo. Zend Studio también Las buenas noticias son que esta caractemuestra las cabeceras HTTP. Esto es una rística se puede modificar más adelante. característica importante ya que un naveOtra cosa importante sobre la instalación gador no lo hace. Finalmente, la ventana es decidir si se va a instalar el Zend de edición está en el centro de la pantalla. Studio Server (Figura 1). Diga que sí, Para todos aquellos que estén preocupaporque se necesitará para poder depurar dos en dónde colocar todos estos paneles de forma efectiva más adelante. en una pantalla pequeña tenemos buenas noticias: se pueden escalar los paneles y La Interfaz ocultar aquellos que no se necesiten. Tras completar la instalación, Zend La Configuración Studio automáticamente detecta el idioma de la configuración del sistema y se Antes de empezar a usar Zend Studio en ejecuta con el soporte de idioma adecuaun entorno de producción, probablemendo. En el momento de de escribir este te necesite ajustar algunos parámetros artículo, el entorno soportaba los de configuración. El cuadro de diálogo siguientes idiomas: Inglés, Francés, para personalizar el sistema se titula Alemán, Ruso y Español. Preferences y se abre seleccionando Preferences en el menú de herramientas. La mayoría de estas preferencias son cuestión de gusto. Sin embargo, hay algunas opciones adicionales que necesitará cambiar para obtener un Figura 2: El interfaz de usuario de Zend Studio. entorno de
WWW.LINUX- MAGAZINE.ES
desarrollo útil. Por ejemplo, se puede definir cómo mostrar el tabulador en la solapa Editing. El formato Newline puede ser importante. Esta opción especifica si una nueva línea se representa por un retorno de carro y avance de línea (estándar de Windows) o por tan sólo un avance de línea (estándar de Unix).
La Configuración del Servidor En muchos casos, se necesitará trabajar con ficheros almacenados en un servidor. El IDE Zend proporciona la característica de almacenar los ficheros directamente en un servidor usando una conexión FTP. Se puede usar SFTP o FTP sobre SSH para mayor seguridad si es necesario. El menú de ficheros muestra un cuadro de diálogo donde se puede configurar una conexión nueva a un servidor (Figura 3). Para configurar la conexión, se necesita proporcionar la información usual, como el nombre del servidor, el nombre del usuario y su contraseña. Hay que asegurarse de desmarcar la opción Reconnect on Startup o Zend Studio intentará conectarse al servidor cuando se ejecute el IDE y esto puede ser realmente molesto si se tiene una lista larga de servidores o si la conexión no está disponible. Zend Studio también tiene soporte CVS, que se puede configurar con el menú de herramientas.
La Configuración de un Servidor de Bases de Datos El acceso directo a servidores de bases de datos es una característica nueva en
Zend Studio Personal Edition Las siguientes características no están disponibles en la versión Zend Studio Personal Edition: • Perfiles • Analizador de Código • Soporte para CVS • Inspectores • Soporte FTP • Depuración Remota • Descripción de funciones en la terminación de código • Búsqueda de ficheros • Impresión • Sangrado de código
Número 10
29
EVALUACIÓN • Zend Studio 4
que sea una interfaz de bases de datos. En modo base de datos, se puede usar la parte inferior del interfaz para introducir comandos SQL (Figura 5). Esta característica permite a los desarrolladores verificar las consultas SQL antes de añadirlas al código PHP.
Figura 3: El cuadro de diálogo de configuración del servidor FTP permite configurar una conexión a un servidor FTP.
Zend Studio 4. Pulsando en SQL de la ventana de gestión de ficheros (arriba a la izquierda) hace que se muestre una lista de servidores configurados. Desde luego, la lista estará vacía si se acaba de instalar el programa. Para añadir elementos a la lista, hay que hacer clic con el botón derecho del ratón en la ventana y seleccionar “Add Server” para abrir la ventana que se muestra en la figura 4. En esto momentos Zend Studio soporta acceso directo a los siguientes servidores de bases de datos: Oracle, SQLite, Microsoft SQL Server, PostgreSQL y MySQL. Después de introducir las credenciales de acceso, se puede acceder inmediatamente al servidor. Haciendo clic con el botón derecho del ratón abre una conexión y proporciona al entorno de desarrollo acceso a cualquier base de datos, tablas y registros para los que el usuario actual tenga permiso de acceso. Los desarrolladores pueden ver la estructura de las tablas o su contenido en la ventana que normalmente contiene el editor. Zend Studio no soporta la manipulación directa de los registros, ya que no se pretende
30
Número 10
código. Esto no está restringido al fichero que actualmente se esté editando, sino que también incluye cualquier otro fichero que se haya abierto al mismo tiempo. (La terminación de código puede ocasionar confusión cuando Zend ofrece una clase de un fichero abierto que no pertenece al proyecto actual). En Producción Como PHP no soporta la declaración Aunque Zend Studio permite la edición de los tipos de las variables, Zend Studio individual de ficheros, los desarrolladono tiene forma de saber a qué tipo de res prefieren normalmente trabajar con dato pertenece un parámetro que se le proyectos. Cuando se añade un proyecto pase a una función. Sin embargo, los nuevo seleccionando New Project en el desarrolladores pueden añadir bloques menú Project, aparecerá un asistente que de documentación (docblocks) para prosolicitará el nombre del proyecto nuevo, porcionar esta información para sus prola ruta donde almacenar los ficheros del pias funciones, clases y métodos. Para proyecto y las preferencias de depuraello, hay que pulsar el botón derecho del ción para el proyecto. Después de crear ratón en una función del Inspector de un proyecto se muestra Proyectos y seleccionar en la parte de la Add description para izquierda, en el inspecinsertar un docblock tor de proyectos. Ahora vacío. se puede hacer clic con La primera línea el botón derecho del debería ser una breve ratón o usar el menú descripción de la funde ficheros para añación, que aparecerá en dirle ficheros. la ayuda de la terminaZend Studio tiene ción automática de varias características código. Los Docblocks que facilitan la edición son extensibles por de código. Además del medio de etiquetas, Figura 4: Configurando un servidor coloreado de la sintapermitiendo describir SQL. xis, que actualmente las propiedades de una soporta hasta el más sencillo de los edifunción o clase. Las etiquetas siempre tores, la terminación automática del empiezan por @. Una etiqueta tiene que código es probablemente una de las ser precedida por un asterisco (*) y un herramientas más útiles. Mientras se está espacio en blanco. Por ejemplo, una tecleando, Zend Studio muestra una lista entrada como @return: describiría el de funciones, variables u otros elementipo de retorno de una función. La etitos que empiezan con las letras que se queta @param: se refiere a un parámehan tecleado. tro. Se necesita una entrada separada Considerando el número de comandos para cada parámetro, seguido del nomPHP, el hecho de que el sistema muestre bre de la variable y el tipo de dato. Se un breve resumen de lo que cada funpuede encontrar una lista completa de ción realiza es, verdaderamente cómodo. etiquetas en [1]. Una lista de parámetros aparece cuando Esta solución puede parecer algo comuna función se haya identificado correcplicada al principio, pero tiene sentido, tamente. ya que los docblocks pueden ser realZend Studio añade mente útiles cuando se usan junto con dinámicamente programas de generación automática de cualquier documentación. Para ayudar al desarrofunción, llador con ello, Zend Studio tiene el variable y PHPDocumentor en el menú de herraclase que se mientas (Figura 6). El documentador, defina en la como su propio nombre indica, crea lista de terdocumentación formateada en HTML, minación PDF, CHM o XML a partir de un fichero automática de de código fuente.
WWW.LINUX- MAGAZINE.ES
Zend Studio 4 • EVALUACIÓN
Figura 5: Accediendo al servidor MySQL
El análisis automático de la sintaxis es otra característica potente. Zend Studio comprueba la entrada automáticamente en busca de errores sintácticos mientras se está tecleando. Si se descubre un error, subraya la línea de código que lo contiene en rojo y coloca una marca roja en el margen para indicar el punto. Entonces se puede colocar el ratón encima de la línea o sobre el código que contiene el error y el IDE mostrará un mensaje de error. Zend Studio también proporciona fragmentos de código, que son fragmentos de código externo proporcionados por la comunidad de código abierto que han sido probados y cuya funcionalidad está demostrada. Estos fragmentos de código son otra característica útil que se ha añadido a Zend Studio 4 que puede ayudar al desarrollador a reinventar la rueda. La biblioteca contiene unos 300 fragmentos y también incluye funciones de actualización que permiten importar nuevos fragmentos de código. Desde luego, no hay quien escriba código sin cometer algún error; es bastante importante ser capaz de encontrar tantos errores como sea posible. De nuevo, Zend Studio proporciona una amplia gama de opciones. El analizador de código es una característica interesante. Aunque otros IDEs tienen analizadores de código, el analizador de Zend funciona de forma diferente. Este ayuda a encontrar irregularidades, que pueden ser o no errores. Analiza el código y le comunica al desarrollador los posibles errores que encuentra. El analizador recolectará las líneas de código, que aunque sintácticamente
sean correctas, su estilo de programación sea pobre. Se puede invocar el analizador de código bien presionando la secuencia de teclas [Ctrl]+[Alt]+[A], bien accediendo a través del menú herramientas.
Depuración
pueden añadir o quitar simplemente haciendo clic sobre el número de la línea de código. Después de establecer los punto de rupturas, presionando [F5] o seleccionando Run en el menú debug hará que el código se ejecute. Cuando el intérprete llegue a la línea que contenga el punto de ruptura , interrumpirá la ejecución del programa justo antes de ejecutar dicha línea, permitiendo al desarrollador inspeccionar el estado del sistema más detenidamente. Como se mencionó previamente, la parte derecha de la pantalla muestra el script de salida. Se puede inspeccionar el estado del script actual en esta zona. Este panel muestra las variables actuales,
Por supuesto, Zend Studio ayuda a los desarrolladores a localizar errores ocultos. La herramienta de depuración permite interrumpir la ejecución de código y comprobar lo que está sucediendo con las variables críticas. Zend Studio soporta tanto la depuración local como remota. La depuración local significa que el código se esté ejecutando directamente en el entorno Zend Studio con la salida apareciendo en el lado derecho de la ventana de Zend Studio. Como a menudo es imposible comprobar localmente todo, también soporta la depuración desde el servidor. Ejecutar todo el programa entero y comprobar los resultados no es una forma útil de depuración. Esto es por lo que Zend Studio permite establecer múltiples punto de rupFigura 6: El PHPDocumentor permite crear la documentación de los ficheturas. Estos se ros de código fuente.
WWW.LINUX- MAGAZINE.ES
Número 10
31
EVALUACIÓN • Zend Studio 4
directamente en el servidor y la sesión se controla remotamente por Zend Studio. Para soportar la depuración remota, hay que instalar el servidor de Zend Studio, que se incluye con la licencia del IDE. Si no se instala el servidor mienFigura 7: El perfil de Zend Studio analiza el uso de la CPU y ayuda a localitras se esté zar los cuellos de botella. instalando Zend Studio, incluyendo tanto el tipo de dato como su se puede descargar desde www.zend. contenido. El contenido de los arrays y de com. los objetos se muestra de la misma forma. El servidor no es una aplicación indePor defecto, tan sólo se pueden ver las pendiente, sino que necesita estar intevariables locales (es decir, las variables grado con un servidor web Apache exisvisibles en el contexto actual). Sin embartente. Se puede usar tanto el servidor go, se puede hacer clic en el signo + Apache que va incluido con el producto junto a GLOBALS para ver las variables o bien usar un servidor Apache instalado superglobales, incluyendo su contenido. anteriormente. En este último caso, el Las llamadas a la pila también son intereprograma de instalación intentará localisantes de observar; tan sólo hay que pulzar la ruta a los ficheros de configurasar en Stack para mostrarlas. En la pila es ción, como httpd.conf y php.ini y si no dónde el intérprete gestiona las llamadas logra localizarlo, solicitará al usuario la a las funciones. Esto permite ver la pila ruta a los mismos. con los nombres de las funciones que el Además, el programa de instalación sistema ha llamado hasta el momento. La necesita saber qué clientes tienen permitifunción al fondo de la pila será siempre do acceder al servidor. El servidor Zend no main(), es decir, el cuerpo del programa. debe ser instalado en servidores web en Esta vista proporciona al desarrollador la entornos de producción, ya que la rutina ventaja de poder inspeccionar las variade instalación reemplaza el fichero índice bles dentro de las funciones en el interior en el directorio DocumentRoot. Ahora, de la pila, que podrían ser sobrescritas después de reiniciar el servidor, cada vez por otras llamadas. que se llame a la página inicial del servidor desde el navegador, automáticamente Depuración Remota será reenviado a la página del servidor Zend Studio. La página proporciona un Tras llegar a un punto de ruptura, se resumen de la configuración y permite puede avanzar paso a paso por las líneas modificar la configuración de PHP. El prode código siguientes o bien ejecutar el grama de instalación crea una copia de programa hasta el siguiente punto de seguridad de los ficheros modificados. ruptura. La solución anterior es útil si se Las características realmente interequieren inspeccionar los cambios de los santes para el control del servidor Zend valores individuales conforme el código son parte de Zend Studio. Se puede habiprogresa. Presionando [F11] en el menú litar la depuración basada en el servidor debug le dice al intérprete que avance a en Preferences | Tools | Debug. la línea siguiente. Si se selecciona Run el Después de hacerlo, habría que comintérprete ejecutará el código hasta el probar la conexión al servidor selecciosiguiente punto de ruptura. La depuranando Check debug server connection. ción remota es una forma más avanzada Tras pasar la prueba satisfactoriamente, de depuración donde el código se ejecuta
32
Número 10
WWW.LINUX- MAGAZINE.ES
se puede usar la función Debug URL o presionar la tecla de atajo [F8]. Para probar una página web, hay que introducir la URL de la misma en la ventana que aparece. Tras pulsar OK la sesión empieza; se abre el navegador y permite el control remoto de la sesión. Zend Studio obtiene el código fuente directamente desde el servidor, así que no hay necesidad de crear una copia local. Al contrario de la depuración local, el depurador remoto se detiene antes de la primera línea de código, eliminando la necesidad de establecer un punto de ruptura. Aparte de eso, la funcionalidad es como la prestada por la depuración local. La salida se muestra tanto en el entorno Zend Studio como en el navegador. En algunos casos, la salida se almacena primero en un buffer de salida y no se envía al navegador. En ese caso, si se añade flush() al código fuente, se enviará el contenido del búfer de salida al navegador.
Más Potencia Puede ser que se esté familiarizado con los problemas de respuesta lenta de las aplicaciones web nuevas. Es bastante difícil localizar la fuente del cuello de botella. Zend Studio proporciona un perfil en el menú de herramientas. El perfil analiza el programa en ejecución en el servidor de depuración y muestra el tiempo requerido por la CPU para procesar un fichero o una función (Figura 7).
Conclusiones Aunque hay formas más baratas de programar en PHP, ni Eclipse, ni Emacs, ni tampoco Quanta +, contienen un depurador. La ayuda sensible al contexto de Zend es más madura que el de las otras alternativas. Los desarrolladores que trabajen en grandes proyectos podrían echar en falta el soporte para versiones y el cliente de CVS no es aún perfecto, pero Zend Studio 4 viene con muchas características que lo compensan. Por mucho que se diga, vale la pena el precio que hay que pagar por Zend ■ Studio.
RECURSOS [1] Manual del PHPDocumentor: http:// www.phpdoc.org [2] Zend: http://www.zend.com
Xfce 4.2 • EVALUACIÓN
Instalar y explorar Xfce 4.2
UNA NUEVA ESTRELLA Si estás preparado para vivir sin KDE o Gnome, tal vez sea hora de probar Xfce, un eficiente, ligero y vistoso escritorio con una enorme colección de herramientas. POR MANFRED SHULENBURG
E
n enero de este año, el proyecto Xfce publicó la versión 4.2 del escritorio Xfce (véase Figura 1). Como otros escritorios alternativos, Xfce es más rápido y más ligero con los recursos que sistemas más extendidos como Gnome y KDE. Pero Xfce es mucho más avanzado que la mayoría de sus alternativas. El escritorio Xfce 4.2, que es compatible con las especificaciones Freedesktop, proporciona un buen número de utilidades de administración, un entorno de desarrollo para compilar aplicaciones, y soporte para más de 40 lenguajes de programación. Xfce 4.2 nos ofrece una mezcla única de características y rendimiento que lo hace una alternativa ideal para muchos usuarios que quieran bajar un peldaño desde Gnome o KDE.
Instalar Xfce 4 Al igual que Gnome, Xfce está basado en el GIMP Multi Platform Toolkit.
Obviamente GTK+ será uno de los paquetes que necesitaremos a la hora de instalar Xfce 4. Además de GTK+, necesitaremos pkg-pkgconfig, libxml2, libdbh, y los correspondientes paquetes devel, dbh [1] y a2ps [2]. La página web de Xfce [3] tiene información detallada de la función de todos estos paquetes necesarios. Algunas distribuciones, incluidas Suse Linux y Fedora Core 3, tienen sus propios paquetes Xfce que cumplen todas las dependencias. Si usamos Suse podemos ejecutar YaST para instalar Xfce. Si usamos Fedora Core 3 podemos ejecutar la herramienta de administración de paquetes seleccionando System settings | Add/Remove applications en el menú principal. De esta manera accedemos a un paquete Xfce 4 listo para instalar con un clic. Alternativamente, podemos movernos al directorio con los paquetes de Fedora
WWW.LINUX- MAGAZINE.ES
desde la línea de comandos (por ejemplo: /media/cdrom/Fedora/RPMS/) y desde allí tecleamos system-install-packages xfce4*. Si optamos por este método, tendremos que instalar el administrador de ficheros Xffm de manera manual como siguiente paso. Para todas las demás distribuciones, o si queremos instalar la ultimísima versión de Xfce, tendremos que instalar los binarios de Xfce o los paquetes con el código fuente. Los usuarios de Ubuntu Linux pueden ejecutar la herramienta de administración de paquetes basada en interfaz gráfica Synaptic, o bien teclear apt-get install xfce4 para proceder a la instalación. Necesitaremos una conexión a Internet en ambos casos. Debemos asegurarnos que hemos seleccionado la fuente de paquetes Universe. Una vez finalizada la instalación, podemos teclear startxfce4 para ejecutar Xfce. Mandrake Linux tiene también paquetes
Número 10
33
EVALUACIÓN • Xfce 4.2
listos para ejecutar en [4]. Tecleando la siguiente orden: urpmi.addmedia eslrahc U http://www.eslrahc.com/10.1/U with hdlist.cz
para añadir la URL a las fuentes de instalación existentes. Ejecutamos ahora Rpmdrake, buscamos Xfce y seleccionamos el paquete xfce-4.2.1. Rpmdrake resuelve automáticamente las dependencias. Nótese que, por defecto, Rpmdrake no instala la enorme colección de herramientas disponibles para Xfce 4.2.1.
Instalación con Asistente Una de las características especiales de Xfce es que el entorno de escritorio tiene su propio instalador con interfaz gráfica (véase Figura 2). Si queremos usar este instalador, debemos descargar el archivo xfce4-4.2.1.1-installer.bin que ocupa 15Mbytes desde [5] y darle permiso de ejecución tecleando chmod +x xfce4-4.2.1.1-installer.bin. El Xfce Installer comprueba el software instalado, descarga cualquier programa necesario desde Internet e instala un entorno completo de Xfce. El programa nos avisa antes de iniciarse si no ha podido resolver las dependencias necesarias.
Bugs en Soporte para Debugging El siguiente paso es seleccionar los componentes que vamos a instalar. Será mejor evitar en este paso la opción Debugging Support. Si habilitamos esta opción, aparecerá un mensaje de error al terminar la instalación. De acuerdo con el desarrollador de Xfce, este proble-
34
Número 10
Figura 1: Xfce ofrece una atractiva interfaz de usuario con muchas características avanzadas.
ma está causado por un bug en el programa xf-calendar que impide instalar el soporte para debugging. Incluso si hemos deshabilitado el soporte para debugging, aparecerá un mensaje de error al final del proceso de instalación: Software Uninstaller: Registering failed. De nuevo, esto se debe a un bug, pero afortunadamente no afecta propiamente a Xfce. El entorno configurado desde este instalador con interfaz gráfica funciona sin problemas.
Instalación desde las Fuentes
Instalaremos a2ps en primer lugar, si fuese necesario. Luego descomprimimos el archivo xfce-4.2.1.1-src.tar.bz2 tecleando tar xvfj xfce-4.2.1.1-src.tar.bz2. El directorio creado en este paso, xfce-4.2.1.1, contiene un buen número de archivos tar.gz que contienen el código del programa. Podemos teclear tar xfvz filename.tar.gz para descomprimir estos archivos. Ahora nos vamos a los siguientes directorios: dbh-1.0.22, gtk-xfce-engine-2.2.6 y libxfce4util-4.2.1. En cada uno de estos tres directorios, debemos teclear ./configure, make, y make install. Necesitaremos permisos de administra-
El conjunto completo de módulos de Xfce está disponible es un archivo tar en Source-Forge [6]. Para poder instalar los módulos Xfce, necesitaremos descargar los archivos xfce-4.2.1.1-src.tar.bz2 y a2ps.tar.gz, aunque la mayoría de las distribuciones ya tendrán esta última instalada. Si al teclear which a2ps nos aparece la ruta del programa, sólo necesitaremos Figura 2: El asistente de instalación de Os-Cillation.com sirve descargar el paquete como instalador gráfico de Xfce. de Xfce.
WWW.LINUX- MAGAZINE.ES
Xfce 4.2 • EVALUACIÓN
dor para el paso make install. Después de finalizar la instalación de libxfce4util, pasamos a administrador para lanzar el programa ldconfig y fijar la ruta de Pkgconfig:
cionalidades básicas a Xfce y son comparables con las librerías DLL usadas por Windows. Por ejemplo, la librería libxfce4mcs permite export PKG_CONFIG_PATH=/usr/ U controlar varias confiFigura 3: El panel de Xfce proporciona a los usuarios un pequeño local/lib/pkgconfig guraciones, aunque la menú y un buen número de accesos directos. mayoría de las aplicaContinuamos con la instalación en los ciones no hacen uso de ella. Libxfce4util damos nuestros archivos en /data, puede directorios libxfcegui4, libxfce4mcs, y contiene un sistema de ayuda, sin interque queramos que xffm apunte a este xfce-mcsmanager. Podemos añadir más faz gráfica. Libxfcegui4 se encarga de la directorio al ejecutarlo. Para ello, añadimódulos en el orden que queramos. Una interacción con el sistema X Window. mos un nuevo launcher y tecleamos la vez terminemos de añadir módulos, URL de /data en Command:. Cada vez El Panel tecleamos ldconfig para asegurarnos de que pulsemos en la entrada del panel, el que Xfce encuentre sus librerías de sisteEL intuitivo panel de Xfce 4 tiene iconos administrador de archivos xffm se inicia ma cuando se inicie. para terminal, administrador de ficheros, y se sitúa directamente en el directorio Si instalamos Xfce sin fijar ningún navegador web, email, reproductor mul/data. Para añadir un nuevo laucher al parámetro, el entorno de escritorio se timedia, escritorios, administrador de panel, pulsamos el panel con el botón situará en /usr/local/. Si preferimos insconfiguración, impresoras (con arrastrar derecho del ratón y seleccionamos Add talar Xfce en /usr, tendremos que especiy soltar), archivos de ayuda, bloqueador new object | Starter. ficar --prefix=/usr cuando ejecutemos de pantalla, cierre de sesión y apagado El Gestor de Configuración ./configure. Si hacemos esto no tendrede sistema (véase Figura 3). Podemos El Settings Manager es un gestor de conmos que exportar PKG_CONFIG_PATH=. configurar cualquier icono pulsando con figuración consistente en un panel que el botón derecho sobre él. Componentes de Xfce 4 permite establecer la apariencia y comPodemos usar los botones con flechas Xfce 4.2 incluye un buen número de apliportamiento de varios applets de manera a la derecha del administrador de fichecaciones (véase Tabla 1), una colección adecuada (véase Figura 4). ros y a la derecha del administrador de de scripts (véase Tabla 2) y un sistema Además de varias opciones relativas impresoras para añadir más entradas a la de librerías. Esta última proporciona funal aspecto, este Settings Manager tiene barra. Por ejemplo, si usualmente guartambién herramientas para la configuración de sonido, impresora y acceso al Tabla 1: Componentes principales de Xfce 4.2 calendario. Algunas de las configuraComponente Función ciones controladas por este gestor de xfwm4 El gestor de ventanas y corazón del entorno de escritorio Xfce 4.2. configuración son bastante rudimentaxfce4-panel Una intuitiva barra que permite añadir fácilmente menús y botones de acceso. rias (por ejemplo, no proporciona una xfce4-session El administrador de sesiones se asegura de que encontraremos el escritorio tal opción para probar el sonido al confiy como lo dejamos la última vez. gurar la tarjeta de sonido), pero al xfce-mcs-manager El administrador de configuración. menos el programa es fácil de usar e xfce-mcs-plugins Plugins para el administrador de configuración que no son estrictamente necesarios, pero facilitan las cosas mucho con el ratón, teclado y la pantalla. intuitivo. xffm
xfce4-appfinder xfce4-icon-theme xfce-utils xfdesktop
xfprint xfwm4-themes gtk-xfce-engine-2
xf-calendar
Xffm es un veloz administrador de archivos. El hecho de integrar un explora dor de redes Samba es una característica útil para usuarios conectados en red y, digamos, LinVecinos. El Application Finder de Xfce busca programas instalados procesando los archivos .desktop, de la misma manera que KDE y GNOME. El tema para los iconos estándar. Soporta iconos PNG y SVG de momento. El paquete de accesorios incluye varias herramientas de escritorio, scripts y documentación de usuario para su navegación. El gestor de fondo de escritorio xfdesktop controla la configuración del fondo y proporciona un menú de administrador al pulsar el botón derecho del ratón. El menú de administrador merece una mención especial. Podemos usarlo para adaptar el menú de escritorio o de administrador a nuestras necesidades. El editor de menús es también la interfaz que usamos para editar el archivo ~/.config/xfce4/desktop/menu.xml. Xfprint es un gestor de impresión independiente que soporta CUPS, BSD-LPR e impresión a achivo. Temas ornamentales para el gestor de ventanas xfwm4. El gtk-xfce-engine-2 permite a los usuarios unas ventanas más vistosas con GTK2. No es estrictamente necesario pero ofrece a los usuarios mayor placer visual para el esritorio. Xf-calendar es un sencillo calendario con funciones de recordatorio.
WWW.LINUX- MAGAZINE.ES
El Administrador de Archivos Xffm El veloz administrador de archivos Xffm usa un diseño completamente diferente al de sus competidores, Konqueror y Nautilus. Dicho esto, su funcionamiento es fácil de comprender y debería hacer la vida más fácil a sus usuarios que cambian de Windows a Linux. Xffm comprende ocho componentes, que pueden iniciarse individualmente a través del menú principal. *Xftree – Xftree es propiamente el administrador de archivos. Muestra los archivos locales y soporta navegación por los archivos. El comando para que xffm muestre los archivos locales es xfree4.
Número 10
35
EVALUACIÓN • Xfce 4.2
de montaje. Suponiendo que tenemos los privilegios adecuados, también podemos montar y desmontar unidades. *Xftrash – Es la papelera de Xfce, que es diferente a cualquiera de KDE o GNOME. Si arrastramos un archivo de un directorio a la papelera, Xfce automáticamente crea una carpeta oculta en ese directorio llamada .wastebasket y mueve el fichero allí. Esto nos permite investigar el contenido de la papelera para cada directorio de manera individual tecleando xftrash4.
Conclusiones y Mapa de Ruta Xfce 4 es un entorno de escritorio estable y muy rápido. No tiene tantas características como los pesos pesados, KDE y GNOME. Sin embargo es exceFigura 4: El Settings Manager nos permite acceder a los componentes y configuraciones de Xfce. lente para ordenadores antiguos con recursos de memoria limita*Xfsamba – Es el cliente bién etiqueta carpetas en red. Podemos dos o usuarios que valoran un entorno SMB de Xfce. El navegador iniciar este componente tecleando xfbode escritorio veloz. de redes permite buscar ok4. Trabajar con Xfce es un proceso intuitien ordenadores *Xfglob – Muestra los resultados de vo, que debería facilitar la vida a los Windows en red y acceuna búsqueda de archivos. Podemos usuarios noveles o con experiencia sólo der a directorios remoabrir o ejecutar programas directamente bajo Windows. Para hacer las cosas aún tos. Para iniciar este desde aquí. Con el comando xfglob4 más fáciles, está previsto incorporar componente como abrimos el cuadro de diálogo para bússoporte para iconos de escritorio. Hay un programa indequedas. una detallada lista de mejoras por despendiente, teclea*Xffrequent – Proporciona una lista arrollar en [7]. Mientras tanto, podemos mos xfsamba4. de archivos y directorios visitados freinstalar la herramienta Rox Filer [8] que *Xfbook – cuentemente con Xffm, definiéndose nos posibilita tener iconos de escritorio Permite a los ■ como frecuente el umbral en 13 visitas. bajo Xfce. usuarios defiSe puede cambiar esta cifra en el menú nir marcadoprincipal si se desea. El comando para RECURSOS res para iniciarlo como herramienta independien[1] Librería para crear árboles multididirectorios te es xfapps4. mensionales binarios en disco: http:// virtuales *Xfrecent – Muestra los últimos archisourceforge.net/projects/dbh/ y archivos accedidos a través de Xffm. Se inicia [2] Conversor PostScript: http://ftp.gnu. vos. Xfbook tecleando xfrecent4. org/gnu/a2ps/ no sólo admi*Xffstab – El componente Fstab, que [3] Página de Xfce: http://www.xfce.org/ nistra marcadores podemos lanzar tecleando xffstab4, locales, sino que tammuestra los dispositivos físicos y puntos [4] Paquetes para Mandrake: http://www. eslrahc.com/
Tabla 2: Principales Scripts startxfce4 xfhelp4 xflock4 xfmountdev4 xfterm4
36
Script de arranque del gestor de ventanas Xfce 4 Abre la documentación de Xfce 4 instalada localmente en nuestro navegador Bloquea la pantalla usando el Xscreensaver si está disponible. Monta dispositivos en el punto de montaje especificado e inicia xffm desde ese allí. Al cerrar xffm, se desmonta el dispositivo. Arranca el terminal definido por la variable $TERMCMD. Si la variable no está fijada, el script inicia xterm por defecto.
Número 10
WWW.LINUX- MAGAZINE.ES
[5] Instalador de Xfce: http://www. os-cillation.com/article.php?sid=42 [6] Fuentes de Xfce: http://sourceforge. net/projects/xfce/ [7] Nuevas características: http://www. myoo.de/xfce/index.php/4.4_TODO [8] Rox Filer: http://rox.sourceforge.net/ phpwiki/index.php/ROX-Filer
Ripping Audio Streams • PRÁCTICO
Grabando Audio desde Internet
¡TÓCALA DE NUEVO!
Las emisoras de radio ya no sólo se limitan a la FM, sino que hay muchas en Internet. Pero ¿cómo podemos grabar una emisión de nuestro programa favorito desde la web? POR KRISTIAN KISSLING
I
nternet ha dado a luz una nueva generación de emisoras de radio que emplean la retransmisión por la web denominada webcasting o streaming, para llevar a los usuarios sus programaciones usando múltiples protocolos. La innumerable cantidad de emisoras de radio de shoutcast.com usan el formato MP3 para sus retransmisiones, pero las emisoras de radio tradicionales prefieren usar el protocolo RTSP o PNM, los de RealPlayer o el protocolo MMS, el de MPlayer. Desafortunadamente, la grabación de datos desde una fuente de entrada de audio implica algo de trabajo extra.
Streams Las emisoras de radio que usan el formato MP3 son las más fáciles de grabar. Streamriper [1] soporta la grabación de datos MP3, como los de shoutcast.com o icecast.org. El GUI Streamtuner [2] soporta la grabación y reproducción simultánea permitiendo a los usuarios manipular algunos parámetros (Figura 1). Ambos programas pueden ser instalados utilizando las aplicaciones de gestión de paquetes que vienen con la mayoría de las distribuciones. Los usuarios de Fedora tendrán que instalar el paquete xmms-mp3 [3]. Hay que tener
en cuenta que tanto Fedora Core 3 como Suse 9.3 ya no contendrán por defecto los códecs para MP3. Después de instalar Streamtuner, habrá que ejecutar el programa a través del menú del botón Inicio, pero se puede abrir una ventana de terminal y teclear streamtuner si lo prefiere. Esto hace que se abra la interfaz gráfica con varias solapas y entradas. Si se selecciona la solapa SHOUTcast se muestra una lista de las emisoras de radio disponibles. Si se hace doble clic sobre una de ellas se ejecuta el reproductor de MP3, como Xmms, para empezar la reproducción.
Para grabar una emisora, tan sólo hay que pulsar el botón Record de la barra de herramientas. Entonces se abre una consola que registra todo el proceso. Las pistas se almacenan por defecto en el directorio home del usuario.
A lo Grande Si lo que se desea es grabar las emisiones en formato RealAudio, entonces se complica el proceso. RealPlayer que está disponible para Linux [4], puede reproducir estos formatos pero no grabarlos. Se necesita Vsound o Sox [5] para grabar RealAudio.
Cuadro 1: Encontrando la Dirección de la Emisora Es fácil identificar la dirección de la emisora si está incluida directamente en la dirección web. Haga clic con el botón derecho en el enlace que muestra el stream y (en Mozilla) seleccione Save link target as. Puede abrir el fichero en un editor de texto, como kate, para ver la dirección del stream. El procedimiento para identificar la dirección es más complicado si la estación de radio incluye el reproductor en una ventana emergente. En este caso, necesita echarle un vistazo al código fuente de esta ventana para obtener la dirección. Quizás necesite aislar el marco con el botón de play de la
WWW.LINUX- MAGAZINE.ES
ventana emergente. Para hacerlo en Mozilla, haga clic con el botón derecho en cualquier parte cerca del botón de play y seleccione Show only this frame. Ahora puede buscar en el código HTML cosas como lsc.redirect, embed src, ra, rm o smil. A continuación, introduzca wget -O address.txt http://foundaddress.ra para analizar la dirección y almacenarla en el fichero address.txt. Por último teclee cat address.txt para leer el fichero de direcciones y descubrir las direcciones, que normalmente comenzarán con RTSP:// o MMS://.
Número 10
37
PRÁCTICO • Ripping Audio Streams
Vsound captura la salida de Ahora vienen los tres pasos audio de cualquier programa anteriores. Primero, obtener la de sonido externo e invoca a dirección de la emisión, tal y Sox para almacenarlo en forcomo se describe en el cuadro mato .wav. Además de estos titulado “Encontrando la direcdos programas se necesita ción de la emisora”. Segundo, Lame [6], para convertir los convertir el fichero a formato ficheros wav a MP3. wav llamándolo Antes de empezar la instalaaudiodump.wav. El comando ción, hay que asegurarse de mplayer que los paquetes no estén ya 'mms://laemisora.wma' -ao instalados. Esto se hace teclepcm pasa el flujo de audio al ando which sox. si la respuesdispositivo de salida de audio, ta no contiene una ruta como que almacenará los datos /usr/bin/sox, entonces habrá como audiodump.wav. No se que ejecutar el gestor de reproducirá sonido mientras se paquetes y empezar la instalaFigura 1: Streamtuner ofrece grabación MP3 con un entorno muy graba. Finalmente, hay que ción de Sox y Vsound. Luego fácil de usar. convertir el fichero wav a MP3 se instala Lame. Se puede desusando el siguiente comando: cargar RealPlayer como un paquete RPM au a formato wav. Hay que asegurarse de lame audiodump.wav o como un fichero binario desde que se dispone de espacio suficiente en myradiostream.mp3 (Figura 2). Si se preInternet. RealPlayer supone que el entorel disco duro para poder almacenarlo. El fiere trocear el fichero continuo de audio no de ejecución de Java (JRE) está distercer paso es convertir el fichero wav a en varias pistas, se puede usar una ■ ponible. Para averiguarlo tan sólo hay MP3. Tecleando lame test.wav radiostreherramienta como Audacity [10]. que teclear which java. Si no aparece, am.mp3, se realiza la conversión. habrá que instalarlo primero. Para instaRECURSOS Ripéalo… lar el fichero binario, hay que entrar como root y luego teclear el comando: Por último, vamos a ver el protocolo [1] Descarga del código fuente de sh ./RealPlayer10GOLD.bin. MMS. MMS son las siglas de Microsoft Streamripper: http://sourceforge.net/ El proceso de grabación comprende Media Services. Los ficheros MMS los project/showfiles. php?group_id=6172 tres pasos. Primero, hay que averiguar la confecciona el Windows Media Player. [2] La página de Streamtuner con el códiURL de la emisora (véase el cuadro MPlayer puede leer este formato, pero go fuente y los RPMs: http://www. “Encontrando la Dirección de la hay que instalarlo manualmente, ya que nongnu.org/streamtuner/ Emisora”). Segundo, abrir una ventana casi ninguna distribución incluye [3] El códec MP3 para Fedora Core 3: de terminal y teclear el siguiente comanMPlayer. Los usuarios de Suse pueden ir http://dag.wieers.com/packages/ do: a [7] para descargar los paquetes requexmms/xmms-mp3-1.2.10-11.1.1.fc3.rf. ridos: Lame, el codec Win32 y mplayer. i386.rpm vsound -d -t -f U Los usuarios con Fedora, Mandrake o [4] RealPlayer para Linux: http://www. test.wav realplay U Debian deben compilar la aplicación real.com/linux/ rtsp://stream_address desde los archivos fuente. ?rppr=rnwk&src=040104freeplayer La compilación de MPlayer desde los [5] Ficheros fuentes para Vsound y Sox: Este comando ejecuta RealPlayer y ficheros fuente lleva menos tiempo que http://prdownloads.sourceforge.net/ comienza a reproducir la emisión desde intentar resolver todas las dependencias sox/sox-12.17.7.tar.gz?download la dirección rtsp://stream_address mienque se producen al instalarlo desde el http:// www. zorg. org/ vsound/ tras que Vsound lo graba. La opción -f paquete. Primero se entra como root y se vsound-0. 6. tar. gz redirige el audio a un fichero denominacrea un directorio, como se sigue: mkdir [6] Código fuente de Lame: http:// lame. do test.wav. La opción -d se asegura de /usr/local/lib/codecs. Se establecen los sourceforge. net/ que se escucha mientras se graba. Hay permisos con: chmod 664 [7] Ficheros Mplayer para Suse: http:// que recordar que hay que cerrar el pro/usr/local/lib/codecs. Tras descargar el packman.links2linux.org/ grama RealPlayer manualmente para paquete essential codec desde la página ?action=index empezar a convertir el fichero temporal de MPlayer en [8] y descomprimirlo, hay [8] Sitio web de MPlayer con los fuentes: que copiar el contenido http://www.mplayerhq.hu/homepage/ del paquete en el direcdesign7/dload.html torio /codecs, luego hay [9] Sitio web Cutmp3 con los RPMs: que teclear ./configure, http://www.puchalla-online.de/ make y luego, como cutmp3.html root, make install. Este [10] Sitio web de Audacity: http:// paso sitúa el ejecutable audacity.sourceforge.net/ Figura 2: Lame convierte el fichero wav a MP3. en /usr/local/bin.
38
Número 10
WWW.LINUX- MAGAZINE.ES
Tellico • PRÁCTICO
Base de datos Tellico
PIEZA DE COLECCIONISTA Linux nos ofrece una fantástica colección de servidores de bases de datos, pero muchos usuarios únicamente buscan una sencilla aplicación de base de datos. Tellico viene a cubrir este nicho. POR FRANK WIEDUWILT
T
ellico [1], antes conocido como Bookcase, se diseñó como una base de datos para libros. En la actualidad el programa no sólo ofrece a sus usuarios una estantería virtual sino que ayuda a organizar colecciones de videos, cómics, monedas y sellos. Incluso podremos administrar nuestra bodega de vinos con un poco de ayuda de Tellico. Desde hace poco el programa ha introducido una funcionalidad para definir colecciones por parte del usuario, lo que le proporciona una útil herramienta para pequeñas colecciones. La única restricción es que no soporta bases de datos relacionales. Tellico guarda la información en archivos XML. Además de su propio formato, el programa admite un buen número de formatos externos, facilitando la labor de migrar las bases de datos existentes. La aplicación se refiere a las bases de datos como colecciones. La colección puede contener cuantos registros se quieran, y los registros, cuantos campos se deseen, igualmente.
En su Disco Instalar Tellico es sorprendentemente fácil. La página web del pro-
yecto alberga paquetes listos para usar para Fedora, Suse, Slackware y Mandriva. Si optamos por compilar el programa desde su código fuente, necesitaremos el paquete con el código, y al menos KDE 3.1, la librería Qt versión 3.1, libxml2 y libxslt y los correspondientes paquetes de desarrollo. Seguimos los pasos habituales para compilar e instalar el programa: ./configure, make y make install.
tamente aquí introduciendo los registros de los libros (véase Figura 1). El árbol de la izquierda nos muestra los registros, que se organizan por autor. En la parte derecha, Tellico ofrece a los usuarios una lista de libros ordenada por título, con un resumen del registro seleccionado en una ficha en la parte inferior derecha. Para ayudarnos a llevar la cuenta, podemos organizar las entradas de la Arrancamos vista en árbol en función de diferentes La primera vez que ejecutamos Tellico, criterios. En la ventana de listado se da el programa nos muestra una colección la opción de definir los campos a nuestro de libros vacía. Podemos empezar direcantojo. Esto ahorra espacio y nos permite apreciar los detalles principales de un sólo vistazo. Para cambiar los campos de la ventana listado, hacemos clic con el botón derecho en la cabecera de una columna y usamos el menú desplegable para definir qué columnas queremos que se muestren. Para cambiar el agrupamiento de los registros, hacemos clic con el botón derecho sobre el título de una colección y seleccionamos Group selction|Name of group en el menú. Podemos simplemente Figura 1: Tellico crea automáticamente una base de datos filtrarlo por grupo seleccionando de biblioteca la primera vez que se ejecuta. Filter by group en este menú.
WWW.LINUX- MAGAZINE.ES
Número 10
39
PRÁCTICO • Tellico
donde podemos definir los campos (véase Figura 4). Pulsamos New para crear un nuevo campo. Tecleamos entonces el nombre del campo en el cuadro de texto Title y seleccionamos un tipo de campo de la lista desplegaFigura 2: Tellico proporciona al usuario un cuiFigura 3: Usamos este cuadro para definir filtros de ble Type. La tabla 1 muestra un dado cuadro de diálogo para introducir los búsqueda en registros específicos. resumen de los tipos disponibles y registros. el contenido del campo que acepsin estar restringidos a cadenas simples. tan. Podemos añadir una descripción en Tellico alivia la ardua tarea de llenar la Tellico soporta expresiones regulares, adeDescription, que Tellico guardará y mosbase de datos proporcionando una intermás de consultas avanzadas. trará como pista cuando pulsemos el faz gráfica para introducir la información. Seleccionamos Edit|Search en el menú botón derecho del ratón y seleccionemos Para añadir una nueva entrada, seleccioy tecleamos la consulta en el cuadro de What is this? del menú. namos Collection|New Entry en el menú, diálogo que aparece. La máscara de conEn la sección Format Options podemos o con el atajo de teclado [Ctrl]+[N]. El sulta nos permite la opción de buscar en especificar si Tellico permitirá modificar cuadro de diálogo con varias pestañas todos los campos y especificar si la búsel contenido de los campos después de nos permite introducir los datos de un queda debe ser sensible a mayúsculas/ haberlos introducido. nuevo libro (véase Figura 2). Si somos minúsculas. Allow auto capitalization indica que muy detallistas podemos incluso añadir Los filtros permiten restringir el número Tellico pasará a mayúsculas todos los nomuna valoración e incluso una imagen de de registros mostrados como resultado. bres propios. Mientras que la opción la portada. Para aplicar un filtro, seleccionamos Format as a title elimina los artículos del Una vez hayamos terminado, pulsamos Settings|Extended filters en el menú y comienzo del título y los añade al final. Por el botón Save Entry para añadir el libro a recopilamos nuestras condiciones para el ejemplo, Tellico convierte El Retorno de los la colección de libros. Si necesitamos filtro en el cuadro de diálogo que aparece Duendes en Retorno de los Duendes, El. modificar la entrada posteriormente, sim(véase Figura 3). La primera columna es Esto hace más fácil ordenar el árbol por plemente hacemos doble clic en la entrapara el campo, la segunda guarda la contítulo, y evita el problema de tener cientos da en la ventana de listado. Las otras dición que deben cumplir y la tercera es de entradas que empiezan por El. plantillas de bases de datos están igualpara la palabra clave o expresión regular Podemos indicar qué palabras pueden mente bien diseñadas, y pueden usarse para la que estamos filtrando. Podemos pasar al final del título en el cuadro de sin ninguna modificación. definir un total de ocho condiciones. Una configuración: pulsamos en Settings | vez hayamos terminado, pulsamos en Configure Tellico. En Busca y Captura Apply, y Tellico nos mostrará los registros Añadimos las palabras en el campo Nadie crea una enorme base de datos que cumplen con nuestras condiciones en Articles dentro de General Options. La simplemente porque le divierte almacela ventana principal de listado. elección más obvia son los artículos definar información. Por lo que no sorprende nidos y los indefinidos. Incluso podemos Nuestra Propia Base de que el auténtico punto fuerte de Tellico añadir prefijos de apellidos. Datos no sea ir metiendo información, sino La opción Enable auto-completion habirecuperarla de nuevo. Podemos buscar en Además de las bases de datos ya prefalita autocompletar palabras, con lo que se cualquier colección por palabras clave, bricadas, Tellico proporciona la posibifacilita la introducción de datos: mientras lidad de definir tecleamos el programa añade contenido nuestras propias de entradas conocidas. La opción Allow colecciones. Al multiple values nos permite especificar pulsar sobre File | dos autores por libro. Ambos nombres se New | New mostrarán como entradas separadas en la user-defined vista en árbol. La máscara de entrada usa collection le indiel punto y coma como separador de camos a Tellico carácter. Por último, con Allow grouping que genere una se especifica si permitimos a Tellico que base de datos agrupe un campo en el árbol. vacía. Podemos Importar y Exportar entonces pulsar [Ctrl] + [U], o Tellico admite un buen número de formaseleccionar tos a la hora de intercambiar datos con Collection | otros programas, como bases de datos y Collection fields hojas de cálculo. Figura 4: Con este cuadro definimos los campos de nuestra propia base para abrir un cuaAdemás de los formatos Bibtex y de datos. dro de diálogo Bibtexml, que serán de interés para
40
Número 10
WWW.LINUX- MAGAZINE.ES
Tellico • PRÁCTICO
bibliotecarios y fanáticos de los libros, columnas correctas del Tellico también permite usar datos en forarchivo CVS. mato CSV. Y prácticamente cualquier hoja Mapear los campos es de cálculo permite crear o exportar en muy sencillo. El prograCSV (que viene de valores separados por ma nos muestra una coma). Incluso la libreta de direcciones de lista de campos en la KDE usa este formato para exportar conparte inferior del cuadro tactos. de importación. Para importar un archivo CSV a Pulsamos en la cabecera Tellico, lo primero que necesitamos es de la columna, selecciocrear una colección, definiendo los camnamos Data field in this pos de los datos que vayamos a importar. column, elegimos el Cuando hayamos acabado, seleccionacampo requerido y pulmos File | Import | Import CSV data en el samos Apply. Si los menú, y exploramos hasta seleccionar el campos en la base de archivo origen. En este momento aparedatos de Tellico y en el cerá el menú de importación (véase archivo CVS usan los Figura 5). mismos nombres, el Figura 5: Tellico importa ficheros CVS entre otros formatos Podemos habilitar o deshabilitar la programa los mapea opción First row contains field titles automáticamente. Al pulsar sobre OK se en primer lugar que convertir nuestra dependiendo de si la primera línea del inicia la importación de datos. colección en varios archivos HTML. Para archivo CVS contiene un registro con los Tellico esconde otro as en la manga: la ello, seleccionamos File | Export | Export nombres de los campos. posibilidad de llenar bases to HTML. En el cuadro de diálogo que El carácter que separa de datos directamente aparece, podemos decidir qué registros las entradas en el CVS es desde fuentes en Internet. poner en la página HTML y elegir si prefeel Delimiter. Aunque el Para ello, seleccionamos rimos que los agrupe (véase Figura 6). propio nombre CVS Edit | Internet Search y El resultado es un fichero HTML que debería implicar que tecleamos una palabra contiene los registros seleccionados, agrusólo se usan comas clave o un número ISBN pados de la misma manera que en la vista como separadores, la en el campo Search. en árbol. El programa únicamente añade mayoría de los prograPodemos editar la lista de al fichero los campos que se muestran en mas tienen la opción de Search Sources para indila ventana de listado. seleccionar el carácter carle a Tellico en qué fuenEn cuanto al procesamiento en Latex, de separación. Esto tes buscar la palabra Tellico puede exportar los registros en fortiene sentido si la propia clave. Si la búsqueda mato Bibtex. Los usuarios del gestor de Figura 6: Podemos incluso publiinformación incluye resultó correcta, podemos libros Alexandria para Gnome pueden car nuestros datos en Internet. comas, como en los conguardar los resultados en intercambiar datos directamente con el Tellico tiene una función que tactos: Apellidos, la base de datos pulsando programa. permite exportar nuestras bases Nombre. La parte infeen Add entry. de datos a un fichero HTML. Conclusiones rior de la ventana de La característica de importación muestra una vista previa de exportación de datos es igualmente muy Tellico es un sólido programa, muy sencilos resultados, y permite verificar si configurable. Para alojar una colección en llo de utilizar. Se adapta para cualquier hemos asignado los campos en las nuestra propia base de datos, tendremos tipo de colección que no requiera accesos simultáneos de varios usuarios y no tenga una estructura particularmente complicaTabla 1: Tipos de datos en Tellico da. En nuestras pruebas, en las que imporTipo de dato Contenido tamos una base de datos con más de 3.000 Simple text Texto simple de cualquier longitud sin retorno de carro registros de libros desde un fichero CVS, Paragraph Texto de cualquier longitud con retornos de carro quedó patente que puede manipular ficheURL Enlaces a archivos locales o documentos en Internet ros mayores sin ningún problema. Choice Lista con varias entradas, pero con selección única Trabajando en un equipo a 1 GHz, Tellico Number Campo para enteros de cualquier tamaño tardó menos de diez segundos en importar Image Gráfico de cualquier formato soportado por KDE. Tellico guarda la imagen en ■ los datos. la base de datos Checkbox Valor Si/No Date Fecha en formato KDE Table Lista con ilimitado número de elementos Table (2 Columnas) Lista a dos columnas con ilimitado número de elementos. Tellico sólo agrupa los de la primera columna Dependent Toma valores de otros campos, permite combinaciones de valores
WWW.LINUX- MAGAZINE.ES
RECURSOS [1] Tellico: http://www.periapsis.org/ tellico/
Número 10
41
PRÁCTICO • GMaps
El El API API de de Google Google Maps Maps
GUARDANDO LAS DISTANCIAS Recientemente Google nos ha sorprendido con dos anuncios. El primero es la incorporación de imágenes por satélite en su servicio Google Maps y el segundo es la publicación del API de libre acceso a estos mapas e imágenes para el desarrollo de aplicaciones Web. POR ALBERTO PLANAS
L
os ingenieros de Google nos han cidos por Google[2], que básicamente preparado un API desarrollada en son: poner nuestros desarrollos accesiJavaScript (o ECMAScript[1]) para bles de manera libre, no sobrepasar un que podamos diseñar programas que número medio de consultas al día y no accedan a los planos y fotografías por ocultar el logotipo de Google en los satélite de la Tierra. Estas sitios donde éste aparezaplicaciones se podrán ca. Antes de poder usar el incrustar en nuestras págiAPI necesitaremos obtenas Web de manera senciner una firma que nos lla y directa y se ejecutarán identifique como usuario. desde el navegador del Desde [3] podremos crear usuario. Es decir, es el una de estas firmas siemnavegador (Firefox, IE, pre y cuando tengamos Opera…) el encargado de una cuenta en Google. ejecutar las aplicaciones Con la cuenta de Gmail es que diseñemos, con lo que suficiente, pero si no no necesitaremos ninguna somos usuarios de este infraestructura particular servicio podremos crear desde el lado del servidor. una nueva cuenta desde Como ejemplo y presentalos enlaces indicados en ción del API hemos pensala dirección anterior. Figura 1: El control largo do desarrollar un programa Cada firma estará asociade la izquierda correspontal que, dado un plano o da a un usuario y a una de a GLargeMapControl, el fotografía podamos dibujar URL de acceso. Si no dismediano de la derecha es a base de clicks del ratón ponemos de una direcGSmallMapControl y el un trayecto o recorrido para ción Web donde alojar pequeño es luego indicarnos la distannuestros desarrollos pero GSmallZoomControl. cia en kilómetros de dicho tenemos el servidor camino. Esta puede ser la base para ¿un Apache instalado de manera local, podómetro digital? podremos dar de alta la dirección http:// localhost para hacer nuestras pruebas. La Firma Hay que tener cuidado a la hora de indiNosotros podemos usar el API siempre car la dirección desde donde se accederá que cumplamos unos requisitos establea nuestros programas ya que si nos
42
Número 10
WWW.LINUX- MAGAZINE.ES
equivocamos o no indicamos de manera completa la dirección donde se aloja la página Web, no podremos acceder a los servicios ofrecidos por este API. Es importante escribir la dirección completa, incluyendo los puertos y directorios. Yo, por ejemplo, para hacer las pruebas en mi ordenador portátil tengo el Apache instalado en el puerto 8080 y he creado un directorio llamado maps donde voy a alojar mi página Web. La dirección sobre la que genero la firma sería, por tanto: http://localhost:8080/maps/
Hay que destacar que podremos crear tantas firmas como necesitemos. Una vez aceptados los términos del contrato obtendremos una larga cadena alfanumérica que guardaremos en un fichero para su posterior uso.
El Vuelo del Fénix Como primer ejemplo vamos a usar la página HTML mostrada en el Listado 1. En la documentación oficial del API [4] se recomienda el uso del XHTML en vez del HTML. Las razones están en la portabilidad que proporciona este nuevo estándar. Los documentos XHTML se declaran por medio del DOCTYPE mostrado en la línea 1. También se recomienda incluir la línea 2 y de la 5 a la 9
GMaps • PRÁCTICO
Figura 2: Mapa de una zona de Palo Alto.
para que el navegador Internet Explorer pueda mostrar correctamente algunos de los efectos que proporciona la librería JavaScript de Google Maps (en particular las líneas de trayectos explicadas más adelante en el artículo). Necesitaremos incluir el fichero JavaScript que contiene el código del API, para ello usaremos un comando similar al de la línea 10 del Listado 1. Tenemos que cambiar en ...&key=XXXXX< las equis por la firma o clave generada por Google hace unos instantes. De esta manera quedaremos identificados y podremos empezar a llamar a las funciones proporcionadas desde el servidor de Google. Curiosamente todo el XHTML de este primer ejemplo queda relegado al de las líneas de la 27 a la 29. Es ahí donde decimos que, tras cargar la página HTML, el navegador debe ejecutar la función JavaScript onLoad definida en la línea 14. En la línea 28 encontramos un <div> de 500x500 píxeles con identificador map (dentro de un momento veremos para qué se utiliza ésta etiqueta). En la función onLoad es donde inicializamos el mapa. Como ya hemos comentado, todo el API proporcionado por Google está escrito en JavaScript y que dicho código se ejecutará en el navegador Web del usuario. No todos los navegadores proporcionan la misma versión de JavaScript ni las mismas funcionalidades, por lo que aparecen ciertas incompatibilidades entre dichos navegadores. Para asegurarnos que nuestro programa se ejecutará en los navegadores
soportados por el API, realizaremos la llamada a la función GBrowserIsCompatible() (línea 15). Si estamos usando Firefox, Safari, Opera o IE 5.5 (o superior) entonces no tendremos ningún tipo de problema. En la siguiente línea crearemos un objeto del tipo GMap y le pasaremos al constructor el objeto <div> cuyo identificador sea map. Éste objeto HTML será usado por GMap para insertar un mapa del tamaño asociado a dicha etiqueta. GMap ofrece un interfaz que puede ser consultado en la documentación oficial[3] (también comprobaremos que hay diversos constructores para este objeto), pero ya en la línea 17 vemos que podemos hacer llamadas al método addControl(). Lo usamos para añadir diversos controles al mapa que permitirán modificar su comportamiento. El mapa puede ser desplazado con el ratón presionando simplemente el botón izquierdo y arrastrando el cursor, pero también podemos usar un componente asociado al mapa que además de desplazarlo permitirá cambiar el nivel de zoom. Este componente es el que añadimos en la línea 17 del Listado 1, que corresponde al situado en la esquina superior derecha en la Figura 1. Podemos jugar con el código cambiando esta línea por: map.addControl(newU GLargeMapControl());
De esta manera lograremos incluir un control de posicionamiento y de zoom diferente. Hay otros dos tipos de controles que podemos añadir: un selector de tipo de mapa y un medidor de escala en Km y Millas. De estos dos el más importante es el selector de mapas, que se incluye en la línea 18. Hay tres tipos de mapas: el normal, la fotografía del satélite y una sobreimpresión del primero sobre el segundo. Un ejemplo de cada uno de ellos lo podemos encontrar en las Figuras 2 a la 4. Por ahora los mapas clásicos donde aparecen los nombres de las calles y direcciones sólo están disponibles para EE.UU, R.U y Japón, con lo que no resulta de ninguna utilidad en España (a ver si los chicos de Google se ani-
WWW.LINUX- MAGAZINE.ES
Listado 1: test1.html 01 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/D TD/xhtml1-strict.dtd"> 02 <html xmlns="http://www.w3.org/1999/ xhtml" xmlns:v="urn:schemas-microsoft -com:vml"> 03 <head> 04 <title>Ejemplo 1 test1.html</title> 05 <style type="text/css"> 06 v\:* { 07 behavior:url(#default#VML); 08 } 09 </style> 10 <script src="http://maps.google.com/ma ps?file=api&v=1&key=XXXXX" type="text/javascript"></scrip t> 11 <script type="text/javascript"> 12 //<![CDATA[ 13 14 function onLoad() { 15 if (GBrowserIsCompatible()) { 16 var map = new GMap(document.getElementById(" map")); 17 map.addControl(new GSmallMapControl()); 18 map.addControl(new GMapTypeControl()); 19 map.addControl(new GScaleControl()); 20 map.centerAndZoom(new GPoint(-122.1419, 37.4419), 4); 21 } 22 } 23 24 //]]> 25 </script> 26 27 <body onload="onLoad()"> 28 <div id="map" style="width: 500px; height: 500px"></div> 29 </body> 30 </html>
Número 10
43
PRテ,TICO 窶「 GMaps
man). En la lテュnea 20 centramos la imagen especificando la latitud, longitud y nivel de zoom. Para este ejemplo hemos
escogido las coordenadas de Palo Alto, California. Hay que tener cuidado al indicar las coordenadas del punto en el
que queremos centrar el mapa, primero hay que indicar la longitud y luego la latitud. Generalmente encontraremos las
Listado 2: distancia.html 01 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DT D/xhtml1-strict.dtd"> 02 <html xmlns="http://www.w3.org/1999/x html" xmlns:v="urn:schemas-microsoftcom:vml"> 03 <head> 04 <title>Calcular distancias</title> 05 <style type="text/css"> 06 v\:* { 07 behavior:url(#default#VML); 08 } 09 </style> 10 <script src="http://maps.google.com/map s?file=api&v=1&key=XXXXX" type="text/javascript"></script > 11 <script type="text/javascript"> 12 //<![CDATA[ 13 // Puntos del trayecto (GMaker) 14 var points = new Array; 15 // Ultima linea dibujada 16 var polyLine; 17 function onLoad() { 18 if (GBrowserIsCompatible()) { 19 var map = new GMap(document.getElementById("m ap"), [G_SATELLITE_TYPE]); 20 map.addControl(new GSmallMapControl()); 21 map.addControl(new GScaleControl()); 22 GEvent.addListener(map, 'moveend', function() { 23 var center = map.getCenterLatLng(); 24 var latLngStr = '(' + center.y + ', ' + center.x + ')'; 25 document.getElementById("latlon g").innerHTML = latLngStr;
44
Nテコmero 10
26 27
28 29 30 31 32 33
34
}); GEvent.addListener(map, 'click', function(overlay, point) { if (overlay) { removeOverlay(map, points, overlay); } else if (point) { addOverlay(map, points, new GMarker(point)); } polyLine = drawLine(map, points, polyLine); var distance = calcDistance(points);
58
59 60 61 62 63 64 65 66 67 68 69
35 document.getElementById("distan ce").innerHTML = distance + " Km"; 42. });
70 71 72
map.centerAndZoom(new GPoint(-4.48333, 36.66667), 4); 38 } 39 40 function drawLine(map, points, lastLine) { 41 var p = new Array(); 42 for (var i = 0; i < points.length; i++) { 43 p.push(new GPoint(points[i].point.x, points[i].point.y)); 44 } 45 var newLine = new GPolyline(p); 46 47 if (lastLine) { 48 map.removeOverlay(lastLine); 49 } 50 map.addOverlay(newLine); 51 52 return newLine; 53 } 54 function addOverlay(map, points, overlay) { 55 map.addOverlay(overlay); 56 points.push(overlay); 57 }
73 74
36 37
WWW.LINUX- MAGAZINE.ES
function removeOverlay(map, points, overlay) {
75 76 77 78
79 80 81 82 83 84 85 86 87
88 89 90 91
map.removeOverlay(overlay); var oi = -1; for (var i = 0; i < points.length; i++) { if (points[i] == overlay) { oi = i; break; } } points.splice(oi, 1); } function calcDistance(points) { var distance = 0.0; var p1 = points[0]; for (var i = 1; i < points.length; i++) { var p2 = points[i]; var lat1 = p1.point.y * Math.PI / 180.0; var lon1 = p1.point.x * Math.PI / 180.0; var lat2 = p2.point.y * Math.PI / 180.0; var lon2 = p2.point.x * Math.PI / 180.0; distance += 6378.7 * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)); p1 = p2; } return distance; } } //]]> </script> <body onload="onLoad()"> <div id="map" style="width: 500px; height: 500px"></div> <div id="latlong"></div> <div id="distance"></div> </body> </html>
GMaps • PRÁCTICO
Figura 3: Fotografía de satélite de la misma zona.
ecuador y la longitud el ángulo que hay entre dicho punto y el meridiano cero. Sabiendo las coordenadas de dos puntos sobre la superficie de una esfera no podremos calcular la distancia que los separa, necesitamos otro dato: el radio de dicha esfera. Si consideramos que la tierra tiene unos 6378.7 Km de radio medio (la tierra no es una esfera perfecta) entonces podremos usar la geometría esférica para calcular dichas distancias. Hay muchas formulas que permiten este cálculo. Yo recomiendo ver algunas de las expuestas en [5]. La que con más frecuencia he visto emplear requiere que pasemos primero los grados de la latitud y longitud a radianes, para luego aplicar la siguiente fórmula: d = 6378.7 *U acos(sin(lat1)U * sin(lat2) + cos(lat1)U * cos(lat2) * cos(lon2 -U lon1))
No es necesario que nos detengamos mucho más en Figura 4: Sobreimpresión del mapa con la imagen por esta ecuación, ya que su uso satélite. Podemos ver los nombres de las calles sobre la puede examinarse en la funverdadera calle. ción calcDistance() del Listado 2. De todas maneras, coordenadas de las zonas de interés en desempolvando los viejos libros de trigoorden inverso: latitud, longitud. nometría la podremos deducir fácilmente Después de esta introducción pasare(u otra equivalente). mos a ver el programa para calcular las Analizando el código veremos sutiles distancias. Éste usa algunas característidiferencias con respecto al primer ejemcas avanzadas como eventos y marcas, plo. La primera es que en la llamada del pero comparte con el primero la estrucconstructor GMap pasamos un parámetura básica. El programa completo lo tro extra (línea 21). Es un array de un podemos ver en el Listado 2. solo elemento. Lo usamos para indicar que sólo queremos que se muestre el Esfera modo de satélite y así poder quitar los Cualquier punto sobre la superficie de la botones de selección de modo de visiotierra puede ser localizado usando dos nado, que no tienen ninguna utilidad en números: la latitud y la longitud. Cada la península. El API de Google permite uno se expresa en grados, ya que lo que asociar funciones a una lista de eventos estamos es midiendo ángulos. La latitud preestablecidos, de esta manera podreindica qué ángulo hay entre el punto y el mos modificar el comportamiento del
WWW.LINUX- MAGAZINE.ES
sistema ante la pulsación del ratón en determinada zona del mapa, cuando se produce un desplazamiento, se realiza un zoom sobre el mapa o se añade una marca … La lista completa de eventos soportados puede consultarse en la documentación. Para nuestro programa necesitaremos interceptar dos eventos, uno cuando termina de realizarse un desplazamiento para poder tomar las nuevas coordenadas del centro del mapa y mostrarlas al usuario. El otro es cuando se realiza una pulsación de ratón sobre el mapa, de esta manera podremos añadir y quitar marcas que definan el trayecto que deseamos medir. El API de Google Maps permite diversas maneras de interceptar eventos, pero nosotros engancharemos nuestras funciones de la siguiente manera: GEvent.addListener(map,U 'click', function(overlay,U point) { map.recenterOrPanToLatLngU (point); });
Usando el método addListener() de la clase GEvent deberemos indicar el evento que deseamos interceptar y la función que lo tratará. En este caso estamos interceptando la pulsación de ratón sobre el mapa (evento click). La función de este evento en particular puede recibir dos parámetros: el overlay o marca sobre la que hemos pulsado y un punto que contiene las coordenadas exactas de la pulsación. En la línea 25 interceptamos el evento movend que se producirá cada vez que finalicemos un desplazamiento. De todas maneras el evento importante se intercepta en la línea 35 del Listado 2. Añadiendo nuestro propio
Número 10
45
PRÁCTICO • GMaps
mos usar de manera directa los estándares del API. Una marca se crea y se posiciona en el mapa de la siguiente manera: var m = new GMarker(newU GPoint(lon1, lat1)); map.addOverlay(m);
Figura 5: Trayecto de 0.77 Km dibujado sobre el mapa. Podemos añadir y quitar tantas marcas rojas como deseemos para dibujar un camino diferente.
gestor de pulsaciones del ratón, podremos permitir al usuario la colocación de diversas marcas que iremos almacenando en un array. Si volvemos a pulsar sobre una de estas marcas deberemos de eliminarla tanto del mapa como del nuestro array. De esta manera tan simple estaremos definiendo una trayectoria que podremos dibujar mediante una línea de color azul. Tanto las marcas como las líneas son denominadas en la documentación oficial de Google Maps overlays. Cada overlay es un objeto sobreimpreso en el mapa. Aunque podemos definir nuestros propios iconos para las marcas (de nuevo remito a la documentación para ver el proceso), pode-
Deberemos crear una marca localizada en una coordenada determinada, que luego añadiremos al mapa usando el método addOverlay() de la clase GMap. Este es el mismo método que usaremos para dibujar el recorrido dibujado, solo que en vez de añadir un objeto GMarker usaremos un GPolyline:
var p = new Array; p.push(new GPoint(lon1, lat1)); p.push(new GPoint(lon2, lat2)); map.addOverlay(newU GPolyline(p));
Esto es justo lo que hacemos en las funciones addOverlay() y drawLine() de nuestro código. Un ejemplo de un trayecto dibujado de esta manera es el que puede verse en la Figura 5. Una vez determinado el trayecto (o parte de él) podremos calcular la distancia recorrida usando las fórmulas expuestas un poco más arriba. Sencillo ¿verdad?
El Jurado Utilizando no más de cuatro objetos y ocho métodos diferentes hemos sido capaces de crear un programa capaz de calcular distancias de trayectos dibujados de manera interactiva por el usuario desde el navegador. Eso, en mi opinión, es un indicador de la calidad de este API. Es sencillo generar aplicaciones innovadoras e interesantes usando algo que hasta hace poco era extremadamente caro de conseguir y que requería grandes conocimientos de matemáticas, física y navegación. El API de Google Maps proporciona otro conjunto de objetos para el acceso asíncrono de datos XML por medio de JavaScript (AJAX[6]), con lo que
46
Número 10
WWW.LINUX- MAGAZINE.ES
podremos tener almacenado en una base de datos grandes cantidades de coordenadas terrestres y ser dibujadas de manera eficiente desde el navegador Web del cliente. Los usuarios de esta API ya han empezado a desarrollar aplicaciones que utilizan estas y otras interesantes funcionalidades ([8], [9], [10]). También encontramos objetos que permiten generar pequeños carteles que se despliegan ante un evento de pulsación (o cualquiera así establecido). Son muy útiles para comunicar algún comentario al cliente (¿una explicación sobre algún detalle del monumento al que apunta? ¿quizás una explicación al usuario sobre este punto del recorrido para llegar a la mi empresa?) Hay que indicar que el API está en fase Beta, es decir, es susceptible de cambios incluso mientras estamos desarrollando nuestra aplicación. Podemos seguir la evolución de estos cambios, la aparición de nuevas funcionalidades o el intercambio de aplicaciones y experiencias desde el grupo de discusión de Google Maps[7]. Por favor, no olviden de publicar en este grupo la aplicación que han desarrollado para que todos podamos disfrutar de su ■ ingenio y nos sirva de inspiración.
RECURSOS [1] ECMA-262 http://www. ecma-international.org/publications/ standards/Ecma-262.htm [2] Términos de uso http://www.google. com/apis/maps/terms.html [3] Google Maps API http://www.google. com/apis/maps/ [4] Documentación del API http://www. google.com/apis/maps/ documentation/ [5] Distancias http://www. meridianworlddata.com/ Distance-Calculation.asp [6] AJAX http://en.wikipedia.org/wiki/ AJAX [7] Grupo de discusión para Google Mapshttp://groups-beta.google.com/ group/Google-Maps-API [8] Monumentos en Paris http://www. kahunablog.de/gmaps. php?map=paris [9] WikiMapa http://www.wikyblog.com/ Map/Guest/Home [10] Tráfico en el Reino Unido http://www. gtraffic.info/
Redes anónimas • PRÁCTICO
Anonimato y privacidad en las redes P2P
REDES LIBRES Las “redes libres” son el resultado tecnológico de la necesidad de un modelo de comunicación en Internet que no sea sensible a la censura, y que pueda mantener el anonimato y la privacidad de cada uno de sus componentes. POR DAVID GASCÓN
R
eferirse a redes de Pares “P2P” es sinónimo de hablar de una de las principales razones de acercamiento de la gente a Internet. Al igual que la mayoría de las conexiones en la red, se basa en interacciones directas entre las diferentes máquinas que participan en este fluir de cantidades ingentes de información. Pero, al igual que cualquier otra interacción con la red, al operar en las redes de pares, vamos dejando huellas, pequeñas cantidades de datos que permiten a entidades privadas o gubernamentales seguir la pista a toda transacción que se realice. A diario se llevan a cabo acciones de investigación para transacciones de usuarios perfectamente legítimas en la red que en el mundo “real” exigirían una orden judicial o directamente violarían el derecho de la intimidad de los ciudadanos. Y hay que desterrar el mito de que en la red nadie sabe quien eres. Todo lo que se hace queda registrado en algún lugar. Sólo hay que tener permiso para recabar la información.
gación por la red, para ello desmentiré algunas ideas erróneas para la gente que piensa que posee anonimato en la red. • Yo no tengo contrato con un proveedor, me conecto mediante modem a un proveedor gratuito, por lo que nadie sabe quien soy. Falso: al hacerlo usas una conexión telefónica que identifica unívocamente al dueño de la línea. • Yo no tengo IP fija, mi proveedor me da una distinta cada vez que conecto, por lo que nadie puede saber quién soy Falso: tu proveedor guarda la información de cuál es la IP que usas en cada
momento e información relativa a su uso. • El uso de proxies anónimos como Anonymizer me permite navegar anónimamente Falso: este tipo de servicios lo que consigue es concentrar un número alto de usuarios que desean anonimato en un único punto; centralizar a estos usuarios es una de las mayores trampas, pues facilita el trabajo de las instituciones que desean saber quién y para qué requiere anonimato. En el modelo actual de comunicación todo se basa en “conexiones directas”; veamos en qué consisten y cuáles son
Falacias sobre el Anonimato en la Red Todo el mundo que posee conexión a Internet carece de anonimato en su nave-
Figura 1: Conexiones directas entre cliente y servidor.
WWW.LINUX- MAGAZINE.ES
Número 10
47
PRÁCTICO • Redes anónimas
Figura 2: Conexiones indirectas entre nodos de la red libre.
los problemas que conllevan a la hora de pensar en términos de anonimato y privacidad.
Todo el mundo sabe quien eres Comencemos con un ejemplo: Cuando el nodo A quiere adquirir un servicio del nodo B, genera una petición que lleva la dirección donde tiene que dirigirse, en este caso, la IP y puerto del nodo B, y la dirección y puerto que especifican dónde se ha de devolver la información al nodo A. En el camino intermedio entre el nodo A y el B, son los protocolos como TCP/ IP y UDP/IP los que se encargan del correcto enrutado de la información hasta el destino, pero siempre usando las direcciones IP de ambos clientes. Únicamente con la información que guarda esa petición podemos identificar quién está haciendo uso del servicio, y cuando digo “quién” me refiero a la persona que tiene contratada el servicio de acceso a Internet, pues los Servidores de Internet (ISPs) guardan una referencia completa (por ley) de los accesos que sus usuarios hacen cada vez que realizan una petición a la Red. A su vez, el servidor que ofrece el servicio almacena la petición que hizo el nodo A, con la posibilidad, dependiendo del servicio, de que se guarde información del uso del mismo como las páginas que visitó, los ficheros que descargó o en qué sala de chat estuvo hablando. La Figura 1 refleja el modelo que acabamos de ver sobre las conexiones directas entre máquinas. En ella vemos reflejada cuál es la información necesaria para poder acceder a los servicios de una máquina en la red y qué otras puedan mantener conexiones con nuestro nodo. Como se puede ver, en el paso intermedio, relegamos en protocolos como TCP/IP para llegar al nodo final a través
48
Número 10
de las distintas máquinas especializadas en enrutado de datos a través de la red. En este modelo únicamente son los routers los que se encargan de mover la información y hacer que llegue al destino. Vemos cómo los nodos clientes hacen peticiones a un servidor, mientras entre ellos realizan intercambio de ficheros mediante una plataforma P2P. Podemos observar cómo las peticiones están hechas usando las direcciones IP reales de origen y destino. En dicha figura además se ve cómo el servidor se encarga de centralizar las peticiones de los clientes y servirlas. Este es un modelo sensible a la censura, ya que valdría con eliminar la máquina servidora para privar a todos los usuarios de la información y servicios que está ofreciendo, y con controlar las máquinas enrutadoras para controlar el tráfico de entrada o salida a una determinada red. La idea que ha rodeado a Internet desde sus inicios es la eficiencia de las comunicaciones, sin embargo esta misma topología y forma de funcionar ha hecho que países como China sean capaces de censurar cualquier tipo de información externa, ya que todas las peticiones pasan por sus máquinas de enrutado antes de llegar al destino, y es aquí donde se pueden rechazar las comunicaciones de los nodos con el exterior de China. Internet hoy en día es una red que no nos asegura el anonimato ni la privacidad. Además la información y los servicios están centralizados en máquinas concretas con lo que, para cortar esa fuente de comunicación es suficiente con eliminar la comunicación de esas máquinas con el resto de la red. Por todas estas razones nacieron las redes anónimas, las cuales me gusta denominar “Redes Libres” ya que devuelven a sus usuarios la posibilidad de moverse libremente por ellas y acceder a
WWW.LINUX- MAGAZINE.ES
la información de forma que nadie puede ejercer control sobre ellos o sobre la información que se está transmitiendo. Veamos en qué consisten.
Una nueva topología de la Red Antes de empezar con los entresijos de esta nueva topología de red, me gustaría aclarar algunos conceptos que harán que el lector entienda mejor algunas de las decisiones tomadas para su implementación. Lo primero es reafirmar que el modelo actual es sensible a la censura, ya que las conexiones directas son la mejor manera de conseguir redes eficientes. El modelo de hoy en día es un modelo donde los algoritmos de enrutado buscan un solo propósito: mover información de la manera más rápida minimizando al máximo las latencias entre petición y servicio. Como contrapartida, las redes que presento, no son tan eficientes como las actuales, ya que tienen que arreglárselas para dotar a cada uno de los nodos de anonimato y privacidad partiendo del sistema de conexiones actuales entre nodos. Ello se conseguirá gracias a un nuevo factor que cambia por completo los modelos actuales de enrutado de datos; desde ahora podemos decir que cada servidor es un Nodo y cada Nodo es un Servidor.
Figura 3: Estructura general de los mensajes.
Redes anónimas • PRÁCTICO
Figura 4: Sistema de búsqueda de ficheros manteniendo la privacidad de la información buscada.
revela la IP del origen o del destino a los nodos intermedios de la red, sino que se usa un identificador (ID), lo que nos va a permitir que nadie pueda conocer quién hace la petición o quién la responde.
Asuntos Privados Figura 5: Cifrado de la información enviada.
En las Redes Libres todas las máquinas tienen un papel dual: • Como Cliente: Hacer peticiones a la Red, y gestionar las respuestas. • Como Servidor: Enrutar los datos que nos mandan otros nodos y que no son para nosotros. Esto hace cambiar la perspectiva que hemos tenido hasta el momento, pues ahora todos nosotros como nodos de la red tenemos la obligación de participar en el enrutado de la información de nuestros nodos hermanos de forma que se puedan crear las capas de abstracción necesarias para conseguir el anonimato, ya que como consecuencia inicial de este método la única forma de poder “seguir la información” sería pinchando todos los nodos de la red, lo cual es una tarea imposible que hace que el modelo actual consiga su propósito. A primera vista, si se está familiarizado con los protocolos de transporte TCP/ IP y UDP/IP, podríamos pensar que los nodos “enrutadores” podrían conocer igualmente la dirección origen y destino. Sin embargo esto no es así, ya que hemos introducido una capa de abstracción entre la petición y el contenido de la capa de transporte de las tramas. Desde el nodo inicial que origina la petición se sitúan como dirección inicial y final identificadores que sólo tienen
sentido dentro de la red libre. Este identificador es único para cada nodo y es diferente en cada sesión que iniciamos en la red. El nodo inicial lanza una petición a sus nodos hermanos. Para ello encapsula la información incluyendo los IDs de inicio y final dentro del cuerpo del mensaje (al igual que si empaquetara información para ser enviada). Después, encima de esa información, añade el resto de cabeceras necesarias para que el transporte hacia el nodo hermano sea exitoso. El comportamiento general de un nodo ante la llegada de un mensaje es: • Primero mira si el ID destino coincide con el suyo • Si es así, responde al servicio y lanza la respuesta a sus hermanos con la dirección de destino el ID del nodo origen. • Si no es esa ID vuelve a lanzar la petición a todos sus hermanos de forma que continúe su camino en busca del nodo cuya ID coincide con la buscada. En la Figura 2 se puede ver un ejemplo de cual es la información que van a usar a la hora de llevar a la práctica el algoritmo de enrutado de las redes libres. Como se puede observar nunca se
WWW.LINUX- MAGAZINE.ES
Hasta ahora hemos hablado de “anonimato” en la red; sin embargo estas plataformas también nos proporcionan privacidad o, lo que es lo mismo, además de que no sepan quién manda algo, que ignoren qué es lo que se está mandando por la red a no ser que sean ellos mismos los destinatarios. Esto se consigue mediante el uso de los sistemas de cifrado. La forma más segura consiste en aplicar varias capas de cifrado a la información que viaja por la red, de forma que sólo el
Número 10
49
PRÁCTICO • Redes anónimas
Figura 6: Ejemplo real de plataforma de redes libres: Mute.
nodo destinatario del mensaje sea capaz de descifrarlo. Mediante la Figura 3 podemos hacernos una idea de los distintos niveles de “metainformación” que rodean a los datos que se transmiten en una red libre. Lógicamente, al añadir capas extra se incrementa el tiempo de “análisis” de cada una de las diferentes tramas, por lo que se ve aumentada la latencia de la transmisión de las tramas por la red, así como el uso de recursos en cada uno de los nodos que participan de forma activa. Este es el precio que hay que pagar para obtener la protección de la privacidad en red. Hay muchísimas formas de conseguir cifrado a través de la red. Algunas de ellas son el uso de claves públicas, privadas entre nodos hermanos, o el uso de algoritmos de hashing como MD5 sobre las palabras clave de
50
Número 10
forma que obtengamos “passphrases” para el cifrado. Veamos un ejemplo de esta última idea (ver Figuras 4 y 5). Supongamos que queremos buscar un archivo llamado “1.mp3”. Lo primero que vamos a hacer es calcular el hashing del nombre del fichero mediante el algoritmo elegido para ello (MD5, RSA, ElGamal, etc), por ejemplo, Hash("1.mp3") == "a1Xag", este identificador del nombre del fichero hará que cuando hagamos la petición, sólo los nodos que posean ese fichero sepan lo que está buscando el nodo que inició el mensaje (el cual recordemos, nadie, excepto él mismo sabe quién es). Una vez se establece la conexión entre los nodos lo que se hace es usar la palabra clave original “1.mp3” como “passphrase” de cifrado, de forma que sólo pueden descifrar la información el nodo inicial y el nodo final. Para este paso usamos un algoritmo de cifrado simétrico, de forma que el nodo origen pueda transformar los datos cifrados que le van llegando a su forma original. Algunos de los posibles algoritmos que se pueden usar son: DES, AES, Blowfish … La Figura 6 muestra un ejemplo real de una de las plataformas de redes libres. En ella podemos observar ejemplos reales de hashing de nombres ficheros y del uso de Identificadores, dos de las piezas
WWW.LINUX- MAGAZINE.ES
claves en el funcionamiento de las redes libres como hemos visto hasta el momento.
Proyecto APEIRON Dada la importancia de salvaguardar el derecho que tenemos a la libertad de expresión y para luchar contra la creciente censura a la que se ve sometida la Red, hemos creado el proyecto APEIRON [1], como punto de encuentro para la gente que queremos luchar activamente por ello. En la sección de “Documentación” quien esté interesado puede encontrar información detallada sobre muchas plataformas de redes libres como Mute, Freenet, Gnunet, Konspire, etc. Cada una de las cuales difiere del resto por centrar su desarrollo en alguna característica concreta de los modelos de transporte y distribución de la información. Mediante la lista de correo se puede participar de forma activa, además de estar informado de los diferentes eventos, charlas y talleres que vamos organizando por las diferentes universidades y ■ ferias tecnológicas.
RECURSOS [1] Proyecto APEIRON: laotracara.com
http://apeiron.
Gambas • DESARROLLO
Desarrollo Desarrollo de de Programas Programas en en Basic Basic con con Gambas Gambas
INSTINTO BÁSICO
Visual Basic aún tiene una amplia aceptación entre los seguidores de Windows, pero los usuarios de Linux tienen pocas opciones para programar en el lenguaje Basic. Ahora en el mundo de Linux las tornas están cambiando gracias a Gambas, un IDE gratuito para Linux basado en Basic. POR FRANK WIEDUWILT
A
pesar de su larga historia, el lenguaje de programación Basic ha sido siempre tema de controversia. Visual Basic de Microsoft dispone de un dialecto del Basic aceptado por los usuarios de Windows. La comunidad de Código Abierto tuvo su opciones limitadaa a tan sólo unos pocos proyectos Basic marginales, como XBasic [1], pero el proyecto Gambas [2] ha ganado popularidad recientemente como un entorno de desarrollo Basic para Linux potente y versátil. Con un interfaz que recuerda al de Visual Basic, Gambas [2] soporta el desarrollo eficiente de aplicaciones con una curva corta de aprendizaje. De hecho, muchos creen que el dialecto Basic de Gambas es mucho más eficiente que el de Visual Basic. El IDE de Gambas incluye un depurador para detectar errores, un editor gráfi-
co de formularios y un editor de menús. Su diseño modular significa que los desarrolladores no están restringidos a un toolkit específico: Los programas Gambas pueden ser diseñados con una GUI Qt o GTK con tan sólo pulsar un botón, aunque el módulo GTK está disponible sólo como versión inestable.
En el Disco Se puede encontrar el código fuente de Gambas en el sitio web de Gambas [2], junto con información de cómo obtener los paquetes binarios para Debian, Fedora, Gentoo, Slackware, SuSE y otras distribuciones populares de Linux. Para compilar la aplicación desde el código fuente, se necesitan los paquetes de desarrollo de Qt, versión 3.2 o posterior, qt3-devel o libqt3-dev. Si se intenta usar Gambas para desarrollar aplicacio-
WWW.LINUX- MAGAZINE.ES
nes específicas para KDE, se necesitarán los paquetes de desarrollo de las bibliotecas KDE, kdelibs3-devel o kde-devel. Después de instalar los paquetes de soporte, hay que descomprimir el código fuente de Gambas introduciendo tar -xjf
Basic en Linux Además de Gambas, Linux también tiene otras dos variantes de Basic gratuitas: HBasic [3], un entorno de desarrollo completo, y el intérprete wxBasic [4]. Además, los desarrolladores del comercial KBasic [5] han prometido un IDE completo VB-compatible en breve, aunque una versión preliminar está a punto de salir. PowerBasic [6] y RealBasic son dos dialectos multiplataformas también comerciales- aunque no soportan el desarrollo en Linux.
Número 10
51
DESARROLLO • Gambas
Figura 1: Gambas tiene un editor de código, una caja de herramientas, una ventana de propiedades y otros componentes útiles.
gambas-1.0.3.tar.bz2, luego tras entrar en el directorio creado por el paso anterior se teclea ./configure para configurar los ficheros makefiles. Tras teclear make empieza el proceso de compilación. Una vez completado el proceso de compilado, entrando como root, hay que instalar el programa con el comando make install. Ahora ya se puede ejecutar el entorno de desarrollo Gambas simplemente tecleando gambas. En la ventana de bienvenida hay que seleccionar New Project para que un asistente, tras unos pasos, cree un proyecto nuevo. Antes de nada hay que decidir si el proyecto estará basado en GUI o en texto. También se necesita especificar si se quiere que Gambas copie el código desde un proyecto existente. Hay que teclear el nombre del directorio del proyecto donde se almacenarán los ficheros del código fuente. Si no se está familiarizado con la programación en Gambas, probablemente se desee consultar algunos ficheros de ejemplo que sirvan de ayuda para empezar. Además del formulario en el que se está trabajando, Gambas muestra también una ventana de proyecto, una caja de herramientas, una ventana de propiedades y el editor de código (Figura 1). La vista en forma de árbol de la ventana del proyecto proporciona una visión de los
52
Número 10
ficheros que conforman el proyecto. La caja de herramientas permite un acceso fácil a los controles disponibles para el GUI, y la ventana de propiedades permite la modificación de la apariencia y del comportamiento de la interfaz del programa. Finalmente, el editor de código fuente permite editar de forma directa el código Basic. Cuando se abre un formulario aparecen dos ventanas, así que la pantalla puede que se llene rápidamente. El entorno de desarrollo de KDE, KDevelop [7], soluciona este problema abriendo los elementos dentro de una ventana principal; los desarrolladores ahorrarían tiempo si Gambas gestionara el espacio de la pantalla de la misma forma.
Formularios Todos los programas basados en GUI necesitan al menos una ventana o un formulario para aceptar las entradas de los usuarios y poder mostrar la salida. Para crear un formulario nuevo, hay que hacer clic con el botón derecho del ratón en la vista con forma de árbol de la ventana del proyecto y seleccionar New | Form en el menú desplegable. Hay que introducir un nombre para el formulario en el cuadro de diálogo y especificar si se quiere que la ventana se abra automáticamente cuando el programa se ejecute, seleccionado Startup class. Para comple-
WWW.LINUX- MAGAZINE.ES
tar el formulario, tan sólo hay que añadir controles desde la ventana de la caja de herramientas (Figura 2). Para añadir un widget a un formulario, primero hay que seleccionar el widget en la caja de herramientas y luego usar el ratón para dibujar una caja del tamaño requerido dentro del formulario. Ahora se puede utilizar la ventana de propiedades (Figura 1) para configurar el control, por ejemplo, asignando el nombre que el programa usará para referenciar el control. Los parámetros X, Y, Width y Height permiten definir dónde aparecerá el control dentro de la ventana. Se pueden especificar el título, la fuente y el tamaño de la fuente junto con el color de fondo y el activo. Se puede añadir funcionalidad a un programa Gambas simplemente añadiendo componentes. Gambas viene con los widgets KDE y un conjunto de módulos básicos para el acceso a bases de datos. Para usar estas características, hay que seleccionar Project | Properties en la ventana del proyecto y luego hay que pulsar clic en el elemento adecuado de la solapa Components. Usando estas herramientas, un desarrollador puede poner rápidamente un visor HTML sencillo con tan sólo apuntar y hacer clic con el ratón. En la caja de herramientas, hay que hacer clic en la solapa KDE y seleccionar el icono Konqueror. Arrastrando el elemento Konqueror con el tamaño deseado en el formulario y en la ventana de propiedades, se introduce la URL del fichero HTML y el navegador lo cargará. Se puede usar el propio editor de código fuente de Gambas como un elemento dentro del programa que se está desarrollando si se selecciona el componente qb.qt.editor. Hay también unos cuantos
Convirtiendo desde Visual Basic Las GUIs de Gambas y Visual Basic son parecidas, así que los usuarios de VB no tendrían problemas con la navegación. Desafortunadamente, hay más diferencias entre la sintaxis de Gambas y la de Visual Basic, por lo que los programadores no podrán migrar los programas de VB sin prestarle atención. Esto es, el esfuerzo empleado en convertir proyectos simples sin los controles ActiveX serán aceptables.
Gambas • DESARROLLO
módulos experimentales, tales como los conjuntos de extensiones XML y Qt. Se está trabajando en más componentes, como las extensiones GTK que se comentaron anteriormente.
¡Y… Acción! Para hacer que los controles que se han añadido hagan algo, tan sólo hay que hacer doble clic en el elemento para que se abra el editor de código fuente con el cursor en el punto apropiado para introducir el código. Ahora se pueden añadir los comandos que se deseen para que se ejecuten: para un botón, habrá que poner el código que se desee que se ejecute cuando se pulse el botón. Como el nombre sugiere, el editor de menú permite crear los menús. Para ejecutar el editor, hay que pulsar con el botón derecho del ratón en el formulario y seleccionar el elemento que pone
Figura 2: Gambas tiene una gran colección de controles.
code en el menú desplegable crea el código fuente requerido para inicializar la base de datos del programa. Menu editor. El editor de menú soporta hasta cuatro nieveles en la estructura y permite asignar atajos de teclado e iconos a los elementos individuales.
Acceso a Bases de Datos Una de las características que hacen que Visual Basic sea muy potente es su fácil acceso a las bases de datos. Gambas hace un buen intento por emular esta funcionalidad. En el momento de escribir este artículo, Gambas soporta MySQL, PostgreSQL y SQLite. El Database manager se encuentra en el menú de la ventana del proyecto bajo Tools | Database manager… Se tiene que tener el componente qp.db para que el programa pueda acceder a una base de datos. Para añadir una tabla nueva a una base de datos existente, hay que invocar de nuevo el menú contextual y seleccionar Create table…. Los campos de la base de datos se definen en el lado derecho del cuadro de diálogo. La solapa Data muestra una vista de la tabla donde se pueden añadir los datos directamente. Por último, el elemento Create Gambas
WWW.LINUX- MAGAZINE.ES
Ayuda por todas partes Gambas tiene un sistema de ayuda extensible con descripción para las palabras reservadas, una breve introducción a la programación y una explicación de las diferencias entre Gambas y Visual Basic. La ayuda para las palabras reservadas también hace referencia a las diferencias entre Gambas y VB. La página web de Gambas contiene un Wiki [8] con más ayudas de programación y sobre cómo convertir proyectos existen■ tes en VB.
RECURSOS [1] XBasic: http://www.maxreason.com/ software/xbasic/xbasic.html [2] Gambas: http://gambas.sourceforge. net [3] HBasic: http://hbasic.sourceforge.net [4] WxBasic: http://wxbasic.sourceforge. net [5] KBasic: http://www.kbasic.de [6] PowerBasic: http://www.powerbasic. com [7] KDevelop: http://www.kdevelop.org [8] Gambas Wiki: http://www.binara.com/ gambas-wiki/bin/view/Gambas10/ WebHome
Número 10
53
DESARROLLO • Perl: Vim
Pistas y trucos para programar fácilmente Perl en Vim
PICANDO LO JUSTO El editor Vim tiene algunos trucos para ayudarnos a reducir las pulsaciones de teclas. En el artículo de este mes veremos cómo los programadores de Perl pueden ahorrar esfuerzos usando las técnicas de Vim. POR MICHAEL SCHILLI
Datei erzeugt von Paul mit sf 4.39
P
uede que no haya otra decisión más importante en la vida de un programador que la elección de un editor. Una vez que hemos optado por Vi o Emacs, nos dedicaremos a amoldarnos a sus armas e intentaremos exprimir hasta el ultimo gramo de rendimien-
54
Número 10
to de nuestra herramienta favorita. Una vez que hemos elegido el editor, lo mejor será aprender todo lo que podamos sobre él. Un uso efectivo del editor no sólo reduce el daño del síndrome del túnel carpiano, sino que también nos ayudará a obtener código más rápidamente y con pocos errores tipográficos. El editor Vim (VI Improved, mejorado)
WWW.LINUX- MAGAZINE.ES
tiene un cierto número de ventajas sobre su venerable predecesor Vi. A través de los años, Vim se ha extendido drásticamente respaldado por un grupo incondicional de programadores. Es extremadamente configurable y extensible a través de plugins. De hecho Vim puede amoldarse a conveniencia para casi cualquier gusto o estilo de trabajo.
Perl: Vim • DESARROLLO
Vim guarda un archivo de configuración llamado .vimrc bajo el directorio de inicio del usuario y éste es un buen sitio para almacenar los trucos que veremos a continuación. Las distribuciones de Linux no siempre vienen con la ultima versión de Vim, así que no está de más que ejecutemos vim --version para verificar qué versión tenemos. Se necesita la versión 6.1 o posterior. Si tenemos una versión más antigua solamente tendremos que obtenerla de [2].
Resaltado de Sintaxis El resaltado de las palabras claves y las estructuras en el código de los programas es de gran ayuda para los irritados ojos de alguien que ha pasado montones de horas leyéndolas. Vim tiene un resaltado de sintaxis excelente para diversos lenguajes de programación y asombrosamente se obtienen unos resultados muy precisos con él. Incluso para lenguajes tan compli-
cados de analizar como Perl. En las Figuras 1a y 1b se puede apreciar cómo es más fácil reconocer las estructuras de código con el resaltado por colores. Por supuesto que, para esta funcionalidad, será necesario que nuestra Xterm permita el uso de colores. Si el resaltado de sintaxis no está habilitado por omisión en Vim, la orden :syntax on la activará. Vim evalúa la extensión del archivo (.pl o .pm) e incluso la secuencia #!/usr/bin/perl de la línea Shebang, para detectar el código Perl y realizar el resaltado de acuerdo a la sintaxis de Perl. Cuando comenzamos a editar un nuevo archivo que no tiene una extensión especifica de Perl o una línea Shebang, se le puede indicar explícitamente a Vim el tipo de archivo tecleando: :set filetype=perl.
Atajos Si siempre programamos en el mismo lenguaje, nos encontraremos tecleando
las mismas secuencias una y otra vez. Como defensor de Log::Log4perl, he perdido la cuenta del número de veces que he tecleado use Log::Log4perl qw(:easy);. Afortunadamente, Vim me ha ayudado a poner fin a esta practica. La orden :abbreviate ul4p use Log::Log4perl qw (:easy); <RETURN> define a ul4p como un atajo. Cada vez que tecleemos el atajo en el modo de entrada de texto y pulsemos algo como la barra espaciadora o la tecla del retorno de carro, Vim expandirá la cadena automáticamente y nos dará nuestra línea Log4perl. El literal <RETURN>, que se coloca al final de la definición del atajo, simula la pulsación de la tecla del retorno de carro y por eso añade un corte de linea. Si queremos parar el modo de entrada y pasar al modo de órdenes, después de expandir un atajo, solamente hay que añadir <ESC>. Otra forma de insertar secuencias de texto largas en los atajos es leyéndolas de un archivo: :abb ul4p<BACKSPACE><ESC>:r ~/.tmpl_l4p <RETURN>. Esta orden le dice a Vim que sustituya el atajo ul4p con el contenido del archivo que se ha indicado.
Macros de teclado Listado 1: órdenes de Vim 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
WWW.LINUX- MAGAZINE.ES
# Buscar 'sub' /sub # Comenzar a # grabar la macro qa # Insertar una línea encima, # Volver a modo órdenes O<ESC> # Insertar 20 '#' 20i#<ESC> # Copiar línea yy # Bajar una línea # Insertar la línea # copiada abajo. jp # Parar la grabación de la macro q # Buscar el siguiente 'sub' n # Reproducir la macro 'a' @a # ... repetir.
Número 10
55
DESARROLLO • Perl: Vim
Las Macros se pueden usar para repetir pasos de edición recurrentes que modifican múltiples áreas no continuas. Las Figuras 2a y 2b muestran tres cabeceras de función que queremos enmarcar con almohadillas. Se necesitan las siguientes órdenes: Primero utilizamos /sub para buscar sub; después comenzamos la grabación de la macro a, dibujamos las almohadillas alrededor de la primera cabecera y paramos la grabación de la macro. Luego pulsamos n para buscar el siguiente sub y reproducimos la macro pulsando@a. En el Listado 1 se muestra una lista de las órdenes. Si lo preferimos, podemos añadir las
marcas cada vez que añadamos una nueva función, lo hacemos definiendo un atajo de teclado para la tecla F, de la siguiente manera: :map F o<ESC> 43i#<ESC>yyosub {<ENTER><ESC> Pk$i. A partir de ahora, cada vez que pulsemos la tecla F, en el modo de órdenes, Vim insertará una cabecera de función, cambiará al modo de entrada y colocará el cursor a la derecha de él para dejarnos escribir el nombre de la nueva función. El revoltijo de letras en la definición del mapa incluye otra vez el típico estilo vi de órdenes con una sola tecla en el modo de órdenes, que seguro que reconocerán los incondicionales de vi. El
número de marcas es una cuestión de gusto. Hemos usado 43 en la definición anterior. Asignar las órdenes puede ahorrar mucho tiempo y molestias cuando se trata de secuencias que se repiten, como por ejemplo las cabeceras de las funciones. Si les gusta, pueden utilizar la misma aproximación para otras secuencias de texto que también se repitan, como por ejemplo, el código para recopilar parámetros de funciones como en my(...) = @_;. Otra tarea común es guardar el guión en el que estamos trabajando pulsando :w e invocar perl -c script.pl, para comprobar la sintaxis del guión. La siguiente orden asigna las acciones de guardar y
Listado 2: ppitags 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039
56
#!/usr/bin/perl -w ############################# # ppitags-PPI-basado en ctags # Mike Schilli, 2005 # (m@perlmeister.com) ############################# use strict; use use use use
PPI::Document; File::Find; Sysadm::Install qw(:all); Log::Log4perl qw(:easy);
my $outfile = "$ENV{HOME}/.ptags.txt"; my %dirs = (); my @found = (); find \&file_wanted, grep { $_ ne "." } @INC; blurt join("\n", sort @found), $outfile; ############################# sub file_wanted { ############################# my $abs = $File::Find::name; # Evita dirs erroneos $File::Find::prune = 1 if -d and $dirs{$abs}++; # Solo módulos Perl return unless /\.pm$/; my $d =
Número 10
040 041 042 043 044 045 046 047 048 049 050
PPI::Document->load( $abs); unless ($d) { WARN "Cannot load $abs" . " ($! $@)"; return; }
# Encuentra paquetes y # todas las subrutinas nombradas 051 $d->find( 052 \&document_wanted); 053 } 054 055 ############################# 056 sub document_wanted { 057 ############################# 058 our $package; 059 my $tag; 060 061 if(ref( $_[1] ) eq 062 'PPI::Statement::Package' 063 ) { 064 $tag = 065 $_[1]->child(2) 066 ->content(); 067 $package = $tag; 068 069 } elsif(ref($_[1]) eq 070 'PPI::Statement::Sub' 071 and $_[1]->name()) { 072 $tag = 073 "$package\::" 074 . $_[1]->name(); 075 } 076 077 return 1
WWW.LINUX- MAGAZINE.ES
078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
unless defined $tag; push @found, $tag . "\t" . $File::Find::name . "\t" . regex_from_node( $_[1]); return 1; } ############################# sub regex_from_node { ############################# my ($node) = @_; my $regex = $node->content(); $regex =~ s/\n.*//gs; while ( my $prev = $node->previous_sibling() ) { last if $prev =~ /\n/; $regex = $prev->content() . $regex; $node = $prev; } $regex =~ s#[/.*[\]^\$]#\\$&#g; return "/^$regex/"; }
Perl: Vim • DESARROLLO
verificar la sintaxis a la tecla X en modo de órdenes: :nnoremap X :w <Enter>:!perl -c %<Enter>. Usando la orden :noremap en vez de :map nos aseguramos que la “X” no sea evaluada si es que aparece en el lado derecho de otra expresión asignada. Además, :noremap solamente expande la definición en el modo de órdenes. El símbolo % representa el nombre del archivo actual.
Para asignar la orden de formato,en el modo de órdenes, a la tecla f, usamos :map f !Gperl -Mtext::Autoformat -e'autoformat' <RETURN>. Más tarde, durante la edición de un párrafo, simplemente cambiamos al modo de órdenes y pulsamos la tecla f con el cursor colocado en algún lugar del pasaje de texto y el Figura 1a: Un trozo de código texto se formateará automátiPerl en VIM, sin … ca y correctamente. Las figuras 3a y 3b muestran el texto crudo y formateado. Si el tamaño predeterminado de 72 líneas es demasiado ancho (o demasiado estrecho) para nuestro gusto, tenemos la opción de cambiarlo: :map f !Gperl -Mtext::Autoformat -e'autoformat Autoformato {right=>65}'<RETURN> Si estamos comporestringe el tamaño máximo niendo un texto Figura 1b: … y con el resaltado de línea a 65 caracteres. largo, por ejemplo de sintaxis activado. Los usuarios experimentadocumentación dos de Vim alegarán que f POD, probablemente nos llevará un está asignada por omisión en el modo de tiempo,como seis o siete intentos, antes órdenes; llevando el cursor al siguiente de conseguir un buen aspecto. carácter que haya, con fe nos colocará en Si continuamente estamos añadiendo la siguiente e del texto, por ejemplo. Si y borrando pasajes, terminaremos con realmente queremos usar esta función, unos párrafos de aspecto andrajoso y deberemos elegir otra tecla, o incluso readifíciles de revisar. Los procesadores de lizar un atajo de teclado de dos caracteres: texto del estilo de Word, trabajan muy por ejemplo,:map !f espera que primero duro en segundo plano, reformateando pulsemos ! en modo de órdenes, antes de continuamente el texto, pero los auténtipulsar f. cos maestros pulen el filo ellos mismos. Sangrado Solamente necesitamos cuatro teclas en el modo de órdenes de Vim para La discusión sobre qué está bien o qué hacer esto: {gq}. Primero, al pulsar { está mal al sangrar el código de los pronos lleva al comienzo del párrafo actual, gramas, no ha terminado. ¿Dónde se con la orden gq obtenemos el texto justiponen las llaves? ¿Hasta qué punto neceficado a la izquierda y por ultimo, } defisitamos sangrar el código anidado? ¿Se ne dónde se aplica la orden: en este caso deben utilizar espacios o tabuladores? al final del párrafo. Como programadores todos teneEl módulo Perl Text::Autoformat, del mos nuestras propias preferengran maestro Damian Conway, proporcias, Vim permite escoger ciona una aproximación muy elegante. una opción. Junto a la justificación a la izquierda, el El sangrado basado en módulo comprende todo tipo de estilos tabuladores es una cuestión inteligentes: por ejemplo, puede manejar de gustos; muchos lo rechalistas marcadas con > (las líneas seguizan por principio. Si activadas de > se sangran de la misma forma) mos la opción :set expandtab, y maneja las comillas de los sangrados Vim convertirá los tabuladores del email usando > o > >, o incluso en espacios. Para establecer el corchetes, igual que lo haría un ser número de espacios por tabulahumano. dor, usamos :set shiftwidth=4.
WWW.LINUX- MAGAZINE.ES
Pero no cometamos el error de utilizar expandtab sin reflexionar acerca de lo que estamos haciendo, de lo contrario nos encontraremos con una desagradable sorpresa cuando editemos un Makefile. Los objetivos de Make están seguidos por órdenes sangradas con tabuladores, y reemplazarlos por espacios provocará un error de sintaxis. Para evitar esto, dejaremos que Vim detecte el tipo de archivo, utilizando autocmd y configurando la opción expandtab solamente para los programas en Perl: :filetype on :autocmd FileType U perl :set expandtab
Para localizar problemas como este, la orden :set list nos permitirá ver los caracteres no imprimibles en Vim. Los tabuladores se ven como ^I y el carácter de fin de línea se muestra como un ‘$‘ azul. Con :set nolist volvemos al modo de visualización normal. La opción shiftwidth que se mencionó anteriormente tiene otra función: En combinación con la opción cindent se puede usar shiftwidth para ahorrarnos un montón de pulsaciones. Siempre que tecleemos un condicional como if($really) { y pulsemos retorno de carro, Vim sangrará la siguiente línea con los valores definidos en shiftwidth y expandtab. Sin embargo, si pulsamos } y retorno de carro, Vim pondrá automáticamente las llaves de cierre hacia fuera, al comienzo de la línea. Como este funcionamiento no es el adecuado para algunos tipos de archivos, habría que añadir una orden autocmd que identifique primero el tipo de archivo antes de establecer la opción: :autocmd FileType perl :set cindent. Hay veces que
Número 10
57
DESARROLLO • Perl: Vim
variable $CVSVERSION y que es no nos damos cuenta que un actualizada automáticamente por segmento de código se ha de CVS. Además, Pod::Usage muessangrar, hasta que hemos tertra un pequeño archivo de ayuda minado de ‘picarlo’. En estos si se activa la bandera -h. casos, colocamos el fragmento Por supuesto que habrá que entre llaves, como se ve en la rellenar los huecos para que el Figura 4a, pasamos al modo de guión crezca y se convierta en orden y pulsamos >i{, para Figura 2a: El algo práctico, pero el esqueleto sangrar bloque ‘interno’ con el editor de será de gran ayuda, ofreciendo valor definido en shiftwidth macro en modo una plantilla y un esquema de (Véase la Figura 4b). de grabación. documentación, que son indisLa opción :set smarttab pensables en cualquier guión. añade otra característica cuando usamos la opción expandCompletando el texto tab: Pulsando la tecla de retroEn el modo texto, Vim recuerda ceso con el cursor colocado automáticamente las palabras sobre el primer carácter de una que hemos escrito y las completa línea sangrada, envía la línea pulsando CTRL-n. Si definimos de vuelta al margen izquierdo una variable como nuestra y pulsando la tecla de tabulaFigura 2b: $GLOBAL_SUPER_VARIABLE; y dor vuelve a sangrar la linea, Después el la usamos mas tarde el el guión, pero sin utilizar realmente los usuario solano necesitamos reescribir el tabuladores. mente tiene nombre; en vez de eso, solamenOtra sugerencia: Para naveque reproducir te tenemos que escribir las prigar de una llave a su pareja, la macro dos meras letras, pulsar CTRL-n y solamente tenemos que colocar veces. dejar que Vim lea nuestros penel cursor, en modo de órdenes, samientos. en la primera llave y pulsar el Si hay más de una posibilidad de símbolo del porcentaje (%). Esto hace expandir las letras que hemos tecleado, más fácil encontrar las llaves perdidas si pulsamos CTRL-n varias veces hasta Perl indica un error de sintaxis. encontrar la que buscamos, con CTRL-p Si estamos usando un teclado americavolvemos a la palabra anterior. Esta no y necesitamos teclear con vi un caráccaracterística nos permite ahorrar un ter no estándar tal como un umlaut (Ä montón de tiempo y de pulsaciones. por ejemplo), lo podemos hacer con sólo pulsar Ctrl-K A : en el modo de entrada. Etiquetas Para saber más acerca de cómo introducir caracteres no estándar, introducimos Los programadores de C estarán familiala orden :digraphs para obtener una lista rizados con el programa ctags, que crea de lo que está disponible. un archivo de etiquetas para Vim. Después de que ctags ha leído el archivo, Un buen comienzo el desarrollador solamente necesita coloLa herramienta tmpl desde [5] ofrece un Listado buen comienzo cuando queremos zambullirnos dentro de un nuevo guión en 01 version 6.0 Perl: por ejemplo, $ tmpl -p cooltool crea02 :map !L iuse Log::Log4perl rá un nuevo archivo llamado cooltool. qw(:easy);<RETURN>Log:: Como podemos ver en la Figura 5, el Log4perl->easy_init($DEBUG);<RETU esqueleto del guión contiene unas cuanRN><ESC> tas líneas de cabecera, unos cuantos 03 :map F o<ESC>43i#<ESC>yyosub módulos típicos, algún código para las {<ENTER><ESC>Pk$i opciones de análisis del guión y visuali04 map f !Gperl -MText:: zación de manpage. tmpl lee unos cuanAutoformat -e'autoformat{right tos parámetros configurables, como el =>70}'^V^M nombre del autor, del archivo .tmpl en el 05 set backspace=2 directorio de inicio del usuario. 06 set fileencodings=utf-8,latin1 El esqueleto cooltool ya tiene dos posi07 set formatoptions=tcql bilidades: $ cooltool -v muestra la versión 08 set helplang=en actual del guión, que se guarda en la
58
Número 10
WWW.LINUX- MAGAZINE.ES
Figura 3a: Un listado con > y parte de un mensaje de email, antes …
Figura 3b: … y después de formatearlo con Text::Autoformat.
car el cursor en algún lugar de la llamada a la función y pulsar CTRL-], en el modo de órdenes, para decirle a Vim que salte a la definición de función, sin importar en qué archivo está. Por ejemplo, para decirle a Vim, en Perl, que vaya al archivo fuente para LWP::UserAgent, si el cursor está en algún lugar del texto LWP::UserAgent, en
3: .vimrc 09 set history=50 10 set hlsearch 11 set ruler 12 set shiftwidth=4 13 :autocmd FileType perl :set cindent 14 :autocmd FileType perl :set expandtab 15 set smarttab 16 :nnoremap X :w<Enter>:!perl -c %<Enter> 17 :set tags=/home/mschilli/. ptags.txt 18 :set iskeyword+=:
Perl: Vim • DESARROLLO
un programa en Perl, el esa ventana, quedando mando ctags R f usuario necesita hacer solamente el texto que ~/.ptags.txt/usr/lib/perl5 no encontrará dos cosas. Antes de estamos editando en la las etiquetas que requieren un análisis nada, Vim debe comventana principal. más elaborado del código Perl más allá prender que las palabras Figura 4a: Un bloque entre llaAlternativamente, podedel modelo de simple coincidencia. clave de Perl pueden ves y el cursor al comienzo del mos utilizar la orden Para analizar fuentes Perl, lo que de incluir los dos puntos; bloque. :only en la ventana infeverdad necesitamos es Perl, pues Perl es para hacer esto poderior, para cerrar la venextremadamente difícil de analizar. Sin mos teclear :set iskeytana superior. embargo, Adán Kennedy intentó lo word+=:. En segundo Se puede ver una imposible y escribió recientemente un lugar, Vim necesita anasesión de Vim en la programa “bastante bueno” de análisis lizar el archivo de etiFigura 6, con un guión para Perl; de hecho, el programa de anáquetas, el cual proporFigura 4b: La orden >i{ sangra el de prueba que utiliza el lisis es increíblemente bueno. El módulo ciona un índice de todos bloque interno. módulo PPI de CPAN incluye PPI::Document; su los paquetes instalados, LWP::UserAgent en la método load() lee un módulo Perl, lo tal como se ve en esta orden :set ventana inferior, y el reparte en fichas y las tags=/home/mschilli/.ptags.txt. método new() del códialmacena como nodos Pulsar CTRL-], con el cursor colocado go fuente del módulo, en una estructura en en el nombre del módulo, nos llevará al en la superior. árbol. código fuente del módulo. Si no estamos seguros El guión ppitags utiliza Alternativamente, podemos facilitar el de cómo se escribe el File::Find para analizar nombre del módulo como parámetro en nombre de un método los directorios en el el modo de órdenes, como en :tag podemos buscarlo, solaarray global @INC de LWP::UserAgent. Si pulsamos CTRL-T mente tenemos que Perl. Para cada entrada mientras estamos viendo el archivo del introducir una expresión que encuentra, File::Find módulo, volveremos a donde estábamos. regular. La orden tselect salta a la función La magia que hay detrás de esta funciobuscará cualquier etifile_wanted. Si la entranalidad está almacenada en el archivo de queta que coincida y nos da es un directorio en etiquetas .ptags.txt que puede crear el ofrecerá una lista para vez de un archivo, la código del Listado 2. que la elijamos: :tselect línea 34 actualiza el A pesar de tener un gestor de venta/^LWP. Esto permite al hush %dirs, para averinas, puede ser que necesitemos ver dos usuario seleccionar el guar si la trayectoria se archivos simultáneamente en una sola número que corresponha recorrido ya. Si es así ventana. Encararemos este problema de da con el módulo que la línea 33 fija la variable otra manera, ya que los usuarios de Vim necesitamos desde el $File::Find::prune a 1 no son del tipo de gente que utiliza un menú, como se ve en la para indicarle a ratón cuando sus manos están ‘picando’ Figura 7. File::Find que puede salcódigo. tarse el resto del directoDame etiquetas Si pulsamos CTRL-W-], en vez de rio y todo lo que haya CTRL-], con el cursor dentro de una pala¿Cómo creamos un bajo él. La línea 37 ignobra clave, la ventana se dividirá en dos archivo ~/.ptags.txt? ra cualquier cosa que no mitades, con el código de nuestro archiPara hacer esto, necesiFigura 5: Vim en el modo de sea un módulo Perl tervo en la mitad inferior y el código del tamos leer los módulos ventana dividida: Un guión de minado en pm. módulo que hemos referenciado en la que utiliza nuestra instaprueba en la parte inferior y el La línea 40 analiza el mitad superior. Pulsando CTRL-WW sallación local de Perl a código del módulo módulo Perl actual. tamos entre los dos paneles. Tecleando la intervalos regulares. El LWP::UserAgent, con los guioCualquier error que ocuorden :quit en la ventana superior, cerraguión mostrado en el nes utilizados, en la superior. rra en este punto será remos Listado 2 husmea en manejado por la línea 43 todas nuestras rutas @INC, escribe en (en el momento de escribir esto, PPI no un array @ los directorios para ayues perfecto) emite una advertencia y desdarle a recordar dónde ha estado carta el módulo que no podrá manejar. para evitar volver a mirar en Después de analizar un módulo, la los que ya ha visitado. línea 51 llama al método find() para el Otra opción para crear objeto PPI::Document, avanzando a trappitags sería utilizar el provés de las fichas en las fuentes de Perl y grama ctags, que, en sus llama a la función document_wanted versiones más recientes, definida en la línea 56 para cada ficha maneja el código Perl encontrada. realmente bien. Pero llaLa función comprueba si la ficha es del
WWW.LINUX- MAGAZINE.ES
Número 10
59
DESARROLLO • Perl: Vim
60
Número 10
WWW.LINUX- MAGAZINE.ES
de inicio y en realidad esto permite que los usuarios ejecutemos una serie de órdenes antes de que Vim se ponga a trabajar. Después de retocar los ajustes predeterminados interactivamente, probablemente queramos guardar los cambios. En vez de volver a teclear las órdenes para añadirlas a nuestro archivo .vimrc, solamente tenemos que teclear :mkvimrc para indicarle a Vim que guarde la configuración actual en ~/.vimrc. Hay un ejemplo de configuración en [1] que contiene todas las configuraciones que hemos repasado en el artículo de este mes. Recuerden, ¡ahorren tiempo ■ ‘picando’ para dedicarlo a pensar!
RECURSOS [1] Listados de este artículo: http://www. linux-magazine.es/Magazine/ Downloads/10 [2] Página principal del proyecto Vim: http://www.vim.org/ [3] Steve Oualline, “vi IMproved – Vim”, New Riders, 2001 [4] Archivo de guiones de Mike: http:// perlmeister.com/scripts/ [5] Guión tmpl:http://perlmeister.com/ scripts/tmpl
EL AUTOR
tipo PPI::Statement::Package o un objeto la línea que coincida con la del tipo PPI::Statement::Sub, esto es, un ficha requerida. En el caso de paquete o una subdefinición en el código subprogramas, $node->conde Perl. tent() devuelve tanto la cabeceUna definición package significa una ra como el cuerpo de la funlínea como package LWP::UserAgent;, ción. Esta es la razón por la cual que a su vez significa cuatro fichas en el la línea 98 quita todas las líneas, mundo de PPI: package, espacio, el nomaparte de la primera, y las líneas bre del módulo y el punto y coma de ciede la 100 a la 109 retroceden de rre. Solamente el nombre del módulo es ficha en ficha hasta que se alcanza de interés para ppitags, que es el tercer el principio de la línea. Al final del hijo en el nodo, que pasó $_[1] a docubucle while, $regex contendrá la ment_wanted(). El método child() línea fuente desde el comienzo de la comienza con el índice ihijo a 0, extrae línea hasta la ficha. La línea 114 utilila cadena "LWP::UserAgent": za estos datos para generar una expre$_[1]->child(2). sión regular del tipo de /^.../ con un ancla La línea 69 encuentra definiciones del para el carácter de comienzo de línea. La tipo sub func { y extrae los nombres de operación buscar y substituir en la línea la función y los métodos 112 asegura que no entre para permitir al mecaen conflicto ningún nismo de etiquetado carácter no estándar en identificar las estructuel código Perl con los ras tales como meta-caracteres de la LWP::Debug::trace y expresión regular escasalta a la localización pándolos con barras donde se define realinversas. mente la función en el El guión ppitags crea módulo LWP::Debug. un archivo ~/.ptags.txt Cuando se analiza una Figura 6: Una plantilla para un que contiene una lista en definición del paquete, nuevo guión llamado cooltool, el formato de entradas a ppitags almacena el creada por el guión tmpl. tres columnas: nombre del paquete Paquete/Subrutina [tab] como el paquete actual, NombreFichero [tab] que se utiliza entonces ExpresiónRegular, que como un prefijo para Vim analizará con :set todas las funciones anatags= tal como se ha lizadas. Aunque esto descrito anteriormente, podría fallar con definipermitiendo así que ciones de paquetes en salte elegantemente de bloques, no hay ninguna las palabras claves al diferencia en el 99,9% correspondiente código de los casos. fuente. La orden push en la Es conveniente ejeculínea 80 empuja una tar ppitags una vez al nueva secuencia al final día como tarea del cron del array @found, que para mantener al día Figura 7: Utilizando expresiones se compone de la etique~/.ptags.txt. Si se preregulares para buscar etiquetas; ta requerida (Paquete- o fiere se puede extender si el usuario teclea /^LWP el nombre completo de el guión para permitir a obtendrá un ménu numerado por la función cualificada), Vim identificar nuestras entradas. del nombre absoluto de variables our totalmente la fuente, del nombre del archivo y de cualificadas (del tipo una expresión regular, que localiza la $Text::Wrap::columns, por ejemplo) y saldefinición del paquete o de la función tar a sus definiciones dentro del código dentro del archivo de las fuentes. Para fuente del módulo. hacer esto, la función define en la línea Almacenamiento permanente 91 FF, regex_ from_node , componiendo una expresión regular compuesta de Cuando lanzamos Vim lee el archivo de todos los caracteres del comienzo de la configuración .vimrc de nuestro directorio
Michael Schilli trabaja como desarrollador de software en Yahoo!, Sunnyvale, California. Es el autor de “Perl Power” de la editorial Addison-Wesley y se le puede contactar en mschilli@perlmeister.com. Su página está en http://perlmeister.com/.
Python • DESARROLLO
Imágenes satélite en Python
VIGILANTES DEL PLANETA ¿Quién no ha querido alguna vez sentirse como esos informáticos de la NASA en su centro de control? Hoy nos construiremos el nuestro y controlaremos el planeta y sus alrededores. POR JOSÉ MARÍA RUIZ Y PEDRO ORANTES
C
ada vez que vemos el lanzamiento de un cohete todos quedamos asombrados ante la explosión del despegue, la atenta mirada de todos esos científicos a los paneles de control, y la monstruosa cifra que nos dicen que se han gastado en el proyecto.
¿A donde van los impuestos? Es entonces cuando surge la pregunta ¿y eso a mí en qué me repercute? Un día estando en el despacho de la Rama del IEEE de Málaga tuve una conversación en la que me contaron que la mayor parte de los satélites emiten “al mundo” las imágenes y los datos que recogen. Es decir, si se posee el equipo necesario es posible recibir en tu propia casa imágenes fascinantes del universo, de Marte o de la Tierra.
La temperatura del océano, imágenes meteorológicas, imágenes del campo magnético del sol o de las misiones a Marte son enviadas constantemente a la Tierra desde estos engendros espaciales. Y el efecto es siempre el mismo, el espectador es deslumbrado por el presentador de televisión con una imágenes increíbles mientras se escuchan acordes de sintetizador. ¿Acaso no son esas imágenes de dominio público? ¿Dónde puedo conseguirlas? En el presente artículo utilizaremos Python para crear un script CGI que nos permita recoger y mantener actualizadas las imágenes que queremos en una especie de “collage” o mural. Construiremos nuestro propio centro de control espacial.
WWW.LINUX- MAGAZINE.ES
Recoger las imágenes Lo primero será encontrar las imágenes y reunirlas. Vamos a usar como ejemplo cuatro imágenes de carácter científico. Se actualizan a distintos intervalos, de manera que podremos ver cómo evolu-
Curiosidad Poco tiempo después de finalizar este artículo apareció una noticia en Slashdot (ver Recursos [4]) hablando de una llamarada solar de tal tamaño que iba a alterar las comunicaciones. Cuando se dan este tipo de eventos en muchos centros de control de satélites los ingenieros cruzan los dedos para que sus satélites no caigan ante la ola de viento solar que se origina. El lector puede apreciar la llamarada en la Figura 4.
Número 10
61
DESARROLLO • Python
En la variable c almacenamos el objeto que representa la conexión realizada y podemos enviar peticiones. >>> c.request("GET","/issue/08") >>>
Figura 1: La imagen original que vamoa a modificar con PIL.
cionan las eventos que se registran. Puedes encontrar las URLs en Recursos [1]. Debemos descargar las imágenes y almacenarlas dentro de nuestro programa, haremos uso de la librería httplib que es parte de la distribución estándar de Python. Esta librería nos permitirá hablar de tú a tú con un servidor web remoto sin tener que preocuparnos de los detalles de más bajo nivel. Esta conversación la realizaremos usando el protocolo HTTP. Este protocolo es bastante simple y de él sólo necesitaremos una parte mínima. Cuando Tim Berners Lee realizó el diseño original de la Web quiso que el protocolo para pedir los documentos fuese lo más simple posible. HTTP se reduce a la recepción y el envío de información al servidor, eso y sólo eso. Se compone de varios comandos, pero los más conocidos son GET, que podemos traducir como “tomar”, y POST, que podemos traducir en este contexto como “enviar” o “mandar”. Así que tomamos documentos y enviamos información. Una parte importante de HTTP es URL que nos sirve para darle nombre a esos documentos. Todos estamos acostumbrados a tratar con urls, generalmente del tipo http://www.linux-magazine.es/ issue/08. La url se compone de: [protocolo]://[maquina]/[ruta]/[objeto]. Vamos a ver ahora porqué es tan importante que sepamos esto. La librería httplib de Python establece en un primer paso una conexión con el servidor remoto mediante el método HTTPConnection >>> c = httplib.HTTPConnectionU ("www.linux-magazine.es") >>>
62
Número 10
Usamos el comando GET, con lo que estamos solicitando un objeto. El segundo parámetro del método es la “ruta” hasta el objeto. Así que la URL que estamos solicitando es http://www. linux-magazine.es/index.html. Es importante que la ruta comience con una barra “/”, como si fuese la ruta de un fichero de una máquina. ¿Cómo sabemos si todo ha ido bien? >>> r = c.getresponse() >>> print r.status,r.reason 200 OK >>>
Con getresponse podemos conseguir un objeto que representa los datos devueltos por la conexión. Este objeto tiene, entre otros, los atributos status y reason que nos indican el estado, un número con un significado especial, y la explicación del mismo. En este caso todo ha ido bien y por eso recibimos un “OK”. En caso contrario, si no existiese la ruta que pedimos habríamos obtenido: >>> r = c.getresponse() >>> print r.status, r.reason 400 Bad Request >>>
Ahora ya tenemos la página, solo tenemos que leerla, usando el método read() del objeto respuesta. >>> print r.read() <html> <head> <base href="http://www.U linux-magazine.es/issue/08/" /> <title>Linux Magazine -U Spamassasin, Hypermail,U Encriptación GPG, SDL,U ...
Cuando hayamos finalizado debemos cerrar la conexión invocando el método close() del objeto que representa la conexión, en este caso sería:
WWW.LINUX- MAGAZINE.ES
Figura 2: La imagen del pequeño demonio de BSD rotado 45º con PIL.
>>> c.close() >>>
Para obtener las imágenes vamos a hacer exactamente lo mismo, abriremos una conexión, pediremos la imagen, la almacenaremos en una diccionario y cerraremos la conexión.
Python Imaging Library Nuestra idea original era realizar un mural o collage con las imágenes recuperadas. Python no nos provee de una librería de tratamiento gráfico en su distribución estándar. Eso no quiere decir que no exista tal librería, y no sólo existe, sino que además es muy potente y útil. Nos referimos a Python Imaging Library (ver URL [2] en el Listado de Recursos al final del artículo). La librería PIL (Python Imaging Library) nos va a permitir tratar imágenes en una gran cantidad de formatos. Podremos convertirlas a otro formato, rotarlas, escalarlas, mezclarlas, etc. Aquel lector que haya tenido contacto con programas de manipulación gráfica, como por ejemplo GIMP (ver URL [3] en el Listado Recursos), comprenderá la potencia de una librería con estas funcionalidades.
Listado 1: Ejemplo de uso de PIL 01 >>>mural = Image.new('RGB',(600,480)) 02 >>> im = Image.open("daemon.jpg") 03 >>> im.thumbnail((300,200), Image.ANTIALIAS) 04 >>> mural.paste(im,(0,0)) 05 >>> mural.paste(im,(300,0)) 06 >>> mural.show() 07 >>>
Python • DESARROLLO
Figura 3: Creamos una imagen vacía con PIL y después colocamos otras imágenes en su interior como mosaico.
Como no viene de serie con Python deberemos instalarla en nuestra distribución o sistema operativo. Existen paquetes RPM y DEB de la misma. ¿Cómo se trabaja con PIL? Pues mediante la manipulación de objetos de la clase Image. Esta clase es capaz de albergar imágenes de casi cualquier formato, permitiéndonos manipularlas. Vemos un ejemplo. En la Figura 1 podemos ver la imagen original del fichero daemon.jpg en mi equipo. Vamos a rotarla 45 grados: >>> import Image >>> im = Image.openU ("daemon.jpg") >>> img.rotate(45).show() >>>
En la Figura 2 podemos ver el resultado. Hemos usado el método rotate() al que hemos pasado un ángulo de 45 grados, y
Listado 2: collage.conf 01 02 03 04 05 06
[tamaño] horizontal = 800 vertical = 600
[imágenes] url1 = http://www-mgcm.arc.nasa.gov/M arsToday/marstoday.gif 07 url2 = http://www.sec.noaa.gov/sxi/cu rrent_sxi_4MKcorona.png 08 url3 = http://www.ssec.wisc.edu/data/ sst/latest_sst.gif 09 url4 = http://www.wetterzentrale.de/pics/D2u.jpg
en el resultado hemos invocado el método show() que mostrará el resultado mediante el programa xv (para cerrar xv solo tenemos que pulsar “q”). Nosotros no buscamos rotar imágenes, sino escalarlas. Las imágenes presentes en la web suelen ser de gran tamaño y nosotros queremos crear un mural de un tamaño estático. Tendremos que adaptar las imágenes descargadas para que quepan en el mural. Para hacerlo vamos a insertar las imágenes en una mayor, pero hay muchas maneras de hacer esto. La solución que adaptaremos en nuestro caso es la de dividir la imagen-mural en tantos recuadros como imágenes vayamos a insertar. ¿Cómo sabremos la cantidad de cuadrículas? Pues escogeremos la menor potencia de 2 que sea mayor que nuestro número de imágenes. No es muy complicado, por ejemplo, si tenemos 7 imágenes, 8 (2 elevado a 3) será suficiente. Básicamente multiplicaremos 2 por sí mismo hasta que sea mayor que el número de imágenes que queramos mostrar. Gráficamente lo que haremos será ir dividiendo en anchura y en altura la imagen en cuadrículas, en cada iteración se multiplicará por 2 el número de cuadrículas. Con este método perderemos espacio en la imagen, pero al ser tan sencillo no complicará mucho el código.
Creemos el thumbnail Primero creemos una imagen vacía, ver Listado 1. La Figura 3 muestra el resultado. Esta vez no cargamos ninguna imagen, sino que usamos el método new() que necesita el tipo de pixel (‘RGB’ viene de Red->Rojo Green->Verde Blue>Azul, es uno de los formatos estándar) y el tamaño de la imagen medido en pixels. En nuestro caso hemos escogido 600 pixels de ancho por 480 de alto (presta atención a los “()”, porque la resolución se expresa como una secuencia del tipo “(x,y)” ). Esta nueva imagen no contiene nada a excepción de un decepcionante fondo negro. ¡Vamos a poner algo de color! Cogemos la imagen del “daemon” e invocamos el método thumbnail() que escala la imagen tanto vertical como horizontalmente. Tenemos que pasarle el tamaño deseado como una secuencia, la nueva imagen tendrá un tamaño de
WWW.LINUX- MAGAZINE.ES
Figura 4: Llamaradas solares que amenazan con dejar fuera de combate a los satélites de comunicadciones.
300x200 pixels. Puede aceptar un parámetro adicional, en nuestro caso es Image.ANTIALIAS que debería mejorar la resolución de la nueva imagen. A continuación usamos el método paste() de Image que nos permite “pegar” una imagen dentro de otra en las coordenadas indicadas como segundo parámetro. Pegamos la imagen “daemon” dos veces, la primera en la posición (0,0) del mural y la segunda en la posición (300,0). Podemos ver el resultado usando el método show().
El fichero de configuración Las URLs y la resolución deben ser recogidas por el programa, pero ¿cómo? Existen varias opciones, podríamos pasárselas al programa cuando se ejecute. Las URLs tienen el problema de ser bastante largas en ocasiones, así que la linea de comando para ejecutar el programa puede ser engorrosa. En lugar de eso vamos a usar un fichero de configuración. Cada vez que el programa se ejecute leerá este fichero y recogerá los parámetros oportunos. ¿Qué forma tendrá el fichero? La última tendencia es crear ficheros XML de configuración. Pero el XML puede ser demasiado complicado si tenemos en cuenta que nuestro fichero de configuración puede no tener más de 10 líneas. En UNIX la tendencia es la de usar el formato de “clave = valor” y ese es el que usaremos. El fichero será como el que se muestra en el Listado 2. Leeremos cada línea del fichero, la dividiremos usando el “=” y usaremos la primera parte como clave en un diccionario, y la segunda como valor. Si ya existe la clave, usaremos una lista como valor con
Número 10
63
DESARROLLO • Python
los distintos valores como sobre el collage, de manera entrada. Pero ¿por qué vamos que sea posible pulsar sobre a realizar nosotros el trabajo las distintas imágenes que en duro cuando alguien ya lo ha él aparecen. Al hacerlo se carresuelto? gará la imagen a tamaño natuPython trae en su distribural. El mapa se genera recoción estándar una librería que rriendo el diccionario de imános será de enorme utilidad. genes. Cada entrada del dicAlguien consideró oportuno cionario contiene un objeto de elaborar un analizador de la clase Imagen. archivos de configuración, se Imagen alberga la informallama ConfigParser. Con ella ción de cada imagen descarpodemos extraer la informagada mientras el programa la ción del archivo de configuraalmacena. Se almacenan los ción. datos propios de cada imaEl archivo de configuración gen, como por ejemplo las se compone de “Secciones” y Figura 5: Nuestro panel de control espacial terminado y colocado en coordenadas que ocupará “Opciones”. Cada sección conuna página web generada dinámicamente. finalmente en el collage. tiene varias opciones, y los Como siempre, se espera nombres de las secciones y opciones Cuando un método comienza con “__” que el lector dedique algo de tiempo a deben ser únicos. Por eso las URLs se convierte en privado. Cualquier intenjugar con el programa para adaptarlo a comienzan con “url1”, “url2” y “url3”. to de hacer uso de ese método generará sus necesidades o ideas. Pero esto no será un problema, vemos una excepción. Por tanto esos métodos Conclusión cómo funciona ConfigParser (ver Listado no pueden ser invocados desde fuera del 3). Como podemos apreciar en el ejemLa complejidad de un programa Python objeto Collage. De esta manera Collage plo, el uso de ConfigParser es muy sencino depende de la cantidad de líneas de sólo tiene un método accesible desde el llo. Primero se crea el analizador, guarcódigo que contenga, sino más bien del exterior, generaCollage(). Se ha separado dándolo en la variable config. Después nivel al que trabaje. En el programa de la generación de HTML de la del collage cargamos con el método readfp() el ficheeste artículo hemos hecho uso intensivo para posibilitar las futuras extensiones ro de configuración; este método también de librerías que han realizado acciones del objeto. Por ejemplo podríamos no analiza el fichero. A partir de ese momenmuy complicadas por nosotros. Python querer generar un fichero HTML sino to podemos realizar preguntas al objeto posee una amplio abanico de librerías a incorporar la imagen en un programa. En almacenado en config. Con sections() explotar, muchas de ellas con años de tal caso heredaríamos de Collage y creaobtenemos una lista de las secciones y desarrollo esperando a programadores ríamos un nuevo método con options() de las opciones. Con esa con ideas originales que poner en práctigeneraCollage() que solo generase la ■ información ya podemos recoger los ca. imagen y la devolviese. datos necesarios usando el método get(), El método __generaHTML() genera el al que pasamos una sección y una código HTML de la página web. Un opción. punto a resaltar es que genera un mapa RECURSOS
Ensamblemos las partes Ahora ya tenemos: • Un sistema de configuración, usando ConfigParser. • Un sistema para descargar las imágenes, usando httplib. • Un sistema para manipular las imágenes, usando PIL. Nos toca ahora unirlo todo para que genere la página que aparece en la Figura 5. El resultado final se puede descargar de [5]. Crearemos una clase Collage con los métodos • __cargaConf() • __descarga() • __totalXY() • generaCollage() • __generaImagen() • __generaHTML()
64
Número 10
Listado 3: Uso de ConfigParser 01 >>> config = ConfigParser.ConfigParser() 02 >>> config.readfp(open('collage.conf')) 03 >>> config.sections() 04 ['tamaño', 'imágenes'] 05 >>> 06 >>> config.options('imagen') 07 ['url1', 'url3', 'url2'] 08 >>> 09 >>> config.get('imagen','url1') 10 '"http://www-mgcm.arc.nasa.gov /MarsToday/marstoday.gif"'
WWW.LINUX- MAGAZINE.ES
[1] Gráficos que usaremos: http://www-mgcm.arc.nasa.gov/ MarsToday/marstoday.gif http://www.sec.noaa.gov/sxi/ current_sxi_4MKcorona.png http://www.ssec.wisc.edu/data/sst/ latest_sst.gif http://www.wetterzentrale.de/pics/D2u. jpg [2] Python Imaging Library: http://www. pythonware.com/products/pil/ [3] The Gimp: http://www.gimp.org [4] Noticia sobre llamarada solar en Slashdot: http://science.slashdot.org/ science/05/09/08/1933205. shtml?tid=215&tid=14 [5] Listado del programa final de este artículo:
La Columna de Charly • ADMINISTRACIÓN
El día a día del Administrador de Sistemas: HTPDate
LAS HORAS A pesar de las continuas interrupciones tan típicas de los encuentros de LUG, nuestro intrépido columnista, Charly, nos revela cómo configurar la hora del sistema a pesar de tener bloqueado el puerto NTP. POR CHARLY KÜHNAST
E
stoy escribiendo este artículo página del servidor web (GET/HTTP/ desde el Campamento LUG en 1.0). Muchos servidores proporcionan Wuppertal, Alemania, y la hora información adicional con el código es… - er, no tengo ni idea. Un tipo amaHTML; como podría ser el número de ble de la LUG Flensburg me ha dado una versión del HTTPD, junto con la fecha botella de cerveza Flensburg y le he dado actual y la hora: las gracias… HTTP/1.1 200 OK Se ha hablado bastante acerca de NTP Date: Sat, 07 May 2005 U (Network Time Protocol) basado en la 17:53:46 GMT sincronización del tiempo y, de hecho, Server: Apache/2.0.53 (Linux) confieso que he escrito sobre NTP en X-Powered-By: PHP/4.3.10 otras ocasiones. Pero hoy, comentaré cómo sincronizar la fecha del sistema sin He tenido que estornudar. Alguien me ha NTP. ¡Arriba el telón y bienvenidos a preguntado si podría callarme, por favor. HTPDate [1]! Gracias otra vez. Por supuesto, NTP es una herramienta Hay dos variantes de HTPDate: una a tener en cuenta si se necesita sincroniestá escrita en Perl y la otra en C. Vamos zar el reloj del sistema a través de la red. Pero hay veces en las que la sincroniListado 1: htpdate -d zación a través de 01 google.com 07 May 2005 18:18:15 GMT (0.223) => -4 la red es imposible. 02 web.de 07 May 2005 18:18:15 GMT (0.023) => -4 Por ejemplo, si la 03 yahoo.com 07 May 2005 18:18:19 GMT (0.188) => -3 máquina que nece04 #: 3, mean: -4, average: -3.667 sita sincronizar está oculta tras un buen firewall mantenido por un adminisa echarle un vistazo a la variante C, la trador paranoico que dice cosas como versión 0.7.2, que está disponible como “¿NTP? Nunca escuché eso, así que un fichero tar o un paquete RPM. ¡debe ser algo malo!”. Primeros Pasos HTPDate permite que HTTP pueda escaparse, utilizando el proxy en caso de HTPDate es asombrosamente fácil de necesitarlo. Esta herramienta utiliza usar. Hay dos formas: modo interactivo y Telnet en el puerto 80 para obtener una modo servicio. En el modo interactivo, primero comprueba si está disponible el servidor para usarlo como fuente de SYSADMIN tiempo: Bacula….….………………………..
66
Una herramienta gratuita de backup para la empresa El Taller del Administrador………… 70 Herramientas para la documentación de línea de comandos
htpdate -d google.com U web.de yahoo.com
La opción -d habilita el modo de depuración, que le indica a HTPDate que muestre la salida de los tiempos y el
WWW.LINUX-MAGAZINE.ES
tiempo de respuesta, como se muestra en el Listado 1. Alguien cercano parece que le gusta Iron Maiden. Desafortunadamente, parece no haber oído hablar de los auriculares. Gracias de nuevo… El valor en los paréntesis que siguen a la marca de tiempo es el tiempo de respuesta. Como puede ver, el servidor de web.de proporciona una respuesta mucho más rápida que los otros dos. Voy a apostar mi dinero en web.de ya que el tiempo de respuesta mostrado para web.de en el Listado 1 garantiza que web.de seguirá una señal de tiempo mucho más precisa. Como se dice, HTPDate aceptará hasta 16 servidores web. Trabajando como root, ahora puedo lanzar HTPDate en modo servicio (-D): htpdate -D -x web.de U [Server2 Server 3 ...]
El parámetro -x en el comando anterior le indica a HTPDate que no se sincronice con el tiempo de una vez, sino que lo haga gradualmente hasta obtener el tiempo correcto. Este método de sincronización gradual hace que las aplicaciones que necesiten una señal de tiempo regular, por ejemplo RRDTool, tengan ■ una mejor respuesta.
RECURSOS [1] HTPDate: http://www.clevervest.com/ htp/development.html
Número 10
65
ADMINISTRACIÓN • Bacula
Mejores Copias de Seguridad con el Sistema de Backup Bacula
EL PODER DEL BACKUP Cuando las tareas de backup llegan a ser demasiado complicadas para un script, la herramienta de backup gratuita Bacula puede ser la respuesta. POR JENS-CHRISTOPH BRENDEL y MARC SCHÖCHLIN
H
ay políticas de backup de todas las formas y colores. Las políticas baratas usan simplemente scripts y en el peor de los casos invocan a las herramientas nativas del sistema operativo (tar, dd, cpio). Estas soluciones están bien para las copias de seguridad locales con poco volumen de datos o para entornos con pocos clientes. Las políticas de backup de precio medio usan técnicas mucho más sofisticadas. Herramientas como rsync y Amanda son efectivas en muchos entornos, pero estas herramientas a menudo requieren las habilidades de scripts avanzados y tienen algunas limitaciones ocultas concernientes al tiempo, volumen y soporte hardware. Las herramientas a nivel empresarial eliminan muchas de estas restricciones pero normalmente tienen un alto precio. La excep-
66
Número 10
ción que confirma la regla es Bacula [1], una utilidad de copias de seguridad gratuita que ofrece una gran variedad de características que normalmente están asociadas a productos comerciales de alto precio. Bacula no es una aplicación monolítica sino que es un conjunto de varios servicios junto con una interfaz de usuario. Los servicios tienen responsabilidades establecidas y utilizan la red para comunicarse. Este diseño distribuye la carga de trabajo con el control centralizado en la estación de trabajo del administrador, con las cuentas manipuladas por un servidor de base de datos y el trabajo duro -es decir, la lectura y escritura de datosmanejado por un equipo de servicios de ficheros del lado cliente y servicios de almacenamiento en los servidores de backup. Por supuesto, se puede usar una única máquina para múltiples funciones, lo que representa una arquitectura fácilmente escalable y flexible (Figura 1).
Liderazgo Central El jefe a cargo del equipo formado por los servicios recibe el
WWW.LINUX-MAGAZINE.ES
nombre de director. El director sabe dónde hay que almacenar y dónde puede localizar los ficheros requeridos, si un usuario necesitara recuperar los ficheros perdidos. El director también conoce la planificación, los clientes, la localización de los almacenes y los detalles de los trabajos planificados, aunque la copia de seguridad real se lleve a cabo por los servicios subordinados. El servicio director de Bacula también tiene la distinción de ser el único servicio del sistema Bacula que es capaz de comunicarse con un usuario humano. El director almacena los detalles de la configuración en un fichero ASCII (bacula-dir.conf) con las descrip-
Bacula • ADMINISTRACIÓN
Figura 1: Divide y vencerás: Bacula distribuye la funcionalidad de las copias de seguridad por toda la red, pero utiliza un almacenamiento centralizado.
ciones de los recursos estructuradas jerárquicamente. El nodo raíz de la jerar-
quía es un recurso que contiene la configuración para cada tarea específica.
Estas configuraciones de las tareas incluyen el tipo de tarea (backup, restore, verificación o administración), el tiempo de ejecución o el nivel (para una copia de seguridad: completo, incremental o diferencial). Para simplificar las cosas, la mayoría de los detalles están agrupados en subrecursos, denominados directivas. Las características comunes de trabajos parecidos también pueden agruparse como recursos JobDefs para formar una clase de tarea, que otras descripciones de tareas pueden referenciar. Esta solución simplifica el fichero de configuración y ahorra espacio. Por ejemplo, el tipo de recurso Schedule define la planificación que ejecuta tareas a intervalos específicos y soportan casi cualquier clase de planificación. El recurso FileSet lista los directorios y ficheros que se tiene planeados salvar. Los directorios se manipulan recursivamente, lo que quiere decir que la / nos permite especificar la forma más simple y completa de backup, aunque
El Futuro Bacula es sin duda el sistema de backup de código abierto que se puede usar en entornos a gran escala para cubrir las necesidades profesionales. La herramienta de backup es sin duda adecuada para usarse con sistemas en producción, pero aún existen algunos elementos que deberán mejorarse en futuras versiones: * Seguridad: Actualmente, no hay soporte para los backups encriptados por parte de los servicios. Dicho de otro modo, un atacante podría fisgonear el tráfico de la red local para acceder a los datos que se estén salvando. Esto es especialmente delicado en entornos donde se manejen datos confidenciales o cuando un proveedor externo desee ofrecer servicios de backup. Como medida de seguridad se puede establecer un túnel SSH para encriptar la comunicación entre los servicios de ficheros y el director. En entornos Windows, al menos, sería interesante incluso instalar un antivirus. Las soluciones para este problema se están teniendo en cuenta en este momento. * Grandes Bibliotecas: Aunque varias tareas de backup puedan ejecutarse simultáneamente, todavía hay necesidad de mejorar el procesamiento en paralelo. Por ejemplo, un servicio de
ficheros no puede usar multiplexado para proporcionar datos a múltiples servicios de almacenamiento, aunque esta configuración mejoraría el rendimiento para grandes volúmenes de datos. Los grupos de dispositivos que pueden asignar estáticamente varios dispositivos para una tarea concreta y permitir que la tarea seleccione cualquier dispositivo del grupo, no está soportada actualmente. Tampoco hay soporte para asignar dinámicamente los dispositivos no ocupados para las tareas pendientes. Esto hace que sea difícil que una biblioteca con múltiples lectores de cintas se ponga a máximo rendimiento. * GUI: Actualmente no se dispone de ninguna interfaz gráfica. Aunque se han intentado varias soluciones, no han pasado de ser simples menús en formato texto. Por ejemplo, un administrador de ficheros para la selección basada en una GUI o un calendario para ayudar a establecer la planificación serían útiles. No hay ningún asistente de configuración que ayude a los administradores. Los gurús Unix experimentados puede que no se preocupen por esto, pero hoy en día, la línea de comandos es todo un reto para los usuarios, que optarán por productos que les proporcionen ayuda
WWW.LINUX-MAGAZINE.ES
en línea y la posibilidad de apuntar y hacer clic con el ratón. * Backups Online: No se dispone de módulos para realizar backups online de bases de datos. Tampoco hay forma de hacer backups de aplicaciones que tengan ficheros abiertos y los bloquee para impedir que accedan otros. El director compensa esto, en parte, permitiendo que se puedan ejecutar scripts tanto en el lado cliente como en el servidor y tanto antes como después de realizar una tarea, lo que permite que se puedan parar y reiniciar las aplicaciones en cuestión. Tanto las tareas de backup como de restauración pueden usar FIFOs como fuentes o destino de datos, es posible manejar datos de aplicaciones en ejecución sin tener que acceder a los ficheros. Esto es una alternativa interesante, aunque no puede reemplazar una solución de backup online completa. * Extras: Los sistemas de backup comerciales proporcionan a los usuarios varios extras que Bacula no posee. Por ejemplo, los sistemas comerciales a menudo proporcionan el clonado de los soportes de grabación para mitigar los efectos de los errores irrecuperables de lectura, así como de herramientas para gestionar la recuperación de sesiones interrumpidas.
Número 10
67
ADMINISTRACIÓN • Bacula
probablemente prefiera excluir algunos directorios como /tmp o ficheros ocultos como .journal o .fsck. El sistema de backup tan sólo traspasará la frontera del sistema de ficheros cuando se le indique explícitamente. La configuración por defecto lo mantiene en el sistema de ficheros actual para evitar el daño que pudiera ocasionar al entrar en bucles infinitos o salvar servidores de ficheros de forma inadvertida. Si se desea mantener esta medida de seguridad habrá que enumerar cada sistema de fichero local que el cliente tenga montado para poder realizar un backup completo. Desde luego, Bacula también soporta tareas más complejas. Por ejemplo, se puede referenciar a una lista externa de ficheros, a expresiones de la shell o scripts que produzcan listas de copias de seguridad en tiempo de ejecución. Se entiende por comandos shell en línea a los caracteres de escape no estándar y a los espacios en blanco, los scripts son la opción más sencilla. Imagínese que se quiere realizar una copia de seguridad de todos los ficheros de configuración del directorio /etc y de todos los ficheros ocultos y directorios en el directorio home del usuario jcb. El siguiente mini-script se encargaría de realizar la tarea de backup: #!/bin/sh find /home/jcb U -maxdepth 1 -name ".*" find /etc -name "*.conf
En el siguiente ejemplo, el FileSet se definiría como sigue: FileSet { name = "ConfigSet" include { Options { signature = MD5 } File = U "|/etc/bacula/confbackup.sh" } }
Además de usar ficheros, listas o scripts, los administradores pueden especificar dispositivos como entrada de datos (aunque estos dispositivos tan sólo pueden ser montados en formato de sólo lectura). Y finalmente, el backup puede incluso leer datos desde fuentes FIFOs, que
68
Número 10
Figura 2: GConsole no proporciona una GUI, pero al menos facilita una consola gráfica con varios menús que hace que no necesite una ventana de terminal.
enlazan una aplicación activa con el backup. Este nivel inusual de flexibilidad tiene un precio: la selección de fuentes es mucho menos intuitivo que dejar a un administrador que seleccione los ficheros desde una interfaz basada en GUI. Una combinación basada en ambas soluciones sería ideal.
Inclusión de Grupos Otra directiva de configuración define grupos de volúmenes y además se establecen independientemente. Un grupo está formado por varias cintas de forma lógica, permitiendo de esta forma que puedan exceder la capacidad de una simple cinta física. Cuando el backup llega al final de una cinta, Bacula continúa con la tarea en la siguiente cinta disponible del mismo grupo. Esta solución permite reciclar cintas antiguas en el grupo después de un período configurable de tiempo. Los recursos de grupo están controlados por varias configuraciones. Por ejemplo, el período de espera para la reutilización del soporte o el número máximo de ciclos de vida. Estas configuraciones se aplican a todas las cintas del grupo, los administradores no tienen que establecer las preferencias para cada soporte del grupo, aunque esta opción está disponible. La asignación de las cintas a diferentes grupos también ayuda a organizar las cintas por tipo de uso, evitándose la mezcla o incluso la sobreescritura de cintas usadas en copias completas o en copias incrementales. Se puede incluso definir grupos para clientes individuales, días de la semana, etc. El cambio automático de cintas supone que se dispone de una biblioteca de
WWW.LINUX-MAGAZINE.ES
ellas. Bacula soporta varios robots de cintas, también llamados autocambiadores o autocargadores con dispositivos DAT, VXA2, DLT, LTO y AIT. La herramienta Mtx [2] que Bacula utiliza para controlar las bibliotecas de cintas soporta incluso etiquetas de códigos de barras, que permiten al robot identificar una cinta sin tener que cargarla en el lector. En algunos casos (por ejemplo, cuando las cintas han sido colocadas a mano en la biblioteca) las cintas tienen que ser realineadas a sus posiciones previas. Si esto ocurre, el soporte de código de barras, sin duda, valdrá la pena.
Catálogos Cuando Bacula graba un fichero en una cinta, además, guarda detalles como su tamaño, sus atributos, su firma, la fecha de la última modificación o la fecha y la localización de la copia en una base de datos denominada catálogo. Este directorio es el tercer punto que hace que Bacula sea diferente de los scripts, permitiendo la restauración de ficheros individuales sin la necesidad de leer el archivo completo. Los ficheros que se desean restaurar pueden ser simplemente seleccionados referenciando los metadatos, que incluyen la posición de los ficheros requeridos en las cintas. No hay necesidad de leer la cinta secuencialmente de cabo a rabo; por el contrario, Bacula puede posicionar la cinta (al menos al principio de la tarea). Además, el catálogo almacena un historial de todas las tareas de backup. Bacula puede usar cualquier base de datos SQL para las tareas de gestión. El paquete incluye scripts de configuración para PostgreSQL, MySQL y SQLite. El soporte de estas bases de datos SQL populares permite a los administradores hacer copias de las bases de datos y acceder a ellas manualmente si las cosas empeoraran. Una pérdida o un catálogo inconsistente son algunos de los problemas más críticos que pueden afectar a un sistema de backup. Para mitigar el efecto de la pérdida del catálogo, el paquete Bacula incluye scripts que almacenan el catálogo en un fichero ASCII cuando una tarea se está realizando. Si algo fuera mal, por lo menos, la versión previa se recuperará fácilmente. Casualmente, se puede usar el directorio de Bacula para almacenar ficheros que realicen una detección sencilla de
Bacula • ADMINISTRACIÓN
intrusiones con Tripwire o Aide. Dos funciones integradas, que pueden ser ejecutadas independientemente de las características de backup o recuperación, están diseñadas para recuperar metadatos para compararlos con los sistemas de ficheros. Se pueden detectar modificaciones no autorizadas.
El Equipo Por supuesto, un director no es nadie sin su plantilla. En Bacula, el director manda sobre dos grupos de subordinados: uno o varios servicios de almacenamiento y varios servicios de ficheros. Estos últimos se ejecutan en el lado cliente y utilizan la red para suministrar los datos a los servidores de almacenamiento. Es aquí donde los servicios de almacenamiento se ejecutan, soportando cintas o bibliotecas. Si fuera necesario, el servicio de almacenamiento también puede hacer backups sobre discos y esto puede ser útil para las soluciones intermedias de almacenamiento de las últimas copias en discos duros. Los servicios de ficheros están disponibles para Linux, para la mayoría de los sistemas operativos basados en Unix (por ejemplo, Solaris, AIX, HPUX, FreeBSD e incluso MacOS X) y todas las versiones de Windows. Esto más o menos elimina la necesidad del uso de Samba o NFS, aunque ambos están soportados.
¡Marcha Atrás! La recuperación de datos reinvierte el proceso de backup. Cuando se le dice al director que lo haga, el servicio de almacenamiento envía los ficheros solicitados al servicio de ficheros, que se encarga de almacenarlos en el cliente. Los ficheros no se restauran a sus posiciones originales; sino que se crea un nuevo árbol de ficheros en un directorio especial. La configuración de la tarea de recuperación puede especificar cual va a ser este directorio; por supuesto, el sistema de ficheros tiene que tener el espacio suficiente para almacenar dichos ficheros. Por defecto es /tmp/bacula-restores. Se puede modificar este comportamiento especificando el directorio raíz como el destino de la recuperación. Esto hace que los ficheros se restauren a sus localizaciones originales. Una aclaración en este punto: Bacula no tiene una política de resolución de conflictos. Si un
fichero que se está restaurando ya existe en el directorio de destino, dicho fichero ni se protege ni se renombra, simplemente se reemplaza y esto puede ser que no se desee. Hay varias formas de seleccionar los ficheros que se desean restaurar. Todas ellas pasan por recorrer un árbol de directorios virtual Figura 3: JBacula, un proyecto desarrollado independienteque contienen todos los mente, ayuda a configurar el servicio de directorios. ficheros almacenados en la cinta. Se puede navegar por este árbol usando los comandos UNIX típiEsta técnica no es lo suficientemente cos (cd, ls, pwd, …). Y habrá que utilizar granular como para permitir a cada algunos comandos para marcar los ficheros usuario que pueda restaurar sus propios y directorios que se desean recuperar (de ficheros sin tener que pedírselo al adminuevo, una interfaz basada en GUI sería nistrador, pero permite delegar dentro de una buena alternativa). un grupo administrativo. Como un servicio especial, Bacula perEn muchos casos, el pedirle a un mite combinar el último backup compleusuario que restaure datos es mucho to para un cliente y todos los backups más que un reto, ya que Bacula no disincrementales subsecuentes en esta pone de una interfaz en la que se pueda vista. Incluso se puede restringir la selecapuntar y hacer clic. Herramientas ción a todos los ficheros que se hayan como Wxconsole y Gconsole proporciosalvado antes o después de una determinan unos cuantos menús que eliminan nada fecha. la necesidad de memorizar y teclear los Las versiones actuales de Knoppix [3] comandos, pero aún así disponen de incluyen un servicio de ficheros de Bacula una línea de comandos para poder ejey una consola, lo que hace que Bacula sea cutar comandos que no son posibles muy útil como una solución simple para la llevarlos a cabo de otra forma. La recuperación tras un desastre, suponiendo herramienta basada en Java JBacula que se sepa cómo se tiene particionado [4], que es un proyecto separado, procada disco que se haya salvado y también porciona plantillas y utilidades que se tengan, en una localización diferente, facilitan la configuración del servicio los ficheros de control de Bacula. Un CD de directorios. de recuperación de Bacula, para intentar Conclusiones recuperar un sistema después de un fallo completo, no funcionará con los últimos Los administradores que no le tengan kernels de Linux (2.6.x), aunque se está miedo a la línea de comandos encontratrabajando en ello. rán que Bacula es una herramienta muy útil, extremadamente flexible y con Designación de características profesionales. Bacula conResponsabilidades tiene una buena documentación y se El acceso a la consola de Bacula está integra fácilmente en entornos con siste■ gobernado por los permisos de ejecución mas heterogéneos. del usuario: la aplicación no solicita a los usuarios que se autentiquen y no soporta RECURSOS diferentes niveles de privilegios para los [1] Sitio web de Bacula: http://www. usuarios. Sin embargo, se pueden confibacula.org gurar variantes de la aplicación de la [2] Mtx para el control de Bibliotecas: consola tan sólo soporten tareas específihttp://mtx.badtux.net cas o subconjuntos de comandos, [3] Knoppix con Bacula: http://www. FileSets, grupos de soportes o dispositiknopper.net/knoppix/index-en.html vos. Esto permite a los administradores [4] JBacula: http://jbacula.sourceforge. tener un margen para poder disponer de net una gestión de usuarios.
WWW.LINUX-MAGAZINE.ES
Número 10
69
ADMINISTRACIÓN • Documentación
Consejos desde dentro: Documentación en Unix y Linux
EL APUNTADOR Los administradores de sistemas recurren frecuentemente a la documentación para obtener ayuda con las opciones de línea de comandos poco conocidas. En el artículo de este mes del Taller del Administrador, examinamos los programas y formatos detrás de la documentación que leemos cada día. POR MARC ANDRÉ SELIG
L
a mayoría de los usuarios de Linux terminan acudiendo a la línea de comandos tarde o temprano. Los programas en línea de comandos suelen ser más flexibles y eficientes que su equivalente gráfica. Pero tiene también una desventaja: innumerables opciones y parámetros que nadie puede recordar. La lista de opciones asociadas con cada comando crece y crece, con lo que se hace imprescindible para el administrador una detallada y accesible documentación. La documentación debería evitar ser compleja: las presentaciones sofisticadas definitivamente no son el tipo de referencia que necesitamos para los desarrollos software, y la mayoría de los desarrolladores prefieren no perder tiempo acicalando su documentación. Esas consideraciones pragmáticas han conducido a distintas soluciones de documentación en línea que representan diferentes compromisos entre legibilidad y facilidad de elaboración.
Páginas de Manual Las páginas de manual, o más brevemente páginas man, son el medio más comúnmente usado. Las páginas man son rápidas y fáciles de crear por el desarrollador, así como sencillas de mantener actualizadas. De hecho, el entorno Linux incluye herramientas especiales que actualizan las páginas man haciendo referencia a los cambios en el código fuente. Estas páginas son fáciles de instalar y extremadamente amigables. Una página man, como la mostrada en la Figura 1, es un documento único que cubre un tema específico, generalmente un comando. Los programas desarrollados específicamente para esta tarea ayudan a los usuarios
70
Número 10
WWW.LINUX-MAGAZINE.ES
Documentación • ADMINISTRACIÓN
a encontrar y mostrar Los manuales se las páginas man en guardan en directorios una línea de comandedicados al efecto [2] dos, en una interfaz lo que facilita su busgráfica de usuario o en queda. Existe un direcuna web. torio para cada sección: El formato de archiman1, man2, etc. El vo subyacente de las archivo páginas man viene de /etc/manpath.config y Roff, un sistema de la variable de entorno formateado de texto MANPATH, le indican a que se remonta a man dónde buscar la principios de los 70 documentación. (véase el código fuenLa distribución de las te en el Listado 1). En páginas a través de los los modos usados por directorios fue un aforlas páginas man, sólo tunado cambio en los se contempla un forprimeros días de Unix. mateado básico, El sistema de archivos como cabeceras, UFS de la época consisubrayado o enumeguió un gran rendiración. Esta simplicimiento en encontrar la Figura 1: Las páginas man ofrecen al usuario una rápida y cómoda manera de visuadad garantiza que enorme cantidad de lizar documentación. cualquiera pueda archivos guardados en crear una página man un directorio. con el mínimo esfuerzo. bash. Los front-end gráficos muestran Dependiendo de la configuración, man Cualquier distribución reciente de algunas vistas alternativas. guarda las páginas formateadas (llamaLinux tiene un buen número de páginas das páginas cat) en directorios configuraNavegar en la Jungla Man man, incluso las más ligeras, dado que dos al efecto. Esta solución elimina la no necesitan mucho espacio. Además de Cada página man se asigna a una sección necesidad de formatear la página man la esto, muchos programas vienen con sus específica: la Tabla 1 tiene resumen de las próxima vez que un usuario la requiera, propias páginas man. El proyecto Linux ocho secciones más importantes. Además una obvia ventaja para equipos antiguos Documentation Project [1] tiene inforde las secciones numeradas, existe un o de bajo rendimiento que no tienen mación adicional de temas básicos como buen número de secciones organizadas demasiada potencia. Algunos sistemas libc y el kernel. por letra. Son, habitualmente, las letras n montan la partición /usr como de sólo Podemos recurrir a una página man (de nuevo), l (local), p (público) y o (old, lectura para mejorar la seguridad. En pasándole el nombre de la página, geneviejo). La mayoría de los sistemas Linux este caso necesitaremos guardar las págiralmente el nombre del comando, como colocan las páginas man del lenguaje Tcl nas cat bajo /bar. argumento del programa man: man en la n, por ejemplo. En carpetas adicionales tendremos páginas man traducidas a otros idiomas. Por ejemlo, la página en inglés para Listado 1: Código Fuente de una Página Man chmod debería estar guardada en /usr/share/man/man1/chmod.1, mien01 .TH man 1 "14 May 2001" 14 [...] tras que la versión en alemán estará en "2.3.19" "Manual pager utils" 15 .SH DESCRIPTION /usr/share/man/de/man1/chmod.1. 02 .SH NAME 16 .B man 03 man \- an interface to the on-line reference manuals 04 .SH SYNOPSIS 05 .\" The general command line 06 .B man 07 .RB [\| \-c \||\| \-w \||\|\-tZT 08 .IR device \|] 09 .\" 10 [...] 11 .RI [\|[\| section \|] 12 .IR page \ .\|.\|.\|]\ .\|.\|. 13 .\"
17 is the system's manual pager. Each 18 .I page 19 argument given to 20 .B man 21 is normally the name of a program, utility or function. 22 The 23 .I manual page 24 associated with each of these arguments is then found and displayed. 25 .\"
WWW.LINUX-MAGAZINE.ES
¿Qué es Apropos? Si estamos buscando un comando específico y no estamos seguros de haber encontrado el adecuado, los comandos apropos y whatis pueden ser nuestra salvación. apropos busca un determinado argumento en las cabeceras de todas las páginas man guardadas e incluso encuentra argumentos en subcadenas. whatis usa un método similar pero sólo busca coincidencias en palabras completas en las cabeceras. Tanto apropos como whatis usan una base de datos binaria para ace-
Número 10
71
ADMINISTRACIÓN • Documentación
Figura 2: xman permite al administrador ver las páginas man instaladas con un pulcro front-end. xman además puede mostrar una lista de páginas man para una sección específica.
lerar la busqueda de información. Dependiendo de nuestra distribución y versión de Unix, los comandos makewhatis y mandb son los responsables de crear el archivo de base de datos. Este comando se ejecuta con cron o anacron [3] a intervalos regulares de tiempo para mantener los directorios actualizados.
Hágalo-Usted-Mismo Internamente, man usa principalmente las herramientas de Roff nroff o groff. En sistemas GNU, nroof simplemente ejecuta groff para emular el comportamiento del comando original nroff. nroff se usa para la salida ASCII, mientras que la herramienta GNU puede manipular otros formatos de archivo, como Postscript y HTML. El siguiente comando convierte el código de una página man a ASCII (a Latin 1 para ser más precisos), y usa el paginador less para mostrar los resultados: nroff -man manpage.1 | less La opción -m especifica a la macro qué nroff debería usar para interpretar el formato. El paquete de macros an contiene los típicos comandos de páginas man. Muchos sistemas Linux usan el paquete de macros extendido andoc en su lugar (es necesario teclear -mandoc para ejecutar andoc). Los siguientes comandos convierten una página man a Postscript: groff -Tps -man manpage.1 > manpage.ps. La opción -T especifica el formato de salida deseado.
72
Número 10
Figura 3: Tecleando info en línea de comandos ejecutamos este sencillo sistema de ayuda con formato de árbol.
Crear una página man es muy fácil. El comando Roff siempre empieza con un punto. Las opciones requeridas le siguen en la misma línea. Existen un puñado de importantes comandos de formateo para las páginas man: .TH inicia una página man y requiere un título corto, el número de sección, la fecha, versión y título largo como argumentos. Al mostrarse, esta información se coloca en la cabecera y en el pié de página. .SH proporciona un subtítulo. .B es para negrita, .I para cursiva (o subrayado, dependiendo del terminal). Una línea
Front-Ends gráficos Existen Front-Ends gráficos con soporte de operaciones con ratón tanto para las páginas man como para los sistemas info. Por ejemplo, xman es una interfaz simple pero cómoda. Los administradores pueden pulsar [Ctrl+S] para buscar una página man. Alternativamente, podemos mostrar todas las páginas man en una sección específica, como se muestra en la Figura 2. Si preferimos usar nuestro navegador para explorar la documentación, podemos probar man2html. Existe una enorme colección disponible en línea en [4], por ejemplo. tkinfo muestra las páginas info en el escritorio, sin embargo, las funciones y apariencia se parecen al original (véase Figura 3), que además tiene soporte para operaciones con ratón en Emacs, por ejemplo.
WWW.LINUX-MAGAZINE.ES
vacía indica fin del párrafo, y tecleando .BR tendremos un retorno de carro. Antes de precipitarnos a copiar una página man original y reemplazar su contenido con el nuestro, una advertencia: los títulos (.SH) están normalizados. La primera sección, NAME, tiene un significado especial, ya que su contenido se analiza por las bases de datos que se describen en los siguientes apartados.
El Tamaño Sí Importa La mayor ventaja de las páginas man son pequeñas y simples. Sin embargo, las cosas se complican si el desarrollador necesita documentar escenarios más complejos o paquetes de software. Por ejemplo: las páginas man de los distintos shells, cada uno de los cuales describe un lenguaje de programación completo con todas sus herramientas e indicaciones, lo que significa realmente mucho. La página man de Bash comprende unas 4.000 líneas (o 60 páginas impresas) y es cualquier cosa menos intuitivo. Perl muestra un posible método para evitar una sobrecarga en la página man: dividirla en varias secciones, de manera que el usuario pueda cargar las secciones que necesite. Una página de bienvenida proporciona ayuda para la navegación y una tabla de contenidos.
Sistema Info El sistema info es otra alternativa a la sobrecarga de una página man. En lugar del formato lineal adoptado por las pági-
¡Hazte con tus ejemplares atrasados! #1
¡No esperes a que se agoten!
#2
#5
¡pídelos ya! #3
#6
#8
¡pídelos ya!
o d a t o g a #4
#7
#9
W W W. L I N U X - M A G A Z I N E . E S
ADMINISTRACIÓN • Documentación
tura organizada y dispuesta de manera clara es una gran ayuda.
Info y el Usuario El comando info permite al usuario navegar en el sistema de información. Además de esto, los editores Emacs y XEmacs tienen modo de sistema de navegación en info (véase Figura 4). En el caso más sencillo, el usuario querrá navegar por las páginas Figura 4: El editor Emacs permite a los usuarios navegar por info desde arriba hasta el sistema info. Si lo ejecutamos bajo X añadiremos el soporabajo. Pulsando la barra te para ratón en los menús info. espaciadora avanzamos por el texto, y presionannas man, el sistema info usa una estructudo la tecla de retroceso regresamos ra en árbol con menús y submenús para atrás. organizar el texto (véase Figura 3). Las Los pasos de navegación alternativos referencias cruzadas adicionales que estén tienen más sentido cuando el texto se incrustadas en el árbol, permiten al usuaramifica en función de condiciones. Los rio ir delante o atrás rápidamente entre menús están etiquetados como *Menu, y temas relacionados. Un sistema de navenos proporcionan una visión general de gación bien diseñado facilita las cosas a la sus nodos subordinados. Podemos pulhora de navegar por la estructura. sar [M] para pasar a un punto del menú. Al usar un árbol para distribuir la Es suficiente con teclear las primeras información reflejamos la forma en la letras de la etiqueta del menú en el que la gente usa los ordenadores. Si prompt y presionar [Tab] para completar. empezamos a usar un nuevo lenguaje de Si movemos el cursor hasta la entrada script, por ejemplo, necesitaremos prideseada y presionamos [Enter] obtendremero una pequeña introducción, tras la mos el mismo efecto. que podremos pasar directamente a la Otros atajos son [N] (para ir a la información que necesitamos, saltándosiguiente página), [P] (para ir a la página nos los temas innecesarios. Una estrucanterior) y [U] (para ir a la página matriz). Las etiquetas see apuntan a referencias cruzadas. Podemos presionar [F] Tabla 1: Secciones Man para seguirlas. Por último [L] nos mostrará la última página vista. Sección 1
2 3
4 5
6 7
8
74
Número 10
Descripción Ejecutables o comandos shell Llamadas al sistema (funciones del núcleo) Llamadas a librería (funciones en librerías del sistema) Archivos especiales (generalmente en /dev) Formatos de archivo y convenciones, v.g. /etc/ passwd Juegos Paquetes de macros y convenciones (como XF86Config, man) Comandos de adminis tración (como lsmod, ifup)
Código Fuente del Archivo Info Antes de convertirlas en un formato comprensible para el lector, los archivos fuente info (identificables por la extensión .texi) tienen un aspecto similar a un documento TeX con algún etiquetado adicional. Los comandos de TeX empiezan por una barra invertida, \, mientras que los comandos info usan una arroba (@.) Para crear nuestros propios archivos info, necesitamos el paquete texinfo, que contiene documentación detallada del formato texi (en formato info, por suspuesto) entre otras cosas. Los archivos .texi pueden convertirse en archivos
WWW.LINUX-MAGAZINE.ES
.info utilizando el comando makeinfo. Los archivos residen habitualmente en /usr/info o /usr/share/info, al igual que el archivo dir, que ofrece una visión general de los archivos info instalados en nuestro sistema. El lector de info muestra el archivo dir como una especie de página inicial al ejecutarse. De la misma manera podemos ejecutar TeX para convertir archivos texi a DVI, o convertirlos a otros formatos como PDF y Postscript. TeX es capaz de leer archivos texi. El archivo realiza la llamada al paquete de macros en la primera línea (\input texinfo), y esto permite a TeX interpretar los comandos at que le siguen. TeX devuelve un archivo DVI, junto con un cierto número de archivos índice, como salida. makeinfo y compañía leen los mismos comandos at que TeX, pero devuelven un documento info para mostrarlo de manera interactiva en pantalla.
Leame’s, Cómo’s y FAQ’s A la hora de enfrentarse a la elección de las herramientas de documentación, el administrador no debe olvidar la forma más simple de documentación. Los archivos sólo-texto (típicamente llamados LEAME) se proporcionan con la mayoría de los programas y a menudo contienen información vital. Las distribuciones de Linux sitúan estos archivos en /usr/share/doc/. Encontraremos una gran cantidad de archivos COMO en [1]. Merece la pena visitarlo, ya que encontraremos información para resolver numerosas tareas criticas en Linux, como configurar tarjetas WLAN, quemar ■ DVD’s o configurar LDAP.
RECURSOS [1] The Linux Documentation Project: http://www.tldp.org [2] Estándar en la jerarquía del sistema de archivos de páginas man: http:// www.pathname.com/fhs/pub/fhs-2.3. html#USRSHAREMANMANUALPAGE S [3] Marc André Selig, “Cron, At, Anacron”: Linux Magazine 12/ 04, p. 66. http://www.linux-magazine.com/ issue/49/ Admin_Workshop_Scheduling_with_c ron_at_anacron.pdf [4] Páginas man en la web: http://linux. ctyme.com
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.
76
KTools: KPager 2 Si queremos una mejor visualización de los escritorios virtuales, podemos probar Kpager2, un paginador alternativo para KDE.
78
Metapixel Una herramienta libre que crea atractivos fotomosaicos a partir de una colección digital de imágenes.
81
Desktopía JWM es un gestor de ventanas para usuarios de Linux que requieran una interfaz gráfica de usuario eficiente y no les asuste lidiar con un editor de texto para conseguirlo.
84
Educación Una reivindicación compartida por los profesores de todo el mundo que utilizan software en sus clases es la necesidad de un catálogo de recursos educativos.
89
Línea de comandos Este mes echamos un vistazo a cómo crear y administrar cuentas de usuarios Linux desde la línea de comandos.
WWW.LINUX- MAGAZINE.COM
ISSUE 52 MARCH 2005
71
LINUX USER • KTools: KPager 2
Un paginador alternativo a kicker
CONMUTAR ESCRITORIOS Si queremos una mejor visualización de los escritorios virtuales, podemos probar Kpager2, un paginador alternativo para KDE. POR HAGEN HÖPFNER
C
asi todas las interfaces gráficas de Los usuarios de otras distribuciones usuario bajo Linux muestran necesitarán compilar el programa desde varios escritorios virtuales. Los el código fuente, que está disponible gestores de ventanas más sencillos usan desde la página web de KPager2. Se atajos de teclado para conmutar entre los siguen los pasos habituales para compiescritorios. KDE, Gnome y otros gestores lar e instalar: más avanzados como Enlightenment tienen además un paginador: una vista grá./configure && make U fica miniaturizada de los escritorios que && su -c "make install" permite que pulsemos sobre ellos para cambiar de escritorio. En La versión actual 0.6.0 de KDE tenemos el programa KPager2 no funcionará con kpager, que se sitúa norla versión 3.4 de KDE, malmente como un applet Figura 1:KPager2 en la aunque los desarrolladores bajo la barra de tareas de barra de herramientas. están trabajando intensaKDE. Si el paginador por mente en resolverlo. Si defecto no cumple con nuestras espectatenemos KDE 3.4, aún podemos intentar tivas, tal vez deberíamos cambiarlo por usar KPager2: otro posible método es una herramienta más adecuada. Una alternativa útil es el KPager2.
Instalación La manera más fácil de integrar KPager2 con Suse y Debian Linux es usar el escritorio KDE. Existen paquetes KPager2 para ambas distribuciones en [2] y [3].
KTools En esta columna presentamos herramientas, mes a mes, que han demostrado especial utilidad al trabajar con KDE, resolviendo problemas ignorados deliberadamente, o algunas otras pequeñas cosas que, como en la vida misma, una vez descubiertas se nos hacen imprescindibles.
76
Número 10
Figura 2:El menú desplegable nos permite cambiar a una ventana específica o incluso ejecutar aplicaciones.
WWW.LINUX- MAGAZINE.ES
deshabilitar temporalmente el kicker tecleando killall kicker, y reiniciarlo con kicker. Después de hacer esto, no deberíamos tener problemas para ejecutar KPager2 bajo KDE 3.4. Como alternativa, podemos lanzar el paginador tecleando appletproxy /usr/kde/3.4/share/apps/kicker/applets/kpager2.desktop en un terminal. Si hiciese falta modificar la ruta (si KDE 3.4 está instalado en /usr/local en nuestro sistema), el archivo kpager2.desktop se encontrará en /usr/local/share/apps/kicker/applets. Si tenemos una versión distinta de KDE, podemos iniciar el paginador pulsando sobre Add | Applet en el menú desplegable del kicker.
Idas y venidas Al igual que con la herramienta para conmutar escritorios por defecto de KDE, se añadirá una entrada para KPager2 en el menú de inicio. La aplicación mostrará una miniatura de cada escritorio, como se puede apreciar en la Figura 1. Al pulsar sobre cada icono se nos presentará el escritorio correspondiente. Pronto descubriremos algunas características de KPager2 que no encontraremos en el escritorio por defecto de KDE. Por ejemplo, podemos arrastrar y soltar las ventanas de la vista de una miniatura hasta otro escritorio. Al hacer doble clic en la miniatura de un escritorio se abre el menú mostrado en la Figura 2. Este menú tiene una lista de las ventanas
KTools: KPager 2 • LINUX USER
Figura 3:Configuración de KPager2.
activas en el escritorio en cuestión. Pulsando en las entradas no sólo nos lleva al escritorio, sino que se le indica a KPager2 que sitúe el foco en la ventana deseada. El menú All Windows on Desktop nos permite modificar las propiedades de todas las ventanas de un escritorio. Por ejemplo, podemos pasar todas las ventanas a icono de golpe. Si hacemos clic en una ventana del paginador, el menú desplegable nos ofrece simplemente la posibilidad de maximizar o minimizar la ventana actual. El menú contextual tiene una entrada llamada Configure Virtual Desktops. Pulsando sobre ella aparece el cuadro de configuración de los escritorios virtuales de KDE. Desde aquí podemos decidir cuántos escritorios vamos a tener en KDE. La entrada Run command nos permite iniciar programas.
Ajuste Fino KPager2 no sólo tiene más funcionalidades, sino que también tiene gráficos más vistosos que el paginador de KDE. Por ejemplo, nos proporciona una vista previa de cualquier ventana activa. Esto no es sólo un alarde visual, sino que podemos ver realmente lo que está pasando en la ventana de Mozilla del escritorio 2 mientras que estamos trabajando en el escritorio 1. El cuadro de diálogo Configure KPager2 (véase Figura 3) nos permite configurar el nivel de soporte gráfico necesario. Desplegamos el menú del applet para acceder a este cuadro de diálogo. El cuadro está dividido en cuatro secciones: los iconos de la izquierda nos
Figura 4:Configuración personalizada del Layout de KPager2.
ayudan a movernos entre las secciones. Podemos especificar el número de filas que KPager2 asigna a los escritorios virtuales a través de Number of rows dentro de General. Si no necesitamos el cuadro para iniciar programas en menú, podemos quitar la marca en el apartado Show launcher para ocultarlo. Themes nos permite seleccionar el aspecto por defecto de KPager2. Para modificar el aspecto nosotros mismos, pulsamos en el icono Custom para que aparezca el cuadro de diálogo Custom Layout (véase Figura 4). En Windows podremos especificar el número de ventanas que KPager2 debe mostrar y qué aspecto deben tener. La sección Type of window tiene tres opciones. Pixmap indica a KPager2 que genere una miniatura en la ventana y la muestre en el paginador. Por contra, con Icon se mostrarán las ventanas con los iconos propios de los programas. Y para un sistema más simple podemos optar por Plain. Con esta opción se mostrarán las ventanas como simples cuadros. Además de todo esto, podemos configurar la transparencia y animaciones (en Animation). Si habilitamos los efectos Zoom o Zoom, shifted, KPager2 aumentará el tamaño del diagrama al posar el ratón encima del paginador.
La Tercera Dimensión Además de las dos categorías de configuración comentadas hasta el momento, existen otras dos más en el cuadro: Keys nos conduce a un cuadro de diálogo donde podemos modificar los atajos de teclado de KDE para conmutar entre los escritorios virtuales. Esta opción es muy
WWW.LINUX- MAGAZINE.ES
útil si usamos KPager2 con 3ddesktop. Este paginador externo mejora el proceso de conmutación de escritorios añadiendo efectos 3D. Si dejamos los atajos de KDE, KPager2 y 3ddesktop no reaccionan ante los comandos para conmutar. El cuadro de configuración de KPager2 nos ofrece opciones para habilitar y deshabilitar el soporte para 3D, e incluso podemos seleccionar un efecto tridimensional. KPager2 hará llegar este parámetro directamente a 3ddesktop.
Conclusiones Kpager2 tiene gran cantidad de buenas características, así como la posibilidad de actuar como front-end para 3ddesktop, haciéndolo más útil que el paginador nativo de KDE. Si estamos buscando un paginador con más funcionalidades y algo de más chispa, KPager2 merece ser probada. El precio a pagar es un ligerísimo incremento en el uso de la CPU. Si necesitamos ejecutar el programa con la versión 3.4 de KDE, recomendamos visitar la página del proyecto, pues es probable que encontremos una versión más reciente de esta ■ herramienta.
RECURSOS [1] Página de KPager2 : http://www. uni-weimar.de/~wolff3/software/ kpager2.html [2] KPager2 para Suse Linux: http:// linux01.gwdg.de/~pbleser/ rpm-navigation.php?cat=/Utilities/ kpager2 [3] KPager2 para Debian: http://cerza.org/ ~zack/files/debs/kpager2
Número 10
77
LINUX USER • Metapixel
Fotomosaicos con Metapixel
TESELA A TESELA Si están buscando algo más que el convencional diseño de teselas, prueben Metapixel, una herramienta libre que crea atractivos fotomosaicos a partir de una colección digital de imágenes. POR OLIVER FROMMEL eguramente habrán visto en alguna ocasión algún póster de gran tamaño realizado a partir de pequeñas fotos para crear una imagen mayor [1]. Un fotomosaico utiliza fotos pequeñas de la misma manera que una imagen gráfica convencional utiliza los pixels. Necesitarán ver la imagen del fotomosaico desde una cierta distancia para poder ver el efecto completo. Por supuesto que pueden realizar el fotomosaico, uniendo las imágenes manualmente, pero el proceso puede llegar a ser extremadamente difícil y consumir demasiado tiempo. Ahora, los usuarios de Linux tienen a su alcance un sencillo programa que funciona desde la línea de órdenes para que se encargue de esta faena. Metapixel [2] de Mark Probst examina una colección de imágenes digitales y se encarga de realizar el fotomontaje.
S
Preparando las herramientas Este programa es muy fácil de configurar y solamente necesita las bibliotecas jpeg y PNG, junto con los correspondientes paquetes de desarrollo. El guión, incluido en el paquete, que les ayudará a pre-
78
Número 10
parar la colección de imágenes digitales, también necesita Perl, pero de todas formas la mayoría de los sistemas Linux tienen Perl instalado. Tras desempaquetar, primero se ejecuta make, luego su -c make install para que los ejecutables y las páginas del manual estén en los directorios adecuados. Si se necesita cambiar la ruta de instalación, se puede editar el Makefile para establecer un PREFIX antes de realizar estos pasos. Se necesita una colección de imágenes digitales realmente grande para realizar un mosaico atractivo. Si la colección es demasiado pequeña, Metapixell no tendrá suficiente materia prima para reflejar los colores y la silueta del original. De hecho se necesitan unos cuantos miles de imágenes. El resultado no será espectacular con un par de cientos de imágenes. Es probable que la colección esté formada por fotos de distintos tamaños, así que será necesario adaptarlas, ya que es difícil realizar un mosaico si las teselas [3] no son del mismo tamaño. El guión Perl metapixel-prepare se encargará de esto. El guión espera que se le pase el directorio donde está la colección de fotos y un directorio donde almacenar las imágenes redimensionadas:
WWW.LINUX- MAGAZINE.ES
metapixel-prepare U imagecollection U mosaicpics
La opción -r (de recursivo) le indica al guión que busque en los subdirectorios. Si no se indica otra cosa, el guión ajustará el tamaño de las imágenes a 120x120 pixels. Si se prefiere trabajar con otras dimensiones se pueden especificar los parámetros --width y --height. La herramienta va indicando el progreso del proceso mediante una línea de puntos que aparecen en la pantalla. Es importante observar que el guión no sólo redimensiona las imágenes, ya que al mismo tiempo también las analiza, determinando los valores de contraste y color que ayudarán más tarde a Metapixel cuando monte el mosaico. El guión coloca estos datos en el mismo directorio, en un archivo denominado tables.mxt. Si se desea, se puede echar un vistazo al mismo. Es un archivo de texto en un extraño formato de tipo Lisp. Si el guión de preparación falla o encuentra algún tipo de problema, habrá que establecer el indicador --debug para averiguar más sobre el asunto.
Metapixel• LINUX USER
Figura 1: El tipo de fotomosaico más simple, usando un dibujo de una flor como plantilla.
Figura 2: Una versión mejorada del fotomosaico usando más teselas de imágenes, mostrando de este modo más detalles de la imagen original que sirve de plantilla.
WWW.LINUX- MAGAZINE.ES
Número 10
79
LINUX USER • Metapixel
metapixel U --collage flor.jpg U collage-flor.png U --library mpix
Figura 3: Las teselas de imágenes superpuestas a modo de collage.
Montones de puntos Tras preparar la colección de imágenes, se puede pasar a la creación del mosaico. La forma más simple consiste en indicar un archivo de plantilla, el nombre del archivo de salida y el directorio con la colección de imágenes. El siguiente ejemplo toma una imagen llamada flor.png y crea un mosaico llamado mosaico-flor.png utilizando para ello la colección de imágenes que está en mpix. metapixel U --metapixel flor.jpg U mosaico-flor.png U --library mpix
El indicador --metapixel le dice al programa que cree un mosaico sin solapar las imágenes. La Figura 1 muestra el resultado de esta orden. Los resultados no deberían convencernos por completo, ya que la resolución es realmente burda. Para realizar un fotomosaico más atractivo se necesita establecer la relación de tamaño entre la plantilla y las imágenes individuales. Si la plantilla es realmente pequeña será difícil reconocer el motivo y esto implica que no se pueden utilizar demasiadas teselas. Por otra lado, si las imágenes de las teselas son demasiado pequeñas, se perderá el efecto mosaico. Aunque se reconozca fácilmente el motivo del mosaico, probablemente no se notará que las teselas son imágenes individuales.
80
Número 10
Hay que ajustar las dimensiones para que el producto final refleje lo que se intenta conseguir. Si se está imprimiendo un mosaico, se debe intentar conseguir un formato de gran escala. Y esto dictamina el tamaño de las imágenes en el ordenador. Si se quiere conseguir un formato de tamaño A3 (que en realidad es bastante pequeño) El mosaico deberá tener un tamaño de al menos 4000 pixels por 6000. Habrá que redimensionar la plantilla con la ayuda de GIMP. En este caso 33 teselas rellenarán el mosaico en dirección horizontal. La figura 2 muestra un mosaico más atractivo basado en una plantilla con una imagen más grande.
Superponiendo fotos Si no se pueden conseguir los resultados que se están buscando, pese a tener suficiente número de imágenes en teselas y a pesar de haber cambiado el tamaño de la plantilla, Metapixel aún tiene algunos trucos en la manga. Por ejemplo puede superponer las teselas sobre la imagen original para conseguir una imagen más nítida, aún cuando las imágenes de las teselas no se adapten correctamente. Esta opción se denomina, muy apropiadamente, --cheat. Alternativamente, se puede elegir un tipo diferente de mosaico, al cual Metapixel se refiere como “collage”. Está variante permite que las teselas se solapen. Para crear un collage hay que indicar --collage al ejecutar el programa:
WWW.LINUX- MAGAZINE.ES
El resultado de esta operación se puede apreciar en la Figura 3. Después de experimentar durante un rato, se deberían encontrar los ajustes correctos para conseguir un mosaico perfecto. Para mantener esa configuración, es posible almacenarla en el archivo ~/.metapixelrc. Por ejemplo se puede establecer el directorio que contiene la colección de imágenes utilizando la clave librarydirectory seguido del nombre del directorio entre comillas. Hay que poner las configuraciones entre paréntesis. Las fuentes del programa incluyen un archivo de configuración de ejemplo.
Cuidado con las patentes Suponiendo que se dispone de una imagen grande, Metapixel nos ofrece atractivos fotomosaicos con muy poco esfuerzo, pero tenemos que tener en cuenta que los fotomosaicos están afectados por el problema de las patentes [4]. Los fotomosaicos están cubiertos por varias patentes controladas por la compañía Runaway Technologies [1]. Los detalles y aplicación de estas patentes pueden variar dependiendo de la interpretación y la jurisdicción. Como mínimo, no se pueden explotar comercialmente los resultados de Metapixel. Véase [5] para más información sobre las patentes de ■ software.
RECURSOS 1] El termino “photomosaic” es una marca registrada de Runaway Technologies, Inc. La compañía también ha patentado su propio software para fotomosaico y reclama una patente sobre el “look and feel” del fotomosaico. http://www. photomosaic.com/ [2] Metapixel: http://www.complang. tuwien.ac.at/~schani/metapixel [3] Tesela: http://es.wikipedia.org/wiki/ Tesela [4] Patentes de Photomosaic: http:// www.photomosaic.com/rt/ patent-index.html [5] Más sobre las patentes de software: http://swpat.ffii.org/
DeskTOPia: JWM • LINUX USER
Gestor de ventanas JWM
SIMPLE Y LIGERO JWM JWM es es un un gestor gestor de de ventanas ventanas para para usuarios usuarios de de Linux Linux que que requieran requieran una una interfaz interfaz gráfica gráfica de de usuario usuario efieficiente ciente yy no no les les asuste asuste lidiar lidiar con con un un editor editor de de texto texto para para conseguirlo. conseguirlo. Si Si crees crees que que es es la la herramienta herramienta que que estabas estabas buscando, buscando, sigue sigue leyendo leyendo yy descubrirás descubrirás mucho mucho más más de de JWM. JWM. POR POR HAGEN HAGEN HÖPFNER HÖPFNER
i instalamos cualquiera de las principales distribuciones de Linux, probablemente tendremos por defecto un escritorio KDE o GNOME. Pero ninguno de estos dos pesos pesados destaca precisamente por su economía respecto a recursos de memoria y CPU. Si nuestro equipo está algo justo de
S
potencia, puede que estemos buscando una alternativa. Una de las opciones es JWM (Joe’s Window Manager) [1]. JWM (véase Figura 1) recibe este nombre por su desarrollador, Joe Wingbermuehle. Joe se encarga de que JWM no dependa de innumerables librerías: restringe las
WWW.LINUX- MAGAZINE.ES
dependencias únicamente al sistema X Window.
Instalación JWM no proporciona ningún paquete de binarios listo para usar, pero compilar JWM desde las fuentes es muy fácil, ya que apenas tenemos unos pocos requeri-
Número 10
81
LINUX USER • DeskTOPia: JWM
mientos que cumplir. Todo lo que necesitamos es el compilador gcc, y los paquetes de desarrollo para libxpm y la interfaz gráfica del escritorio. Si tenemos Suse 9.2, encontraremos los ficheros de cabecera de X en xorg-x11-devel. Si tenemos una distribución basada en XFree86 en lugar de Xorg, encontraremos los archivos de desarrollo en el paquete Xfree86-devel. Desempaquetamos el código fuente de la página del proyecto, y nos vamos al directorio que se ha creado en este paso, jwm-0.21. Tecleamos a continuación ./configure, make y su -c "make install" para compilar el ejecutable y copiarlo a /usr/local/bin. La manera más fácil de iniciar JWM es teclear en modo texto startx para cambiar a modo de interfaz gráfica de usuario. Para asegurarnos de que JWM se eje-
cuta al hacer esto, añadimos la línea siguiente: exec /usr/local/bin/jwm
al archivo .xinitrc de nuestro directorio de usuario. Si usamos un administrador de login con interfaz gráfica como KDM o GDM, podemos añadir una entrada para JWM en su menú.
Primeros Pasos La primera vez que ejecutamos JWM deberíamos tener al menos nuestro archivo propio de configuración, que deberá incluir una entrada de menú para lanzar un terminal. La configuración global del sistema se sitúa en el directorio /usr/local/etc cuando instalamos JWM. Debemos copiar el archivo system.jwmrc a nuestro directorio de usuario como
Listado 1: Menú de ejemplo con JWM
.jwmrc. Abrimos el archivo con un editor de texto y cambiamos el nombre de program xwsh en la línea 7 por el nombre de nuestra terminal favorita, xterm o konsole por ejemplo. Después de estos pasos previos ya podemos iniciar JWM por primera vez con una configuración básica. En el borde inferior de la pantalla aparece un bandeja que incluye un menú, un paginador, un indicador de carga de la CPU y un reloj. Más tarde JWM mostrará una lista de programas activos en el centro. Puede que queramos seleccionar la entrada Terminal del menú para iniciar la aplicación que configuramos en nuestro archivo de configuración. El aspecto de la ventana son reminiscencias de FVWM [2]. La barra de título de la ventana incluye botones para pasar a icono, maximizar y cerrar la ventana. También incluye un icono a la izquierda que abre el menú con clic del botón derecho del ratón.
01 <RootMenu label="Start" icon="start.xpm">
Configuración del Menú
02
Podemos usar el menú para mover la ventana a otro escritorio virtual o mandarlo a segundo plano en la misma ventana. Si preferimos no usar el ratón, JWM soporta atajos de teclado que recuerdan mucho a los de KDE. Por ejemplo, [Alt]+[Tab] conmuta entre las ventanas del escritorio en uso, y presionando [Alt]+[F4] cerramos la aplicación. Podemos editar el fichero de configuración para modificar JWM y ajustarlo a nuestras preferencias, ya que la configuración estándar probablemente sólo satisface al desarrollador de JWM. Lo primero es configurar el menú para que soporte las aplicaciones que hemos instalado en nuestro sistema. El menú puede contener submenús, lanzadores de programas, líneas de separación y llamadas internas a JWM. Estas llamadas internas pueden ayudar a cerrar JWM, por ejemplo. La versión actual no soporta reiniciar el gestor de ventanas a través del menú. Cuando hemos seleccionado esta entrada, JWM se colgaba. El Listado 1 es un ejemplo simple que da como resultado el menú mostrado en la Figura 2. La primera línea indica a JWM que sigue la definición del menú. La siguiente línea tiene una entrada para iniciar xternz. Además de la etiqueta mostrada para la entrada del menú
<Program icon="konsole.xpm" label="xterm">xterm</Program>
03
<Menu icon="folder.xpm" label="Internet">
04
<Program icon="mozilla.xpm" label="Firefox">firefox</Program>
05
<Program icon="mozilla-mail.xpm" label="Thunderbird">thunderbird</Program>
06
<Program icon="licq.xpm" label="Licq">licq</Program>
07
</Menu>
08
<Separator/>
09
<Restart icon="reload.xpm"/>
10
<Exit icon="exit.xpm"/>
11 </RootMenu> 12 <Icons> 13
<IconPath>$HOME/.jwm_pics</IconPath>
14 </Icons>
Listado 2: Configuración del panel 01 <Tray autohide="false"> 02
<Font antialias="true">-adobe-helvetica-*-r-*-*-12-*-*-*-*-*-*-*</Font>
03
<Width>500</Width> <!-- Tray width (Default 1024) -->
04
<Height>20</Height> <!-- Tray height (Default 28) -->
05
<Alignment>center</Alignment>
06
<Foreground>black</Foreground>
07
<Background>#DCDAD5</Background>
08
<ActiveForeground>black</ActiveForeground>
09
<ActiveBackground>#8899AA</ActiveBackground>
10 </Tray>
82
Número 10
WWW.LINUX- MAGAZINE.ES
DeskTOPia: JWM • LINUX USER
hacer clic para que cambie el foco, debemos cambiar sloppy por click en la siguiente línea: <FocusModel>sloppy</FocusModel>
Figura 1: JWM es un versátil escritorio con gran cantidad de recursos.
(label="xterm"), la línea también espeautohide="true" para que la barra se cifica un icono - icon="konsole.xpm". oculte automáticamente, salvo en caso Para que JWM pueda encontrar el icono, de que el ratón se sitúe en el borde infeel archivo con la imagen deberá alojarse rior de la ventana. Con Font fijamos el en la ruta de iconos, que es tipo de letra. $HOME/ .jwm_pics en este Podemos usar la herracaso. El gestor de ventanas mienta xfontsel para dessólo admite gráficos xpm. cubrir la ciertamente crípPara usar los iconos que tica nomenclatura de los ya tenemos instalados, Figura 2: El menú de inicio tipos de letra. Width defipodemos utilizar convert definido en el Listado 1. ne la anchura (mínimo para convertir los iconos 320), Height la altura PNG situados en /usr/share/icons al for(mínimo 8 puntos, máximo 128) y mato requerido y guardarlos en Alignment el alineamiento vertical de la /home/username/.jwm_pics. La línea barra, que puede ser left, center o right con la cadena <Separator/ > añade una (izquierda, centrado o derecha). Si fijalínea de separación al menú. mos la anchura a 0, la barra ocupará El listado de ejemplo también cambia todo el ancho de la pantalla. Los valores la etiqueta del botón del menú, que de de color para Foreground y Background inicio es JWM. La entrada label="Start" puden pasarse como valores hexadecien las definiciones del menú cambia la males, como en HTML, o bien especifietiqueta a Start (véase Figura 3). cando el nombre de los colores. El comando showrgb | less nos indica los Tunear la Barra nombres reconocidos en nuestro sistePodemos usar las entradas encajadas ma. La manera más fácil de encontrar entre <Tray> y </Tray> en el archivo valores hexadecimales es usar programas .jwmrc para modificar la apariencia, como el kcolorchooser. tamaño y color del panel, como se muesComodidad en el Escritorio tra en el Listado 2. La definición autohide="false" en la línea 1 impide que la Por defecto, JWM permite que el foco bandeja se oculte en segundo plano. siga al cursor del ratón. Si preferimos Podemos modificar este comportamienFigura 3: JWM con un botón de inicio modificado. to especificando
WWW.LINUX- MAGAZINE.ES
Si cuatro escritorios virtuales no son suficientes para nuestras necesidades, podemos incrementar este número en la línea <DesktopCount>4</Desktop-Count>. Debemos poner un valor entre 1 y 8. JWM define algunos atajos de teclado por defecto, no obstante, podemos incrementar esta lista definiendo nuestros propios atajos.Debemos colocar estos atajos al final del archivo .jwmrc. Para definir un atajo de teclado necesitamos una entrada con la siguiente sintaxis: <Key mask="Modificador" key="Key">Acción</Key>. Modificadr pueden ser A para [Alt], C para [Ctrl] y S para [Shift]. Una línea como <Key mask="A" key="F4">close</Key> en .jwmrc cerrará una ventana al presionar [Alt]+[F4]. Para lanzar una aplicación con un atajo de teclado debemos especificar exec: como acción, seguido del nombre del programa. Por ejemplo, la siguiente línea <Key mask="C" key="T">exec: xterm</Key> inicia xterm al presionar [Ctrl]+[T].
Conclusión JWM es un gestor de ventanas ligero con características soprendentemente convenientes. Si no tenemos miedo a configuraciones en modo texto, podemos ajustar JWM fácilmente a nuestro gusto. Como JWM se encuentra bajo un activo desarrollo, probablemente alguien ya debe estar trabajando en resolver el problema aparecido al intentar reiniciar el gestor de ventanas a través del menú. Estaremos atentos a la página del proyecto JWM para una nueva versión que lo ■ solucione.
RECURSOS [1] Página de JWM: http://joewing.net/ programs/jwm/index.shtml [2] Página de FVWM: http://www.fvwm. org/ [3] Configuración de JWM: http:// joewing.net/programs/jwm/config. shtml
Número 10
83
LINUX USER • Educación
Un catálogo de recursos educativos
GNU EDU
Una reivindicación compartida por los profesores de todo el mundo que utilizan software en sus clases es la necesidad de un catálogo de recursos educativos. Los abundantes pero tímidos intentos de creación se enfrentan a varios problemas: utilizan herramientas y criterios de búsqueda no especializados y suelen centrarse de forma restrictiva en los currícula locales. POR JUAN RAFAEL FERNÁNDEZ GARCÍA.
G
NU Edu es un intento de romper estas barreras con una solución internacional y colaborativa, con un motor de búsqueda que puede utilizar palabras clave y objetivos educativos mínimos y la posibilidad de que sean los profesores los que publiquen los recursos y los acompañen de los metadatos adecuados. Todos conocemos recopilaciones de actividades educativas, todas las administraciones sienten la obligación de crear la suya propia. ¿Cuál es el problema? En primer lugar la verticalidad;
84
Número 10
suele encargarse a un grupo de expertos la evaluación y selección de los mejores recursos, y como consecuencia es fácil que los profesores sólo jueguen un papel pasivo en el proceso y, a falta de realimentación el trabajo acabe quedando obsoleto y muera de inanición. En segundo lugar la iniciativa, en los casos en que sea libre, suele ser de ámbito local (una comunidad autonómica, una universidad…), lo que impide que el trabajo se reutilice y desarrolle en comunidades más amplias. Finalmente no se han liberado herramientas espe-
WWW.LINUX- MAGAZINE.ES
cializadas verdaderamente útiles para la catalogación e indexación de contenidos educativos; a la hora de la verdad acudimos a google para encontrar recursos y hacemos búsquedas como «teorema de pitágoras secundaria ejercicios» con la esperanza de que nos devuelva algo útil. Google me devuelve unas seiscientas páginas en castellano en las que aparecen las palabras citadas, ¿era eso lo que necesitaba, pueden nuestras administraciones ahorrarse el dinero? Dejando para otro momento el tema de la eva-
Educación • LINUX USER
Figura 1: Unidades temáticas en GNU Edu.
luación de la calidad de los materiales (¿por expertos? ¿por los pares?), tenemos claro que el hecho de que una araña de búsqueda haya indexado la presencia de unas palabras no es prue-
Cuadro 1: Cómo instalar Gnu Edu En [8] podemos encontrar un archivo comprimido .tgz de la primera versión pública de GNU Edu (1.0 beta). Por supuesto el método que vamos a explicar no será necesario cuando los paquetes .deb o .rpm estén disponibles (pronto, me comunican). Si lo vamos a instalar en una máquina Debian sepamos que depende de los siguientes paquetes Debian: apache, php4, php4-pear, php-auth, mysql. Es necesario además instalar el módulo PEAR Savant2 de [9] (para quien no lo sepa PEAR es un fondo de código PHP similar al CTAN de TeX o al CPAN de perl). En el momento de escribir este artículo la versión estable es la 2.3.3, por tanto haremos # pear install U http://phpsavant.com/Savant2-2.3. 3.tgz Recomendamos (para poder convertir la documentación, en formato reStructuredText, .rst, a html) instalar además el paquete python-docutils. Es necesario además crear dos bases de datos, una para los recursos y otra independiente para la autenticación: mysql -u root -p <database.sql mysql -u root -p <database_auth.sql Y por supuesto es preciso darle contenido a las tablas: darse de alta y comenzar a incorporar recursos.
ba del interés educativo de una página (ni lo contrario), ni nos proporciona la información que necesitamos (¿qué curso de secundaria?, ¿dónde se imparte?, se menciona la palabra «ejercicios» pero, ¿se trata de ejercicios, de programaciones o de apuntes?, etc.). ¿Un enfoque localista? Es razonable pensar que puede haber interés en lo que los profesores franceses, ingleses o alemanes están generando para sus clases; de hecho ya intentamos comparar los resultados de los distintos sistemas educativos en proyectos como los sucesivos estudios PISA [1], ¿por qué no conocer cómo trabajamos? Pero es que además vivimos en una sociedad cada vez más plural y a nuestros centros educativos llega esa nueva forma de atención a la diversidad que es el plurilingüismo. Se pide en los centros bilingües la creación de materiales, ¿por qué no aprovechar lo que existe?
¿Qué es GNU Edu?
campos de la base de datos. Amablemente me ha enviado un volcado del estado actual de la misma, con recursos disponibles para los sistemas educativos francés y alemán, y podemos examinarlos. Los datos están clasificados por niveles educativos (tienen datos Infantil y Secundaria obligatoria) y países y materias (Lenguaje en el corazón de los aprendizajes y Descubrimiento del mundo para Infantil y Matemáticas para Secundaria), currícula (relativos a un curso concreto, por ejemplo Primero de ESO, en una ordenación legal concreta, puesto que se ha descubierto durante la definición del proyecto la gran variación de los currícula en un mismo país y entre países, con sorprendentes diferencias en las edades en que los alumnos aprenden la proporcionalidad o si profundizan en la geometría por poner dos ejemplos), hasta un total de diez en estos momentos. Estos currículos están divididos en lo que llama capítulos, nuestras unidades temáticas (51 a día de hoy, véase la figura 1). Por ejemplo para matemáticas de Sixième (primer curso de Secundaria en Francia pero con alumnos que en España cursarían por edad Sexto de Primaria) recoge capítulos como «Longitudes, ángulos rectos, áreas», «Simetría axial I», «Fracciones y porcentajes» o «Los sólidos». Pero queríamos llegar a la originalidad del enfoque de Bénassy: utilizando los trabajos del Instituto de Investigación sobre la Enseñanza de las Matemáticas (IREM) de Picardía (Francia) y un minucioso proceso de desmenuzación de las programaciones básicas de Alemania, llega a establecer
GNU Edu es un sistema de indexado de recursos educativos. Podemos examinar una versión preliminar pero totalmente funcional en [2] y el software está disponible para su descarga (véase en cuadro 1). Se trata como vemos de un proyecto de OFSET [3] desarrollado especialmente por Odile Bénassy. Pretende proporcionar la granularidad de la que carecen los motores de búsqueda generalistas para encontrar actividades del tipo «cómo usar escuadra y cartabón para trazar un friso» sabiendo que la respuesta debe ser un ejercicio para utilizarlo en Segundo de ESO, y pretende también romper la limitación a un currículum específico y ser una herramienta de colaboración entre los profesores. Veremos cómo. GNU Edu es básicamente una base de datos mysql y una interfaz php para consultarla y añadir recursos. Lo original de la estrategia seguida por Odile ha conFigura 2: Desglose de items educativos. sistido en la elección de los
WWW.LINUX- MAGAZINE.ES
Número 10
85
LINUX USER • Educación
Vemos que en último término recursos (enlace «Quickly Add a el sistema nos devuelve enlaces Resource») o seguir los pasos ya vistos a los recursos indexados, con hasta comprobar que el recurso no exisinformación de quién lo ha dado te en la base de datos y sólo entonces de alta en la base de datos, el proceder a darlo de alta («Add tipo de recurso que es y de qué Resource»). software depende, el idioma en Analicemos el formulario (figura 8). que está disponible… estos camLos campos que podremos rellenar pos no son arbitrarios y aquí serán los siguientes (sólo los que tienen está otro de los rasgos que hacen un asterisco son obligatorios): título y excepcional la aplicación: se autor o autores (pensemos que se espehace un gran esfuerzo por incorra que sean los autores los que den de porar la compatibilidad con los alta sus recursos); el formato en que estándares educativos generalestá el recurso, que evidentemente Figura 3: Palabras clave para las búsquedas de recurmente aceptados y en especial deberá ser libre y abierto (lo que quiere sos. con Dublin Core y Learning decir modificable por los usuarios); la Objects Metadata. Veremos los licencia, a elegir entre varias modalidadetalles cuando aprendamos a introdu1032 items educativos (véase la figura des de licencias libres; una descripción cir nuevas fichas de recursos. 2: «Calcular el área de un rectángulo», del recurso; el tipo de interactividad que Podemos también aprovechar la «Conocer la fórmula del área de un se produce en su utilización (activa, potencia de la base de datos en la que triángulo» o «Reconocer un triángulo expositiva o mixta); el tipo de recurso se basa GNU Edu y utilizarlo como un isósceles»). Pero además descompone (ejercicio, exploración, actividad abiermotor de búsqueda a partir de las palaestos items en palabras clave (figura 3), ta, guía, recurso informativo, glosario, bras clave. Elijamos de nuevo de dos tipos: las palabras clave de herramienta, evaluación); el nivel de Secundaria Obligatoria, Matemáticas y acción (como «escribir», «calcular», dificultad y el software necesario para Francés y pulsemos el enlace «All «reconocer» o «conjugar») y las palabras su utilización; alguna nota y la url Keywords» (todas las palabras clave). clave de concepto (por ejemplo «poema» donde encontrar el recurso (el proyecto Ahora pulsando con el ratón sobre las o «verbo», «figura», «triángulo»…). no implica la creación de un repositorio palabras clave que nos interesen podreEstas palabras claves, 1614, estarán tracentralizado); la versión y el estado mos construir una búsqueda de recurducidas a todos los idiomas en los que (borrador, final, revisado, ilocalizable). sos como la de la figura 7. Los items se utilice GNU Edu y serán la base del Terminada de rellenar la ficha se pulsa que nos devolverá podrán ser tanto en proceso de búsqueda. en «Enviar» (botón Submit) y ya tendrefrancés como en alemán gracias a la mos un nuevo recurso en la base de Uso de GNU Edu correspondencia establecida entre las datos. palabras clave (evidentemente cuando Hay varias formas de utilizar GNU Odile Bénassy nos da un ejemplo conexistan en castellano o en catalán tamEdu. En primer lugar podemos utilicreto. Quería añadir artículos de la bién tendremos items en estos idiozarlo como un catálogo simple, y prowikipedia francesa (http://fr.wikipedia. mas). ceder de forma deductiva, de lo más org/wiki/Mathématiques_élémentaires). Un opción más hubiera sido introdugeneral a lo más concreto. Así comenPara ello se conectó como usuaria norcir la palabras clave directamente en el zaríamos por seleccionar el nivel edumal (no administradora) y dio de alta al recuadro de búsquedas. Podemos hacer cativo (por ejemplo Secundaria obligaautor «fr.wikipedia». Como de costumla prueba con una búsqueda como toria, «Middle School») y seguidamenbre seleccionó «Middle School», «construire bissectrice», que nos te la materia (Matemáticas) y el país «Mathematics» y «France» (ya estaredevuelve una relación de items y varios cuya ordenación del sistema educativo mos acostumbrados si hemos seguido recursos educativos especívamos a seguir (Francia o Alemania ficos para el nivel educatipor ahora). vo seleccionado. Nos aparece la imagen 4, donde se nos ofrecen los currículos de los distin¿Cómo se añaden tos años de la Educación Secundaria recursos? Obligatoria francesa y seleccionaremos el de Sixième para ver los «Chapters» En primer lugar nos intere(Unidades Temáticas) de que se composará darnos de alta en el ne. Marcaremos en la siguiente pantalla sistema. GNU Edu nos los «items» de qué Unidades queremos enviará un correo con la ver y llegaremos por ejemplo a la figura contraseña que nos servirá 5, donde sólo nos falta pulsar en el para conectarnos. Tenemos botón «View ressources» para que el sisdos opciones, o acceder tema nos devuelva los recursos ya indeinmediatamente al formuFigura 4: Currículos de Secundaria en Francia. xados (imagen 6). lario que sirve para añadir
86
Número 10
WWW.LINUX- MAGAZINE.ES
Educación • LINUX USER
Figura 5: Items educativos en GNU Edu.
los ejemplos). Puesto que los artículos de la wikipedia no están vinculados a ningún programa educativo concreto no seleccionó ningún curriculum, sino que pulsó en el enlace «All Keywords». Odile concreta más en su ejemplo: va a dar de alta el artículo http://fr. wikipedia.org/wiki/Distributivité (mathématiques_élémentaires). Podría, como hemos dicho, utilizar «All Keywords» o, como profesora de matemáticas en activo, haber indicado a qué currículum corresponde el artículo,
«5ème, Mathématiques au Collège (1998)» (segundo curso de Secundaria Obligatoria), después seleccionar la unidad «Les Opérations» y finalmente «View Items». Pero había elegido trabajar con palabras clave. ¿Cuáles serán útiles aquí? Las palabras clave de acción serán «connaître développer factoriser», las de concepto «égalité propriété règle». Basta pulsar con el ratón sobre ellas utilizando un navegador con javascript activado. Si nos equivocamos, una nueva pulsación deshará la selección. De la página de items (debemos seleccionar los items con los que está relacionado nuestro nuevo recurso) pasamos a la de recursos y pulsamos en «Add resource». Rellena el formulario 01 Title : Distributivité (mathématiques élémentaires) 02 Format : Text/HTML 03 License : GNU Free Documentation License 04 Description : Un court art cle définissant la propriété de
distributivité. 05 Interactivity Type : Expositive 06 Learning Resource Type : Information Resource 07 Difficulty : Low 08 Software Requirement : Web Browser 09 Url_document: http://fr.wik pedia.org /wiki/Distributivité (mathématiques_élémentaires) 10 Status: final 11 Author : fr.wikipedia
Ya tenemos el recurso fichado, y vinculado a determinados items. Si ahora introducimos «distributivité» o «règle» en el recuadro de búsqueda el sistema debe encontrarlo. ¿Por qué estos campos? No voy a escribir aquí sobre metadatos y estándares educativos (ya me gustaría, ya, pero ni es el momento ni disponemos del espacio necesario). Que no nos asusten ni el número de campos disponibles (sólo los básicos son imprescindibles,
LINUX USER • Educación
Figura 6: Recursos hallados.
insisto) ni la lluvia de siglas de la justificación: la idea tras los estándares es hacer una descripción abstracta de todos los aspectos del proceso educativo, hasta el último y más curioso detalle, y crear una serie de normas para que el trabajo realizado con una plataforma educativa pueda ser reutilizado con cualquier otra. Simplemente recogeremos que [4] nos muestra como tabla de correspondencias el esfuerzo realizado para cumplimentar los estándares.
Problemas y desarrollos futuros Empecemos por lo obvio: es urgente la internacionalización de la interfaz. ¿Cómo? Según el modelo de GNU gettext (instale gettext-doc y lea el ejemplo de internacionalización de código php en doc/gettext-doc/examples/hello-php). Este punto ya está en la conciencia del equipo de desarrollo y es cuestión de tiempo y de recursos. Por si no se han entendido lo repetiré más claro: el proyecto necesita ayuda.
Figura 8: Formulario para añadir recursos.
88
Número 10
También es necesaria esta ayuda en la incorporación de palabras clave e items de otros sistemas educativos. No existen en este momento en ninguna de las lenguas de España ni para ninguna de las concreciones de nuestros sistemas educativos autonómicos. Finalmente, con las Figura 7: Construcción de una consulta con palabras palabras clave y los clave. items, será posible que los profesores puedan incorpoEn conclusión GNU Edu es un proyecrar nuevos recursos, valorarlos de forma to en estado de nacimiento, aunque ya democrática… perfectamente utilizable. Se ha pensado Por otro lado es evidente que son (está en el documento de mejoras prenecesarias multitud de pequeñas mejovistas) en crear una red de bases de ras para hacer la interfaz más amigable y datos autónomas pero interconectadas práctica. Pero el aspecto que en mi (mediante XMLRPC) con recursos edumodesta opinión necesita más trabajo es cativos libres. Creemos que esta idea es el de la reutilización del trabajo ya muy interesante, porque permitiría una hecho a la hora de la introducción de solución distribuida y abierta al probledatos. Me refiero a poner en práctica las ma de los repositorios educativos. ventajas de los estándares LOM y DC. En Y en el próximo número… un futuro próximo, es bastante probable Hemos analizado una aplicación en su que iniciativas como la de la Comunidad momento de presentación pública, cuande Madrid de estandarizar el formato de do la documentación está naciendo y los paquetes de contenidos con su Guía diversos aspectos de su diseño todavía de publicación y empaquetado de conteno han sido implementados. Volvemos nidos en Educamadrid [5] se extiendan. ahora al estudio de un programa Durante unos segundos debo ponerme maduro, la aplicación de geometría intertécnico, con perdón, para explicar mi actica drgeo, para el que existe alguna razonamiento: está previsto que las fichas de recursos sean exportables documentación en la red; haremos una como XML y RDF. Pero la cabecera RDF síntesis de sus posibilidades didácticas.■ de multitud de páginas web contiene ya los datos Dublin Core que buscamos; o RECURSOS los paquetes libres creados con herra[1] PISA: http://www.ince.mec.es/pub/ mientas libres como eXe [6] o Reload [7] pubintn.htm contienen los metadatos que IMS necesi[2] GNU Edu: http://gnuedu.ofset.org tamos, ¿por qué no tomarlos directamente [3] OFSET: http://www.ofset.org y no tener que volver [4] Tabla de correspondencias estándaa teclearlos? Pienso en res: http://www.ofset.org/articles/150 una araña que recorra [5] Guía de publicación y empaquetado las plataformas edude contenidos en Educamadrid: http:// cativas buscando www.educa.madrid.org/portal/plan/ paquetes SCORM e informacion/dcontenidos/ plan_dco_intro.jsp indexando las actividades incluidas; una [6] eXe: http://exe.cfdl.auckland.ac.nz/ araña que visite los [7] Reload: http://www.reload.ac.uk/ servidores WIMS y [8] Versión pública de GNU Edu: http:// recorra su índice y los gnuedu.ofset.org/download/ ficheros INDEX de [9] Módulo PEAR Savant2: http://www. cada ejercicio o phpsavant.com módulo…
WWW.LINUX- MAGAZINE.ES
Línea de Comandos • LINUX USER
Administración de cuentas de usuarios en modo comando
¡ACCESO PERMITIDO! Linux es un sistema multiusuario: la mayoría de los usuarios pueden trabajar en la misma máquina a la vez en cuentas distintas. En la columna de este mes, echaremos un vistazo a cómo crear y administrar cuentas de usuarios Linux desde la línea de comandos. POR HEIKE JURZIK
L
os sistemas multiusuarios separan muy bien los espacios de trabajo de los usuarios. Puede salvar sus propios ficheros asignando los privilegios de acceso adecuados. El paradigma típico de Unix/Linux de tener cuentas separadas para tareas administrativas (root) ayuda a prevenir la posibilidad de errores de usuarios que podrían destruir el sistema. El administrador del sistema, root, es el mandamás del sistema. Un usuario necesita privilegios de root para ejecutar comandos de configuración y administración de cuentas que veremos en este artículo. Tras mostrar los ficheros de configuración más importantes, echaremos un vistazo a las herramientas useradd, usermod y userdel, que nos permiten crear, administrar y borrar cuentas.
Múltiples Usuarios Una ojeada al fichero /etc/passwd (Figura 1) muestra todo lo referente a las cuentas de usuarios del sistema. Además de las cuentas normales, verá que también hay entradas para usuarios como lp o mail, son los llamados pseudo-usuarios creados por el sistema para asignarle privilegios sobre determinados ficheros y directorios específicos del sistema. Por lo general, las entradas en /etc/passwd son de la siguiente forma: petronella:x:1002:1002:U Petronella Huhn,,,, U Test-Account: U /home/petronella:/bin/bash
Los campos separados por dos puntos, contienen las siguientes entradas: *Nombre de usuario: El nombre que el usuario tecleará para entrar al sistema. *Contraseña: Aquí es donde va la contraseña encriptada, por defecto en la mayoría de los sistemas aparecerá una x,
indicando que la contraseña está almacenada en el fichero /etc/shadow. Si el campo está vacío, el usuario puede acceder al sistema sin proporcionar ninguna contraseña. *UID: Cada usuario en Linux se identifica de forma unívoca mediante un número o UID (“IDentificación de Usuario”). Al usuario root se le asigna el número 0; desde el 1 al 99 se reservan para cuentas del sistema. *GID: Cada usuarios es miembro de uno o varios grupos, que se identifican mediante el llamado GIDs (“IDentificación de Grupo”). *Información adicional: Una descripción del usuario, que puede contener varias palabras (normalmente el nombre y apellidos del usuario, un número de teléfono, etc.). *Directorio home: Para usuarios “normales”, normalmente, el directorio home es /home/nombre_usuario; los pseudos-usuarios tienen su directorio de trabajo (Por ejemplo, /var/spool/lpd para el usuario del demonio de impresión, lp). *Shell: El intérprete de la línea de comandos a lanzar cuando el usuario se registra en el sistema (normalmente /bin/bash).
Contraseñas en las Sombras Como se dijo anteriormente, los sistemas actuales tienden a utilizar contraseñas shadow. Estas contraseñas mejoran la seguridad del sistema eliminando las entradas de las contraseñas encriptadas del /etc/passwd, que puede leerse globalmente y colocándolas en /etc/shadow. (El fichero shadow sólo puede ser leído por el administrador). Una
WWW.LINUX- MAGAZINE.ES
Número 10
89
LINUX USER • Línea de Comandos
característica de las contraseñas shadow es que también almacenan la información sobre el último cambio de contraseña y ofrece un mecanismo de control a usuarios para cambiar sus contraseñas. Los campos de las líneas en /etc/shadow también se encuentran separadas mediante dos puntos. En estos campos se almacena la siguiente información: • Nombre de usuario: El nombre de usuario (el mismo que en /etc/passwd). • Contraseña: La contraseña encriptada. Este campo no puede estar vacío y esto significa que los pseudos-usuarios como lp tendrán una entrada con un asterisco “*”. Para deshabilitar temporalmente una cuenta, todo lo que necesita hacer es colocar delante de la entrada de la contraseña un signo de exclamación. • Último cambio: La fecha del último cambio de la contraseña, medida en días desde 01.01.1970. • Edad Min. / Max.: Qué antigüedad tiene la contraseña antes de que el usuario la cambie. • Aviso: ¿Cuántos días antes de que caduque la contraseña debe avisarse al usuario? • Período de gracia: Cuánto tiempo se le debe permitir al usuario trabajar después de que su contraseña caduque antes de que se le deshabilite su cuenta • Validez: Fecha en la que caduca la contraseña (medidas en días desde 01.01.1970). • Vacío: El último campo está reservado. Nótese que sólo las primeras dos entradas para el nombre del usuario y la contraseña son obligatorias; el resto de campos son opcionales. Una entrada típica podría ser: petronella:$1$RXbNLkU8U $XULLOGFVs6LTxmSRqCS.P/:U 12872:0:99999:7:::
El Entorno Básico Cuando se crea una cuenta, es normal asignarle unos cuantos valores por defecto a los usuarios. Además al crear un directorio home, podría añadir unos
90
Número 10
cuantos ficheros de configuración (por ejemplo, para la shell). La mayoría de los sistemas le permiten proporcionar a los usuarios un entorno básico especificado en el directorio /etc/skel (para el skeleton). Mientras Debian Linux sólo almacena unos cuantos ficheros de configuración ocultos (para varias shells) en el directorio skeleton, Suse añade un número de ficheros y carpetas. La mayoría de las herramientas que ayudan al administrador añaden cuentas de usuario automáticamente copiando el contenido de /etc/ skel al directorio home del nuevo usuario y asignando los permisos correspondientes. Si decide añadir manualmente una cuenta de usuario editando los ficheros /etc/passwd y /etc/shadow, asegúrese de crear un nuevo directorio home, copie el contenido del directorio skeleton al nuevo directorio home y modifique los permisos de forma adecuada: mkdir /home/newuser cp -r /etc/skel /home/newuser chown -R newuser:users U /home/newuser
Para incluir los subdirectorios bajo /etc/ skel, cuando ejecute los comandos cp y chown, asegúrese de colocar el flag -r para la copia recursiva y el flag -R para cambiar los permisos recursivamente. users es el grupo por defecto para nuevos usuarios en la mayoría de las distribuciones; si este no es el caso de su distribución, necesitará reemplazar la entrada users con el nombre correcto del grupo.
Investigando useradd Si todo este trabajo manual es demasiado confuso o le lleva mucho tiempo, useradd es una herramienta rápida de la línea de comandos que puede echarle una mano. Varias distribuciones Linux instalan versiones con parámetros diferentes. Pero no se preocupe: indicaremos las diferencias relevantes en este artículo. Tecleando useradd o useradd -help le proporcionará una lista de parámetros. Cada nueva cuenta necesita un Identificador de Usuario (UID), que puede definir mediante el flag -u UID. Asegúrese que el UID es único para cada usuario -si intenta asignar el mismo UID dos veces, useradd protestará. Si omite la
WWW.LINUX- MAGAZINE.ES
identificación del usuario, useradd determinará el UID más alto en el rango normal de usuario y lo incrementará en 1. También puede especificar el parámetro -g para establecer el GID primario. Si necesita hacer al usuario miembro de cualquier grupo, añada la etiqueta -G y el número del grupo apropiado. El fichero /etc/group le dice qué grupos existen en el sistema y qué GID tienen estos grupos. Vamos a suponer que quiere añadir una nueva cuenta al grupo users (p.e., GID 100) y además al grupo cdrom, que tiene el GID 24. Las siguientes opciones lo harían: -g 100 -G 24. Por defecto useradd escoge un nombre para el directorio home que refleje el nombre de usuario. Para especificar explícitamente un directorio home diferente hay que especificar la opción -d directorio. El parámetro -m le indica a useradd que cree el directorio home si no existe y que copie el directorio skeleton desde /etc/skel al nuevo directorio home. -c le permite añadir información para el usuario - nótese que necesita colocar esta información entre comillas si contiene espacios en blanco. La línea de comando podría parecerse a: useradd paky -u 501 U -g 100 -m -s U /bin/bash -c "Paky Cool"
El siguiente paso podría ser teclear passwd paky y establecer la contraseña para el nuevo usuario.
Por Defecto La configuración por defecto hace que useradd sea incluso más rápido. Esta configuración puede incluir detalles de grupos, de directorio home y skeleton; la gran ventaja para el administrador es que se pueden dejar todos estos detalles de la línea de comandos, suponiendo que se quieran mantener los parámetros por defecto. Para descubrir los parámetros por defecto para useradd de Debian Linux y Fedora Core, ejecútese la herramienta con la opción -D: debian# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=
Línea de Comandos • LINUX USER
De nuevo, nótese que en Suse 9.2, esta opción se describe en la página de ayuda pero realmente no está implementada. Un vistazo rápido al fichero /etc/shadow nos dirá que la cuenta realmente ha sido deshabilitada, ya que la hash de la contraseña ahora comienza con un signo de exclamación: huhn:!MjBhdgr.6XkE6:U 12575:0:99999:7:::
Esta entrada impedirá que el usuario huhn pueda conectarse al sistema. Para rehabilitar la cuenta tecléese: usermod -U huhn
SKEL=/etc/skel
Suse Linux 9.2 llama a esta opción -show-defaults. Suse utiliza los parámetros por defecto para especificar otros grupos a los que se añadirán las nuevas cuentas: suse# useradd --show-defaults ... GROUPS=video,dialout
Si desea que useradd utilice los parámetros por defecto simplemente teclee algo como useradd < cuenta-nueva > . Téngase en cuenta que algunas distribuciones Linux esperan que se especifique la opción -m si quiere crear un directorio home y copiar el árbol de directorios bajo /etc/skel a él. Hay varias maneras de cambiar los parámetros por defecto. Se podría ejecutar un editor y modificar /etc/default/ useradd o podría usar la línea de comandos para definir los valores especificados en los parámetros. Las distintas distribuciones usan diferentes soluciones para este problema. Los usuarios con Debian o Fedora pueden cambiar los parámetros por defecto de useradd en la línea de comandos estableciendo el parámetro D. Supóngase que necesita definir una shell diferente. En este caso se teclearía: #useradd -D -s /bin/csh
La sintaxis para especificar una localización diferente para los directorios home es similar (-D -b /home2), y el comando
para especificar un grupo por defecto, diferente (-D -g 101). En Suse Linux, de nuevo se necesita especificar --save-defaults en vez de -D. Téngase en cuenta que esta opción no funcionará para todos los parámetros por defecto, sino tan sólo para el directorio skeleton (como en --save-defaults -k /etc/ mi_skel) y la shell (por ejemplo, --savedefaults -s /bin/csh. Los parámetros para la modificación del directorio home o GIDs mencionados en las páginas de ayuda no aparecen en las versiones 2.6.90 (Suse 9.2) y 2.6.96 (Suse 9.3), pero siempre se puede modificar /etc/ default/useradd.
Modificando una cuenta La herramienta usermod permite la modificación de las propiedades de una cuenta de usuario. usermod usa funciones y parámetros similares a los de useradd. Por ejemplo, la siguiente línea proporcionará al usuario una shell diferente: usermod -s /bin/csh huhn
La próxima vez que el usuario huhn se conecte al sistema, él o ella tendrá asignado una shell diferente. Una de las características más prácticas de usemod es su habilidad para deshabilitar cuentas de usuario. Los administradores de Debian que deseen deshabilitar una cuenta de usuario (temporalmente) sin borrar realmente la cuenta, pueden teclear el siguiente comando: usermod -L huhn
WWW.LINUX- MAGAZINE.ES
¡Adios Usuario! Es tan fácil borrar las cuentas de usuario como crearlas. La herramienta que necesita para borrar una cuenta de usuario es userdel. Hay una condición: que el usuario que se desea borrar no esté conectado al sistema o tenga un proceso ejecutándose en el momento de borrar la cuenta. Suponiendo que este no sea el caso, se puede eliminar la cuente tecleando userdel paky. Si desea eliminar el directorio home al mismo tiempo, especifique el parámetro -r para decirle a userdel que elimine los datos personales de Paky.
Conclusiones Aunque la mayoría de las distribuciones tienen herramientas de gestión de usuarios basadas en GUI, la línea de comandos es mucho más rápida a la hora de realizar los cambios si sabe lo que hay que hacer. Una vez que se tenga destreza en el uso de la sintaxis de useradd, usermod y userdel, las tareas de gestión de usuario tan sólo requerirán unos cuantos ■ segundos.
LA AUTORA
Figura 1: El fichero /etc/passwd tiene detalles de los usuarios del sistema.
Heike Jurzik estudió alemán, inglés e informática en la Universidad de Colonia, Alemania. Descubrió Linux en 1996 y ha estado siempre fascinada con el alcance de la línea de comandos de Linux. En su tiempo libre podrá encontrar a Heike escuchando música celta o visitando Irlanda.
Número 10
91
EVENTOS • aKademy 2005
Cumbre Cumbre mundial mundial de de la la comunidad comunidad KDE KDE
AKADEMY 2005
La cumbre mundial de desarrolladores y usuarios de KDE, la ya célebre aKademy, reunió en la ciudad andaluza de Málaga a más de 250 programadores, diseñadores y usuarios finales que trabajaron toda la semana para mejorar uno de los escritorios favoritos de Linux.
E
ste año el evento se dividió en tres partes. Los días 27 y 28 tuvimos la serie de conferencias de “Usuarios y Administradores de KDE” donde se abordó el uso y abuso de aplicaciones. Posteriormente, se pudo asistir a las conferencias, charlas y talleres impartidos por los más prominentes desarrolladores del proyecto. Finalmente todo el mundo se entregó a una maratón de programación, o hackfest, de cinco días y sus respectivas noches, aderezadas de mucho café gratuito.
Acto Inaugural La inauguración oficial de la aKademy 2005 se celebró el sábado 27 a las nueve de la mañana en el salón de actos de la Escuela Técnica Supe-
92
Número 10
rior de Informática. En el acto participaron José Angel Narváez Bueno, Vicerrector de Investigación y Doctorado de la Universidad de Málaga, Fuensanta Ramos Diputada del Servicio de Educación y Nuevas Tecnologías de la Diputación de Málaga, María Gámez, delegada de la Cconsejería de Innovación, Ciencia y Empresa en Málaga de la Junta de Andalucía. Todos agradecieron que se hubiera elegido Málaga como lugar para celebrar la cumbre y destacaron la importancia del rol de los desarrolladores de software libre en el progreso hacia la sociedad de la información global. Y por fin, le tocó el turno a los verdaderos protagonistas de la función y Matthias “Kalle” Dalheimer, presidente en funciones de KDE (más sobre esto después) agradeció la labor desempeñada por Antonio Larrosa, cabeza visible de KDE en España, así como a los voluntarios de la LiMA; la cual que el evento se materializase.
WWW.LINUX- MAGAZINE.ES
Las Conferencias Till Adam se explayó sobre el software de colaboración Kolab [1], Aaron Seigo (quien se dedica ahora a tiempo completo al desarrollo de KDE gracias al mecenazgo de Trolltech) habló de la infraestructura Kiosk (un sistema para restringir las capacidades de KDE [2]), de diseño (recordemos que Seigo es uno de los principales desarrolladores tras el proyecto Plasma [3]) y ofreció una divertida charla sobre Marketing para Geeks. Mark Shuttleworth, el hombre tras los proyecto Ubuntu, Kubuntu y Edubuntu, también estuvo por Málaga y, a pesar de que se pretendía que nos hablara de Kubuntu, acabó hablando del trabajo colaborativo y de los mecanismos que habían establecido en Ubuntu para aceptar y distribuir parches. Revelador. Aparte del hombre de Canonical, otras empresas como Novell, Trolltech y Nokia compartieron con los asistentes sus visiones sobre los escritorios Linux en
aKademy 2005 • EVENTOS
general y KDE en particular. Pete Goodall presentó el Novell Desktop. La conferencias inaugural para desarrolladores y contribuyentes, el segundo módulo del evento, corrió a cargo de Elrik Chambe, Presidente de Trolltech. Chambe habló de la evolución de la empresa, de la cada vez mayor aceptación de la tecnología Qt (lo que permite a la empresa noruega financiar a un número cada vez mayor de desarrolladores de KDE) y de como KDE es el mejor ejemplo de producto de éxito que pueden mostrar a sus clientes. David Carsons de Nokia, por su lado, habló de la creación de un navegador basado en Webcore/KHTML para dispositivos móviles. Cómo no.
Hackfest
Sebastian Kugler
A Destacar Durante el transcurso del evento, hubieron muchos momentos en las que nos quedamos boquiabiertos con algunos de los logros del equipo de desarrollo de KDE. Uno de las aplicaciones presentadas que más gustaron al que suscribe fue Krita, un programa de retoque fotográfico que amenaza con desbancar a the GIMP como rey absoluto del diseño de gráficos bitmap. Entre otras cosas, Krita tiene capacidad de utilizar los plugins de the GIMP, ofrece un interfaz más intuitivo (es decir, tan intuitivo como Photoshop) y sus desarrolladores han prometido soporte CMYK para la siguiente versión, cosa que los usuarios de GIMp llevan años esperando. Pero tal vez una de las ponencias más espectaculares fue la que corrió a cargo de Zack Rusin. Todos quedamos alucina-
tecnología FreeNX puede acelerar la aceptación de KDE al proporcionar un excelente mecanismo para el soporte en tiempo real.
Conclusión
Sebastian Kugler
Durante los últimos cinco días de la aKademy, se llevó a cabo una multitudinaria y desenfrenada orgía de programación, regada de café, surtida de palmeras de chocolate y aderezada de talleres y reuniones de grupos de desarrolladores con intereses afines. Entre otras cosas, se celebraron talleres y reuniones de trabajo sobre multimedia, PIMs y usabilidad, con un especial hincapié en el acercamiento del escritorio a personas con deficiencias visuales.
dos y alelados con el escritorio de Zack, desarrollador de Trolltech, y sus ventanas de tela, auténticas transparencias y widgets vectoriales (que evitan el pixelado
cuando se aumentan) en un charla bautizada (apropiadamente) “Belleza y Magia para desarrolladores de KDE” (podéis ver un video en [4]). Igualmente impresionante, pero de otra manera, fue la demostración de Kurt Pfeifle que nos enseño cómo FreeNX acelera las conexiones a escritorios remotos. Si ya se ha probado VNC, se habrá comprobado lo lento que puede llegar a ser. Con FreeNX, se consiguen velocidades de respuesta decentes incluso sobre conexiones de alta latencia, dividiendo por dos el tiempo de espera. Según Pfeifle, la adopción de la
WWW.LINUX- MAGAZINE.ES
Éste ha sido un evento interesantísimo y lleno de ideas y actos útiles. Por un lado se ha podido transmitir un poco la labor que se lleva a cabo en el proyecto y cómo afecta al hombre de la calle. Por otro hemos visto como las necesidades del hombre de la calle se acaban filtrando en lo que los desarrolladores crean. La interacción humana en carne y hueso motiva a los creadores y permite darle más sentido a nivel personal a la labor que llevan a cabo. Tanto la aKademy, como su equivalente para Gnome, la Guadec, son imprescindibles para mantener la perspectiva y evitar la sensación de que se crea en medio ■ del vacío.
RECURSOS [1] Kolab: http://www.kolab.org/ [2] Artículo sobre Kiosk: http://developer. kde.org/documentation/tutorials/ kiosk/index.html [3] El proyecto Plasma: http://plasma. kde.org/ [4] Video de Zack Rusin y su escritorio: http://vizzzion.org/stuff/xgl_wanking. avi [5] Proyecto FreeNX: http://freenx. berlios.de/ [6] El editor gráfico Krita: http://www. koffice.org/krita/
Número 10
93
EVENTOS
LinuxWorld Conf. & Expo UK
OSWC 2005
OSWC 2006
Fecha: 5-6 Octubre
Fecha: 25-26 Octubre
Fecha: 15-17 Febrero
Ciudad: Londres, Reino Unido
Ciudad: Mérida, España
Ciudad: Málaga, España
Sitio Web: www.linuxworld expo.co.uk
Sitio Web: http://www.opensourceworldconference.com
Sitio Web: http://www.opensourceworldconference.com
Calendario de Eventos Evento AbertLUG Introduction to Linux day LinuxWorld Conference & Expo UK FUDCon London 5th GNOME Developer´s Summit 2005 Black Hat Seattle 2005 Training Linux/OPen Source Forum 2005 IT Underground LinuxWorld Conference & Expo NL hack.lu 2005 AUUG 2005 piksel05 12th Annual Tcl/Tk Conference Versteckte Computer Unkontrollierbare... International PHP Conference 2005 LinuxWorld Conference & Expo NL Comtec 2005 LinuxWorld Conference & Expo Frankfurt linux.conf.au 2006 LinuxWorld Conference & Expo Australia
Fecha 2 Octubre 5-6 Octubre 5-6 Octubre 8-10 Octubre 10-11 Octubre 11-12 Octubre 12-13 Octubre 13-14 Octubre 14-15 Octubre 16-21 Octubre 16-23 Octubre 24-28 Octubre 5-6 Noviembre 6-9 Noviembre 9-10 Noviembre 9-11 Noviembre 15-17 Noviembre 23-28 Enero 28-30 Marzo 06
Ciudad Aberdeen, Reino Unido Londres, Reino Unido Londres, Reino Unido Cambridge, MA, EEUU Seattle,WA, EEUU Estocolmo, Suecia Varsovia,Polonia Utrecht, Holanda Kirchberg,Luxemburgo Sydney,Australia Bergen, Noruega Portland,Oregón,EEUU Munich,Alemania Frankfurt,Alemania Utrecht,Paises Bajos Dresde, Alemania Frankfurt, Alemania Dunedin, Nueva Zelanda Sydney, Australia
Sitio Web www.aberlug.org.uk www.linuxworldexpo.co.uk http://fedoraproject.org/fudcon http://live.gnome.org/Boston2005 http://blackhat.com/html/bh-link/briefings.html
www.linuxopensourceforum.com www.itunderground.org/en www.linuxworldexpo.nl www.hack.lu http://auug.org.au/events/2005/auug2005 www.piksel.no/piksel05 www.tcl.tk/community/tcl2005 www.fiff2005.de www.phpconference.com www.linuxworldexpo.nl www.messe-comtec.de www.linuxworldexpo.de http://lca2006.linux.org.au www.linuxworldexpo.com.au
Información de Contacto Director Paul C. Brown Coolaboradores Paul C. Brown, Jose Manuel González Vida, Juan Rafael Fernández, Pedro Orantes, José María Ruíz, Alberto Planas. Traductores Paqui Martín Vergara, Paul C. Brown, Antonio Rueda, Víctor Tienda. Maquetación Sergio Hardasmal Diseño de Portada Pinball (info@pinball-werbeagentur.de) Publicidad www.linux-magazine.es/pub/ Para España Paul C. Brown pbrown@linux-magazine.es pbrown@linuxnewmedia.es Tel.: (+ 34) 951 010 556 Móvil.: (+ 34) 655 036 836 Fax.: (+ 34) 951 010 516 Sergio Hardasmal anuncios@linux-magazine.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516 Para el Resto del Mundo Brian Osborn ads@linux-magazine.com
94
Número 10
Tel.: Fax.:
(+49) 6509 910 495 (+49) 6509 910 497
Director Editorial Paul C. Brown Director de Producción Sergio Hardasmal anuncios@linux-magazine.es Subscripciones: www.linux-magazine.es/ magazine/subs Precios Subscripción España: Europa: Resto del Mundo - Euros: Resto del Mundo - Dólares U.S.A.:
49,50 € 59,90 € 79,90 € $ 94,90
Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516 subs@linux-magazine.es Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linuxnewmedia.es Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516 www.linux-magazine.es - España www.linux-magazine.com - Mundo www.linux-magazine.de - Alemania
WWW.LINUX- MAGAZINE.ES
Si bien se toman todas las medidas posibles para garantizar la precisión del contenido de los artículos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores en sus artículos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupulosamente para confirmar que está libre de virus y errores. Copyright y Marcas Registradas © 2004 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohíbe la reproducción total o parcial de los contenidos de Linux Magazine sin su permiso previo y por escrito. Linux es una Marca Registrada de Linus Torvalds. Impreso en Alemania Impresión: Dierichs Druck + Media GmbH Distribución: SGEL Depósito Legal: MA-116-2005 ISSN edición impresa: 1576-4079 ISSN edición online: 1699-2237
095-096 SuscripcionesV3_ok
10/9/08
8:08 pm
Página 95
Más del 30% de descuento respecto al precio de portada: Consigue 12 números por 54’90 Euros y todos los DVDs ¡Gratis!
A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios para que renueves tu subscripción. Ésta se renovará automáticamente cada año. Recibirás una confirmación aproximadamente 30 días antes del final de tu periodo de subscripción, pero no se requiere que hagas nada para seguir suscrito.
¡No te pierdas Linux Magazine nunca más! La subscripción te asegura que recibas los conocimientos Linux de más alta calidad en tu domicilio cada mes.
Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el precio de todos los números que no hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.
Linux Magazine es algo más que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre. Suscribiéndote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre allá donde haga falta.
095-096 SuscripcionesV3_ok
10/9/08
8:08 pm
Pรกgina 96
LINUX LOCAL
LINUX LOCAL Leyenda inux Local es tu directorio de servicios y empresas de Linux cerca de ti. ¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuentra quién ofrece qué y dónde. El directorio se divide en regiones autónomas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Utiliza la leyenda de la derecha para encontrar la empresa que ofrece el servicio que precises. Linux Local es tu guía de servicios Linux.
L
1.- Hardware 2.- Software / Desarollo 3.- Formación 4.- Soporte / Consultoría 5.- Servidores 6.- Redes 7.- Migración 8.- Hospedaje
Andalucía Logo
Empresa
Correo-e
Web
1
2 3 4 5 6
Gesinfo
info@gesinfoweb.com
www.gesinfoweb.com
BitRock
info@bitrock.com
bitrock.com
Properly Software
info@properly.es
www.properly.es/site
Empresa
Correo-e
Web
IWS
iws@iws.es
www.iws.es
Empresa
Correo-e
Web
Mono::labs
contacte@monolabs.com
www.monolabs.com
Datum
info@datum.ws
www.datum.ws
7 8
Cataluña Logo
1
2 3 4 5 6
7 8
Madrid Logo
1
2 3 4 5 6
7 8
¿Por qué no está su empresa en este directorio? LINUX MAGAZINE llega a miles de empresas, profesionales y usuarios cada mes. Si tiene servicios o productos Linux que ofrecer ¡Llámenos! Tlf.: +34 951 010 556 Fax: +34 951 010 516 info@linux-magazine.es
WWW.LINUX- MAGAZINE.ES
Número 11
93
PRÓXIMO NÚMERO
SYSADMIN
Diciembre 2005: Número 11
PRÓXIMO NÚMERO
El Servidor X es el motor tras el sistema de ventanas de Linux. En el número 11 de Linux Magazine veremos algunos trucos para adaptar la configuración de las X para usos especiales. ¿Cómo de segura es tu red? Lo descubrirás en nuestro artículo donde los expertos analizan medidas de protección contra el secuestro TCP.
MUNDO MÓVIL La época en que los ordenadores eran unos ladrillos que se aposentaban sobre la mesa de cada cual ha pasado a la historia. Día a día aumenta el número de usuarios que se conectan al mundo con ordenadores portátiles y dispositivos inalámbricos cada vez más pequeños y cada vez más potentes. Sin embargo, los problemas derivados de la informática móvil plantean una serie de retos únicos e intrigantes. El mes que viene, en Linux Magazine, examinamos cuáles son esos retos y apuntamos maneras de superarlos. Primero veremos cómo estar conectados siempre a la red con GPRS y un móvil relativamente reciente. A continuación, seguimos con interconexiones ordenador-móvil viendo cómo podemos controlar nuestro móvil con Gammu y Wammu, lo que nos permitirá monitorizar llamadas entrantes y mensajes SMS desde nuestro equipo. Asimismo veremos cómo crear perfiles que nos permitirán movernos de un entorno de red a otro con el mínimo de molestias con SCPM. Y siguiendo en la misma vena, vemos una utilísima aplicación escrita en Perl que nos permite seleccionar visualmente la red inalámbrica a la que queramos conectarnos entre todas las que se encuentran en el entorno. La vida es Móvil, la vida es Linux Magazine.
BEAGLE Últimamente se habla mucho de un nuevo paradigma de escritorio, un escritorio más funcional y utilizable. Beagle es una herramienta diseñada para el nuevo escritorio. Beagle nos permite buscar documentos en nuestro disco duro como si de un buscador de Internet se tratase. El mes que
viene revelamos dónde se esconden las cosas gracias a este sabueso.
GENTOO Gentoo es un sistema Linux poderoso y flexible que puede adaptarse a medida y perfectamente a tu entorno de trabajo. En Linux Magazine 11 veremos cómo instalar y adminis-
trar software con el sistema de paquetes Portage de Gentoo.
DESARROLLO En nuestra sección dedicada a Perl, estudiamos una pequeñas muestra del enorme abanico de métodos que existen para el análisis de XML y vemos cual es la mejor herramientas para cada tarea.
A LA VENTA: NOVIEMBRE 2005 98
Número 10
WWW.LINUX- MAGAZINE.ES
¡Hazte con tus ejemplares atrasados! #1
¡No esperes a que se agoten!
#2
#5
¡pídelos ya! #3
#6
#8
¡pídelos ya!
o agotad #4
#7
#9
W W W. L I N U X - M A G A Z I N E . E S