Você está na página 1de 84

GRATIS

DVD de Instalacin Ms info en pg. 3.

LENGUAJE NATURAL
Comunicacin humana con tus apps

NMERO 93 P.V.P 6,95


CANARIAS P.V.P 7,05

LENGUAJE NATURAL
Utiliza Maluuba para implementar la comunicacin con lenguaje humano en tus apps

RASPBERRY PI
Entrevista con su creador, Eben Upton

SIMON
Una sofisticada herramienta de reconocimiento de voz

CLONACIN
Replicas bit a bit de discos duros defectuosos

Descarga vdeos de YouTube y Vimeo desde la shell

Crea dispositivos que detecten tu presencia a distancia

Diseo para tabletas grficas

WWW.LINUX- MAGAZINE.ES

8 413042 594505

MOVGRAB

ARDUINO Y RFID MYPAINT

00093

Un vistazo al precursor de KDE 5

KDE 4.10

DVD

Arranque
enos OSO? al estado, escrba e U T C E m p ra qu DEF carlo o est en a

DVD tu DVD es que

nosti ra diag e.es pa in z Si cre a g a nux-m evo. dvd@li uno nu s o m ie v n e te

DEBIAN 7
ebian 7 Wheezy ya est aqu por fin. Tras dos aos y tres meses, llega la ltima versin de tal vez una de las distros ms influyentes del mundo GNU/ Linux. De Debian han surgido las distros ms populares del momento, incluyendo Ubuntu, Mint y Knoppix. La alta estabilidad y solidez de Debian la hace ideal para todos los entornos, desde servidores y clusters, hasta escritorios personales y estaciones de trabajo para empresa. El grado de flexibilidad y personalizacin que permite Debian ha hecho que sea elegido como el sistema a instalar en el Ayuntamiento de Munich, para la infraestructura de la administracin pblica de Extremadura e incluso para la red de usuarios de la Estacin Espacial Internacional. Debian soporta un gran nmero de arquitecturas, incluyendo ARM, x86 (de 32 y 64 bits) y PowerPC y dispone de kernels intercambiables, disponiendo, por ejemplo, de versiones que integran kernels FreeBSD o Hurd.

Este DVD contiene Debian 7, un sistema operativo Linux de corte profesional completo y con aplicaciones listas para ser utilizadas. Debian viene en versin de instalacin de 64 bits y est listo para ser instalado en tu ordenador. Para empezar a usar tu Linux, inserta el DVD en el reproductor y rearranca el ordenador. Si no aparece el men del DVD, tienes que ajustar la BIOS para arrancar desde el disco. Para hacerlo, normalmente has de pulsar una tecla durante las primeras fases del arranque del ordenador (habitualmente F2 o Supr), buscar el men que permite cambiar la secuencia de arranque de dispositivos y colocar el lector de DVDs en el primer lugar de la secuencia. Posteriormente se guardan los cambios y se sale de la herramienta de configuracin para que se reinicie el arranque. Como cada BIOS es diferente, recomendamos consultar la documentacin del fabricante para realizar esta operacin.

RECURSOS
[1] Sitio de Debian:

http://debian.org/
[2] Novedades de Debian 7:

http://www.debian.org/News/2013/ 20130504

WWW.LINUX- MAGAZINE.ES

Nmero 93

EDITORIAL

Y EL GANADOR ES
E
s difcil imaginar un Concurso Universitario de Software Privativo (Bases: 1.- Todo programa ir acompaado de un certificado firmado por un abogado en ejercicio que avale que ninguna parte del cdigo infringe las patentes de los organizadores, etc.), pero al paso que vamos puede que tambin nos quedemos sin Concurso Universitario de Software Libre. Es doloroso, pero parece que, despus de siete ediciones, est perdiendo su fuelle. Joaqun Prez Marco result ganador en el VII Concurso de Software Libre, captulo Zaragoza. Enhorabuena y todo eso, pero una cosa: hay alguien ms a quin le pique que fuera el nico en presentarse a la final? No es por desmerecer su trabajo, en absoluto, pero los organizadores haran bien en no autocongratularse demasiado por el xito del evento. El problema no es mucho mejor en el resto de las ediciones. Hace ya al menos un par de aos que el captulo de Castilla La Mancha no se celebra, igual que el de Madrid. El de la Universidad Politcnica de Barcelona tampoco aparece por ningn lado. Incluso el de la Facultad de Informtica de Sevilla, pionera del evento, vive horas bajas. Su edicin ms exitosa, en lo que a nmero de proyectos presentados se refiere, fue la del curso 2010 2011, con 115. En los dos aos sucesivos cay por debajo de los 100 proyectos. Este ao slo se presentaron 85 proyectos, que es menos que los que se presentaron en la primera edicin del curso 2006 2007 (93 proyectos). Para darle a eso un poco de contexto, eso es un 26% menos con respecto al mximo alcanzado en el 2010 2011. Tambin es la edicin en la que menos alumnos participan, con 124, frente a los 135 del 2006 2007 y los 168 del curso 2008 2009. Al igual que lo que pasa con los eventos de Software Libre y el asociacionismo GNU/ Linux, decir que algo pasa con todo eso, es una obviedad que raya en lo perogrullo. Pero decir que todo lo anterior es toda y la misma cosa me parece simplista. Los eventos murieron cuando se acab el dinero pblico que lo financiaba y casi es bueno que una cosa no sostenible como eso haya acabado por desaparecer. El tema del asociacionismo nunca ha sido el fuerte de los espaoles. Algunos alegarn que es porque el tiempo es demasiado bueno. Puede, pero la realidad es que las asociaciones espaolas de Linux se vertebraban demasiado en individuos que no supieron fomentar un ambiente para que se produjera una relevo generacional. As que, cuando llegaron los trabajos de 8 horas, el matrimonio y los hijos, adis a los GULes en todas partes. Pero el que crea que esto puede explicar lo de los concursos est confundiendo las cosas. El Concurso de Software Libre no va de Linux. Va de pues eso: Software Libre (o, si prefieres, de cdigo abierto), va de desarrollar, va de dar a conocer proyectos, de conseguir algunos crditos, de ver de qu se es capaz. Ni siquiera tiene que desarrollarse para o sobre GNU/Linux. Lo nico que determina la validez de un proyecto es su licencia. Podemos intentar echarle la culpa a los alumnos que son cada vez ms desinteresados, pero desde que Platn (o Scrates, no se sabe muy bien cul de los dos) se quejaba hace 2.500 aos de eso mismo con respecto a los jvenes de su poca, podemos suponer que la mala actitud, la indiferencia y la apata de los chavales son constantes en la ecuacin y, por lo tanto, los podemos descartar. Aparentemente ha habido una cada en el nmero de estudiantes que cursan estudios superiores. No tengo datos desglosados para la carrera de informtica, pero el ndice de cada de menos del 2% nacional anual que se viene produciendo desde hace un par de aos, no puede explicar ni de lejos los nmeros del Concurso. Lo que nos deja la organizacin. Puede que el declive en el inters del concurso se pueda achacar en parte al cansancio del formato. ste no se ha modificado de manera apreciable desde su creacin. Admitido: a primera vista puede que haya poco margen de maniobra en la fase de desarrollo (aunque con lo que sabemos sobre gamificacin, seguro que hay algo que se puede hacer para animar los largos meses de picar cdigo, tanto para los concursantes como para el pblico), pero la fase final es claramente mejorable. Las presentaciones de diapositivas y el desfile de bustos parlantes que parecen tener ms inters en or el sonido de su propia voz que la de dispensar cualquier tipo de conocimiento son horriblemente aburridos. Por alguna extraa razn, ni siquiera los concursantes se salvan de este cansado ritual. No se les exige siquiera que muestren en ningn momento sus proyectos en funcionamiento al pblico, siendo el nico requisito de nuevo, s, lo adivinaste, mostrar una presentacin Impress. Puede que los promotores piensen aquello de si no est roto, no lo arregles. El problema es que est roto. O ms bien desgastado. Y dnde est el premio popular? Por qu no pueden votar lo estudiantes a los proyectos que ms les gustan? No seor: jurado de autodenominados expertos, que no dudo que lo sean, pero que siempre son ms o menos los mismos. Debe ser una enorme responsabilidad. Al menos en Zaragoza lo tuvieron fcil. Hablando de premios y de Zaragoza, sabis cul era el gran incentivo del concurso aragons? Una tableta de Samsung. En el concurso de Sevilla ni siquiera se especifica qu se llevan los ganadores. Comprendo que no debe ser lo ms importante, pero entiendo que el milln de euros que le caen a los ganadores del Nobel tambin es un incentivo para participar. Si te vas a molestar en tener premios, al menos que sea algo que valga la pena. Desde luego que no espero que se haga una gran inversin en este apartado. Todo lo contrario! Pero un poco de imaginacin por favor, que regalar tabletas o porttiles del Carrefour es un poco como aquel que compra un ramo de flores en una gasolinera por su aniversario de boda. Sarcasmos aparte, por supuesto que no hay una nica solucin a los problemas, pero los organizadores debern repensar el Concurso de Software Libre si quieren que este evento, que tan valioso podra ser, se siga celebrando.

Paul C. Brown Director

Nmero 93

WWW.LINUX- MAGAZINE.ES

CONTENIDOS Magazine sollte n 93 hier stehen COVER STORY Linux Schlagwort

PORTADA
10 Todo Natural
Aade procesamiento de lenguaje natural a tus propias aplicaciones con la API de Lenguaje Natural Maluuba (nAPI).

PRCTICO
28 Enlaces Perdidos
LinkChecker nos ayuda a mantener nuestro sitio web libre de enlaces rotos.

DESARROLLO
47 Copias Personalizadas
Clonezilla consigue restaurar y realizar copias de seguridad simplemente con unas cuantas combinaciones de teclas. Una solucin domstica reduce el tiempo y el esfuerzo en el proceso de realizar copias a un CD.

18 rdenes Claras
Simon es una sofisticada herramienta de reconocimiento de voz con un acceso sencillo a dos potentes motores de reconocimiento de voz, Julius y CMU Sphinx.

ADMINISTRACIN
52 Interfaz de Precisin
ifdata es una herramienta adecuada para usarse en scripts y nos proporciona una precisin absoluta a la hora de obtener informacin del estado de las interfaces de red, sin la necesidad de extraer valores individuales.

31 Corredor Silencioso
Las tabletas y los smartphones albergan memorias flash que ahorran espacio y energa. Vamos a explicar las caractersticas de los chips flash y sugeriremos algunos sistemas de ficheros apropiados para Linux.

EVALUACIN
24 Justo Antes de las 5
KDE SC 4.10 se lanz seis meses despus de KDE 4.9, aadiendo muchas caractersticas nuevas. El trabajo est en plena sintona para la siguiente generacin, KDE Frameworks 5: un KDE basado completamente en Qt5 y QML.

37 Guerras de Clones
Presentamos cuatro herramientas que ayudan a usuarios y administradores de Linux a mover los datos y crear rplicas bit a bit de disco duros defectuosos.

LINUX MAGAZINE
03 04 81 81 82

DESARROLLO
41 Dialecto de la Isla
Kotlin, una pequea isla en el Golfo de Finlandia, es tambin el nombre de un nuevo lenguaje de programacin, con el objetivo de ser una alternativa moderna a Java.

DVD Linux Magazine Editorial Eventos Informacin de Contacto Prximo Nmero

53 Hecho para Servir


Cmo crear sitios web seguros con sus propios privilegios bajo un mismo servidor.

Nmero 93

WWW.LINUX- MAGAZINE.ES

ADMINISTRACIN
55 Un Filtro Amistoso
Cmdfs crea sistemas de ficheros virtuales filtrados basndose en una estructura de directorios. Se puede incluso integrar con otros programas para convertir datos al vuelo.

LINUX USER
72 Archivado Inteligente
Los portales de vdeo como YouTube o Vimeo ofrecen todo un abanico de pelculas cortas curiosas y entretenidas. Si deseamos disfrutarlas desconectados de la red, una pequea herramienta llamada Movgrab puede ayudarnos.

HARDWARE
75 Atentos a sus Pantallas 58 Punto de Control
Los RFDIs son un tipo de dispositivo y tecnologa qu utilizamos habitualmente cuando subimos en el autobs,vamos al gimnasio o incluso para fichar en el trabajo. Entender xorg.conf nos hace ms fcil el ajuste de la configuracin de nuestra pantalla.

61 Cultivador de Frambuesas
Despus de seis aos de desarrollo, el fundador Eben Upton y los dems miembros de la Fundacin Raspberry Pi estn viendo por fin los resultados de sus esfuerzos.

LINUX USER
64 Brochazos Digitales
MyPaint es un programa de dibujo simple, intuitivo y verstil, diseado para su uso con tabletas grficas y que promete una experiencia similar a dibujar con un lpiz o un pincel.

COMUNIDAD
78 Konsultorio
Klaus Knopper, creador de Knoppix, vuelve un mes ms para responder a las preguntas de los lectores. Este mes: Swap, zRam y Direccin del Router.

67 Tratamiento GUI
Si necesitas aadir elementos grficos a un script Python, EasyGUI puede ayudar a los principiantes y expertos por igual.

80 Ordenadores Pequeines
Una seleccin de tarjetas ultra pequeas permiten que los futuros desarrolladores aprendan cmo crear y programar ordenadores.

3 Ver p0

deta s m a ar

lles

WWW.LINUX- MAGAZINE.ES

Nmero 93

NOTICIAS

NOTICIAS
El Legado de Aaron Swartz
Aparte de escribir el manifesto en pro de la documentacin acadmica libre, ayudar en la estandarizacin del protocolo RSS, desarrollar web.py y crear el sitio agregador de noticias, Reddit, Aaron Swartz dej al mundo Dead Drop [1]. Dead Drop funciona como Drop Box, pero es totalmente confidencial. La idea es que se use para proteger la identidad de las fuentes de los medios, evitando as tanto comprometer al periodista, que las fuerzas de seguridad podran exigir que revelase la procedencia de informacin sensible, como a la fuente en s. De hecho, tal como est creado, los receptores de los documentos depositados en Dead Drop no tienen ninguna manera de conocer la identidad del depositante. Una de las primeras implementaciones de Dead Drop se estren el 15 de mayo, a cargo de la prestigiosa revista The New Yorker. El servicio lo denominan StrongBox [2] y slo es accesible a travs de la red TOR, lo que aade otra capa de seguridad para la fuente. Dead Drop sigue en desarrollo, ya que cuando Swartz muri, an estaba en fase beta y parece que no es precisamente sencillo de implementar. Es el equipo de programadores de The New Yorker los que siguen desarrollando el proyecto, poniendo todo el cdigo a disposicin del mundo bajo una licencia Aferro GPL.

Pinginos en el Espacio
La NASA ha decidido migrar la ISS a Linux. Segn un portavoz del proyecto: Necesitamos un sistema operativo que sea estable y de fiar. Segn la nota de la Linux Foundation, la United Space Alliance, la empresa contratada por NASA para el mantenimiento de los ordenadores de abordo de la Estacin Espacial Internacional, el sistema a migrar es la red OpsLAN [] una red de porttiles que suministra a la tripulacin de la ISS de capacidades vitales para las operaciones del da a da, que van desde informar a los astronautas de dnde estn, hasta el control del inventario del equipo usado y proveer una interfaz a las cmaras que capturan fotos y vdeo.

RECURSOS
[1] DeadDrop: http://deaddrop.github.io/ [2] Implementacin de DeadDrop de The New Yorker: http://www.newyorker.com/strongbox/

Carreras con Software Libre


Portal Programa ha publicado su Ranking de Universidades de Software Libre que recoge los resultados de un estudio que evala el grado de compromiso de 72 universidades espaolas con la difusin y enseanza del Software Libre. Especialmente interesante es la seccin Ver Resultados que muestra en forma de lista ordenada, la clasificacin por Universidad (la mejor: la Univ. de Granada, la peor: La Univ. Online) y por comunidad autnoma (la mejor: Islas Canarias, la peor: Comunida Foral de Navarra). La distro elegida es Debian 6, con ligeras modificaciones y viene a sustituir el Windows XP que se vena utilizando en la estacin espacial y, en el momento de escribir esto, ya se est llevando a cabo la migracin. A la Linux Foundation se le ha encomendado la formacin de los tcnicos a cargo de la migracin.

RECURSOS
[1] Nota de la Linux Foundation sobre la migracin de la ISS:

RECURSOS
[1] Ranking de Universidades de Software Libre:

http://training.linuxfoundation.org/ why-our- linux-training/trainingreviews/linux-foundation- trainingprepares-the-international-space-sta tion-for-linux-migration

http://www.portalprogramas.com/software-libre/ranking-universidades/
[2] Resultados del Estudio: http://www.portalprogramas.com/software-libre/

ranking-universidades/clasificacion

Nmero 93

WWW.LINUX- MAGAZINE.ES

PORTADA Maluuba nAPI

Procesamiento del lenguaje natural con la nAPI de Maluuba

Todo Natural
Aade procesamiento de lenguaje natural a nuestras propias aplicaciones con la API de Lenguaje Natural Maluuba (nAPI). POR PHIL TREGENZA
a tecnologa del procesamiento de lenguaje natural ha visto una mejora significativa en los ltimos aos debido a la evolucin de los mtodos de aprendizaje automtico, que estn reemplazando gradualmente las tcnicas tradicionales basadas en reglas. En el mbito de los mviles, Siri y Google Voice Search estn demostrando que el lenguaje natural jugar un papel ms importante en el desarrollo de las aplicaciones del futuro. Estas aplicaciones comprenden lo que los usuarios dicen y puede traducir consultas en lenguaje natural en solicitudes de descubrimiento local y control sobre el telfono. Maluuba ha surgido en este espacio con su aplicacin buque insignia de asistente personal para la plataforma Android, que pronto se lanzar como aplicacin de Windows 8. Pero no necesitamos un telfono inteligente para empezar a trabajar con el procesamiento del lenguaje natural. En noviembre de 2012, Maluuba anunci que haca disponible sus herramientas de lenguaje natural en lnea para los usuarios que deseasen integrar el procesamiento de lenguaje natural en sus propias aplicaciones. El API de lenguaje natural de Maluuba, nAPI [1], permite a los desarrolladores disponer de procesamiento de lenguaje natural de ltima generacin en sus propias aplicaciones. nAPI, que es la primera API de fcil acceso dedicada al procesamiento del lenguaje natural, devuelve una interpretacin de frases cortas en ingls en forma de una categorizacin de la frase, la intencin prevista y una lista de entidades importantes contenidas dentro de la frase. Los desarrolladores pueden utilizar nAPI con o sin reconocimiento de voz. Es importante enten-

der que no ofrece una solucin de reconocimiento de voz, a pesar de que se puede combinar con herramientas de este tipo por separado. nAPI acepta texto como entrada, lo que significa que podramos ponerlo a trabajar sobre el texto de la interpretacin que se ha obtenido a travs de una herramienta de reconocimiento de voz, o simplemente podemos usarlo para interpretar las peticiones escritas desde el teclado. Se trata de una solucin basada en la nube, por lo que se requiere conexin a Internet. Podemos acceder a la API directamente con HTTP (para respuestas JSON) o podemos utilizarla con una de las libreras de cliente disponibles. Actualmente, las implementaciones nAPI estn disponibles en Python [2],

Ruby [3] y Java [4] en GitHub.

Cmo funciona?
Cuando nAPI de Maluuba interpreta una frase, responde con tres piezas clave de informacin. La primera pieza es una identificacin de alto nivel llamada category. La categora devuelta ser una de las 22 categoras diferentes que Napi distingue [5]. Este conjunto de categoras abarca una amplia gama de casos de uso habitual, y la lista de categoras va creciendo con cada actualizacin nAPI. La Tabla 1 muestra la lista de las categoras que estn disponibles actualmente. La lista de la Tabla 1 nos dar una idea

Tabla 1: Categoras nAPI


Categora BUSINESS CALL CONTACT KNOWLEDGE ENTERTAINMENT EMAIL HELP TRAVEL MUSIC CALENDAR WEATHER REMINDER ALARM TIMER STOPWATCH NAVIGATION TRANSIT SEARCH TEXT SOCIAL SPORTS APPLICATION Descripcin Buscar comida o productos Realizar llamadas de telfono, responder y verificar llamadas perdidas Buscar y organizar la lista de contactos Preguntar una pregunta dentro de una gran variedad de temas Verificar la disponibilidad de tickets y comprarlos para el cine o eventos Componer y buscar correo electrnico Pedir ayuda o soporte Viajar a un destino por avin Controlar un reproductor de msica Crear y administrar eventos en un calendario Preguntar acerca del tiempo atmosfrico Crear y buscar recordatorios Configurar una alarma Controlar un temporizador Controlar un cronmetro Buscar direcciones Preguntar informacin relativa al trfico local Bsqueda web en los principales motores de bsqueda Componer mensajes de texto Acceder a las herramientas sociales Preguntas relativas a deportes Abrir una aplicacin

10

Nmero 93

WWW.LINUX- MAGAZINE.ES

Maluuba nAPI PORTADA

tablas 2 y 3 muestran las acciones y entidades disponibles dentro de la categora CALENDAR . Como se puede ver, la combinacin de entidades y acciones abarcan una amplia gama de posibles escenarios para crear, modificar y eliminar los eventos del calendario. Para ms informacin sobre las opciones de calendario de nAPI de Maluuba, podemos consultar la pgina de la categora calendario [6].

Arrancando
Para empezar a consultar nAPI, primero debemos obtener una clave de API desde http:// dev. maluuba. com . El registro es gratuito y slo requiere nuestra cuenta de Google, Github o Facebook para inscribirse. Las claves libres tienen un lmite inicial de 1.000 llamadas por da, aunque Maluuba aumentar este lmite bajo demanda. Si necesitamos ms llamadas para proyectos de software libre o de uso privado, debemos mencionarlo en la solicitud. Se puede contactar con el equipo de Maluuba en napi@ maluuba.com. La API est disponible haciendo una peticin HTTP GET a http://napi. maluuba.com/v0/interpret. Los dos parmetros de consulta requeridos son la clave de API (apikey) y [10].

rpida de los tipos de tareas que se pretenden abordar con nAPI. La segunda pieza clave de informacin que se devuelve en la respuesta es action. Una accin indica una intencin particular dentro de la categora asociada con la frase. Podemos pensar en la accin como una categora secundaria. La ltima pieza de informacin que se devuelve en el resultado es un conjunto de entidades. Las entidades son piezas de informacin que se extraen de la frase. Y cada categora nAPI tiene su propio conjunto de acciones y entidades. Como ejemplo, CALENDAR es una de las categoras soportadas por nAPI. Cualquier frase relativa a la gestin de un calendario o la organizacin de nuestro tiempo ser interpretada con la categora CALENDAR . Algunas acciones posibles dentro de esta categora pueden ser CALENDAR_ CREATE_EVENT y CALENDAR_ REMOVE_ EVENT para la creacin y eliminacin de eventos en un calendario. El Listado 1 muestra una respuesta JSON de Maluuba a la orden Set up a

meeting with Joe tomorrow at noon (Fija una reunin con Joe maana al medioda). Obsrvese que el nAPI coloca la solicitud de forma que sea fcil procesarla para otros componentes del programa. De la frase original en lenguaje natural, nAPI ha extrado dateRange , timeRange y contacts, as como una prediccin de ttulo title para el nombre del evento (en este caso, meeting ). Un programa o script personalizado puede entonces procesar esta respuesta e interactuar con una herramienta de Listado 1: Configurar una Reunin calendario estndar para 01 Ejemplo de resupuesta json: hacer los cambios necesarios 02 { en nuestro calendario perso03 entities: { nal. 04 dateRange: [{ El Listado 2 muestra la res05 start: 2013-01-04, puesta de nAPI al comando 06 end: 2013-01-05 de lenguaje natural Cancel 07 }], my meeting with Joe. (can08 title: [meeting], celar mi encuentro con Joe). 09 timeRange: [{ En este caso, la accin 10 start: 12:00:00PM, CALENDAR_REMOVE_EVENT 11 end: 12:00:00PM especifica que se debera reti12 }], rar un evento del calendario. 13 contacts: [{ La categora CALENDAR es 14 name: joe una caracterstica popular y 15 }] es una herramienta muy 16 }, poderosa para aadir coman17 action: CALENDAR_CREATE_EVENT, dos de lenguaje natural a 18 category: CALENDAR aplicaciones de calendario 19 } nuevas o existentes. Las

WWW.LINUX- MAGAZINE.ES

Nmero 93

11

PORTADA Maluuba nAPI

Listado 2: Cancelar una Reunin


01 Ejemplo de respuesta json: 02 { 03 04 05 06 07 08 09 10 11 } }, action: CALENDAR_REMOVE_EVENT, category: CALENDAR }] entities: { title: [meeting], contacts: [{ name: joe

Listado 3: Ejemplo en Lnea de Comandos Python


01 >>> from maluuba_napi import client 02 >>> c = client.NAPIClient(YOUR-API-KEY-HERE) 03 >>> r = c.interpret(i want a first class plane ticket to new york leaving on christmas) 04 >>> r.category 05 uTRAVEL 06 >>> r.action 07 uTRAVEL_FLIGHT 08 >>> r.entities 09 {udestination: [unew york], uLUXURY: [ufirst], udepartureDay: [u2013-12-25]}

Las libreras del cliente nos ahorrarn algo de trabajo al configurar nAPI en nuestras aplicaciones de Python, Ruby y Java. Si tenemos la intencin de llamar a nAPI desde otro lenguaje de programacin, deberamos ser capaces de armar nuestro propio cliente utilizando los mtodos de acceso directo HTTP. Python es un buen lenguaje para probar nAPI una vez que consigamos nuestra clave de API. La librera est

disponible a travs del sistema de paquetes pip de Python:


pip install maluuba_napi

El Listado 3 muestra un ejemplo de nAPI operando desde una lnea de comandos Python. Una prueba de lnea de comandos nos permite probar rpidamente la capacidades de nAPI. Usando el mtodo interpret de la clase NAPIClient podemos

introducir nuestra frase. En este caso, una solicitud en lenguaje natural pide un vuelo en primera clase a Nueva York antes de Navidad. El objeto respuesta organiza la solicitud en una estructura, legible por el programa, por categora, accin y entidades.

Asistente Personal
nAPI es til como una herramienta de decisiones ante entradas de lenguaje natural y se puede utilizar para ayudar a enrutar otras API que estn ms preparadas para responder preguntas. Podramos utilizar nAPI para construir un asistente de lnea de comandos personalizado que proporcione respuestas sobre el tiempo atmosfrico actual de cualquier ciudad del mundo. Utilizando las mismas tcnicas, tambin podramos ampliar el asistente para gestionar las peticiones de las restantes 21 categoras de nAPI. La solucin completa requerira un conjunto diverso de APIs y aplicaciones. El Listado 4 muestra cmo configurar una estructura para delegar categoras nAPI en otros componentes, ms capaces. Los argumentos se unen primero entre s, de tal manera que la interfaz acepta frases completas. No hay una lista de argumentos para esta lnea de comandos de Maluuba. Consideremos la peticin:
maluuba.py what is the U weather in toronto

Tabla 2: Acciones de Calendario


Accin CALENDAR_CREATE_EVENT CALENDAR_SEARCH CALENDAR_REMOVE_EVENT CALENDAR_MODIFY_EVENT CALENDAR_AVAILABILITY Descripcin Configurar elementos de un calendario Buscar algo en el calendario Eliminar eventos del calendario Modificacin directa de informacin de evento Verificar una hora sin reuniones

Tabla 3: Entidades de Calendario


Entidad originalTitle replacementTitle originalDate replacementDate originalLocation replacementLocation originalTime replacementTime contactName deleteContactName duration dateRange timeRange repeatDaysLength lengthOfTime repeatDays meetingTitle location date Descripcin El nombre del evento de calendario que queremos modificar El nuevo nombre de un evento de calendario modificado La fecha del evento de calendario que queremos modificar La nueva fecha del evento de calendario modificado La ubicacin del evento de calendario que queremos modificar La nueva ubicacin del evento de calendario modificado La hora del evento de calendario que queremos modificar La nueva hora del evento de calendario que queremos modificar El nombre de un contacto al que queremos invitar a una reunin El nombre de un contacto a eliminar de una reunin existente La duracin de la reunin La fecha o rango de fechas para una reunin. dateRange incluye el da de comienzo y excluye el da final La hora de la reunin que queremos crear El nmero de ocurrencias de una reunin como evento recurrente La duracin de una reunin Los das en que una reunin recurrente debera repetirse El nombre de una reunin La ubicacin de una reunin La fecha de una reunin

nAPI interpretar esta solicitud como perteneciente a la categora WEATHER con la accin WEATHER_STATUS. Esta accin es para cualquier frase donde un usuario tenga la intencin de averiguar

12

Nmero 93

WWW.LINUX- MAGAZINE.ES

PORTADA Maluuba nAPI

el tiempo. La ventaja de nAPI es que tambin podramos hacer esta misma pregunta de diferentes maneras, por ejemplo:

solicita la informacin del tiempo. El sistema que ejecuta este software podra tener una localizacin predeterminada, que podra servir como una opcin por defecto de las solicitudes do i need an umbrella sobre el tiempo. Esta informacin sobre will it be hot out el posicionamiento podra obtenerse a is it going to rain travs de una antena, o trazando una direccin IP. nAPI por s mismo no sabe cmo est el Cuando se trata de APIs, que necesitiempo, pero muchas otras fuentes de tan una ubicacin, a veces puede ser datos y APIs proporcionan informacin difcil proporcionar la ubicacin en el meteorolgica. El Listado 5 muestra formato necesario. Wunderground cmo conectar la API de Weather requiere una cadena de ubicacin preUnderground para obtener informacin definida o coordenadas GPS. En este sobre el tiempo. La API Wunderground ejemplo se utilizar el mtodo de coortambin requiere una clave de API para denadas GPS. Para obtener las coordela autenticacin. Las claves de uso granadas GPS de la entidad de ubicacin, tuito para desarrolladores estn dispovamos a utilizar una API geocodificanibles en la pgina web de Weather dora. (La geocodificacin es el proceso Underground [7], junto con detallada de obtencin de las coordenadas GPS a documentacin. partir de una direccin escrita, formal o Despus de conseguir una respuesta ambigua). JSON desde Wunderground, analizaEl Listado 6 utiliza el geocodificador mos las condiciones actuales de la ciuNominatim para buscar las coordenadad. En este ejemplo se supone que la das GPS del lugar determinado. Nomifrase menciona la ciudad para la cual se natim utiliza la coleccin de datos geogrficos libres que gestiona el proListado 4: maluuba.py
01 from maluuba_napi import client 02 import optparse 03 import apis 04 05 def main(): 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 if __name__ == __main__: 27 main() if r.category == WEATHER : if r.action == WEATHER_STATUS : if location in r.entities : w = apis.WeatherClient() location = r.entities[location][0] temperature = w.query(location) print The temperature in %(location)s is %(temperature)s degrees celsius % vars() else : print Please specify a location else : print %s action is not supported in this demo % (r.action) 22 23 24 25 11 12 13 14 15 16 17 18 19 20 21 r = c.interpret(phrase) phrase = .join(arguments) p = optparse.OptionParser() options, arguments = p.parse_args() c = client.NAPIClient(NAPI-KEY-HERE) 02 03 04 05 06 07 08 09 10

yecto OpenStreetMap. La versin ms actualizada est disponible en la pgina web de Nominatim [9]. Nominatim Geocoder est disponible de forma gratuita para uso no comercial y el servidor requiere que se consulte ms lento que una vez por segundo. Ahora maluuba.py puede responder a muchas preguntas diferentes sobre el tiempo. Se pueden completar magnficas implementaciones para todas las categoras y acciones soportadas por nAPI para crear una aplicacin capaz de manejar una amplia variedad de frases sobre diferentes temas. Este ejemplo est disponible en github [9] y se incluye una aplicacin funcional para las categoras WEATHER, KNOWLEDGE y ALARM.

Conclusin
La ventaja de incluir una interfaz de lenguaje natural en nuestras aplicaciones es que el usuario no necesita aprender un complicado conjunto de comandos. Esta ventaja se vuelve cada vez ms til para aplicaciones mviles, donde el espacio de pantalla es limitado y tenemos menos interfaces disponibles.

Listado 5: WeatherClient de apis.py


01 class WeatherClient(object): BASE_URL = http://api.wunderground.com/api API_KEY = /WUNDERGROUND-KEY-HERE GEO_LOOKUP = /conditions/geolookup/q/ def query(self, location): #Consulta a Nominatim para obtener GPS l = LocationClient() gps = l.query(location) url = %s%s%s%s%s%s%s % (WeatherClient.BASE_URL, WeatherClient.API_KEY, WeatherClient.GEO_LOOKUP, gps.lat, ,, gps.lon, .json) #Llamada a Weather Underground r = requests.get(url) logging.debug(Called %s % r.url) if r.status_code == 200: #Analiza json y obtiene condiciones actuales current = json.loads(r.content)[current_observation] temperature = current[temp_c] return temperature else: logging.warn(Failure: %s % r.status_code)

14

Nmero 93

WWW.LINUX- MAGAZINE.ES

Maluuba nAPI PORTADA

Listado 6: LocationClient de apis.py


01 class LocationClient(object): 02 03 04 05 06 07 08 09 10 11 def query(self, location): url = %s%s % (LocationClient.BASE_URL, location.encode(utf8)) r = requests.get(url) if r.status_code == 200: firstresult = json.loads(r.content)[0] return GPS(firstresult[lat], firstresult[lon]) else: logging.warn(Failure: %s % r.status_code) BASE_URL = http://nominatim.openstreetmap. org/ search.php?format=json&q=

RECURSOS
[1] Portal del desarrollador Maluuba nAPI: http://dev.maluuba.com/ [2] Librera nAPI Python: https://github.com/Maluuba/napi-python [3] Librera nAPI Ruby: https://github.com/Maluuba/napi-ruby [4] Librera nAPI Java: https://github.com/Maluuba/napi-java [5] Categoras nAPI: http://dev.maluuba.com/categories/ [6] Categoras calendario: http://dev.maluuba.com/categories/calendar [7] Weather Underground API: http://www.wunderground.com/weather/api/ [8] Open Street Map Nominatim: http://nominatim.openstreetmap.org/ [9] Demo maluuba.py: https://github.com/Maluuba/maluuba-command-line [10] Parmetro de consulta requerido para nAPI: http://napi.maluuba.com/v0/interpret?apikey=xxxxxxxx &phrase=i%20want%20a%20plane%20ticket%20to%20new %20york

Los algoritmos de procesamiento de lenguaje natural de Maluuba son altamente escalables a muchas categoras. Esto significa que, cuantas ms peticiones se hacen, ms categoras se aaden. La nAPI tendr al final cientos de nuevas categoras y acciones, as como entidades y acciones ms detalladas adicionales a las categoras existentes.

Maluuba es capaz de dar mejores respuestas cuando hay contexto sobre el usuario que hace la pregunta. Este contexto podra incluir la ubicacin geogrfica, las listas de contactos y ms. La aplicacin Maluuba hace uso de esta informacin de contexto, pero en la actualidad nAPI no soporta estas

caractersticas. Los desarrolladores planean aadir soporte de contexto de usuario a nAPI en algn momento futuro. Para ms informacin, habra que ponerse en contacto con Maluuba en napi@maluuba.com.

PORTADA Simon

Controlando Linux con la voz

rdenes claras

Olga Yastremska, 123RF.com

Simon es una sofisticada herramienta de reconocimiento de voz con un acceso sencillo a dos potentes motores de reconocimiento de voz, Julius y CMU Sphinx. POR FALKO BENTHIN
n Windows y Mac OS X los usuarios estn acostumbrados a controlar el PC no slo con el teclado y con el ratn, sino tambin con la voz. Linux ha estado tratando de ponerse al da en esto durante varios aos. La asociacin sin nimo de lucro Simon Listens [1], fundada por Franz Stieger, es la fuerza conductora detrs del software de reconocimiento de voz, Simon. La aplicacin, originalmente desarrollada para dar acceso al uso del PC sin barreras a gente con necesidades especiales, ha existido durante varios aos. La asociacin sigue persiguiendo este objetivo pero los desarrolladores han descubierto algunos usos adicionales para el software, incluyendo el control verbal de sistemas, lo que facilita el uso de modernas tecnologas de comunicacin por parte de los mayores o permite a las personas controlar robots, sillas de ruedas y ascensores. Sin embargo si lo

que buscamos es dictar un texto a Simon, no quedaremos contentos con los resultados y tendremos que buscar en otro sitio. Simon se convirti en un proyecto KDE oficial en Abril de 2012 [2] y utiliza su infraestructura. El software de reco-

nocimiento de voz sigue el modelo cliente-servidor que consiste en varios componentes junto con una variedad de otros programas, como las herramientas de reconocimiento de voz CMU Sphinx [3], la mquina de reconocimiento de voz Julius [4] con las herramientas Hid-

Instalando Simon
Los usuarios de la versin de desarrollo de openSUSE tienen el trabajo ms fcil para instalar Simon: se pueden descargar los paquetes binarios del OpenSuse Build Service [7] y completar la instalacin usando las herramientas del paquete de distribucin. Si usamos cualquier otra distribucin, debemos clonar el cdigo de fuente desde KDE Git, nonumber $ git clone git://anongit.kde.org/simon simonsource o recoger el tarball [8] y desempaquetarlo, cambiar al recin creado directorio y ejecutar el script build.sh o

build_ubuntu.sh. Para completar la instalacin sin errores puede que necesitemos resolver algunas dependencias con antelacin [9]. Para descubrir completamente las caractersticas de la interfaz de reconocimiento de voz necesitaremos tambin CMU Sphinx (sphinxbase, pocketsphinx y sphinxtrain cada uno en una versin ms reciente que la 0.8) o Julius con HTK y los paquetes de desarrollo OpenCV (libsamplerate, QaccessibilityClient y Libkdepimlibs4). En la versin 0.4, Simon usa la mquina de reconocimiento de voz CMU Sphinx como su motor predeterminado pero sigue permitiendo Julius y el propietario HTK

18

Nmero 93

WWW.LINUX- MAGAZINE.ES

Simon PORTADA

Figura 1: Un asistente de configuracin ayuda a la configuracin de Simon en un suspiro.

den Markov Model (HTK) [5] y el diccionario de pronunciacin Hadi-Bomp [6]. Los componentes de la aplicacin incluyen la interfaz Simon, el demonio Simon (Simond), el modelador acstico (Sam Simon) y el recolector de muestras Simon Simon Sample Collector SSC.

Facelift

Figura 2: Mltiples tarjetas de sonido y micrfonos en webcams USB

Iniciando Simon
Despus de la instalacin (ver Instalando Simon), Simon aparece en el men de inicio del entorno de escritorio debajo de Accesibilidad. Alternativamente se puede iniciar la aplicacin con la orden simon en la lnea de rdenes. En el primer lanzamiento, se despliega un asistente para guiarnos a travs de la configuracin (Figura 1). Podemos decidir aqu qu escenarios y modelos de idioma descargar Simon despus de manera predeterminada, dnde residir el servidor Simon de reconocimiento de voz y si debera iniciarse automticamente. Simon se asegura de que la entrada de voz de los clientes se evala. Por defecto funciona en el mismo ordenador que Simon y escucha en el puerto 4444. Tal y como sera lo apropiado para un servidor, puede funcionar en un ordenador separado y puede servir a mltiples clientes. Puede que necesitemos ms tarde crear una cuenta de usuario protegida con contrasea. En un paso posterior se configura la tarjeta de sonido (Figura 2), lo que posteriormente nos remite a la ventana principal de la aplicacin (Figura 3).

Para reconocer no son un problema para Simon. palabras , Simon las dibuja en modelos acsticos usan modelos compatibles, lo que (modelos base) disponibles en tres explica por qu no es recomendable categoras: esttico, adaptado o genecambiar la mquina si tenemos un rado completamente por el usuario. Los modelo bien entrenado. modelos estticos predefinidos no pueLa versin actual de Simon reconoce den adaptarse a usuarios individuales: el modelo que usamos y automticapara que funcionen correctamente el mente selecciona el motor correcto. Un usuario tiene que hablar como el autor buen lugar para buscar modelos adaptadel modelo deseado. bles es la funcin de descarga de Simon Los modelos adaptados predefinidos Configuracin | Configurar Simon | estn tambin disponibles, pero los Modelos de lenguaje | Abrir modelos | usuarios pueden entrenarlos para que Descargar, o el proyecto Voxforge [10]. entiendan su voz y la manera de hablar Despus de descargar el modelo para aumentar la precisin. Aunque desde Voxforge primero necesitamos debemos crear modelos generados comimportarlo. Por ejemplo, para usar el pletamente por el usuario, nos ofrece modelo alemn CMU Sphinx deberalos ms usados pues son ideales para personas con problemas de habla o para fuertes dialectos. El uso de los modelos adaptados o generados por el usuario requiere una mquina de reconocimiento de habla como CMU Sphinx y Figura 3: Escenarios disponibles, palabras reconocidas, estado de la Julius. Precau- conexin: Simon presenta una vista limpia y una visin global en la vencin: los dos no tana principal. Se puede acceder a muchas funciones con un clic.

WWW.LINUX- MAGAZINE.ES

Nmero 93

19

PORTADA Simon

tente, que tende Bonn permite a los usuarios descardremos que gar el diccionario Hadifix Bomp directacompletar en la mente. Para hacer esto necesitamos mayora de los especificar el nombre y la direccin de casos (Figura 4) correo y aceptar la licencia de Bomp Al contrario que no es libre pero s gratis. que muchos Entrenamiento sistemas comerciales de Para aadir una nueva palabra a un reconocimiento escenario (Figura 5) necesitamos entrede voz con nar al menos dos veces es decir, decir modelos de lenla palabra ante el micrfono para guaje prefabriacostumbrar a Simon a nuestra voz y cados, los propronunciacin. Si el escenario slo blemas de necesita unas pocas palabras la tasa de Figura 4: Primero necesitamos poblar nuestros propios escenarios con el idioma no son reconocimiento es bastante aceptable vocabulario preciso. un gran protras dos rondas de entrenamiento. Sin blema para embargo el entrenamiento adicional mos descargar el modelo desde VoxSimon. Adems de los modelos lingsincrementa la tasa de aciertos y vale la forge y desempaquetarlo. Despus en la ticos y acsticos previamente construipena especialmente cuando el vocabuconfiguracin del modelo de lenguaje dos los usuarios pueden tambin crear lario aumenta o cuando tenemos palaen vez de seleccionar descarga, selecsus propias versiones personalizadas bras que suenan parecido. cionamos Crear desde los archivos del enseando a Simon las palabras que Se pueden entrenar palabras de forma modelo e introducimos la ruta de los necesita. dirigida presionando Entrenar Palabras archivos requeridos. El proceso funEnsearle es bastante sencillo. La individuales para aadirlas a una sesin ciona de la misma manera para todos dificultad es que las palabras tienen que de entrenamiento (Figura 6). Si despus los lenguajes disponibles, o para los ser asignadas a terminales (verbos, queremos exportar el escenario y as modelos Julius. pronombres, etc, tambin llamados ponerlo a disponibilidad de la comunicategoras en Simon) y romperlas en dad Simon, definitivamente es preferiEscenarios fonemas. Dado que los no lingistas ble crear textos especialmente entrenaDentro de Simon hay aplicaciones espepueden tener problemas, Simon ofrece dos. Simplemente cambiamos a la secciales para el reconocimiento de voz la importacin de diccionarios en la cin Entrenamiento y pulsamos en el definidas como escenarios. Los escenasombra. Adems de tener muchas palabotn Aadir Texto. Podemos o imporrios tpicos pueden estar controlando el bras, los diccionarios en la sombra tar o introducir el texto manualmente puntero del ratn o el navegador con la incluyen la informacin necesaria sobre para entrenar el vocabulario completo entrada de voz. El equipo de Simon ya pronunciacin basada en fonemas terpara el escenario. ha coleccionado algunos escenarios minales. Las palabras disponibles aqu Una vez que tenemos el texto de comunes que podemos cargar en Gestiose aaden fcilmente al vocabulario de entrenamiento podemos empezar a nar escenarios | Abrir | Descargar. Si Simon. Si falta una palabra, se pueden entrenar en la ventana principal o en el estamos usando un modelo adaptado o usar otras existentes como ejemplos. escenario abierto apretando el botn esttico bsico, debemos asegurarnos Simon permite los diccionarios en la apropiado. De manera predeterminada que el lenguaje objetivo y el modelo sombra en los formatos Hadifix, HTK, Simon graba las respectivas lineas del acstico coinciden. Es importante usar PLS, CMU el mismo set de fonemas para el escenaSphinx y Julius, rio y el modelo bsico. los cuales se Probablemente queramos crear nuespueden cargar tros propios escenarios por ejemplo, si presionando el no podemos encontrar lo que necesitabotn Importar mos en la seccin de descargas o los Diccionario. escenarios existentes usan mal el Suele esperar modelo bsico. Alternativamente podeuna ruta para mos aadir nuevas palabras en escenaun archivo rios existentes como Estndar. localizado en el Podemos aadir escenarios seleccioordenador, pero nando Gestionar escenarios. Para relleen caso del dicnarlos con nuestras propias palabras, cionario alesimplemente pulsamos en Abrir <nommn Hadifix, bre_de_escenario>. Entones Simon un acuerdo con Figura 5: Despus del entrenamiento individual, las palabras se reconomuestra la lista de vocabulario exisla Universidad cen de forma fiable.

20

Nmero 93

WWW.LINUX- MAGAZINE.ES

PORTADA Simon

diferentes actipor ejemplo, si una ventana en particuvidades con lar est en primer plano en el escritorio rdenes de voz. (Condicin de Ventana Activa), si una Entonces el webcam reconoce una cara en frente del ordenador ponordenador (requiere OpenCV), si ciertos dr en funcioprocesos estn funcionando o de qu namiento proestatus de programas informa a D-Bus. gramas (ProAdems podemos comprobar archivos grama), emupara un contenido especfico. Cuando lar pulsaciocambiamos algo del escenario o palanes de teclado bras entrenadas, Simon actualiza el o abrir carpemodelo acstico construido y las nuetas y sitios web. vas palabras estn disponibles inmediaAdicionalmente tamente. La ventana principal siempre podemos mover muestra las ltimas palabras reconociel cursor del das estn o no vinculadas a una orden ratn sobre el (Figura 8) escritorio, Mientras Simon escucha est disFigura 6: Entrenar sesiones especficamente diseadas para un escenario seleccionar elepuesto a reconocer palabras. Por lo ayuda a Simon a aprender rpidamente todo el vocabulario necesario. mentos de una tanto una respiracin profunda puede lista o insertar interpretarse como una orden de voz o texto de entrenamiento, una o varias bloques de texto con la ayuda de los una conversacin con otra persona palabras de manera separada. Si parece complementos, as como dictar letras y puede hacer que el ordenador juegue muy complicado presionar el botn Granmeros, usar una calculadora o practimalas pasadas. Para evitar estos falsos bar para cada palabra (empezar y parar car pronunciacin y comprobar la conpositivos tiene sentido iniciar todas las de grabar), podemos seleccionar Entreformidad con un modelo bsico. ordenes de voz con una palabra dispanamiento con Energa. Ahora simpleLas rdenes compuestas ejecutan radora como ordenador o abracadamente tendremos que presionar el acciones mltiples una detrs de otra. bra. Para que el ordenador sea capaz botn Siguiente para recorrer el texto de Describir todos los complementos de de interpretar esto, es necesario modifientrenamiento sin demasiados clics. rdenes en detalle va ms all del car la gramtica. La gramtica de un escenario hace alcance de este artculo, as que es Adems los desarrolladores estn exactamente lo que sugiere el nombre: mejor leer el detallado manual de actualmente trabajando en consultar el define las reglas que determinan la Simon para tener ms informacin movimiento de los labios para minimiforma en la que el vocabulario puede Seleccionando Gestionar Complemenzar las rdenes de falsos positivos: si aparecer. As Simon puede interpretarlo tos (Figura 7) podemos cargar compleSimon no ve una cara o el movimiento significativamente. No necesitamos mentos y luego usar Orden Nueva para de los labios durante la entrada de voz, adherirnos a las estructuras de lenguaje vincular determinadas acciones a una o la idea es que la palabra probablemente hablado, sino que podemos crear nuesms palabras. Cuando Simon reconoce sea ruido de fondo que se debe ignorar. tra propia gramtica como Nombre de una palabra funciona en el sentido de CMU Sphinx y Julius Verbo o Nombre de Enumerador. Simlos complementos de orden hasta que plemente debemos asegurarnos de vinComo se ha mencionado Simon puede encuentra una que puede procesar la cular a las categoras que realmente trabajar con mquinas de reconocientrada y luego realiza la accin aproaparecen en el vocabulario existente. piada. Las categoras no estn grabadas en En la seccin opcional piedra sino que se pueden aadir y Contexto se pueden deficambiar de forma que, adems de los nir las condiciones bajo sustantivos, verbos, etc, se pueden usar las cuales Simon habidisparadores, rdenes y otras golosinas. lita un escenario. Por Se pueden fundir categoras existentes ejemplo podemos estipara simplificar la estructura gramatical pular que el escenario del vocabulario en el diccionario. Firefox slo se habilita si el navegador Mozilla rdenes est funcionando. As se La ltima seccin en el escenario la pueden usar rdenes comprenden las rdenes. Aqu se deteridnticas en diferentes mina lo que hace Simon con las palaescenarios para empe- Figura 7: Los complementos de rdenes verstiles habilitan un bras reconocidas. Varios complementos gran nivel de control sobre varias funciones del ordenador. zar diferentes acciones. de rdenes permiten controlar el ordeEntre las posibles Simon comprueba secuencialmente qu complemento puede nador y se pueden fcilmente vincular condiciones se incluye, manejar una palabra reconocida.

22

Nmero 93

WWW.LINUX- MAGAZINE.ES

Simon PORTADA

miento de voz como Julius y CMU Sphinx. Cuando se configura Sphinxbase, Pocketsphinx y Sphinxtraining debemos cambiar los prefijos de /usr/ local a /usr, o al menos aadir enlaces simblicos apropiados. Los ayudantes como los enlaces simblicos son tambin obligatorios si instalamos Sphinxtrain en un sistema de 64 bit. En este caso los scripts y otros archivos son importantes para generar el modelo acstico final en /usr/[local/ ]lib64/sphinxtrain, pero Simon los espera en /usr/lib/sphinxtrain. CMU Sphinx tuvo algunos problemas compilando el modelo acstico en nuestro laboratorio. Fui incapaz de solucionar problemas cuando aparecieron. Si se experimentan errores similares puede que decidamos usar Julius en su lugar. Para prefabricar Escenarios, Simon elige el motor de reconocimiento de voz automticamente. Cuando se crean modelos acsticos y de lenguaje generados por el usuario se puede configurar el motor preferido en Configuracin | Configurar Simon | Reconocimiento | Configurar servidor | Compilacin del modelo de voz | Motor.

Outlook
Simon ha cambiado drsticamente desde la ltima versin hace dos aos y ha mejorado significativamente en trminos de facilidad de uso. La versin actual 0.4 ofrece una experiencia de usuario muy mejorada, el motor adicional de reconocimiento de voz CMU Sphinx y el reconocimiento de contexto en la forma de Afaras y Simonoid. Afaras nos permite identificar registros incorrectos y patrones destrudos en grandes corpus. El plasmoid Simonoid KDE imprime el estado de deteccin y se puede usar para lanzar o cerrar Simon rpidamente. Para el futuro prximo, el equipo de desarrollo dirigido por el director de tecnologa Peter Grasch tiene planes ambiciosos: se est tratando de completar lo que antes eran caractersticas experimentales, como la deteccin de labios. Adems, el equipo est colaborando con diversos asociados, como las universidades de Bonn y Graz. El Instituto para el alemn de Austria (Institut fr sterreichisches Deutsch) ha permitido que el proyecto acceda a la base de datos Adaba [8], lo que podra dar lugar a un

modelo alemn bsico disponible gratuitamente. Como otro hito importante en el camino a la versin 0.5, los desarrolladores estn tratando de integrar el AT SPI2 (entorno de trabajo Assistive Technology Ser- Figura 8: Simon muestra coincidencias en la ventaja principal indepenvice Provider dientemente de si han sido vinculadas a una orden. Interface 2 [12]) con Simon. Como guinda del pastel Simon da En este artculo slo hemos echado fcil acceso a las sofisticadas mquinas un vistazo a la interfaz de Simon. Otras de reconocimiento de voz Julius y CMU Sphinx, que han sido desarrolladas partes interesantes del proyecto Simon durante varios aos. Aunque an no es Listens son Sam y SSC. Sam es una capaz de escribir cartas o informes herramienta que permite a los usuarios mdicos, cuando se trata de controles, crear y probar modelos acsticos. Simon ya tiene al ordenador siguindolo Simon posteriormente pude importar al pie de la letra. estos modelos. Simon Sample Collector, SSC, se usa para coleccionar ejemplos de diferentes hablantes y entornos de RECURSOS usuario para desarrollar nuevos mode[1] Asociacin Simon Listens: los bsicos. Adems con la aplicacin http://www.simon-listens.org/ [2] Simon: MeeGo, Simon, permite a los usuarios https://projects.kde.org/projects/ controlar el ordenador va smartphone. extragear/accessibility/simon Meego es el sistema operativo mvil [3] CMU Sphinx: de cdigo abierto basado en Linux que http://cmusphinx.sourceforge.net/ se cre en 2010 siguiendo una fusin de [4] Julius: http://julius.sourceforge.jp/en_index. sus antecesores Maemo (Nokia) y php Moblin (Intel). Ahora est bajo los aus[5] HTK: picios de la Linux Foundation, pero se http://htk.eng.cam.ac.uk/ fusionar a medio plazo con el SO Tizen [6] Hadifix Bomp: http://www.sk.uni-bonn.de/ smartphone. forschung/phonetik/sprachsynthese/ El motivado equipo de desarrollo de bomp Simon se ha mantenido bastante mane[7] Voxforge: jable con los aos y da la bienvenida a http://www.voxforge.org/home [8] Adaba: nuevos miembros. Adems de los prohttp://www-oedt.kfunigraz.ac.at/ gramadores (C + +, Qt) pueden partiADABA/index.html cipar las personas que deseen crear [9] AT SPI2: escenarios, ampliar la documentacin, http://www.linuxfoundation.org/ o localizar Simon en su lengua materna. collaborate/workgroups/

Conclusiones
Simon es una herramienta de reconocimiento de voz que se instala fcilmente y puede ser usado por novatos. El nico obstculo en el proceso de instalacin son las numerosas dependencias. Durante nuestras pruebas de laboratorio de varios das el sistema era completamente estable, la aplicacin no fall ni siquiera una vez.

accessibility/atk/at-spi/ at-spi_on_d-bus [10] Simon para OpenSuse Factory: http://software.opensuse.org/ package/simon [11] Simon tarball: http://anongit.kde.org/simon/ simon-latest.tar.gz [12] Guas de construccin y dependencias: http://userbase.kde.org/Simon/ Development_Environment#Compil ing

WWW.LINUX- MAGAZINE.ES

Nmero 93

23

EVALUACIN KDE 4.10

Compilacin de Software KDE 4.10

Justo Antes De Las 5


KDE SC 4.10 se lanz seis meses despus de KDE 4.9, aadiendo muchas caractersticas nuevas. En segundo plano, el trabajo est en plena sintona para la siguiente generacin, KDE Frameworks 5: un KDE basado completamente en Qt5 y QML. POR THOMAS DRILLING
Johann Helgason - 123RF.com

l nuevo KDE Software Compilation (KDE SC), al igual que su predecesor, comprende la interfaz Plasma para varias plataformas (escritorio, netbook, Plasma Active) [1], las aplicaciones [ 2] y la arquitectura base [3]. La arquitectura a su vez consiste en el gestor de ventanas KWin, las libreras, el entorno de trabajo Akonadi para el almacenamiento de datos PIM y el propio SDK. El SDK de KDE 4.10 es la primera versin en unir los componentes anteriormente separados de la plataforma de desarrollo [4] en la forma de la herramienta Plasmate [5]. El proyecto ha venido desarrollando la herramienta desde comienzos de 2010 como una especie de mini-SDK para la programacin de plasmoides, motores de datos y plugins de bsqueda para programas de plasma, aunque fue pensado principalmente para Plasma Active [6]. Debido a que los desarrolladores queran fusionar el cdigo de los espacios de trabajo individuales de plasma tras la migracin a QML de todos modos, Plasmate se hace cada vez ms importante. La versin 4.10 hace uso de Qt Quick en mucha mayor escala y ahora ofrece una API de scripting para el gestor de ventanas KWin. Una innovacin ms superficial en KDE 4.10 es un nuevo tema Air. KDE SC 4,10 [7] est disponible para su descarga en su pgina web [8], aunque ser ms prctico para la mayor parte de los usuarios esperar hasta que KDE SC

4.10 est disponible en los repositorios de sus distribuciones preferidas. La primera distribucin en incluir KDE 4.10 antes de que este artculo fuese a imprenta fue Chakra Linux.

Qt Quick
Los espacios de trabajo individuales de Plasma en KDE 4.10 atraen en mayor medida que cuando se introdujeron por primera vez los componentes plasma Qt Quick con KDE SC 4.8. Qt 4.7 vi la introduccin del lenguaje de scripting declarativo QML en la librera de clases de C++. Desde entonces, se han podido crear interfaces basadas en Qt con el nuevo UI Creacin Kit de Qt (Qt Quick). Hasta el momento, ha sido utilizado principalmente para aplicaciones y plasmoides, que se presentan con apariencia nativa de plasma, gracias a las APIs estandarizadas. KDE 4.10 ahora tambin implementa los componentes centrales de plasma en Qt Quick, incluyendo el paginador, el panel, el bloqueo de la pantalla y las alertas del sistema. Incluso el motor de fondos de pantalla se basa ahora en Qt Quick, lo que simplifica la creacin de fondos de pantalla animados. La migracin a cdigo QML que est ocurriendo tras el escenario se debe principalmente a razones estratgicas y tecnolgicas. Por ejemplo, debido a que los widgets ahora se crean con la contencin QML, los desarrolladores ya no tienen que derivarlos a partir de la clase QgraphicsWidgets de Qt. Para los usuarios,

la migracin a QML no necesariamente tiene que ser inmediata, con ciertas excepciones, una de las cuales es el nuevo bloqueador de pantalla, que demuestra que el paso a QML no slo mejora la apariencia del escritorio, sino que tambin ofrece ventajas al usuario. Donde antes apareca un cuadro gris bastante feo que solicitaba al usuario introducir la contrasea, la ventana es ahora ligeramente transparente y moderadamente animada al introducir una contrasea incorrecta. El nuevo bloqueo de la pantalla tambin es mucho ms seguro, ya que ya no se esquiva el servidor X.

Kdevelop
Un efecto secundario positivo de la introduccin de Qt Quick es que un nmero creciente de desarrolladores de Qt contribuyen directamente a KDE, como pone de ejemplo el entrenador de mecanografa KTouch [9]. El programa no se haba mantenido desde 2007 y fue creado originalmente con QT Designer. El desarrollador de Qt Sebastian Gottfried [10] revis completamente la versin incluida en KDE 4.10 porque estaba buscando un proyecto donde pudiera familiarizarse con Qt Quick. Gracias a Qt Quick, KTouch ahora tiene una interfaz con un aspecto mucho ms agradable y presenta una evaluacin estadstica de nuestras habilidades despus de cada leccin. El grfico mostrado en este proceso fue escrito en QML. De inters primario para los desarrolladores de KDeve-

24

Nmero 93

WWW.LINUX- MAGAZINE.ES

KDE 4.10 EVALUACIN

un parche Qt [13] hace ms de un ao portamiento de ventapara que esta funcin estuviese disponible nas | KWin Scripts en l. En KDE 4.10, el nuevo men de la (vase la Figura 2). aplicacin ya est disponible para todos Una de las nuevas los usuarios, a condicin de que se instale funcionalidades ms la librera Appmenu-Qt. El nuevo men de importantes en KWin aplicacin implica que varias aplicaciones es el uso de los enlaces utilizan un men global comn con un X-C para toda una serie estilo similar a la Unity o Mac OS, donde de operaciones, con la slo el men de la aplicacin activa es intencin de cambiar visible en cualquier momento. En el modo desde la librera genMen en la parte superior de la pantalla, rica X11 Xlib a la nueva capa de abstraccin KWin muestra el men en una barra de Figura 1: Scripts KWin para descargas ampliadas. XBC en un futuro prmen en la parte superior de la pantalla ximo. Este movimiento (vase la Figura 4). KDE muestra este lop es que ahora cuenta con una unidad de es un requisito previo para el cambio a Qt men al mover el ratn por el borde supepruebas unitarias. Adems, la nueva ver5 que introduce el entorno de trabajo KDE rior de la pantalla. El comportamiento es sin tiene un plugin QML. Los programa5. A cambio, requiere el nuevo servidor de similar al comportamiento por defecto en dores ya no tienen que recurrir a Qt Creapantallas Wayland o XCB. El mantenedor Unity y tambin funciona en el modo de tor para escribir cdigo QML. Sin embargo, de KWin Martin Graesslin analiza el mltiples pantallas, pero por ahora slo el plugin QML se encuentra todava en una estado de la migracin desde xlib a XCB con el tema Oxygen por defecto. etapa temprana de desarrollo. Por otra en su blog en [12] y tambin habl en el Nepomuk parte, la versin actual de KDevelop finalFOSDEM de este ao sobre XCB y WayLos desarrolladores de KDE han eliminado mente porta todas las clases de Qt3 a Qt4, land. En opinin del Graesslin, la novedad por su propia cuenta, que es en lo que el ms interesante de KWin para los usuarios numerosos errores del motor de metadaequipo de KDevelop estuvo trabajando es, sin embargo, la principalmente durante el ao pasado. barra de mens oculta, que se puede activar en KWin el mdulo Apariencia El gestor de ventanas KWin tambin viene de aplicaciones de la con un buen nmero de innovaciones y configuracin del sisuna extirpacin: los desarrolladores han tema, pulsando la peseliminado la capacidad de organizar las taa Ajuste fino bajo ventanas en mosaico, porque la funcin Estilo. Por ejemplo, caus diversos problemas en el pasado. podemos establecer el Aunque se podra implementar una funEstilo de la barra de cin idntica como un plugin que haga mens a Botn de la uso de la API JavaScript de KWin. Es slo barra de ttulo o Men una cuestin de encontrar a alguien que lo en la parte superior de desarrolle. Uno de los cambios ms evila pantalla (vase la dentes es la animacin al maximizar o Figura 2: Los scripts amplan el comportamiento del gestor de Figura 3). minimizar ventanas. Bajo ciertas condicioventanas KWin. Barra de Mens nes, KWin ahora tambin detecta cuando Oculta se est ejecutando en una mquina virtual y cambia a composicin OpenGL, en caso Los desarrolladores de de ser posible. En combinacin con el conKWin han desarrollado trolador de grficos propietario de AMD, esta funcin basndose KWin incluso soporta OpenGL 2. Adicioen Unity y MacOS. Los nalmente, integra el proyecto GHNS (Get usuarios de Unity en Hot New Stuff) [11], lo que permite a los Ubuntu han tenido la usuarios descargar y activar los efectos y capacidad desde hace scripts adicionales (vase la Figura 1). algn tiempo para deciCon el uso de los scripts, podemos dir si mostrar la barra incluso controlar o cambiar el aspecto y el de men de una aplicacomportamiento de las ventanas en el cin en la barra supemdulo responsable de KWin. En la rior y no en la ventana configuracin del sistema, buscamos bajo de la aplicacin. El la seccin Apariencia y comportamiento equipo de Kubuntu de- Figura 3: El nuevo men de aplicaciones soporta diferentes apadel entorno de trabajo y pulsamos en Comsarrollo por separado riencias.

WWW.LINUX- MAGAZINE.ES

Nmero 93

25

EVALUACIN KDE 4.10

tos Nepomuk, el escritorio social semntico. Nepomuk tiene ahora un servicio de indexacin completamente reescrito que reemplaza el indexador implementado en 2008 en la forma de librera Strigi de C++. El nuevo (vase la Figura 5) indexa archivos ms rpido y es ms robusto

debido a que sus operaciones se gestionan ahora en dos pasos. En el primer paso, el servicio slo recopila informacin bsica, como los nombres de archivo o tipos MIME, y los agrega al ndice. En el segundo paso, Nepomuk extrae informacin ms amplia de los archivos, pero slo si los recursos necesarios estn disponibles. La reescritura ha desechado algunos formatos de archivo compatibles anteriormente, pero se reintroducirn en la prxima versin de KDE 4.11. El nuevo indexador tambin proporciona filtros que nos permiten restringir la indexacin de ciertos tipos de archivos, y los Figura 4: KDE ahora tambin soporta una barra de mens oculta desarrolladores de KDE al estilo de Unity y MacOS. han reescrito por completo la aplicacin de copia de seguridad de Nepomuk. Tambin se incluye una nueva herramienta para limpiar los datos corruptos, el Nepomuk Cleaner. Adems, un nuevo kioslave con el nombre tags nos permite buscar etiquetas en cualquier aplicacin KDE.

les. El editor de texto Kate soporta ahora plugins Python, esquemas de colores predefinidos e incluye un plugin de gestin de proyectos. Se puede habilitar un mini-map en lugar de las barras de desplazamiento en el margen derecho, tanto en el editor de texto como en el entorno de desarrollo de KDE para una navegacin ms sencilla en grandes archivos (vase la Figura 6). Tambin funciona en Kwrite, que se basa en Kate Part, el componente editor de Kate, al igual que KDevelop o frontend de LaTeX Kile. Otra de las novedades de Kate es una funcionalidad de notificacin menos disruptiva. Adems, los desarrolladores han creado dos nuevas caractersticas en la herramienta terminal de Konsole que existan en KDE 3: la capacidad de enviar seales y la posibilidad de imprimir el contenido de la ventana. Tambin podemos cambiar el espaciado de lnea en la consola.

Otras Aplicaciones de KDE


El cliente de correo electrnico y de groupware Kontact ahora indexa y busca correo electrnico ms rpido en la nueva versin. KMail incluye ahora un corrector ortogrfico automtico configurable, cambio de tamao de imagen automtico, y un asistente de importacin mejorado, y ahora tambin puede buscar en las libretas de direcciones de otras aplicaciones. Los desarrolladores de KDE han mejorado el visor de documentos Okular. Usando una nueva tcnica de renderizado por mosaicos, se puede ampliar ms rpidamente un PDF (vase la Figura 7). Esta tcnica fue creada como un proyecto en el Google Summer of Code del ao pasado y reduce el uso de memoria al utilizar el zoom. La variante tctil Okular Active [14] es tan fcil de utilizar en nuestro dispositivo mvil como un ratn en el escritorio, por lo que Okular Active se usa ahora como lector de libros electrnicos en Plasma Active. El visor de imgenes Gwenview soporta actividades y tiene correccin de color en KDE 4.10. La Agencia Espacial Europea, ESA [15], ha realizado mejoras al globo terrqueo de escritorio Marble como parte de la Summer of Code en el Espacio [16] de manera que ahora puede mostrar las rbitas de los satlites y las sondas espaciales (vase la Figura 8). Por ejemplo, el estudiante de Informtica Rene Kuettner ha desarrollado

Figura 5: El entorno de indexacin y bsqueda Nepomuk se ha reescrito completamente.

Nuevas Aplicaciones Nucleares de KDE


KDE SC 4.10 tambin introduce un buen nmero de innovaciones en el campo de las aplicaciones fundamentales de KDE. Por ejemplo, se incluye un nuevo Administrador de Impresin para la configuracin de impresoras y la administracin de trabajos de impresin. Adems, el gestor de archivos Dolphin ahora puede gestionar dispositivos MTP, lo que simplifica la transmisin de datos a los dispositivos mvi-

Figura 6: El editor Kate tiene ahora un gestor de proyectos. La vista general en el margen derecho permite una fcil navegacin en archivos grandes.

26

Nmero 93

WWW.LINUX- MAGAZINE.ES

KDE 4.10 EVALUACIN

nuevos modos de visualizacin para las sondas SMART-1, Venus Express y Mars Express.

Plasma Active
En la interfaz de tableta Plasma Active, cada aplicacin soporta ahora actividades, dado que se ha reescrito desde cero. En la versin de escritorio de Plasma, el soporte para actividades tendr que introducirse gradualmente. En KDE SC 4.10 ya se ha implementado para Dolphin, Okular y Gwenview. Las actividades permiten a las aplicaciones notificar al usuario sobre archivos o directorios abiertos, y se pueden asociar varios archivos a una actividad. Un servicio en segundo plano evala las actividades en funcin de su frecuencia de uso. Otro servicio para el reenvo de los datos recogidos al applet Share Like Connect [17] de momento est slo disponible en Plasma Active, no en KDE SC 4.10.

de desarrollo de KDE ha hecho en la ruta hasta KDE Framework 5 [19].

Conclusiones
Despus de portar casi todos los plasmoides de KDE (widgets) a QML en KDE 4.8 y 4.9, el trabajo en KDE SC 4.10 ha vuelto a componentes integrales de KDE, como la barra del sistema, el bloqueador Figura 7: El visor de PDF tiene una nueva y eficiente funcin de de pantalla, etc. La zoom. migracin de los escritorios Plasma a QML los acomoda con un existe una versin preliminar del diseo nuevo aspecto, aunque no todos los usuade escritorio [20]. KDE SC 4.10 es un exirios se darn cuenta de inmediato. En la toso paso intermedio en la ruta hasta KDE mayora de las migraciones a QML, los Framework 5. desarrolladores de KDE estn RECURSOS buscando pre[1] Espacios de trabajo KDE:http://www.kde.org/workspaces/ servar la fun[2] Aplicaciones KDE 4.10:http://www.kde.org/applications/ cionalidad y el [3] Plataforma KDE 4.10: aspecto de las http://kde.org/announcements/4.10/platform.php aplicaciones [4] Plataforma de desarrollo KDE: http://kde.org/announcements/4.10/platform.php siempre que sea posible, [5] Plasmate Userbase:http://userbase.kde.org/Plasmate/de sobre todo para [6] Plasmate Techbase: http://techbase.kde.org/Projects/Plasma/PlasMate los widgets de [7] KDE SC 4.10: escritorio. KDE http://kde.org/announcements/4.10/applications.php SC 4.10 todava [8] QT-Quick: http://qt-project.org/wiki/Qt_Quick no implementa [9] Entrenador de mecanografa Ktouch: contenciones http://ktouch.sourceforge.net/ (es decir, dise[10] Blog de Sebastian Gottfried: os para el http://blog.sebasgo.net/blog/2012/10/24/new-version-ofescritorio ktouch-finally-merged/ Plasma) en [11] GHNS:http://ghns.freedesktop.org/ QML, a pesar [12] Blog del mantenedor de Kwin Martin Graesslin: de que ya http://blog.martin-graesslin.com/blog/2013/02/portingkwin- to-xcb-making- c-usable-through-raii/
[13] Barra de mens oculta en Kubuntu: http://agateau.com/2011/06/23/finally-its-in/ [14] Okular Active:http://plasma-active.org/ [15] Summer of Code in Space de la ESA: http://sophia.estec.esa.int/socis2012/documentation_center [16] Participacin de KDE en el Summer of Code in Space: http://community.kde.org/SoCiS/2012/Ideas [17] Share Like Connect: http://community.kde.org/Plasma/ShareLikeConnect [18] Blog de Aaron Seigo: http://aseigo.blogspot.de/2013/01/plasmanext.html [19] Blog de Sebastian Kgler:http://vizzzion.org/blog/2013/01/theroadthe-road-the-road-to-kde-frameworks-5-and-plasma-2/ [20] Vdeo con el pre-lanzamiento de la contencin de escritorio QLM: http://vizzzion.org/blog/2013/01/desktop-containmentmoving-to-plasma-quick/

El Futuro
Adems del mantenimiento de los cambios, el principal estandarte de la versin de KDE 4.10 era portar toda la interfaz de C++ a QML, que entre otras cosas, mejorar la apariencia de los espacios de trabajo de Plasma. El objetivo final de KDE Framework 5 es fusionar los espacios de trabajo Plasma previamente desarrollados por separado para el escritorio, netbook y Plasma Active, en un nico archivo binario mediante la re-implementacin en Qt5 y QML, facilitando as la transicin entre los diferentes factores de forma. El desarrollador de KDE Aaron Seigo explic el proceso recientemente en su blog [18] y, en una detallada entrada de blog [19], el desarrollador de KDE Sebastian Kugler tambin discuti el progreso que el equipo

Figura 8: Se han incorporado un buen nmero de innovaciones al globo terrqueo Marble 3D.

WWW.LINUX- MAGAZINE.ES

Nmero 93

27

PRCTICO Linkchecker

Luca De Po

lo, 123RF.c

om

Encontrando enlaces rotos con LinkChecker

Enlaces Perdidos
LinkChecker nos ayuda a mantener nuestro sitio web libre de enlaces rotos. POR FLORIAN EFFENBERGER

unque hoy en da podemos encontrar unos cuantos gestores de contenidos bastante buenos, incluso el webmaster ms concienzudo no puede evitar que de vez en cuando surja algn enlace roto en su web, especialmente si los enlaces del sitio apuntan a fuentes externas. LinkChecker es una herramienta til que chequea los sitios web para encontrar enlaces obsoletos o rotos, informando de cualquier direccin que sea inaccesible, invlida o que se haya modificado. Los paquetes de LinkChecker se encuentran disponibles para Ubuntu, Debian y otras distribuciones desde el sitio web del proyecto [1] y si fuera necesario, tambin hay versiones para Windows y Mac OS X. Si todo esto fallara, siempre podramos descargar el cdigo fuente de la aplicacin. La instalacin en un sistema Linux Mint, versin 12, es un proceso simple. El comando:
sudo apt-get install U linkchecker-gui

Para comenzar sin complicaciones, simplemente tenemos que teclear


linkchecker-gui

para ejecutar la interfaz grfica de usuario. Comparado con el programa para la lnea de comandos, la GUI es mucho ms sencilla de utilizar, sin embargo, slo ofrece un pequeo subconjunto de la funcionalidad

completa de la aplicacin (vase En la Web!). Para una prueba inicial, vamos a teclear la direccin del sitio web que deseemos investigar en el cuadro de direcciones (por ejemplo, http://www.linux-magazine. es/). LinkChecker tambin soporta pginas cifradas con HTTPS y otros protocolos, as como ficheros locales, que se pueden especificar tecleando su ruta, como /var/ www/shop/index.html.

instala la interfaz grfica de usuario, el programa correspondiente de la lnea de comandos y otras libreras necesarias para su funcionamiento.

Figura 1: LinkChecker muestra una lista con los resultados tras realizar el chequeo.

28

Nmero 93

WWW.LINUX- MAGAZINE.ES

Linkchecker PRCTICO

Tras hacer clic en Start, LinkChecker tardar un poco en finalizar la comprobacin, dependiendo del tamao del sitio, a pesar del procesamiento en paralelo. En el ejemplo propuesto aqu con la revista Linux Magazine, tras ms de una hora, a pesar de disponer de una conexin rpida, paramos la comprobacin y probablemente hubiera tardado varias horas. El programa abre cada pgina individual, sigue cada uno de sus enlaces y elementos incluidos, tales como imgenes, y lista todos aquellos que hayan presentado algn problema en la ventana del programa (Figura 1). Las marcas amarillas son simplemente avisos, mientras que las rojas indican errores y problemas. Los mensajes incluyen las direcciones que ya no existen (cdigo HTTP 404) o que son inaccesibles (cdigo HTTP 403) por medio de conexiones FTP, enlaces de Telnet y conexiones NNTP, as como direcciones de correo electrnico que no posean un registro MX vlido. El programa marca las direcciones que han cambiado pero que an son accesibles por medio de la URL antigua como avisos (cdigo HTTP 301). Para una mejor legibilidad, la salida muestra la lnea exacta y la columna en la que se ha detectado el problema en el cdigo fuente. LinkChecker muestra ms informacin detallada de las entradas individuales en la parte inferior de la ventana del programa. Adems de los detalles del resumen, se puede ver cunto tiempo ha tardado la descarga y ver cunto han tardado los enlaces individuales, cmo son de grande los elementos individuales y, sobre todo, ver qu error ha ocurrido precisamente por ejemplo, mensajes relacionados con la apertura de la conexin o el cdigo HTTP correspondiente. Detalles adicionales, tales como el nmero de avisos, las direcciones vlidas e invlidas e informacin sobre el nmero de elementos y la longitud de las direcciones son menos interesantes a la hora de resolver los problemas, pero resultan relevantes como datos estadsticos.

Figura 2: Los resultados quedan bastante claros al exportarse como HTML.

Atencin a los Detalles


Se pueden organizar los eventos en mltiples columnas en base a estos detalles. En vez del orden por defecto, segn el orden de la comprobacin, se pueden ordenar los resultados alfabticamente por pgina de origen (referido como

Parent por el programa), la URL compronecesidades. El valor por defecto es -1 lo bada, su nombre en el sitio web o simpleque significa que no se aplican lmites, mente haciendo clic sobre la cabecera de mientras que un valor de 3 slo comprola columna que deseemos. Para investibara hasta una profundidad de tres nivegar la situacin con ms detalle, se puede les. En el ejemplo de Linux, el programa hacer clic en una direccin de la ventana todava se quedaba funcionando ms de del programa para abrirla en el navegauna hora tras establecer un lmite de 3, dor que tengamos por defecto. Por otro pero finalizaba casi inmediatamente tras lado, se puede hacer clic con el botn poner un nivel de 1. Por otro lado, los derecho del ratn en la direccin para errores de recursin slo se generan para copiarla al portapapeles. nuestro dominio LinkChecker slo Si tenemos que procesar los resultados comprueba el primer nivel de enlaces de la prueba, LinkChecker permite guarexternos para evitar lo que podra ser una darlos seleccionando File | Save events tarea sin fin. como un documento HTML (Figura 2), En el mismo cuadro de dilogo, se un fichero de texto, en formato XML o en puede escoger la lista de direcciones a un fichero CSV. En nuestras pruebas, el cubrir por el test, en vez de slo los enlaprograma generaba un mensaje de error ces que presenten problemas pero los para el fichero CSV indicando un proresultados pueden rpidamente satublema con un mdulo de Python y generarse, incluso si slo se est chequeando raba un fichero incompleto. La llamada un sitio web pequeo, razn por la que al mecanismo de actualizacin integrado esta opcin viene desactivada por generaba el mismo error. Por otro lado, si defecto. Desde el cuadro de dilogo de se usan los paquetes de la distribucin, no ser necesario actualizarlo por medio de este mecanismo. La comprobacin de algunos sitios web parecen tardar una eternidad debido a la profundidad de la recursin, es decir, el nmero de niveles que LinkChecker tiene que investigar. Si el sitio posee un gran nmero de pginas y enlaces externos, la duracin de la prueba puede realmente crecer exponencialmente. Para evitar este problema, se puede cambiar este nmero Edit | Options | GUI options Figura 3: LinkChecker tambin incluye un pequeo editor para que se adece a nuestras para acceder al fichero de configuracin.

WWW.LINUX- MAGAZINE.ES

Nmero 93

29

PRCTICO Linkchecker

muestra el resultado en formato SQL para que pueda transferirse directamente a una base de datos (Figura 4). La Devuelta a la Raz opcin --scan-virus permite analizar los La multitud de opciones del programa ficheros descargados con el antivirus Clanos hace sospechar que LinkChecker mAV (clamav-daemon) y --check-html puede hacer mucho ms de lo que la valida los ficheros llamando a Tidy [2], interfaz grfica de usuario muestra. Dessuponiendo que se tenga instalado el pus de todo, slo es una interfaz para paquete python-utidylib. De forma simiun programa de la lnea de comandos lar, --check-css valida los elementos CSS, (linkchecker). suponiendo que se tenga instalado el LinkChecker hace referencia al fichero paquete python-cssutils. de configuracin mencionado anteriorSi nos encontramos tras un cortafuegos mente, o se pueden aadir parmetros restrictivo, LinkChecker puede tambin directamente desde la lnea de comanacceder al proxy global del sistema, por dos. man linkchecker proporciona una ejemplo, por medio de la variable de explicacin para cada parmetro. entorno http_proxy. Tambin soporta Por ejemplo, conexiones basadas en nombres de usuario y contrasea (-u user -p), as como el uso de cookies (-C). En la Web! Se pueden excluir direcciones y pgiAdems de la GUI y la lnea de comandos, nas individuales del test por medio de LinkChecker tambin soporta su propia expresiones regulares junto con el parinterfaz web. Para ms informacin sobre cmo activar esta opcin en sistemas metro --ignore-url. Si el acceso directo al basados en Debian, lase el fichero puerto 25 se encuentra bloqueado en la README.Debian que se encuentra en el red, cada enlace mailto individual provodirectorio /usr/share/doc/linkchecker/. car un aviso, ya que LinkChecker intentar abrir una conexin con el servidor. Pero, especificando --ignore- url=^mailto: se le indicar al programa que ignore los enlaces de correo electrnico. Esta funcin de filtrado tambin es til si se quiere buscar el contenido de una pgina. Por ejemplo, si nos queremos asegurar de que no hayan ms enlaces a la pgina miempresa.tld, especificaremos el parmetro -W miempresa.tld. Se pueden identificar ficheros con un tamao mayor de Figura 4: LinkChecker muestra el resultado en un formato 10KB, suponiendo que el serlisto para usarse con una base de datos. vidor web soporte la peticin,

las opciones, tambin se puede acceder al fichero de configuracin completo, que reside en el directorio home del usuario en .linkchecker/ linkcheckerrc. En el propio fichero podemos encontrar las explicaciones de los diferentes parmetros (Figura 3) y en la pgina del manual correspondiente, a la que se puede acceder por medio de man linkchecker.

linkchecker U -osql U http://www.linux-magazine.es

especificando --warning- size- bytes= 10240. Si la salida est demasiado saturada como para encontrar el mensaje que andamos buscando, --no-warnings-- nostatus restringe la salida slo a la informacin crtica.

Conclusiones
LinkChecker nos pareci bastante impresionante en nuestro laboratorio. Aunque la interfaz grfica de usuario slo ofrezca un subconjunto de las funciones del programa, ser ms que suficiente para la mayora de las aplicaciones. Si no te gusta leer manuales, la mayora de las funciones se explican por s mismas. La versin para la lnea de comandos es particularmente adecuada para expertos o para usuarios que busquen la integracin del programa con sus propios scripts. La pgina del manual cuenta con una explicacin detallada de cada parmetro y sera muy buena idea leerla antes de comenzar a programar un script.

RECURSOS
[1] LinkChecker: http://linkchecker. sourceforge.net [2] Tidy: http://tidy.sourceforge.net/ docs/tidy_man.html

Florian Effenberger ha sido un evangelista del software libre y el cdigo abierto durante muchos aos. Para bien del pblico, se encuentra en el equipo directivo de The Document Foundation. Ha trabajado anteriormente en el proyecto OpenOffice.org durante varios aos y ms recientemente como jefe del proyecto de marketing. Florian tiene una experiencia de 10 aos diseando redes de ordenadores tanto para empresas como para centros educativos, as como la instalacin de software libre. Tambin publica con frecuencia en diversas revistas profesionales internacionales artculos sobre software libre, estndares abiertos y temas legales.

30

Nmero 93

WWW.LINUX- MAGAZINE.ES

EL AUTOR

Sistemas de Ficheros Flash PRCTICO

Sistema de ficheros Flash para Linux

Corredor Silencioso
Las mquinas ruidosas con pilas rotatorias de discos ya estn desfasadas. Las elegantes tabletas y los smartphones de la generacin digital actual albergan memorias flash que ahorran espacio y energa. Vamos a explicar las caractersticas de los chips flash y sugeriremos algunos sistemas de ficheros apropiados para Linux. POR MICHAEL OPDENACKER
rogresivamente van desapareciendo de los centros de datos los antiguos ordenadores con discos y ventiladores, que quedan ocultos por la nube. Por ello, los usuarios no se dan cuenta de la cantidad de calor y el ruido que producen. Ahora, los smartphones y las tabletas, los nuevos ordenadores, se encuentran en diversas reas de nuestras vidas despus de todo, son mviles, silenciosos y eficientes con respecto al consumo energtico. Una de las razones por las cuales los dispositivos mviles son ms eficientes con respecto al consumo energtico se debe a que el sistema de almacenamiento que poseen en su interior est basado en chips en vez de en discos rotatorios. Las memorias flash de estado slido no poseen partes mviles y por ello son muy robustas, ya que no sufren ningn tipo de estrs mecnico. Es ms, las memorias sin discos pueden acceder a los datos de forma mucho ms rpida ya que no requieren el uso de cabezales mviles.

capacidad de almacenamiento. Segundo, la escritura en el almacenamiento flash tambin tiene limitaciones especiales. No se puede escribir en el mismo punto de un bloque flash mltiples veces sin borrar el bloque entero, llamado bloque de borrado. Esta limitacin puede tambin ocasionar que las velocidades de escritura sean mucho ms lentas que las velocidades de lectura. Tercero, los bloques flash pueden soportar slo un nmero mximo de borrados desde unos pocos miles para los actuales chips NAND a un milln en el mejor de los casos. Por ello, el hardware y el software tienen que esparcir las operaciones de escritura en un proceso denominado nivelacin del desgaste.

Carola G. fotolia.com

NAND/NOR
Las flash NOR, llamadas as por el tipo de puertas usadas en el chip, fueron el primer tipo de almacenamiento flash inventado. La NOR es apropiada porque la CPU puede acceder a cualquier byte directamente en una secuencia aleatoria. De esta forma, la CPU puede ejecutar cdigo directamente desde la flash NOR, permitiendo su uso en cargadores de arranque, sin la necesidad de realizar una copia en la RAM antes de la ejecucin. El tipo de memoria flash ms popular hoy en da es la NAND (Figura 1), que ofrece ms capacidad de almacenamiento a un menor precio. El inconveniente est en que, como un dispositivo externo, el almacenamiento NAND se conecta por medio de un controlador, por el cual se accede a los datos. La CPU no puede ejecutar cdigo desde la memoria NAND sin copiar primero el cdigo a la RAM. Otra limitacin consiste en que los dispositivos flash NAND pueden poseer bloques malos desde su fabricacin, requiriendo alguna solucin hardware o software que solucione este problema durante su funcionamiento. Hoy en da contamos con dos tipos de almacenamiento flash NAND. El primer tipo emula una interfaz de bloques estndar y contiene el hardware que se encarga del borrado de los bloques capa de traduccin flash, implementando el nivelado del desgaste y gestionando los bloques malos. Entre los dispositivos de este tipo podemos encontrar discos flash USB, tarjetas de memoria, tarjetas de memoria incrustadas (eMMC) y discos de estado slido (SSD). El sistema operativo no posee ningn control sobre la forma en la

Un dispositivo sin discos tambin produce menos calor, de modo que no es necesario el uso de ruidosos ventiladores. En este artculo, voy a describir algunos sistemas de ficheros y herramientas que funcionan con la gran variedad de dispositivos de almacenamiento flash que soporta Linux.

Almacenamiento Flash
El almacenamiento flash, tambin llamado de estado slido, posee mltiples ventajas con respecto a los discos. Primero, la ausencia de partes mecnicas y mviles elimina el ruido, incrementa la fiabilidad y la resistencia a los golpes y vibraciones, y reduce la disipacin de calor y el consumo elctrico. Segundo, el acceso aleatorio a los datos es mucho ms rpido ya que no es necesario mover las cabezas del disco a la posicin correcta, lo que tarda varios milisegundos. Las memorias flash tambin poseen sus inconvenientes. Primero, por el mismo precio se obtiene una dcima parte de la

WWW.LINUX- MAGAZINE.ES

Nmero 93

31

PRCTICO Sistemas de Ficheros Flash

Figura 1: El bloque grande en medio de la BeagleBoard de este ordenador basado en una nica placa es una OMAP de Texas Instruments, en donde se encuentra montada una flash NAND.

que los sectores flash son gestionados ya que slo ve un dispositivo de bloques emulado. Aunque esta solucin reduce la complejidad software por parte del sistema operativo, los fabricantes de hardware normalmente mantienen en secreto sus algoritmos de la capa de traduccin flash, lo que impide que los desarrolladores de sistemas puedan verificar y afinar estos algoritmos o corregir implementaciones pobres. El segundo tipo de memoria NAND consiste en una flash simple. El sistema operativo posee acceso a la controladora flash y puede gestionar los bloques flash directamente. Este tipo de flash puede utilizar un contador de bloques borrados para determinar la frecuencia con la que un bloque ha sido sobrescrito. El kernel de Linux implementa un subsistema MTD (Memory Technology Device) que permite el acceso y controla diversos tipos de dispositivos flash con una interfaz comn (Figura 2).

vos de bloques que se realiza por medio de ficheros de dispositivo (por ejemplo, el dispositivo entero por medio de /dev/sda o a particiones por medio de /dev/sda1, /dev/sda2,...). La declaracin de particiones como de slo lectura (RO) puede proteger el sistema de ficheros frente a errores e intentos de modificaciones no autorizadas. Tambin hay que tener en cuenta que las particiones no pueden saltarse accediendo al dispositivo completo dando un desplazamiento, ya que Linux no posee ficheros de dispositivo para esta clase de accesos. La Figura 3 muestra un esquema de particin tpico. Al contrario que en los discos duros, la tabla de particiones no se guarda en el medio MTD una zona no segura ya que puede haber bloques malos potenciales. Por el contrario, las particiones vienen definidas por una estructura de datos en el kernel de Linux. El Listado 1 muestra un fragmento relevante del fichero arch/arm/machOMAP2/ board-OMAP3Beagle.c, que define las particiones para la flash NAND en una BeagleBoard. Afortunadamente, podemos saltarnos la configuracin por defecto sin tener que recompilar el kernel. Para identificar el nombre del dispositivo MTD, hay que mirar los mensajes del kernel que aparecen en el inicio del sistema. Para el ejemplo de la BeagleBoard, en el Listado 2 se muestra que el nombre del dispositivo flash NAND es omap2-nand.0. Una vez que el nombre del dispositivo es conocido, el parmetro de arranque mtdparts pasa la particin con (todo en una nica lnea):
mtdparts=U omap2-nand.0:U 128k(X-Loader)ro,U 256k(U-Boot)ro,U 128k(Environment),U 4m(Kernel)ro,U 32m(RootFS)ro,-(Data)

Figura 2: La aquitectura MTD del kernel de Linux permite la gestin independiente del hardware del almacenamiento flash.

Los tamaos de las particiones deben ser mltiplos del tamao de los bloques de borrado, que pueden encontrarse en el sistema bajo /sys/class/mtd/mtdx/erasesize. Los tamaos de las particiones nuevas creadas, que se pueden ver en /proc/mtd, se encuentran en hexadecimal (Listado 3). Los nombres de los ficheros para los dispositivos de bloque de las particiones se refieren al nombre del dispositivo completo (por ejemplo, /dev/sda1 para la primera particin de /dev/sda), pero hay que tener en cuenta que las particiones MTD se muestran como dispositivos MTD independientes. Por ello, mtd1 podra ser la segunda particin del primer dispositivo flash o la primera particin del segundo dispositivo flash. No se puede deducir a partir de los nombres de los dispositivos. La particin Enviroment es donde el cargador de arranque U-Boot almacena las variables de entorno. Estas variables pueden cambiarse desde el intrprete de comandos U-Boot pero tambin desde Linux escribiendo una nueva imagen en la particin. Los desarrolladores de Free Electron han desarrollado una utilidad para generar tales imgenes [1].

Particiones
El acceso raw significa que no se requiere ningn sistema de ficheros, a menos que se deseen almacenar varios archivos. Para algunas aplicaciones es suficiente con tener un nico fichero binario grande. Los dispositivos MTD normalmente se encuentran particionados para definir reas para propsitos especficos, tales como el cargador de arranque o el sistema de ficheros. El acceso raw a memorias flash es similar al acceso raw a dispositi-

En este fragmento se definen seis particiones: Cargador de arranque, primera etapa (128KB, RO) Cargador de arranque U-Boot (256KB, RO) Variables de entorno de U-Boot (128KB) Kernel de Linux (4MB, RO) Raz del sistema de ficheros (16MB, RO) Datos (el resto del espacio de almacenamiento)

Figura 3: El almacenamiento MTD normalmente se divide en particiones de slo lectura y de escritura.

32

Nmero 93

WWW.LINUX- MAGAZINE.ES

Sistemas de Ficheros Flash PRCTICO

Manipulando Dispositivos MTD


Los dispositivos MTD pueden accederse desde dos interfaces. La primera utiliza el dispositivo de caracteres /dev/mtdN (dnde la N es el nmero del dispositivo MTD) y el controlador mtdchar. En particular, este dispositivo de caracteres proporciona comandos ioctl tpicamente utilizados por mtd-utils para manipular y borrar bloques en un dispositivo MTD. La segunda interfaz proporciona el dispositivo de bloques /dev/mtd-blockN y el controlador mtdblock. Este dispositivo es utilizado principalmente para montar los sistemas de ficheros MTD, tales como JFFS2 y YAFFS2, ya que el comando mount slo funciona con dispositivos de bloques. Aunque podramos estar tentados a utilizar este dispositivo para escribir en el dispositivo MTD, el controlador correspondiente no es lo suficientemente sofisticado como para usarse en produccin ya que no soporta el nivelado del desgaste. Una serie de escrituras en la misma zona del dispositivo de bloques podra daar muy rpidamente los bloques de borrado correspondientes. Peor an, si se copia una imagen del sistema de ficheros a /dev/mtd-blockN, el sistema de ficheros podra quedar corrupto por culpa de los bloques malos, ya que no se tienen en cuenta. Por ello, la forma correcta de manipular los dispositivos MTD es por medio de la interfaz de caracteres y mtdutils [2]. Los comandos ms importantes son: mtdinfo: Informacin detallada sobre el dispositivo MTD. flash_eraseall: Borra completamente un dispositivo de bloques dado. flashcp: Escribe en flash NOR. nandwrite: Escribe en flash NAND. Utilidades UBI (vase la seccin UBI y UIFS). mkfs.jjfs2, mkfs.ubifs: Herramientas para la creacin de imgenes de sistemas de ficheros flash. Estos comandos se encuentran disponibles en el paquete mtd-utils de las distribuciones GNU/Linux y pueden compilarse de forma cruzada desde las fuentes que se encuentran en los sistemas Linux empotrados tales como BuildRoot [3] y OpenEmbedded [4]. En BusyBox [5] podemos encontrar implementaciones simples de la mayora de los comandos comunes, facilitando la compilacin cruzada para sistemas empotrados simples.

JFFS2
JFFS2 [6] (Journaling Flash File System version 2), aadido al kernel de Linux en 2001, es un sistema de ficheros muy popular para almacenamiento flash. Implementa la deteccin de bloques malos y gestiona tambin el nivelado del desgaste, tal y como se espera de los sistemas de ficheros para memorias flash. Ha sido diseado para mantenerse en un estado consistente tras un fallo abrupto de corriente o la cada del sistema. Tambin es capaz de almacenar los datos de forma comprimida. Se encuentran disponibles varios esquemas de compresin segn lo que se desee tener: rendimiento de lectura/escritura o tasa de compresin. Por ejemplo, zlib comprime mejor que lzo pero es mucho ms lento. La implementacin de sistemas de ficheros flash conlleva ciertas limitaciones. Para poder modificar un fichero existente, no se puede simplemente copiar los bloques correspondientes a la RAM, borrarlos y guardar los bloques con la nueva versin. Primero, un fallo en el suministro elctrico durante este proceso causara una prdida de datos irrecuperable. Segundo, podran desgastarse rpidamente ciertos bloques haciendo mltiples actualizaciones en el mismo fichero. Una alternativa consistira en escribir los datos nuevos en un bloque nuevo y actualizar los punteros de los datos antiguos. Sin embargo, esto implicara otra escritura, que provocara otras modificaciones hasta que la referencia llegase a la raz. JFFS2 soluciona estos problemas con una solucin basada en una estructura de registros [7]. Cada fichero se encuentra asociado a un nodo con metadatos y datos, y cada nodo posee un nmero de versin asociado. En vez de realizar cambios directamente, la idea consiste en escribir una versin ms reciente del nodo en otra parte en un bloque de borrado con espacio libre. De esta forma se simplifican las operaciones de escritura, pero se complican las de lectura, ya que el sistema de ficheros tiene que encontrar la versin ms reciente del nodo. Para optimizar el rendimiento, JFFS2 mantiene en memoria un mapa de los nodos ms recientes de cada fichero, de modo que en el momento en que se monta el sistema de ficheros, JFFS2 tiene que analizar los nodos y crear el mapa que mantendr en memoria. Como el

tiempo de montaje de JFFS2 es proporcional al nmero de nodos, los sistemas empotrados que usen JFFS2 en grandes particiones flash, sufrirn tiempos de arranque mayores. Afortunadamente, la opcin del kernel CONFIG_JFFS2_SUMMARY le indica a Linux que almacene el mapa entre las acciones de montaje del dispositivo flash, reduciendo dramticamente el tiempo de montaje. Sin embargo, esta opcin no se encuentra activada por defecto. Los nodos ms antiguos sern en algn momento reclamados cuando haga falta ms espacio para las nuevas escrituras. Un nodo se crea como vlido y se considera obsoleto cuando se crea una versin ms nueva del mismo. JFFS2 gestiona tres tipos de bloques flash: Bloques limpios, que contienen slo nodos vlidos. Bloques sucios, que contiene al menos un nodo obsoleto. Bloques libres, que no contienen nodos. JFFS2 ejecuta un recolector de basura en segundo plano que recicla los bloques sucios en bloques libres. Esta operacin la realiza recolectando todos los nodos vlidos de un bloque sucio y copindolos a un bloque limpio. Luego el bloque antiguo sucio se borra y se marca como libre. Para que todos los bloques borrados participen en el nivelado del desgaste, el recolector de basura a veces tambin consume bloques limpios. Hay dos formas de crear una particin JFFS2. La primera consiste en borrar la particin, formatearla con JFFS2 y luego montarla:
flash_eraseall -j /dev/mtd2 mount -t jffs2 /dev/mtdblock2 U /mnt/flash

flash_eraseall -j realiza tanto el borrado de la flash como el formateado con el sistema de ficheros JFFS2. La segunda forma es generalmente la mejor opcin para los desarrolladores de sistemas empotrados, porque se crea la imagen JFFS2 en un ordenador y luego se graba la imagen en la particin de la flash. Para crear la imagen se utiliza el comando mkfs.jffs2 del paquete mtd-utils, pero no debemos confundirnos con su nombre. Al contrario que con otros comandos mkfs, no crea un sistema de ficheros, sino una imagen de un sistema de ficheros.

WWW.LINUX- MAGAZINE.ES

Nmero 93

33

PRCTICO Sistemas de Ficheros Flash

Listado 1: Particiones Definidas en el Kernel


01 static struct mtd_partition omap3beagle_nand_partitions[] = { 02 /* All the partition sizes are listed in terms of NAND block size */ 03 { 04 .name = X-Loader, 05 .offset = 0, 06 .size = 4 * NAND_BLOCK_SIZE, 07 .mask_flags = MTD_WRITEABLE, /* force read-only */ 08 }, 09 { 10 .name = U-Boot, 11 .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ 12 .size = 15 * NAND_BLOCK_SIZE, 13 .mask_flags = MTD_WRITEABLE, /* force read-only */ }, { .name = U-Boot Env, .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ 18 .size = 1 * NAND_BLOCK_SIZE, 19 }, 20 { 21 .name = Kernel, 22 .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ 23 .size = 32 * NAND_BLOCK_SIZE, 24 }, 25 { 26 .name = File System, 27 .offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */ 28 .size = MTDPART_SIZ_FULL, 29 }, 30 }; 14 15 16 17

como un parche con una serie de scripts de ayuda. Hace un ao se hizo un esfuerzo por incorporarlo a la lnea de produccin del kernel, pero el intento fall debido a que los cambios requeridos por los desarrolladores del kernel habran roto la portabilidad a otros sistemas operativos. Tras parchear el kernel, se puede crear un nuevo sistema de ficheros YAFFS2 con el comando:
flash_eraseall /dev/mtd2

El sistema de ficheros se formatea automticamente a la hora de montarlo por primera vez:


mount -t yaffs2U /dev/mtdblock2 U /mnt/flash

Otra opcin consiste en utilizar la herramienta mkyaffs, de las utilidades de YAFFS2 [9].

El siguiente comando crea un fichero de imagen con el nombre rootfs.jffs2. Por ejemplo, supondremos que el tamao del bloque de borrado es de 256MB.
mkfs.jffs2 --pad U --no-cleanmarkers U --eraseblock=256 U -d rootfs/ U -o rootfs.jffs2

El parmetro -d designa el directorio con el contenido deseado para el sistema de ficheros y --pad crea una imagen que sea mltiplo del tamao de los bloques de borrado, --no-cleanmarkers slo se debera utilizar en flash NAND. Para formatear la particin de destino y escribir la imagen en ella, hay que teclear:
flash_eraseall /dev/mtd2 nandwrite -p /dev/mtd2 U rootfs.jffs2

como flash_eraseall no deben encontrarse en el sistema de ficheros raz de Linux, que es otra razn por la que las imgenes del sistema de ficheros son tiles. Normalmente, se descarga a la RAM la imagen del sistema de ficheros y luego se copia la imagen a la flash. Cuando se hace esto, hay que asegurarse de que se copia el tamao exacto de la imagen. Con imgenes JFFS2, si se copian ms bytes de la RAM a la flash, se acabar escribiendo bytes aleatorios al final de la imagen, lo que corromper al sistema de ficheros.

UBI y UBIFS
JFFS2 y YAFFS2 poseen un problema comn: implementan el nivelado del desgaste, por ello quedan restringidos a particiones individuales. Sin embargo, los niveles de uso pueden ser bastante diferentes. Las particiones a menudo se montan como de slo lectura, mientras que las particiones de datos quedan expuestas a numerosas escrituras por lo que se las conocen como particiones calientes. Para evitar el desgaste de las particiones calientes demasiado pronto, deben participar todas las reas de la memoria flash en el nivelado del desgaste. Esto es exactamente lo que el proyecto UBI (Unsorted Block Images) ofrece. UBI forma una capa por encima de MTD que se encarga de gestionar los bloques de borrado y los bloques malos implementando el nivelado del desgaste, de este modo se libera al sistema de ficheros de esta responsabilidad. UBI tambin soporta particiones o volmenes flexibles, que pueden crearse y modificarse su tamao de forma dinmica, del mismo modo que lo hace LVM con los dispositivos de bloques. UBI implementa LEB (Logical Erase Blocks), que se encarga de la correspondencia con los PEB (Physical Erase Blocks) (Figura 4). Las capas superiores, tales como el sistema de ficheros, slo ven LEB. Si un LEB ve demasiada accin, UBI

YAFFS2
Una alternativa a JFFS2 es YAFFS2 [8] (Yet Another Flash Filesystem), que podemos encontrar en smartphones con las primeras versiones de Android. YAFFS2 no utiliza compresin, pero posee tiempos de montajes mucho ms rpidos, as como mejores tasas de rendimiento tanto en lecturas como en escrituras. El cdigo posee una licencia dual bajo GPL y propietaria (por ejemplo, GPL para su uso con el kernel de Linux y propietaria para sistemas operativos propietarios). Los beneficios de la licencia propietaria financian el desarrollo. YAFFS2 es menos popular que JFFS2, probablemente porque no forma parte de la lnea de desarrollo del kernel de Linux. Por el contrario, se encuentra disponible

Si la imagen es ms pequea que la particin, JFFS2 podr utilizar posteriormente el espacio, siempre y cuando la particin haya sido previamente borrada completamente. Para preparar dispositivos para produccin, es mejor grabar las particiones MTD desde el cargador de arranque, usando un comando que pueda gestionar los bloques malos, sin arrancar Linux. De esta forma, las utilidades de desarrollo

34

Nmero 93

WWW.LINUX- MAGAZINE.ES

Sistemas de Ficheros Flash PRCTICO

Listiado 2: Mensajes de Arranque


01 omap2-nand driver initializing 02 ONFI flash detected 03 NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bit) 04 Creating 5 MTD partitions on omap2-nand.0: 05 0x000000000000-0x000000080000 : X-Loader 06 0x000000080000-0x000000260000 : U-Boot 07 0x000000260000-0x000000280000 : U-Boot Env 08 0x000000280000-0x000000680000 : Kernel 09 0x000000680000-0x000010000000 : File System

Listado 3: /proc/mtd
01 dev: size erasesize name 02 mtd0: 00020000 00020000 X-Loader 03 mtd1: 00040000 00020000 U-Boot 04 mtd2: 00020000 00020000 Environment 05 mtd3: 00400000 00020000 Kernel 06 mtd4: 02000000 00020000 File System 07 mtd5: 0dbc0000 00020000 Data

puede intercambiar los punteros, reemplazando el PEB caliente por uno frio. Este mecanismo requiere unos cuantos PEB libres para poder funcionar de manera eficiente y la sobrecarga hace que UBI sea menos apropiado para dispositivos pequeos con tan slo unos cuantos megas de espacio. El proyecto Linux MTD cre un sistema de ficheros para UBI, llamado UBIFS, como sucesor de JFFS2. UBIFS soporta compresin y posee mejores rendimientos a la hora de montar el sistema, las lecturas y las escrituras. En Linux, UBI y UBIFS se inician con unos cuantos comandos. Primero, el usuario root tiene que montar el directorio del dispositivo como un pseudofichero devtmpfs. El comando
ubiformat /dev/mtd1

y ya se puede proceder a llenar el sistema de ficheros con archivos. Una forma alternativa consiste en crear primero una imagen del sistema de ficheros UBIFS con el comando mkfs.ubifs y copiar luego la imagen con ubiupdatevol. Otra forma consiste en crear una imagen del espacio UBI completo, que podr ser grabado por el cargador de arranque con un comando que pueda manejar los bloques malos. Para ello, primero hay que crear un fichero ubi.ini describiendo el espacio UBI, su volumen y su contenido. En el Listado 4 se muestra un ejemplo. Este fichero describe qu volmenes crear, junto con sus tamaos. La imagen UBI se crea con el comando
ubinize -o ubi.img -pU 128KiB U -m 4096 ubi.ini

2.6.34. Este innovador sistema de ficheros podra mantener el dominio sobre UBIFS, pero desafortunadamente, es inestable, provocando problemas en el kernel a la hora de desmontarse, cuando fue probado por Free Electrons. Gracias a su integracin con el kernel de Linux oficial, hay bastantes posibilidades de que un desarrollador resuelva estos problemas.

SquashFS
Las particiones de slo lectura pueden utilizar el sistema de ficheros de bloques SquashFS en dispositivos MTD. Copiar una imagen SquashFS directamente al dispositivo /dev/mtdblockN correspondiente funcionar bien despus de todo, no hay que preocuparse por el nivelado del desgaste hasta que se encuentren bloques malos en un dispositivo. De nuevo, el controlador mtdblock no puede manejar los bloques malos, de modo que hay que utilizar otra solucin. Una posibilidad consiste en utilizar el controlador gluebi, que emula un dispositivo MTD por encima de un volumen UBI. Como UBI descarta los bloques malos, mtdblock podr entonces utilizarse de forma segura.

borra la particin flash sin reiniciar el contador de borrados. Para activar UBI en la particin MTD, tecleamos:
ubiattach /dev/U ubi_ctrl -m 1

El resultado es el nuevo dispositivo de caracteres, /dev/ubi0. Ahora ya podremos crear uno o varios volmenes en el dispositivo,
ubimkvol /dev/ubi0 U -N test -s U 116MiB ubimkvol /dev/U ubi0 -N test -m

que tambin especifica bloques de borrado de 128KB y un tamao mnimo de E/S de 4096 bytes. Para transferir la imagen, hay que utilizar una herramienta del cargador de arranque que pueda manejar los bloques malos. Adems, la lnea de comandos del kernel necesita la opcin ubi.mtd=1 (equivalente a ubiattach). Si queremos que UBIFS maneje la particin raz, tendremos que aadir
rootfstype=ubifs U root=ubi0:rootfs

Listado 4: ubi.ini
01 [RFS-volume] 02 mode=ubi 03 image=rootfs.ubifs 04 vol_id=1 05 vol_size=30MiB 06 vol_type=dynamic 07 vol_name=rootfs 08 vol_flags=autoresize 09 vol_alignment=1

al comando de arranque.

LogFS
LogFS [10] es otro sistema de ficheros estructurado en registros para memorias flash que posee un diseo innovador y lleva formando parte de la lnea de desarrollo principal del kernel desde la versin

donde -m es el tamao mximo disponible. Para montar un sistema de ficheros UBIFS vaco en el nuevo volumen test, tecleamos
mount -t U ubifs ubi0:test U /mnt/flash

Figura 4: UBI maneja los volmenes lgicos de la misma forma que LVM, asegurndose de realizar el nivelado del desgaste entre los bloques fsicos.

WWW.LINUX- MAGAZINE.ES

Nmero 93

35

PRCTICO Sistemas de Ficheros Flash

Figura 5: El tiempo de CPU necesario para montar los sistemas de ficheros. Las largas barras rojas muestran el tiempo consumido en el proceso de montaje de JFFS2.

Otra posibilidad consiste en utilizar el controlador ubiblk, que implementa un dispositivo de bloques de slo lectura directamente encima de UBI. Free Electrons ha enviado ubiblk a la Lista de Correo del Kernel de Linux [11], pero an no ha sido incorporado a la lnea principal. Los bancos de pruebas muestran que ubiblk es una solucin eficiente ya que no tiene que emular un dispositivo MTD intermedio.

Bancos de Pruebas
Con fondos de la fundacin Linux, Free Electrons ha probado el rendimiento de varios sistemas de ficheros flash con diferentes versiones del kernel. Los resultados (Figura 5) se encuentran descritos en Internet [12]. En resumen, JFFS2 posee el peor rendimiento y debe ser compilado con CONFIG_SUMMARY para que tenga un tiempo de arranque aceptable. Sin embargo, JFFS2 es todava la mejor opcin para dispositivos con particiones flash pequeas que no requieran compresin y donde UBI tendra demasiada sobrecarga. sta es la razn por la cual JFFS2 se encuentra todava en uso en OpenWRT, una distribucin que tiene como objetivo principal dispositivos empotrados como routers y puertas de enlace, que normalmente tienen una flash de almacenamiento de entre 4 y 16MB. Gracias a las mejoras de los ltimos aos, YAFFS2 muestra un rendimiento muy bueno, si no el mejor, en muchos escenarios de pruebas. Sin embargo, la falta de compresin es un inconveniente, as como su ausencia de la lnea de desarrollo principal del kernel de Linux. YAFFS2 tambin posee un inusual problema de rendimiento a la hora de manejar directorios.

UBIFS es ahora la mejor solucin en trminos de rendimiento y espacio. El espacio adicional requerido es slo un problema cuando se trata de particiones muy pequeas. Su despliegue tambin requiere algo ms de trabajo que con los otros candidatos. En el momento de escribir este artculo, LogFS era todava demasiado experimental como para usarse en sistemas en produccin, aunque podemos esperar que sus errores se resuelvan poco a poco. SquashFS muestra una buena compresin, buenos tiempos de montaje y un buen rendimiento sobre flash MTD en sistemas con particiones de slo lectura. La necesidad de utilizar SquashFS con UBI desfavorece sus tiempos de montaje. En sistemas de ficheros de bloques, SquashFS exhibe el mejor tiempo de montaje, pero pierde mucho tiempo con UBI, que requiere bastante tiempo para inicializarse (la operacin ubiattach). La buena noticia es que es muy barato cambiar de sistema de ficheros. Las aplicaciones no notarn la diferencia. Como muestra en el banco de pruebas, se pueden conseguir resultados de rendimientos significantes, dependiendo del tamao de las particiones, del tamao y nmero de ficheros, los patrones de lectura y escritura del sistema y la necesidad de compresin. Lo nico que tenemos que hacer es probar varios sistemas de ficheros, ejecutar las aplicaciones y las pruebas del sistema y mantener la solucin que maximice el rendimiento para cada sistema particular.

las caractersticas del medio de almacenamiento, tales como el tamao de los bloques de borrado. Con la ayuda de esta informacin, podemos entonces optimizar los parmetros del sistema de ficheros que estemos usando. Bergmann describe su trabajo en un artculo de Internet [14].

Consejos
A la hora de trabajar con memorias flash es conveniente que sigamos unas cuantas reglas bsicas, entre las que se incluyen la no creacin de particiones de intercambio en la flash. Siempre que sea posible, se deberan montar las particiones como de slo lectura. Los datos voltiles, tales como los ficheros de registro, se pueden almacenar en la RAM, por medio del pseudo sistema de ficheros tmpfs.

RECURSOS
[1] Herramienta de imgenes para entornos U-Boot: http://free-electrons.com/blog/ mkenvimage-uboot-binary-env-gener ator/ [2] mtd-utils: http://git.infradead.org/mtd-utils.git [3] BuildRoot: http://buildroot.uclibc.org/ [4] OpenEmbedded: http://www.openembedded.org/wiki/ Main_Page [5] BusyBox: http://www.busybox.net/ [6] JFFS2: http://www.linux-mtd.infradead.org/ faq/jffs2.html [7] Sistemas de ficheros basados en registros: http://en.wikipedia.org/wiki/ Log-structured_file_system [8] YAFFS2: http://www.yaffs.net/ [9] yaffs2utils: http://code.google.com/p/yaffs2utils/ [10] LogFS: https://github.com/prasad-joshi/logfs [11] ubiblk: Read-only block layer on top of UBI: https://lkml.org/lkml/2011/6/24/122 [12] Bancos de pruebas de sistemas de ficheros flash: http://elinux.org/Flash_Filesystem_ Benchmarks [13] Herramienta de banco de pruebas Flashbench: http://git.linaro.org/gitweb?p=people/ arnd/flashbench.git;a=summary [14] Optimizing Linux with Cheap Flash Drives por Arnd Bergmann, http://lwn.net/Articles/428584/

Bastante Barato
Las memorias flash simples ofrecen a los desarrolladores de sistemas empotrados muchas oportunidades de optimizacin. La tendencia entre los fabricantes de hardware, sin embargo, se aleja de las memorias flexibles flash NAND e incorporan MMC. Estas tarjetas de memoria montadas en superficie usan una interfaz ms parecida a las tarjetas de memoria externas. Ocultan al sistema operativo los detalles de los bloques malos y del nivelado del desgaste. Como son muy baratas, probablemente desbanquen a las flash simples mucho ms caras. Afortunadamente, eMMC no es totalmente opaca. El desarrollador del kernel Arnd Bergmann ha programado una herramienta denominada Flashbench [13] que permite que podamos determinar experimentalmente

36

Nmero 93

WWW.LINUX- MAGAZINE.ES

Clonacin de Discos Duros PRCTICO

Cuatro herramientas para clonar discos duros

Guerras de Clones
de Linux a mover los datos y crear rplicas bit a bit. POR MELA ECKENFELS.
a sea un usuario tpico que tiene la intencin de juguetear con el hardware en casa o un administrador de Linux que necesite crear una granja de servidores virtualizados con instalaciones idnticas, tarde o temprano, la mayora de los usuarios se enfrentan al reto de duplicar discos duros. Es siempre una buena idea considerar dd con algo de respeto. Aunque la herramienta est siempre dispuesta a servir, el menor descuido es suficiente para causar un dao irreparable. Si no disponemos de buenas copias de seguridad en este caso, ya podemos olvidarnos de nuestros datos mientras reconstruimos el sistema. Sin embargo, existen soluciones que ofrecen una red de seguridad. Una ayuda fiable para la clonacin es la promesa que hacen dos Live CDs: Clonezilla [1] y Ping [2]. Alternativamente los usuarios pueden instalar Mondo Rescue [3] o el competidor comercial Storix System Backup Administrator [4]. Las comparativas en este artculo cubren la facilidad de uso y los sistemas de archivos soportados. Tambin se pidi a los candidatos demostrar si eran capaces de crear imgenes de mquinas virtuales y si un sistema de arranque mltiple seguir cargando todos los sistemas operativos tras la clonacin.

sandrobrezger, photocase

El disco duro hace ruidos extraos? Tienes intencin de hacer algunos cambios importantes de hardware? Tal vez es hora de clonar el disco. Presentamos cuatro herramientas que ayudan a usuarios y administradores

Clonezilla
El primer candidato de la prueba se distribuye bajo licencia GPLv2 y se presenta como una versin doble. Los usuarios pueden elegir entre una Debian y una variante de Ubuntu. Existen imgenes estables y de pruebas para diferentes arquitecturas en el rea de descargas. Un documento de ayuda para la toma de decisiones est disponible en forma de FAQ [5]. En nuestro laboratorio usamos una variante de Ubuntu con versin 2.1.12-37 basada en Oneiric Ocelot, aunque ya est disponible una nueva versin basada en Precise Pangolin. Para una puesta en marcha rpida, los desarrolladores de Clonezilla ofrecen una tarjeta de referencia [6] que gua al usuario paso a paso a travs de las funciones ms importantes. Tras el escenario, encontramos herramientas de probada eficacia, como Partclone [7], Partimage [8], dd, y ntfsclone del paquete Ntfsprogs que hacen el trabajo duro. Clonezilla soporta los sistemas de archivos ext2, ext3, ext4, ReiserFS, Reiser 4, XFS y JFS, as como FAT, NTFS, HFS+ (Mac OS X) y UFS (Free/ Net/Open BSD). Si la herramienta de clonacin encuentra un sistema de archivos desconocido, hace la copia en bloques con dd. El programa puede manejar LVM ni-

camente a partir de la versin 2 en adelante y no puede gestionar falsos RAID (es decir, los RAID que se basan en la potencia de clculo de la CPU principal en lugar de un controlador). Despus de arrancar el Live CD, podemos seleccionar el idioma y la disposicin de teclado, si fuera necesario. Para la siguiente decisin a tomar tenemos dos opciones: device-image y devicedevice (Vase la Figura 1). Si estamos clonando una mquina a otra, o queremos que el clon sea una instantnea de la situacin actual, la primera opcin es la correcta. Sin embargo, si nos mudamos a un disco duro ms grande, el enfoque de device-device es el correcto. En esta prueba, hemos optado por device-image y despus hemos elegido una ubicacin para la imagen. Clonezilla ofrece dispositivos locales, como discos internos y externos y memorias USB como lugares potenciales. Tambin trabaja con almacenes de datos, que se pueden acceder a travs de la red. Para este fin, el programa soporta SSH, Samba y NFS. Sin embargo, la configuracin de la red requiere que est enchufado el cable Ethernet, o bien con configuracin manual de la tarjeta WLAN usando iwconfig.

WWW.LINUX- MAGAZINE.ES

Nmero 93

37

PRCTICO Clonacin de Discos Duros

Figura 1: Clonezilla ofrece dos modos: device-image y device-device.

Una configuracin de red es slo recomendable si no tenemos otra opcin. Clonar un disco bien lleno en el equipo de pruebas de 250GB con arranque dual llev unas ocho horas con un dispositivo conectado a nivel local. La clonacin de la misma configuracin por la red tardara varios das en completarse, segn la informacin aparecida por pantalla. Una vez definido el objetivo, podemos elegir entre modo principiante y modo experto. El modo principiante ofrece la opcin de clonar el disco entero o particiones individuales, realizando una comprobacin de sistema de archivos previamente slo para sistemas de archivos de Linux, y luego comprobando que la nueva imagen est libre de errores. La opcin de restaurar la imagen en un sistema diferente slo est disponible en el men experto, donde el usuario tambin puede decidir qu herramienta prefiere para el trabajo real en segundo plano. La decisin sobre si utilizar compresin (y si es as qu tipo) tambin est reservada para los expertos, as como la decisin sobre el tamao mximo de un nico archivo de imagen (por defecto es de 2 GB). A primera vista, Clonezilla parece bien estructurado, pero el diablo est en los detalles. Si cometemos un error en un punto del men, generalmente la nica salida es empezar desde el principio. La cuarta opcin en el men Reboot tambin es problemtica porque Clonezilla no elimina una unidad que est montada. Un inicio limpio slo puede garantizarse con la opcin Start over.

Los usuarios tambin pueden optar por basar la nueva tabla de particiones en el tamao real del disco duro. Los usuarios avanzados tambin pueden definir scripts a ejecutar antes o despus de la instalacin. Al clonar una particin no es posible convertir a sistemas de archivos diferentes o generar una imagen desde un disco fsico que trabaja directamente en una mquina virtual. Clonezilla introdujo soporte para equipos basados en EFI con las tablas de particin GUID en 2011. La regla nmero 1 del administrador dice que la mayor parte de los datos se pierden al restaurar las copias de seguridad. En nuestro laboratorio, Clonezilla por desgracia fue la excepcin. Cuando migramos el sistema de arranque dual con Windows y Linux, la restauracin fall al arrancar en algunos casos. Se ofrecen algunas notas para rescatar el sistema en la tarjeta de referencia mencionada anteriormente. Aunque, a primera vista, todo parece haber ido bien, eso no significa que la imagen tambin sea utilizable. Incluso si necesitamos resultados rpidos, es mejor mantener habilitadas diversas opciones para testear los sistemas de archivos y los clones finalizados.

Ping

Imagen Clavada?
Para restaurar una imagen, arrancamos el Live CD en el equipo de destino y elegimos restoredisk o restoreparts en el modo experto. Despus de eso, es el momento de algunos ajustes. Entre otras cosas, Clonezilla ofrece restaurar el MBR y el nombre de host Windows automticamente.

El segundo candidato de la prueba tambin es un Live CD. Ping, obra de la empresa francesa Effitek, est basado en Linux from Scratch. La empresa desarrolladora ofrece la herramienta como Community Edition libre (GPL) y como una versin empresarial por 30 euros, incluyendo soporte telefnico y por email. La ISO estndar es de 35 MB, una variante avan- Figura 2: Ping no tiene opciones avanzadas de clonacin directa zada con ClamAV pesa a otras particiones, conversin de tipo de sistema de archivos, y unos 70 MB. En nuestro similares.

laboratorio, hemos utilizado la versin 3.02. Ping significa Partimage is not Ghost y se refiere a la solucin de copia de seguridad comercial para Windows Norton Ghost [9], de la que quiere distinguirse. Sin embargo, los usuarios podran experimentar un momento extrao porque la interfaz grfica de usuario de Ping se parece ms a Windows que a Linux. Tras el escenario, la herramienta se basa en Partclone y Partimage. Por tanto, la herramienta puede gestionar cualquier sistema de archivos que ofrezca Partimage: ext2/3/4, ReiserFS, FAT16/32, HPFS, JFS, XFS, UFS, HFS y NTFS. Tras el arranque, Ping nos recuerda a Clonezilla en materia de controles. Sin embargo, el usuario no tienen la opcin de seleccionar el tipo de teclado, por lo que tenemos que conformarnos con la variante de Ingls Americano. Ping tambin ofrece copia de seguridad en una unidad local o remota (Samba, NFS y FTP). En los restantes submens, los usuarios pueden decidir si quieren una imagen comprimida y si la aplicacin debe utilizar Partclone o incluso Tar en lugar de Partimage. Y eso es todo, la herramienta no tiene un modo experto. La herramienta tambin es bastante espartana cuando se trata de restaurar imgenes (vase la Figura 2). La interfaz es, por tanto, muy clara y adecuada para principiantes. En el lado negativo, carece de funciones que permitan a los usuarios clonar directamente a otra unidad, cambiar el tipo de sistema de archivos, o crear imgenes de dispositivos para mquinas virtuales. Ping tampoco admite sistemas modernos basados en EFI en absoluto. Ping se anot puntos en el laboratorio al gestionar mejor con el sistema de arranque dual que Clonezilla. Sin embargo, aqu tampoco fue todo como la

38

Nmero 93

WWW.LINUX- MAGAZINE.ES

Clonacin de Discos Duros PRCTICO

La interfaz de usuario cin ms adelante (vase la Figura 4), es sencilla y fcil de concon o sin interaccin. La imagen incluye trolar. Mondo Rescue el kernel, los mdulos, herramientas y gua al usuario paso a libreras, as como un conjunto completo paso a travs de la de informacin sobre el medio de copia configuracin para hacer de seguridad utilizado en cada caso. Se una copia de seguridad recomienda precaucin cuando el usuacorrecta. El primer men rio replica a un directorio de red local y ya muestra una pequea trata de restaurar en un equipo de una ventaja para los usuarios red diferente. El proyecto fallar porque en comparacin con los la configuracin de la red almacenada en dos primeros candidala ISO ya no es vlida. tos. Adems de las Una vez mondoarchive ha terminado opciones que ofrecen los su trabajo, el usuario puede comprobar sistemas Live, Mondo su integridad y la integridad de las copias Rescue soporta CDs, de seguridad arrancando desde el soporte DVDs y unidades de de rescate y tecleando cinta como unidad de Figura 3: Adems de los CDs y DVDs, Mondo puede controlar destino (vase la Figura Lilo: compare unidades de cinta, otros discos duros, memorias USB y recur- 3). Una vez definido el en la lnea de comandos. El proceso de sos compartidos de red (Samba y NFS). objetivo, seleccionamos restauracin comienza tambin con el seda: fueron necesarios algunos retoques el mtodo de compresin y decidimos soporte de rescate. La herramienta ofrece con el gestor de arranque a travs de la qu contenidos a respaldar y qu reas tres modos a elegir: interactive (gua al shell de GRUB para iniciar los dos sisteexcluir. Por tanto, Mondo Rescue clona usuario a travs de los pasos), nuke (resmas operativos limpiamente. sistemas de produccin sin cargas innetauracin del sistema sin intervencin del cesarias, como los archivos de registro usuario) y expert (con opciones y herraMondo Rescue voluminosos. mientas adicionales). A diferencia de los dos primeros candidaEl modo experto proporciona las herraRodeos Menores tos de la prueba, no podemos simplemientas que los usuarios necesitan para mente insertar, arrancar y listo. PubliSe aplican reglas diferentes para los sistecambiar las particiones de disco o la geocado bajo GPL, Mondo Rescue necesita mas de arranque mltiple en comparametra, la migracin a un sistema RAID o instalarse en el PC cuyos discos deseacin con los Live CDs. A diferencia de la conversin a un nuevo sistema de mos replicar. En la mayora de las distriClonezilla y Ping, Mondo Rescue trabaja archivos. Mondo Rescue modifica autobuciones, la herramienta requiere los con particiones montadas. Si deseamos mticamente las entradas de /etc/fstab, paquetes afio, mkisofs, mindi-busybox y clonar un equipo con un sistema Linux y aunque se requiere algo de atencin mindi. Las instrucciones para la instalaun sistema operativo Windows, primero manual para los RAID [11]. Mondo Rescin en diferentes sistemas Linux estn debemos montar la particin de Wincue no tiene problemas en cuanto a la disponibles en la pgina de descargas. dows y agregar una entrada para ella en creacin de discos de mquinas virtuales. Los usuarios de Ubuntu tienen su propio /etc/fstab. Si es NTFS, Mondo Rescue Para ello, iniciamos el medio de arranque conjunto de instrucciones [10] para evitar pregunta si deseamos incluir la particin generado con Mondo y restauraramos el tener que hacer un arreglo frustrante. en la copia de seguridad. Si es as, la sistema en la mquina virtual. Hemos utilizado la versin 3.0.1 en nuesherramienta trata toda la particin NTFS El uso de Lilo no es el nico aspecto tro laboratorio. como un nico archivo de gran tamao anticuado de Mondo. Este candidato Debido a su naturaleza, Mondo Rescue (biggiefile). slo es compatible con los sistemas de Despus de definir ficheros disponibles bajo Linux, aunque el destino y el contetambin tiene en consideracin las partinido, Mondo Rescue ciones de Windows en los equipos de se pone a su tarea. arranque dual. Los usuarios tienen que No importa qu iniciar la herramienta con permisos de medio de almacenaadministrador en lnea de comandos, o miento vaya a mejor an, en runlevel 1. En runlevel 1, usarse, la herrano es necesario cerrar las bases de datos mienta siempre crea o similares de forma manual para evitar una imagen de terminar con una clon inservible ms arranque usando tarde. La opcin mondoarchive refleja los Mindi Linux, lo que discos locales y mondorestore los resayuda al usuario a Figura 4: Mindi Linux crea una imagen de arranque, requerida por taura. iniciar la restaura- Mondo.

WWW.LINUX- MAGAZINE.ES

Nmero 93

39

PRCTICO Clonacin de Discos Duros

tampoco es capaz de manejar las tablas de particin GUID.

Storix System Backup Administrator


Esta herramienta comercial de copias de seguridad y clonacin tiene un enfoque similar a Mondo Rescue en cuanto a la necesidad de instalar Storix en el sistema que deseamos clonar. El desarrollador ofrece tres versiones: Linux (32 y 64 bits), AIX y Solaris. Los precios para la edicin Workstation comienzan en 500$ para la versin de Linux y llegan hasta los 820$ para Solaris Sparc. A los usuarios se les pide pagar una prima para una licencia de cifrado (AES 256-bit). Esta cuesta aproximadamente entre 300 y 379 dolares. Para su uso en servidores, el desarrollador ofrece una edicin de red, y la edicin TSM est diseado para el administrador de almacenamiento Tivoli de IBM. El desarrollador calcula los precios de estas dos variantes en funcin de las necesidades especficas del cliente. Storix funciona con todos los tipos de sistemas de archivos pertinentes, LVMs y sistemas RAID. Todo esto es posible gracias a los diferentes tipos de clones: copia de seguridad del sistema, copia de seguridad de volmenes lgicos, copia de seguridad del sistema de archivos, copia de seguridad del directorio y copia de seguridad y copia de seguridad de particin. En nuestro laboratorio, hemos utilizado la versin de prueba gratuita de 30 das (7.2.4.4), que se encuentra en el apartado de descarga como un archivo tar.

Despus de iniciar el proceso de instalacin en la lnea de comandos, primero elegimos entre las versiones estacin de trabajo o de red. Despus de configurar Storix, se inicia un servicio en segundo plano: se puede acceder a este ya sea a travs de la interfaz web (http:// localhost:8080) o con la interfaz grfica X11 (iniciada a travs de sbadmin) (vase la Figura 5). Para clonar un sistema completo con uno o ms discos, accedemos a Configure, System Backup Disks y luego a Backup Job, seleccionando System Backup como tipo de copia de seguridad. La opcin <Run Backup Job del men Actions inicia el proceso. Si seleccionamos hacer un Filesystem Backup a un sistema de archivos en red o a una unidad de cinta en su lugar, tenemos que ir al men Utilities y crear un medio de arranque. Gracias al medio, la restauracin funciona de forma similar a Mondo Rescue. Storix System Backup Administrator puede utilizar los mismos rodeos que Mondo Rescue para convertir un clon en una mquina virtual. Los usuarios arrancan la mquina virtual con el medio de arranque de restauracin, acceden a la copia de seguridad y restauran el sistema dentro de la mquina virtual. Adems, la herramienta puede modificar los sistemas de archivos restaurados o cambiar el tipo o tamao de las particiones. El producto Storix tambin es compatible con los sistemas EFI y las tablas de particin GUID. Storix System Backup Administrator tiene un argumento de venta principal y deja claro que se dirige principalmente a empresas: gracias a la gestin de usuarios integrada, los administradores pueden asignar la tarea de monitorizar copias de seguridad peridicas a usuarios sin permisos.

nuestra mquina de laboratorio. Se pusieron de manifiesto diferencias, sobre todo en la forma en que se gestiona la restauracin de un sistema de arranque dual. De los Live CDs, Ping est a la cabeza por estrecho margen, aunque la herramienta nos recordaba demasiado a menudo a una aplicacin de Windows. Con las otras dos soluciones, se trata de evaluar dnde y para qu se necesita una herramienta de clonacin. Storix Backup Administrator System es complejo y tiene una curva de aprendizaje empinada. Esta solucin comercial est totalmente sobredimensionada para un uso de pequea oficina/domstico. La funcionalidad y los precios estn, evidentemente, alineados con el uso empresarial, e incluso all, la aplicacin slo tiene sentido si se necesitan las distintas opciones de conversin. Mondo Rescue es mi recomendacin para el usuario domstico, con una alta puntuacin en facilidad de uso, y es especialmente til si no podemos apagar el equipo de origen durante unas horas. Sin embargo, la herramienta funciona en sistemas de archivos activos: se mantiene un cierto elemento de desconfianza con todas las desventajas que los usuarios deben aceptar cuando hacen copias de seguridad de sistemas de archivos montados con archivos abiertos.

RECURSOS
[1] Clonezilla: http://www.clonezilla.org [2] Ping: http://ping.windowsdream.com [3] Mondo Rescue: http://www.mondorescue.org [4] Storix System Backup Administrator: http://www.storix.com [5] Clonezilla FAQ: http://drbl.org/faq/ [6] Tarjeta de referencia de Clonezilla: http://clonezilla.org/downloads/doc/ clonezilla-live-stable-doc.php [7] Partclone: http://partclone.org [8] Partimage: http://www.partimage.org [9] Norton Ghost: norton.com/ghost

Gemelos Idnticos
Los cuatro candidatos han demostrado ser tiles herramientas que clonan de manera fiable el disco de

http://www.

[10] Instalar Mondo en Ubuntu: https://help.ubuntu.com/community/ MondoMindi [11] Usar Mondo para migrar a RAID: http://www.mondorescue.org/docs/ mondorescue-howto.html#AEN951

Figura 5: La interfaz grfica de Storix parece un poco rancia. Todos los mens que figuran aqu estn tambin disponibles a travs de la interfaz web.

40

Nmero 93

WWW.LINUX- MAGAZINE.ES

Kotlin DESARROLLO

Kotlin mezcla Java con Groovy y Scala

Dialecto de la Isla
Kotlin, una pequea isla en el Golfo de Finlandia, es tambin el nombre de un nuevo lenguaje de programacin, con el objetivo de ser una alternativa moderna a Java. POR TIM SCHRMANN

krisckam123RF.com

os programadores que conozcan el IDE de Java IntelliJ [1] saben el tipo de trabajo que su creador, JetBrains, produce. Sin embargo, en el curso de su trabajo, los desarrolladores de IntelliJ tenan una lucha con algunas de las caractersticas de Java ms molestas. En su opinin, hubiera sido muy difcil mejorar a Java, as que simplemente han creado su propio lenguaje. La idea era mantener la compatibilidad y compilar, al menos, tan rpidamente como Java, removiendo viejas molestias como las irritantes excepciones de punteros a null (NPEs), ser ms flexibles y tener una sintaxis ms compacta que Java. El resultado fue Kotlin [2] (ver el recuadro El Nombre).

Mezclando Mquinas
Kotlin est diseado con el propsito general de un lenguaje de programacin para grandes proyectos de empresas. A JetBrains le gustara facilitar el desarrollo de IntelliJ utilizando Kotlin [3] (ver el recuadro Entorno de Desarrollo). Kotlin adopta mucha sintaxis de Java. Por lo tanto, est orientado a objetos, con tipos estticos y genricos. Los inventores aadieron tambin elementos

de lenguajes funcionales, como funciones de ordenacin. La derivacin de tipos automticos y mezclas ayudan a mantener la sintaxis corta y elegante. El cdigo fuente es convertido por un compilador a bytecode Java, que se convierte en cualquier Mquina Virtual de Java (JVM). Kotlin puede as utilizar libreras de Java y viceversa, Java puede integrar cdigo Kotlin. Esto implica que los desarrolladores pueden continuar utilizando frameworks de Java populares y potentes como Spring o Hibernate. El compilador tambin genera cdigo Javascript bajo demanda. El resultado es que se puede ejecutar en cualquier navegador web. En Febrero de 2012, Kotlin y la implementacin del compilador de referencia fueron lanzados bajo la licencia de Apache 2.0.

Hola Mundo
Este ejemplo de Hola Mundo
fun main(args : U Array<String>) { println(Hola U Mundo) }

entrada del programa y por lo tanto, es obligatorio en cualquier programa Kotlin. En contraste a Java, la funcin main no est explcitamente encapsulada en una clase. La funcin main tiene un parmetro simple llamado args del tipo Array<String> se explicar ms adelante este punto. La funcin println() devuelve texto, igual que en Java. Hay que destacar que los punto y coma al final de la lnea no son obligatorios en Kotlin. Para construir el ejemplo, necesitaremos instalar el Kit de Desarrollo Java (JDK) mediante el gestor de paquetes y a continuacin, obtener el compilador Kotlin desde GitHub [4]. Slo necesitaremos el archivo ZIP Compilador Kotlin M2, que contiene una instantnea del desarrollo actual. Este artculo se basa en la versin 0.1.2580. Despus de descomprimir el archivo (p.ej., en nuestro direc-

Listado 1: Definicin de Clase


01 class Direccion(nombre : String, apellidos : String) { 02 public var Nombre : String = nombre 03 public var Apellidos : String = apellidos 04 get() = Meyer 05 private val saludo = Hola $Nombre $Apellidos 06 07 fun saludar() { 08 println(saludo) 09 } 10 } 11 12 fun main(args : Array<String>) { 13 var paul = Direccion(Paul, Schmidt) 14 paul.saludar() 15 }

El Nombre
Una rama del software Checo de la compaa JetBrains est ubicado en la ciudad de San Petersburgo, Rusia. Su nuevo lenguaje de programacin se denomin as por la Isla de Kotlin, que est enlazada a San Petersburgo mediante una presa.

puede parecer no muy familiar a programadores de Java. La lnea fun define una nueva funcin llamada main en este caso. Como en otros muchos lenguajes, ste es el punto de

WWW.LINUX- MAGAZINE.ES

Nmero 93

41

DESARROLLO Kotlin

torio personal), necesitaremos hacer ejecutable el script kotlinc-jvm:


chmod +x U ./kotlinc/bin/kotlinc-jvm

grama en un archivo .jar compacto, haciendo ms fcil distribuir el programa:


./kotlinc/bin/kotlinc-jvm U -jar holamundo.jar -src U holamundo.kt -includeRuntime

prevenidos. Una variable declarada con var puede ser cambiada posteriormente. Una con val no. Las siguientes tres lneas nos llevaran a un error:
var a = Hans val b = Klaus b = a;

Para construir el cdigo fuente de holamundo.kt hay que introducir:


./kotlinc/bin/kotlinc-jvm U -output holamundo -src holamundo.kt

El compilador crea un subdirectorio llamado holamundo/ con un fichero .class conteniendo el bytecode (Figura 1). A continuacin, podemos pasar el fichero al estndar JVM:
java -cp U ./kotlinc/lib/U kotlin-runtime.jar: ./holamundo namespace

Desafortunadamente, en las pruebas de este artculo, la agrupacin no se pudo realizar. Slo conseguimos lanzar el programa apuntando al entorno de ejecucin local:
java -cp U ./kotlinc/lib/U kotlin-runtime.jar: ./hm.jar namespace

Un tipo de especificacin slo es necesario si el compilador no puede derivar el tipo por s mismo o si explcitamente queremos especificar el tipo para la salud de la legibilidad. El tipo se hace con dos puntos:
var nombre : String

El parmetro -cp para classpath integra la librera de ejecucin Kotlin (runtime.jar) y el directorio holamundo. Los gurs de Java descubrirn que el compilador de Kotlin empaqueta la funcin main en una clase de Java llamada namespace. Como alternativa, podemos combinar la librera de ejecucin de Kotlin y el pro-

Para descubrir otros parmetros del compilador, simplemente hay que utilizar la opcin -help. Si queremos producir Javascript, necesitaremos reemplazar la llamada al compilador kotlinc-jvm con kotlinc-js. En la pgina oficial de Kotlin, podemos dejarla como una aplicacin web (Figura 2).

adems de los valores de tipo String, Kotlin soporta todos los habituales, incluyendo Float (nmeros de punto flotante), Int (enteros) y Boolean. El control de estructuras como if se comporta como sus colegas en Java. Una excepcin es el patrn de coincidencias incorporado, que reemplaza ifs anidados o el estilo de switch en C:
val lenguaje = ES val saludo = when U (lenguaje) { EN -> Hello! ES -> Hola! else -> Lenguaje desconocido } println(saludo)

Bucles de Variables
Las declaraciones de variables en Kotlin pueden coger a los programadores des-

Figura 1: Kotlin crea bytecode de Java que puede ejecutarse por una JVM.

En este ejemplo, Kotlin prueba el contenido de lenguaje por el texto a la izquierda de ->. Con una coincidencia, proporciona el resultado de la derecha de ->. Kotlin simplifica tambin los bucles for en comparacin con Java. El siguiente ejemplo muestra los nmeros del 1 al 10:
for (contador in 1..10) println(contador)

El in debe siempre seguir al objeto que tiene el iterador, como una lista o un array. 1..10 lo proporciona en el ejemplo.

Funcional
Kotlin espera el valor de vuelta de una funcin directamente en frente de la llave abierta:
Figura 2: En la web de Kotlin, podemos ejecutar programas en Kotlin directamente en el navegador web.

fun sum(x : Int, y : Int) U : Int {

42

Nmero 93

WWW.LINUX- MAGAZINE.ES

Kotlin DESARROLLO

return x+y }

Hasta el momento, ha sido posible devolver varios valores de una vez en una tupla. (En Kotlin M3, los desarrolladores han anunciado mltiples declaraciones y mltiples valores de vuelta con clases de datos [5], as que la tupla ser removida en alguna de las siguientes versiones). Kotlin puede determinar el tipo del dato de vuelta, permitiendo a los programadores utilizar lo siguiente:
fun sum(x : Int, y : Int) U =x+y

llidos en la lnea 4. Si queremos leer la variable Apellidos, necesitaremos activar la funcin get(), que nos devolver el texto Meyer no importa el valor que la variable Apellidos tenga actualmente (Figura 4). En el Listado 1 get() utiliza otra vez anotaciones acortadas para sus funciones. Igualmente, podemos utilizar el mtodo set() para interceptar el acceso de escritura a la variable. A diferencia de otros lenguajes, aqu slo necesitamos los mtodos get y set. Kotlin siempre aplica automticamente el mtodo al

atributo directamente. Si no necesitamos los mtodos get y set, podemos declarar los atributos directamente en el constructor (Listado 2). El tercer atributo saludo es private (p.ej., no accesible desde fuera). Kotlin reemplaza automticamente $Nombre y $Apellidos con los contenidos de las variables con el mismo nombre. Debido a esta notacin con el dlar, las cadenas pueden ser construidas rpidamente. Para instanciar una clase, el desarrollador puede simplemente llamar al constructor:

Entorno Desarrollo: IntelliJ + Kotlin Plugin


JetBrains proporciona un plugin apropiado de Kotlin para su propio entorno de desarrollo, IntelliJ (Figura 3), asumiendo que tenemos la versin 11.1 o una ms actual del IDE. La Community Edition [1] es todo lo que necesitamos. Despus de descomprimir el archivo, hay que iniciar el script idea.sh en el subdirectorio am. En la salida de comandos, simplemente hay que dejar lo que viene por defecto y hacer clic en OK. Para instalar el plugin, hay que seleccionar File | Settings en la ventana principal. En la ventana que aparece a continuacin, hay que seleccionar Plugins en la columna izquierda y a continuacin Browse repositories. La lista contiene una entrada de Kotlin. Haciendo doble clic en el nombre se lanzar la instalacin. Despus de esperar un poco, el plugin Kotlin debera aparecer en la columna de en medio. Hay que cerrar la ventana de Configuracin, presionar OK y reiniciar el IDE presionando Restart. Para crear un nuevo proyecto de Kotlin, hay que seleccionar File | New Project | Create highlighted project from scratch y a continuacin, clic en Next, escribir el nombre del proyecto (p.ej., holamundo), dejar las otras opciones por defecto y hacer doble clic en Next. Si IntelliJ muestra una lista vaca, es que no ha sido capaz de encontrar el Entorno de Desarrollo de Java (el correcto). En este caso, podemos configurar manualmente la localizacin del JDK. Un clic en Finish completa la accin y despus de unos momentos, los ficheros para el nuevo proyecto aparecern en la estructura de rbol de directorios. A continuacin, clic en botn derecho en la carpeta src, seleccionar New | Kotlin File y asignar un nombre de fichero, como holamundo. En la parte superior del cdigo fuente, IntelliJ ofrece el configurar el mdulo como JVM Kotlin Module. Podemos hacer clic en el enlace para confirmar. El fichero holamundo.kt almacena el cdigo Kotlin por ejemplo, el cdigo del programa Hola Mundo. IntelliJ ofrece completacin automtica de cdigo. Para empezar el programa, clic en el fichero holamundo.kt en el explorador del proyecto y seleccionar Run namespace.

Adems permite pasar funciones a otras funciones o devolverlas como resultado de una funcin, as que soporta funciones de alto orden:
fun calcular(x : Int, y : U Int, hazalgo : (Int, Int) -> Int) : U Int { return hazalgo(x,y) }

Adems de los dos enteros, calcular() espera una funcin, que se refiere a hazalgo. hazalgo espera dos valores enteros (Int, Int) y muestra un valor entero: -> Int. La funcin calcular() llama a hazalgo con x e y, que finalmente muestra como resultado el valor calculado de la funcin. Podramos, por ejemplo, aadir dos nmeros:
calcular(2,3, {a, b -> a + b})

Las llaves contienen una funcin sin un nombre (p.ej., una funcin lambda o annima). En el ejemplo mostrado aqu, la funcin espera dos nmeros, a y b y a continuacin, devuelve la suma de los dos.

Clsico
El Listado 1 muestra una definicin de clase con un constructor que espera dos parmetros (nombre y apellidos), que se almacenan en variables pblicas llamadas Nombre y Apellidos. Los programadores pueden interceptar el acceso a un atributo ubicando un mtodo llamado get al correspondiente atributo. Este paso se hace para los ape-

Figura 3: La salida del programa Kotlin aparece en la seccin inferior en el IDE IntelliJ.

WWW.LINUX- MAGAZINE.ES

Nmero 93

43

DESARROLLO DESARROL Kotlin

Figura 4: El mtodo get() en el Listado 1 fuerza al programa a mostrar siempre Meyer como el apellido.

val paul = U Direccion(Paul, Schmidt)

La tpica palabra clave new, que es utilizada por otros lenguajes, no es necesaria en Kotlin.

Planificacin Familiar
Las clases son siempre final en Kotlin, lo que significa que no pueden ser derivadas. Sin embargo, para permitir la herencia, los programadores deben explcitamente utilizar open en ambas clases envueltas y en cualquier mtodo que sobrescriba una herencia (ver Listado 3 para un ejemplo). La clase base Punto y su mtodo dibujar() pueden sobrescribir aqu. La clase Rectangulo hace uso de esto. Hereda desde Punto y sobrescribe el mtodo dibujar(), como se puede ver con la palabra clave override. Los desarrolladores pueden acceder a los mtodos y atributos de la clase base

utilizando la palabra clave super. El constructor de la clase base es invocado despus de los dos puntos, pero antes de la llave abierta. Aunque ms clases podran derivarse desde Rectangulo en el Listado 3, su mtodo dibujar podra no ser sobrescrito otra vez debido a su anterior final. Etiquetar las clases como final por defecto es una de las decisiones ms controvertidas de los desarrolladores de Kotlin.

mtodo cantar(). Pajaro ya implementa esto para la clase Urraca. Cualquiera es la clase base desde donde el resto de clases son derivadas. Por lo tanto, comer espera un objeto arbitrario como parmetro. En el Listado 5, la clase Garaje utiliza el objeto que implementa el trait Coche. La variable Contenido puede ser un Volkswagen u otra marca. Gracias a la delegacin de la primera clase, Garaje puede ser expresado de un modo ms compacto, como Garaje2. La palabra clave by le dice al compilador que la funcionalidad da el trait Coche debera ser delegado a un objeto pasado como parmetro o como contenido. Esto tiene la ventaja de que el programador no necesita almacenar el objeto explcitamente en un atributo y puede llamar a los mtodos de trait directamente.

Supercarga
A diferencia de Java, Kotlin permite sobrecargar a los operadores (Listado 6). Cuando sumamos los dos objetos a + b, Kotlin llama automticamente al mtodo a.plus(b). Las declaraciones de objetos hacen fcil implementar el patrn de diseo sencillo:
object Solo{ public var color U : String = rojo fun color(f : String) U { color = f } }

Traits
Las interfaces de Java son reemplazadas por traits (rasgos). Pueden contener tanto mtodos de firmas como mtodos de implementaciones. A diferencia de las clases, los traits no tienen atributos y por lo tanto, no tienen estados (Listado 4). Aqu, Pajaro es un trait que est implementado por Urraca. La clase Urraca necesita implementar el mtodo definido por Pajaro. Una excepcin a esto es el

Este paso crea inmediatamente el objeto Solo:

Listado 4: Ejemplo de Traits


01 trait Pajaro { 02 fun volar(velocidad: Int) 03 fun comer(comida: Any) 04 05 fun cantar() { 06 println(Pio pio); 07 } 08 } 09 10 class Urraca : Pajaro { 11 override fun volar(velocidad: Int) { 12 //... 13 } 14 override fun comer(comida: Any) { 15 //... 16 } 17 }

Listado 2: Declaraciones en el Constructor


01 class Direccion(var Nombre : String, var Apellidos : String) { 02 private val saludo = Hola $Nombre $Apellidos 03 [...]

Listado 3: Herencia en Kotlin


01 open class Punto(var x : Int, var y : Int) { 02 open fun dibujar() {println($x,$y)} 03 } 04 05 open class Rectangulo(x : Int, y : Int, var longitud : Int) : Punkt(x,y) { 06 final override fun dibujar() { 07 super.dibujar() 08 println($longitud) 09 } 10 }

44

Nmero 93

WWW.LINUX- MAGAZINE.ES

Kotlin DESARROLLO

println(Solo.color) Solo.coloreando(verde)

var a = Array<Int> U (3, {i -> i + 1}) println(a[0])

fun List<String>.U hazalgo() { ... }

No podemos asignar una variable al objeto, tenemos que trabajar directamente con l.

Genricos
Si necesitamos una lista de nmeros y una lista de cadenas de texto, tenemos que crear dos clases diferentes. Por este motivo fueron inventados los tipos genricos. Java los soporta y han estado en C++ incluso antes, como plantillas. Kotlin ofrece tambin genricos (Listado 7). La clase papelera simplemente recuerda el objeto que le pasan. T es un marcador de posicin para lo que es todava un tipo desconocido. La parte inferior del Listado 7 crea un nuevo papelera que slo acepta objetos String. El tipo de la variable es papelera <String>. Kotlin ya tiene las clases genricas List y Array. Las siguientes lneas crean un array con tres nmeros 1, 2 y 3 y muestra el primer elemento:

Alternativamente, los programadores de Kotlin pueden utilizar la funcin array(),


var b = array(1, 2, 3)

que crea automticamente un objeto Array.

Agitado, No Revuelto
Una clase puede definir dos caractersticas retro activamente. En el Listado 8, un mtodo acelerar() es aadido a la clase Coche. ste accede a los atributos y funciones de la clase Coche por la palabra clave this. Los desarrolladores de Kotlin se refieren a este concepto como funciones de extensiones. La habilidad para cambiar de funciones es particularmente til para genricos, como las listas, que necesitan hacer algo especial:

En Java, List <String> y List<Object> son clases completamente diferentes. Los objetos en List<String> no pueden ser conectados fcilmente a List <Object>, aunque Object es la base de la clase String. En Java, el remedio son comodines crpticos, donde Kotlin simplemente utiliza una palabra clave: out. El Listado 9 muestra un ejemplo. La funcin contar espera a un Contenedor <String>, que a continuacin almacena en la variable chucherias aunque actualmente es ms del tipo Contenedor<Any>. Esto slo funciona en esta direccin, objetos que sueltan fuera del Contenedor que slo pueden ser enviados a otro objeto. Para el camino contrario, necesitamos la palabra clave in en vez de out. En cualquier evento, los objetos necesitan ser convertidos al otro tipo. En el Listado 9, Contenedor<Any> acepta objetos arbitrarios (Any). Los desarrolladores de Kotlin se refieren a este concepto como declaracin variante de sitios.

Listado 5: Delegacin Primera Clase


01 trait Coche { 02 fun conducir() : String 03 } 04 05 class VW : Coche { 06 override fun conducir() = Brumm 07 } 08 09 class Garaje(contenido : Coche) { 10 var Contenido = content; 11 12 fun abrir() : String { 13 return Contenido.conducir() 14 } 15 } 16 17 class Garaje2( contenido : Coche) : Coche by content { 18 fun abrir() : String { 19 return conducir() 20 } 21 }

Listado 7: Genricos
01 class papelera<T> (lanzar : T) { 02 var Contenido = lanzar 03 } 04 05 [...] 06 Var basura = papelera<String>(Factura) 07 println(basura.content)

Listado 8: Funciones de Extensiones


01 class Coche { 02 public var Velocidad : Int = 0 03 } 04 05 fun Coche.acelerar(velocidad : Int) { 06 this.Velocidad = velocidad 07 } 08 09 [...] 10 var vw = Coche() 11 vw.acelerar(10) 12 println(vw.Velocidad)

Listado 6: Sobrecargando el Operador +


01 class Velocidad(var velocidad : Int) { 02 fun plus(otro : Velocidad) : Int { 03 velocidad += otro.velocidad 04 return velocidad 05 } 06 } 07 08 [...] 09 var a = Velocidad(12) 10 var b = Velocidad(18) 11 println( a + b )

Listado 9: Declaracin Variantes del Sitio


01 class Contenedor<out T>(var elem : T) { 02 [...] 03 } 04 05 fun contar(palabras : Contenedor<String>) { 06 val chucerias : Contenedor<Any> = palabras 07 [...] 08 }

WWW.LINUX- MAGAZINE.ES

Nmero 93

45

DESARROLLO Kotlin

Null
Las variables en Java pueden contener el valor null y as, no apuntan a ningn objeto. Si el programa intenta acceder al objeto no existente, derivar en una excepcin de puntero nulo (NPE). Kotlin evita esto al no permitir asignar null a una variable. Si queremos intentarlo, debemos mostrar explcitamente nuestro intento indicando un signo de exclamacin en el tipo, como esto:
var b : String? = U hola b = null

car la llamada con un signo de interrogacin aunque se corre el riesgo de un error de tiempo de ejecucin (Figura 5):
b?.length()

Construccin del Sitio


Kotlin se libra de varias de las propiedades desagradables de Java y aade varios conceptos interesantes de Groovy y Scala, aunque si trabajamos con el lenguaje, nos daremos cuenta de que nos estaremos aventurando en la construccin de un sitio muy grande. No hay sintaxis estable a la vista y los inventores de Kotlin no son contrarios a eliminar elementos de lenguaje. El mejor ejemplo de esto es la tupla [6]. Muchas otras caractersticas estn planeadas y sern gradualmente implementadas, como las anotaciones [7] (Figura 6). Algunos de los intentos iniciales han hecho uso de Kotlin como lenguaje de scripting y por lo tanto, como reemplazo de Bash [8]. Cualquier usuario de Kotlin puede comentar los elementos del lenguaje directamente en la documentacin. Los desarrolladores leen los comentarios y contestan a las preguntas con extrema rapidez. Sugerencias constructivas son siempre bienvenidas. Gracias a los desarrolladores de muchos aos con experiencia prctica en Java, hay altas probabilidades de que Kotlin no sea un fiasco. Este nuevo lenguaje puede ser una interesante alternativa para aquellos que encuentren a Java algo anticuado y a Scala demasiado complicado.

Teniendo en cuenta este comportamiento en mente, podemos importar cdigo Java existente y llamarlo directamente en el cdigo Kotlin:
import java.util.* [...] var listajava = U ArrayList<String>() [...] for (elem in listajava) U println(elem)

Incluso si el programador permite una asignacin a null, el compilador intercepta varias de las posibles situaciones en las que un puntero a null podra ser asignado. De nuevo, el cdigo debe siempre especifi-

Incluso para los bucles de trabajo en las colecciones de Java.

RECURSOS
Figura 5: El compilador es muy estricto sobre asignaciones null.
[1] IntelliJ: http://www.jetbrains.com/idea/ [2] Kotlin: http://confluence.jetbrains.net/ display/Kotlin [3] Razones que llevaron al desarrollo de Kotlin: http://blog.jetbrains.com/kotlin/ 2011/08/why-jetbrains-needs-kotlin/ [4] Compilador Kotlin en GitHub: https://github.com/JetBrains/kotlin/ downloads [5] Mltiples declaraciones y mltiples valores de vuelta con clases de datos: http://blog.jetbrains.com/kotlin/ 2012/09/ how-do-you-traverse-a-map/ [6] Tuplas en Kotlin: http://confluence.jetbrains.net/ display/Kotlin/Tuples [7] Anotaciones en Kotlin: http://confluence.jetbrains.net/ display/Kotlin/Annotations

Figura 6: Precaucin, sitio en construccin. Las anotaciones, entre otras, son unas de las caractersticas de Kotlin que todava estn bajo desarrollo.

[8] Kotlin como lenguaje de scripts: https://github.com/andrewoma/ kotlin-script

46

Nmero 93

WWW.LINUX- MAGAZINE.ES

Perl: Clonezilla DESARROLLO

Clonezilla y scripts Perl para copias de seguridad

Copias de Seguridad Personalizadas


Clonezilla consigue restaurar y realizar copias de seguridad simplemente con unas cuantas combinaciones de teclas. Una solucin para casa que reduce el tiempo y el esfuerzo en el proceso de realizar copias a un CD, en el que previamente habremos copiado un script en Perl. POR MIKE SCHILLI

engo que admitir que todava hay un ordenador con Windows 7 en mi casa. Mi esposa lo utiliza para hacer nuestra declaracin de impuestos y trastear con imgenes digitales utilizando Photoshop. El programa de copias de seguridad que trae Windows 7 fue la eleccin obvia para proteger el PC. Pero cuando en cierto momento esta herramienta rechaz restaurar la copia de datos, con un montn de mensajes de errores crpticos y no permitiendo solucionarlo con la habitual cortina de hierro del cdigo cerrado, la decisin final fue utilizar una herramienta en Linux. Clonezilla [2] proporciona un CD auto arrancable (adems de su versin en USB) que inicia una distribucin basada en Debian en cualquier PC (Figura 1). A continuacin, el usuario puede navegar en una docena de mens (Figura 2) y elegir entre restaurar o realizar una copia de seguridad de las particiones de disco automticamente identificadas. Clonezilla puede realizar copias tanto en un disco duro conectado por USB o a travs de la red a otro ordenador con ssh.

Odio el Trabajo Manual


En mi opinin, la parte ms molesta de realizar frecuentemente copias de seguridad es el montono trabajo manual. Afortunadamente, Clonezilla nos permite grabar nuestros scripts propios en un CD [3]. El script controla eventos automticamente despus de iniciar el CD. En vez de reinventar las funciones de copia y restauracin, podemos seleccionar algunas de la extensa coleccin en la caja de herramientas de Clonezilla.

En los Estudios Perlmeister, mi CD de copias de seguridad hecho a mano utiliza ssh para contactar con el servidor de copias en la red local, antes de transferir el contenido comprimido de las particiones en el primer disco que encuentre en el PC. Clonezilla es tan inteligente que no slo guarda los datos del respectivo sistema de archivos, adems guarda la tabla de particiones entera, haciendo la restauracin de las copias mucho ms fcil en el futuro.

Claro y Directo
La suite Clonezilla se basa en el programa disponible libremente partimage [4] para acceder a los sistemas de ficheros ms populares (p.ej., ext[2-4], NTFS, FAT, HFS+, ReiserFS) y slo guarda las reas que estn actualmente en uso. Esto es ms eficiente que una copia bit a bit con dd para discos duros parcialmente en uso. Debido a que algunos sistemas se basan en antiguos sistemas de ficheros para guardar los datos y por lo tanto, no soportan ficheros grandes, Clonezilla divide los ficheros de las copias de seguridad en bloques, comprimidos opcionalmente si es necesario (Figura 3). Para evitar tener que investigar todos los parmetros en los scripts destacados de Clonezilla (Figura 4), podemos utilizar un men para la configuracin, que en su momento ejecutar llamadas a funciones internas parametrizadas. Una vez que conozcamos los di-

WWW.LINUX- MAGAZINE.ES

Nmero 93

47

DESARROLLO Perl: Clonezilla

que est escribiendo datos en el rbol del sistema de ficheros local, pero en realidad, sshfs direcciona los datos de forma transparente al servidor de copias de seguridad.

Caracoles de Carreras
Con los discos duros de hoy en da con una escala de terabytes, las copias de seguridad pueden llevar horas y Figura 1: Despus de insertar el CD Clonezilla aparece el suelen bloquear el PC mientras se realizan. Si el disco a men de arranque. ser copiado tiene varias partilogos para crear copias de seguridad, ciones, el administrador puede intebastar con grabar el comando mostrado rrumpir el proceso. Cuando volvamos a en un CD y evitarnos el problema de ejecutar el script, no queremos empetener que volver a enfrentarnos a la junzar desde el principio otra vez, sino gla de dilogos en otra ocasin. continuar con la particin en la que se decidi parar.

Comandos Interesantes

Adicionalmente, no queremos tener que volver a introducir la contrasea o confirmar el tpico aviso del programa ssh cuando se conecta con un anfitrin desconocido. En vez de eso, lo ideal ser que el CD arranque el sistema despus de cargar, configure automticamente todo y comience despus de una simple confirmacin. He llegado a escuchar a aficionados de la programacin que les gusta poner tareas como estas juntas en un dialecto de consola. Pero para m, esto es normalmente como utilizar una barra de pan para clavar un clavo en la pared. El script Perl en el Listado 1 implementa estas caractersticas de forma relativamente clara. Debido a que utiliza varios mdulos CPAN, me pregunt a m mismo cul sera la mejor manera de grabar el script con sus mdulos en el CD de arranque.

Antes de que el comando ocs-sr (Figura 4) se ejecute directamente despus del arranque, necesitamos configurar algunas cosas adicionales. Si queremos hacer la copia en la red local con SSH a otra mquina, el script de arranque necesita primero recuperar la direccin IP del servidor DHCP e inicializar la conexin a la red local. Aunque Clonezilla ofrece el script ocs-live-netcfg para esto, utiliza los dilogos y no sabe nada sobre las preferencias del usuario. En vez de utilizar ese script, utilizaremos el comando
sudo dhclient eth0

Figura 2: Uno de los dilogos de usuario para configurar copias con Clonezilla.

en el script de arranque. En derivados de Debian, obtiene una direccin IP desde el servidor DHCP y establece el servidor de DNS, mscara de red y la puerta de enlace por defecto en concordancia con los datos de red que recibe. El comando ocs-sr para lanzar la copia siempre escribe los ficheros para ser almacenados en el directorio especificado del sistema local. En el ejemplo, esta carpeta es 2012-04-18-15-img. Si no estamos creando una copia en un disco duro USB activo en el directorio actual, sino a travs de un cable sobre la red, Clonezilla utilizar el programa sshfs, que usa SSH para conectar a mquinas remotas y activa directorios en el sistema de ficheros mediante FUSE. Por lo tanto, nuestro programa ocs-rs Clonezilla cree

Figura 3: Clonezilla almacena los datos en bloques comprimidos de 2GB adems de los datos de la tabla de particiones.

Figura 4: Despus de completar las selecciones en el men, Clonezilla propone una lnea de comandos que completar la copia de seguridad la prxima vez.

48

Nmero 93

WWW.LINUX- MAGAZINE.ES

Perl: Clonezilla DESARROLLO

Perl Esttico
Si un script Perl utiliza mdulos CPAN, no se ejecutarn en un primer intento en un entorno extrao como la distribucin Clonezilla. Para remediar esto, CPAN tiene un nmero de soluciones para agrupar conjuntos de mdulos y scripts (p.ej., PAR [5]). Recientemente, otro framework ha sido aadido, App:staticperl, que compila sorprendentemente bien los ejecutables Perl estticos compactos que son relativamente

independientes del entorno de ejecucin y que ya incluyen los mdulos CPAN que necesitamos. El Listado 2 muestra el comando de consola que crea el ejecutable run-me-clonezilla desde el script Perl run-me. La herramienta comprueba los mdulos CPAN que utilizamos para las dependencias y las aade. Falla a la hora de identificar los mdulos utilizados en el script de la aplicacin, dejando al desarrollador extraerlos y especificar

manualmente las opciones con el parmetro -M. Lo mismo ocurre con los mdulos cargados dinmicamente. Por ejemplo, Log::Log4perl carga un mdulo con la pantalla adicional si su configuracin de primera ejecucin lo especifica. App:staticperl no puede esperar llegar a esto mediante anlisis puramente estticos, por lo tanto, requiere soporte manual. Staticperl tambin requiere que el usuario instale cualquier mdulo utili-

Listado 1: run-me
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 040 041 042 043 044 # ! use use qw( use use use qw( /usr/local/bin/perl -w strict; File::Temp tempfile ); File::Basename; Log::Log4perl qw(:easy); Sysadm::Install :all ); 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 ############################# DEBUG Writing private key; my $privkey_file = (tempfile())[1]; blurt privkey(), $privkey_file; DEBUG Writing known hosts; my $kh_file = (tempfile())[1]; blurt known_hosts(), $kh_file; my $rc = sysrun( sudo, sshfs, $user\@$ip:. /backup/clonezilla, $mnt_dir, -o, ssh_command=ssh -i . $privkey_file . -o BatchMode=yes . -o GlobalKnownHosts . File=$kh_file ) if( $rc ) { die sshfs failed, (backup host down?); } } ############################# sub backup_all { ############################# my $last_backup_path = ( reverse sort <$mnt_dir/[0-9]*>) [0]; my $continue_with my @drives = 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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 < /dev/sda[0-9]* >; if( defined $last_backup_path and ! -f $last_backup_path/DONE ) { $continue_with = ( sort { -M $a <=> -M $b } < $last_backup_path/*gz* > )[0]; $continue_with = basename $continue_with; $continue_with =~ s/\..*//; DEBUG Continue: $continue_with; } my $not_yet; if( defined $continue_with ) { $not_yet = 1; } my ( $sec, $min, $hour, $mday, $mon, $year ) = localtime( time ); my $date = sprintf %04d-%02d-%02d-. %02d-%02d-%02d, $year + 1900, $mon+1, $mday, $hour, $min, $sec; my @parts = (); for my $part ( sort @drives ) {

Log::Log4perl->easy_init( $DEBUG); my $ip = 192.168.0.111; my $user = mschilli; my $mnt_dir = /home/partimag; if( ! -d $mnt_dir ) { mkdir $mnt_dir; } network(); mount(); backup_all(); unmount(); 1; ############################# sub network { ############################# sysrun sudo, dhclient, eth0; } ############################# sub unmount { ############################# sysrun fusermount, -u, $mnt_dir; } ############################# sub mount {

WWW.LINUX- MAGAZINE.ES

Nmero 93

49

DESARROLLO DESARROL Perl: Clonezilla

zado despus en el repositorio local de Staticperl con el comando


staticperl instcpan [modulename]

para abrir la consola CPAN.

El CD como Clave
Para dar soporte a la identificacin sin password en el servidor de copias de seguridad, el script contiene una clave privada, creada sin contrasea. El comando

dos, ssh pregunta si es el anfitrin correcto y aade una firma al fichero ~/.ssh/known_hosts. En las lneas 170 a 172, la entrada aparece en documento en el script Perl, removiendo as la necesidad de confirmar la conexin automtica posteriormente en el proceso.

GlobalKnownHostsFile especifica el fichero que contiene las firmas de mquinas conocidas. Antes de eso, el script almacena el valor de retorno de la funcin hosts() (lnea 168) en este fichero temporal.

Interrumpe cuando quieras


Para parar una ejecucin si fuera necesario, la funcin backup_all en la lnea 79 busca por el ltimo directorio de copia de seguridad completado. El script crea carpetas con la correspondiente marca de tiempo en cada caso, por lo que un orden inverso nos dar una lista con esos primeros elementos en la copia ms reciente. La lnea 94 busca en este directorio por un fichero llamado DONE, que crea el script tan pronto como todas las copias de seguridad de las particiones estn completadas. Si se pierde un fichero, la copia es interrumpida. En este caso, la lnea 99 encuentra una particin incompleta y el bucle de las lneas 130 a 145 continua la copia desde all.

Lanzar en Perl

La Lnea 13 establece la direccin IP del servidor de copias. Puede que sea necesario modificar esto para el entorno en local donde pruebes el script, adems del ID de usuario de la lnea 14. La funcin ssh-keygen -t rsa network() inicia el arranque del ordenador con el CD hecho en casa en la red. lo gener en un fichero llamado id_rsa. La funcin mount() definida en las Las lneas de la 178 a la 182 contienen lneas 44 a 76 llama a sshfs para conectar un documento con todas las lneas de la el directorio local /home/partimag con el clave privada (quitadas del Listado 1 por directorio /backup/clonezilla en el servirazones de seguridad). dor. La clave pblica asociada (en La utilidad sysrun() usada para este id_rsa.pub) es copiada al fichero propsito viene del mdulo CPAN ~/.ssh/authorized_keys en el servidor Sysadm::Install y ejecuta el comando de de copias de seguridad con el UID de consola pasado en la llamada system() usuario. Cualquiera que tenga un CD despus de enviar un mensaje al framefsico (o la imagen ISO) posee por lo work Log4perl, activado en el script. El tanto la clave para el servidor, con lo que programa sshfs con la opcin ssh_comno necesita una contrasea. mand permite especificar parmetros Cuando nos conectamos por primera adicionales de SSH. La opcin -i define la vez al servidor desde la lnea de comanlocalizacin de la clave privada, almacenada en la lnea 49 en Listado 2: build.sh un fichero temporal. La opcin Batch1 staticperl mkapp run-me-clonezilla boot \ Mode=yes no hace 2 run-me -MFile::Basename -MFile::Temp \ preguntas al usuario, 3 -MFile::Glob -MSysadm::Install \ pero cancela si algo 4 -MLog::Log4perl \ no funciona autom5 -MLog::Log4perl::Appender::Screen ticamente. La opcin

Finalizando
Para cocer el script de Perl compilado estticamente en una imagen de Clonezilla como script de arranque, el usuario tiene que arrancar con la imagen ISO descargada en una mquina virtual, inicializar la red y seleccionar la opcin Command line prompt tan pronto como la distribucin Clonezilla ofrezca la opcin en el dilogo. A continuacin, deberamos cambiar el directorio de trabajo, copiar el ejecuta-

Listado 1: run-me ( Cont.)


133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 my $base = basename $part; if( $base eq $continue_with ) { $not_yet = 0; } next if $not_yet; push @parts, basename $part; } backup( $date, @parts ); } 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 ############################# sub backup { ############################# my( $date, @parts ) = @_; DEBUG Backing up @parts; sysrun qw( sudo /opt/drbl/sbin/ocs-sr -b -q2 -c -j2 -z1 -i 2000 -sc -p true savedisk ), $date-img, @parts; blurt , $mnt_dir/$date-img/DONE; } 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 ############################# sub known_hosts { ############################# return <<EOT XXX EOT } ############################# sub privkey { ############################# return <<EOT ----BEGIN RSA PRIVATE KEY---YYY ----END RSA PRIVATE KEY---EOT }

50

Nmero 93

WWW.LINUX- MAGAZINE.ES

Perl: Clonezilla DESARROLLO

Listado 3: prepare.sh
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 sudo fdisk /dev/sda <<EOT n p 1 +500MB n p 2 +500MB w EOT sudo mkfs.ext3 /dev/sda1 sudo mkfs.ext3 /dev/sda2 sudo umount /tmp sudo mount /dev/sda2 /tmp sudo mount /dev/sda1 /home/ partimag

Preparando Mquinas Virtuales


Al llamar ocs-iso en una mquina virtual para pruebas, se excedieron los lmites del sistema de ficheros que estaba utilizando debido a que ni el directorio /home/partimag ni el espacio de trabajo temporal /tmp tenan suficiente espacio. Sin embargo, si ejecutamos los pasos en el script de consola prepare.sh (Listado 3) despus de arrancar la mquina virtual con la imagen ISO del sitio web de Clonezilla [2], podremos crear dos particiones de disco de 500MB cada una, arreglando el problema. El comando ocs-iso crear entonces la imagen ISO deseada con el script de arranque sin quejas. El resultado ser una imagen ISO con Clonezilla y un script Perl para el arranque (Figura 5). Utilizando una mquina virtual para probar la imagen ISO completa reducir los CD en blanco desperdiciados durante las pruebas. Si el entorno virtual no contiene todava particiones de disco para crear copias, pueden crearse rpidamente con fdisk y mkfs.ext como configuracin de prueba.

ble generado de Perl y ejecutar ocs-iso de esta forma:


CD /home/partimag sudo scp user@xxx:U /tmp/run-me-clonezilla . sudo cp run-me-clonezilla U custom-ocs sudo /opt/drbl/sbin/ocs-iso\ \-g en_US.UTF-8 U -k NONE -s -m ./custom-ocs
Figura 5: La imagen ISO con el script de copias de seguridad preparado.

Este procedimiento inicialmente no funciona en VirtualBox VM debido a la falta de memoria. El cuadro Preparando Mquinas Virtuales explica los pasos necesarios para preparar el entorno para que todo funcione.

Si la prueba de VM es correcta, slo quedar una cosa grabar la imagen ISO en un CD. El comando:
sudo cdrecord -v speed=4 U dev=/dev/cdrom U clonezilla-img.iso

RECURSOS
[1] Listados para este artculo: http://www.linux-magazine.com/ Resources/Article-Code [2] Clonezilla: http://clonezilla.org [3] Clonezilla live: http://clonezilla.org/customizedclonezilla-live.php [4] Partimage: http://www.partimage.org/Main_ Page [5] PAR Perl Archive Toolkit: http://search.cpan.org/~rschupp/ PAR-1.005/

hace esto en el CD introducido en la unidad lectora. La figura 6 muestra el CD de copia de seguridad en accin. Justo despus de arrancar el sistema, el script obtiene las particiones que necesita copiar y las guarda mediante ssh en el anfitrin configurado.

Figura 6: Probando en una MV. La imagen ISO con el script Perl crea una copia de seguridad de todas las particiones despus de que el usuario confirme.

WWW.LINUX- MAGAZINE.ES

Nmero 93

51

ADMINISTRACIN La Columna de Charly: ifdata

El da a da del administrador de sistemas: ifdata

Interfaz de Precisin
ifdata, del paquete Moreutils, es una herramienta adecuada para usarse en scripts y nos proporciona una precisin absoluta a la hora de obtener informacin del estado de las interfaces de red, sin la necesidad de extraer valores individuales. POR CHARLY KHNAST
uando necesito saber si existe una interfaz particular y, si es as, qu direccin IP y MTU tiene mi script se vuelve inevitablemente voluminoso. Tengo que bombardear la salida de ip addr show eth0, ifconfig o iwconfig con expresiones regulares, grep y cut hasta que logro extraer la informacin que necesito. Por el contrario, ifdata del paquete Moreutils [1] soluciona este problema de forma elegante. Puedo usar parmetros para controlar la salida de ifdata de modo que slo aparezcan los resultados adecuados, lo que la hace ideal para su posterior procesamiento en un script. Si quiero saber si existe una interfaz de red especfica, puedo utilizar:
ifdata -e eth0

Para obtener una salida ms adecuada para las personas podemos utilizar el parmetro -pe, que le indica a ifdata que muestre yes o no. Con un pequeo bucle, puedo rpidamente mostrar un resumen de las interfaces de red disponibles:
$ for i in `seq 0 3`;U do ifdata -pe ethU $i;done yes yes yes no

para componer una lista de opciones (Figura 1), aunque no se pueden obtener los resultados en forma de lista por separado para m est bien. Despus de todo, quin puede acordarse de todos estos parmetros? Tambin podemos averiguar ms sobre el trfico de red y las condiciones de error. Por ejemplo, puedo teclear
$ ifdata -soe eth0

para leer el contador de errores y luego volver a otras tareas con la certeza de que el contador marca 0.

En este ejemplo, la mquina de pruebas posea cuatro interfaces de red pero slo estaba usando tres.

RECURSOS
[1] Moreutils: http://joeyh.name/code/ moreutils/

El comando no muestra ninguna salida, sino que devuelve como valor si existe o no la interfaz. En un script, si quiero tomar una decisin, este comportamiento es perfecto:
if $(ifdata -e eth0); then echo Interface found; [...] else echo Interface not found; [...] fi

Trabajo de Campo
Ifdata muestra una lista separada por espacios de los datos que ms frecuentemente se utilizan direccin IP, mscara de red, direccin de broadcast y MTU si se utiliza el parmetro -p:
$ ifdata -p eth0 10.0.0.106 255.255.255.U 0 10.0.0.255 1500

Podra tambin obtener esta informacin de forma individual especificando los siguientes parmetros: -pa, -pn, -pb y -pm. Si quisiera saber si la interfaz se encuentra en modo promiscuo, podra teclear
$ ifdata -pf eth0
Figura 1: Ifdata obteniendo las opciones establecidas en la interfaz de red.

EL AUTOR
Charly Khnast es Gerente de Sistemas Unix en el centro de datos de Moers, Alemania cerca del conocido Rhin. Entre sus labores se incluye la seguridad del cortafuegos, la disponibilidad y cuidado de la DMZ (zona desmilitarizada). Divide su tiempo libre entre el calor, la humedad y oriente donde se divierte cocinando, visitando acuarios y aprendiendo japons respectivamente.

52

Nmero 93

WWW.LINUX-MAGAZINE.ES

Inseguridades: Hosts Virtuales ADMINISTRACIN

Sirviendo sitios web a usuarios nicos desde un slo servidor

Hecho para servir


Cmo crear sitios web seguros con sus propios privilegios bajo un mismo servidor. POR KURT SEIFRIED
a mayora de las virtualizaciones ahora se centran en el servidor. Este enfoque tiene mucho sentido porque se puede usar cualquier aplicacin que queramos y prcticamente cualquier sistema operativo (Linux, BSD, Windows, etc.), y no hay que preocuparte por si las aplicaciones van a comportarse apropiadamente. El problema para la virtualizacin de la mayora de los servicios es que los protocolos (SSH, FTP, etc.) estn totalmente condicionados y muy pocos estn diseados teniendo en cuenta especficamente un balance de carga y un failover. Compartir el estado entre servidores no es un problema trivial. Se trata de algo sencillo, pero tomamos medidas antes o despus de haber confirmado que el estado ha sido compartido?

Si tomamos medidas antes de confirmar que el estado ha sido compartido y el servidor falla, podemos terminar con un desajuste cuando el cliente trata de hablar con el otro servidor. Si compartimos el estado y confirmamos que ha sido compartido antes de tomar medidas, introducimos una latencia: cada accin que realiza un usuario necesitar ser admitida por todos los servidores antes de que pueda ser procesada. Afortunadamente, uno de los protocolos ms populares no slo es que no est condicionado, sino que tambin permita la virtualizacin (basada en los nombres de anfitrin). HTTP 1.1 especficamente permite no slo solicitar objetos, sino hacerlo de un anfitrin especfico. Se trata de algo viejo. Textualmente. HTTP 1.1 fue liberado y el soporte para l fue difundido a mediados de los 90, as que por qu nadie virtualiza sus sitios web a nivel de la aplicacin usando Apache HTTPD para servir a cientos o miles de sitios web desde un nico servidor? Bueno, se hizo. sta es exactamente la manera en la que los proveedores de alojamiento fueron capaces de conseguir bajar las tarifas de cientos de dlares al mes a un nico dgito. Sin embargo, la difusin necesaria para SSL (dado que la gente quiere vender cosas online, proteger el acceso de los usuarios, etc.) acab con todo esto. En el momento en que SSL y TLS tuvieron el problema del huevo y la gallina: hay que establecer una conexin primero, pero hasta que la conexin no est establecida no se puede especificar con qu anfitrin se quiere conectar. La solucin a corto plazo fue enlazar una direccin IP para cada sitio en el servidor y servir a cada sitio fuera de una nica direccin IP (que es

exactamente lo que pas antes con HTTP 1.1 para servir a mltiples sitios fuera de una nica caja usando HTTP).

Identificacin del Nombre del Sservidor


Identificacin del Nombre del Servidor Server Name Identification (SNI) es una extensin de SSL y TLS que permite al cliente solicitar un certificado especfico de un servidor (por ejemplo www.ejemplo.org). Si el servidor tiene este tipo de certificado (o quiz un certificado comodn como *.ejemplo.org), contesta con ello. Despus el cliente lo examina, y si lo acepta, establece una conexin cifrada con el servidor. El cliente puede despus solicitar el contenido como hara normalmente y conseguir el sitio especfico que quiere. SNI fue estupendo porque permita dejar de pagar a los proveedores 5 o 10 dlares extra al mes por cada direccin IP necesaria para albergar mltiples sitios web con cifrado SSL. Adems, cuando se combina SNI con un certificado comodn, se pueden crear sitios web seguros rpidamente con nombres arbitrarios bajo nuestro dominio, reduciendo la cantidad de tiempo y dinero que se necesita gastar tratando con las autoridades de certificacin. Para usar SNI, necesitarmos una copia reciente de Apache HTTPD (2.2.12 o siguientes) y de OpenSSL (0.9.8j o siguientes) [1]. En general, si el servidor est al da, esto no debera ser un problema (est bien implementado desde 2009-2010). La configuracin es sencilla: simplemente se aaden las directivas NameVirtualHost y SSLStrictSNIVHostCheck y luego se especifican uno o ms anfitriones virtuales:
Listen 443 NameVirtualHost *:443 SSLStrictSNIVHostCheck off <VirtualHost _default_:443> ServerName

WWW.LINUX- MAGAZINE.ES

Nmero 93

53

ADMINISTRACIN Inseguridades: Hosts Virtuales

default.ejemplo.org:443 ... las directivas van aqu </VirtualHost> <VirtualHost *:443> ServerName www.ejemplo.org:443 ... las directivas van aqu </VirtualHost>

tiproceso multiprocessing module) que permite configurar cada anfitrin virtual para que funcione como un UID/GID separado. Sin embargo no se actualiza activamente (la ltima actualizacin ha sido en Marzo de 2011) y no ha sido ampliamente probado.

Servidores Separados
Mi siguiente idea fue usar servidores separados creando una copia de Apache HTTPD para cada sitio funcionando como un usuario especfico en un puerto diferente (ej. 8000, 8001, 8002), luego configurando un nico maestro para escuchar los puertos 80/443, teniendo que manejar las conexiones SSL y luego, hacer proxy de la solicitud para un sitio del servidor web apropiado en el puerto 8000, o cualquiera que sea. El beneficio de esto es que no slo separamos las cuentas de los usuarios para cada sitio web, sino que tambin se pueden aplicar lmites de recursos a los usuarios. Crear un proceso maestro es sencillo porque Apache permite directrices proxy con una directriz VirtualHost[3].

Adems, queremos especificar SSLStrictSNIVHostCheck como off. Si se configura como on, cualquier cliente que no permita SNI ser incapaz de conectar bien. En general, esto no suele ser un problema porque cualquier navegador web suficientemente antiguo como para carecer de soporte para SNI est casi obsoleto en este sentido. Sin embargo, me he dado cuenta de que algunos dispositivos y servicios de balance de carga y comprobadores de la salud de la web no soportan SNI adecuadamente, as que para ser cautos, permito a los clientes que no soportan SNI y los dirijo a un sitio web predeterminado que notifica a la gente que deben actualizar su cliente web. Esto tambin hace ms fcil comprobar los archivos de registro para clientes que no permiten SNI.

suPHP
En algunos casos crear un servidor separado para cada usuario, especialmente para sitios de poco trfico, ser un recurso intensivo. Otra opcin para dividir sitios basados en PHP para que puedan funcionar como usuarios separados es suPHP[4]. suPHP es muy sencillo de instalar y configurar (simplemente se instala el paquete). Una caracterstica realmente agradable es que se puede activar o desactivar suPHP con un anfitrin virtual, as que si queremos una mezcla de sitios normales y sitios para usuario se puede hacer. Para conseguir que suPHP funcione correctamente probablemente necesitaremos configurar allow_file_group_writeable como true; de otra manera, cualquier archivo PHP que sea un grupo que se pueda escribir, dar un mensaje de error. suPHP ofrece tres opciones para ejecutar archivos PHP como un usuario y grupo especfico. La primera es como owner. En pocas palabras, el script PHP se ejecuta con los permisos de usuario y grupo con los que el archivo est configurado. Para prevenir que un archivo sea ejecutado como root, por ejemplo suPHP permite un min_uid y min_gid, de esta manera podemos asegurarnos de que los

Separar sitios web


Despus de un despliegue de SNI felizmente conseguido y volviendo atrs para tener todos los sitios web servidos en un nico servidor web, nos damos cuenta que tenemos un problema. Apache HTTPD funciona con un usuario apache predeterminado. Esto significa que tenemos mltiples sitios (la mayora sitios WordPress y MediaWiki) funcionando todos como un mismo usuario. Todos tienen directorios cach que se pueden escribir y directorios de carga, as como el directorio de actualizacin de WordPress. El resultado final es que el compromiso de un sitio permitir potencialmente a un atacante modificar el cach o archivos subidos en otros sitios (significando que si un solo sitio queda comprometido ser un gran desastre). As que, cul es la mejor forma de separar todos estos sitios y tenerlos funcionando como un nico usuario de forma que no se puedan modificar entre ellos? Mi bsqueda me llev primero a Apache2-MPM-ITK [2], que es una bifurcacin del estndar MPM (mdulo de mul-

archivos no son ejecutados con demasiados privilegios. La segunda opcin es force y permite especificar el usuario y el grupo con el que los archivos PHP estn funcionando va configuracin de Apache. Para usar este mtodo, simplemente se crea la variable suPHP_UserGroup con una directriz Directory o Location. Con la tercera opcin, llamada paranoid (que est predeterminada), suPHP usa el usuario y el grupo al que pertenece el archivo PHP para ejecutar el archivo la comprueba adems y PHP configuracin Apache: si suPHP_UserGroup est establecido debe coincidir con la propiedad del archivo. Por supuesto una vez que tenemos todos los sitios web bloqueados para usuarios separados, tendremos tambin que dar acceso a los usuarios a esas cuentas, o usar Linux Access Control Lists (ACLs) para dar un acceso especfico a los usuarios a sus archivos. Para habilitar ACLs, hay que modificar /etc/ fstab para incluir un {{acl}} al principio de las opciones para el sistema de archivos en el que necesitamos ACLs. Una vez remontado podremos configurar usuarios y grupos especficos en archivos usando la orden setfacl:
setfacl -m u:someuser:rw U somefile.php

Para ms informacin, la pgina man para setfacl y getfacl contiene todos los detalles que necesitamos. Incluso si no estamos ejecutando sitios para mltiples usuarios suele ser una buena idea dividir los privilegios con los que cada sitio se est ejecutando. El mtodo ms efectivo es usar mltiples servidores, pero si se quieren evitar gastos adicionales, la sugerencia es usar suPHP.

RECURSOS
[1] Anfitriones virtuales basados en el nombre: http://wiki.apache.org/httpd/Name BasedSSLVHosts [2] Apache MPM-ITK: http://mpm-itk.sesse.net/ [3] Ejemplos de Apache VirtualHost: http://httpd.apache.org/docs/2.4/ vhosts/examples.html [4] suPHP: http://www.suphp.org/

54

Nmero 93

WWW.LINUX- MAGAZINE.ES

cmdfs ADMINISTRACIN

Creando sistemas de ficheros virtuales con cmdfs

wi

UN FILTRO AMISTOSO
m i, 1 23 rf. co m

Cmdfs crea sistemas de ficheros virtuales filtrados basndose en una estructura de directorios. Se puede incluso integrar con otros programas para convertir datos al vuelo. POR DENNIS SCHREIBER Y MARKUS FEILNER
s una tarea habitual: slo queremos que los usuarios vean ciertos archivos de un servidor de ficheros y el ordenador tambin tiene que cambiar estos archivos de forma dinmica durante el acceso. De la gran coleccin de ficheros del servidor, quizs queramos que la plantilla de la oficina pueda ver slo los documentos propios de la oficina y los diseadores grficos slo los ficheros grficos. Cmdfs es una herramienta til que crea sistemas de ficheros virtuales filtrando el contenido de un rbol de directorios existente. Con cmdfs, se puede crear un sistema de ficheros virtual que contenga slo las partes del sistema de ficheros original que queramos que se encuentren disponibles para los usuarios. Sin embargo, cmdfs puede hacer mucho ms, como la inclusin de filtros para transformar los ficheros segn nuestras especificaciones. Por ejemplo, podramos utilizar la opcin de filtrado de cmdfs para reducir la resolucin de grandes imgenes digitales o para convertir ficheros a un formato alternativo. El sistema de ficheros cmdfs [1] basado en FUSE [2] nos permite crear estos sistemas de ficheros filtrados sin la necesidad de que el administrador tenga que perder el tiempo creando, por medio de prueba y error, una estructura de directorios y enlaces compleja. Aunque la ltima versin de cmdfs data de 2010, el software funciona bien con tan slo unos pequeos inconvenientes.

Instalacin
A menos que el repositorio de nuestra distribucin de Linux nos ofrezca el paquete cmdfs, la instalacin nos requerir algo de trabajo con el archivo del cdigo fuente. (Cmdfs no se encuentra ni en los repositorios de Debian ni de Ubuntu). Para compilar el cdigo fuente, hace falta tener instalado el paquete de desarrollo de FUSE. Desafortunadamente, el script ./configure no nos notificar si falta algn paquete, pero con el siguiente comando
aptitude install U libfuse-dev

estructura de directorios de slo lectura, que el usuario o el administrador pueden modificar por medio de los parmetros en el momento del montaje.

Filtrado de Ficheros
Como ejemplo de cmdfs en funcionamiento, vamos a suponer que queremos crear un sistema de ficheros que muestre archivos de un directorio de origen pero que slo se muestren aquellos que sean de un tipo especfico y tambin vamos a querer que no se muestren los directorios vacos es decir, los directorios que no contengan archivos del tipo especificado. Si el tipo de fichero en el que estamos interesados es .jpg, tendramos que teclear:
cmdfs ~/Data ~/test U -o extension=jpg,U hide-empty-dirs

se instalar el paquete. Para obtener el cdigo fuente de cmdfs, habr que visitar el sitio de cmdfs. Una vez que el paquete de desarrollo de FUSE se haya instalado, el proceso familiar de descarga, descompresin, ./configure, make y make install se encargar de compilar e instalar cmdfs. Si se quiere ver qu programas se van a instalar por el gestor de paquetes, se puede utilizar checkinstall en vez de make install. Una vez terminada la instalacin, los usuarios que tienen que ser miembros del grupo fuse en algunas distribuciones pueden utilizar cmdfs para crear vistas alternativas de los ficheros y directorios usando una sintaxis similar a la del comando mount. Cmdfs proporciona una

La extensin del fichero no es sensible a la diferencia entre maysculas y minsculas. Si se quieren aadir varias extensiones de ficheros se puede aadir una lista entre comillas separada por puntos y comas, como la siguiente:
cmdfs ~/Data ~/test U -o extension=JPG;PNG,U hide-empty-dirs

hide-empty-dirs le indica a cmdfs que oculte los directorios que no cumplan las

WWW.LINUX- MAGAZINE.ES

Nmero 93

55

ADMINISTRACIN cmdfs

condiciones de filtrado. El filtrado basado slo en extensiones de ficheros tiene desventajas. Los ficheros sin extensin, o con una extensin mal escrita, no se incluirn y si se quieren ver todos los formatos de imgenes posibles, la lista de filtrado va a ser bastante larga. La vista resultante ser difcil de comprender y probablemente sea incompleta. En este escenario, el filtrado por tipo MIME ser una mejor opcin (Figura 1):

estndar y pueden escribir en la salida estndar, se pueden integrar sin problemas con cmdfs, por ejemplo, para convertir automticamente todos los ficheros JPG en PNG. (Un problema potencial con esta tcnica es que todos los ficheros PNG tendran como extencmdfs ~/Data ~/test U sin .jpg, lo que confun- Figura 1: El directorio de origen se encuentra a la izquierda y el -o mime-re=image/*,U dir a muchas aplica- directorio montado por cmdfs a la derecha. El usuario slo ve los hide-empty-dirs ciones). directorios con los ficheros que coincidan con el tipo MIME imaComo convert puede gen. Para identificar el tipo MIME correcto para realizar escalados simLa integracin de programas de esta forma un fichero especfico, se puede ejecutar el ples, as como muchas otras operaciones, requiere que tengamos cuidado y que prescomando file con la opcin --mime-type: es un compaero ideal para cmdfs. La temos atencin. siguiente lnea de comandos obtiene todos file --mime-type text.odt los ficheros de imgenes en el punto de Cach y Opciones text.odt: application U montaje con un alto y un ancho mximo Cmdfs usa una cach para acelerar alguvnd.oasis.opendocument.text de 800 pxeles: nos procesos. En sistemas Debian la cach Editando Ficheros al Vuelo se almacena en /usr/local/var/cache/ cmdfs ~/Data ~/test U cmdfs/ 0username. Sin embargo, se puede Cmdfs puede hacer mucho ms que sim-omime-re=image/*,U cambiar este comportamiento con el parplemente filtrar los datos. Podemos utilizar hide-empty-dirs,command=U metro -o cache-dir. Haciendo pruebas, es programas externos para modificar los convert --resize 800x800\^> - buena idea borrar con regularidad el conteficheros. Por ejemplo, podemos utilizar el nido del directorio de la cach. El borrado kit de herramientas ImageMagick para Los ficheros pequeos conservan su de los ficheros de la cach es importante, transformar imgenes digitales. ImageMatamao original, como se define por la ya que cmdfs slo crea los ficheros en su gick [3] es una coleccin bastante grande opcin convert >, que tenemos que directorio de cach si ha cambiado su de herramientas para la manipulacin de enmascarar en la entrada de cmdfs. Si todo fecha y tiempo de modificacin. ficheros grficos. Con la herramienta conesto funciona como se pretende, la converAunque se puede especificar una fecha vert que forma parte de la coleccin Imagesin a sepia sera tan fcil como: de expiracin en el momento del montaje Magick, podemos reducir las imgenes a usando -o cache-expiry, se ocasionarn una anchura mxima de 800 pxeles o concmdfs ~/Data ~/test U picos de carga en el sistema. Cuando vertirla a sepia. -omime-re=image/*,U cmdfs accede al punto de montaje, recrea Como las herramientas de ImageMahide-empty-dirs,command=U todos los ficheros en la cach una vez que gick aceptan entradas desde la entrada convert - -sepia -tone 90% - haya pasado el tiempo de expiracin. El parmetro -o ofrece otro par de opcioTabla 1: Parmetros de Cmdfs tiles aparte de la gestin de la cach. nes Parmetro Significado 1 muestra algunos de los ms Tabla La -o command= shell command Comando de la shell para conversiones al vuelo importantes.
-o extension=extension_1;extension_2 -o path-re=regular_expression -o mime-re=regular_expression -o [no]link-thru Extensin(es) por las que cmdfs debe filtrar Expresin regular para filtrar por directorios Expresin regular para filtrar por tipo MIME Los ficheros que no coinciden con los filtros se muestran como enlaces simblicos en el directorio de destino. Oculta [no oculta] los directorios correspondientes Monitoriza [no monitoriza] los cambios Directorio para la cach Restringe el tamao de la cach (tamao en Mbytes) Nmero mximo de entradas en el directorio de la cach Periodo de validez de la cach

Dinmico
Todos los ejemplos mostrados hasta ahora han sido estticos, lo que quiere decir que cmdfs ignorar los ficheros y directorios nuevos en el directorio origen. Sin embargo, si se aade el parmetro monitor a la opcin -o, se le puede indicar a cmdfs que monitorice el directorio de origen. Para ello, cmdfs se basa en el mecanismo inotify del kernel de Linux [4]. Cuando se descubre un cambio, se dispararn ciertas acciones automatizadas. Por ejemplo, se puede informar a los usua-

-o [no]hide-empty-dirs -o [no]monitor -o cache-dir=directory -o cache-size=MByte -o cache-entries=count -o cache-expiry=seconds

56

Nmero 93

WWW.LINUX- MAGAZINE.ES

cmdfs ADMINISTRACIN

Listado 1: Cmdfs en fstab


01 [...] 02 cmdfs#/Data /home/Benutzername/test fuse user,mime-re=image/*, hide-empty-dirs,command=convert\040-\040-sepia-tone\04090%\040- 0 0

rios de los cambios en los ficheros del directorio de origen o se puede ejecutar de forma automtica una herramienta OCR sobre los documentos escaneados. Si queremos utilizar este mecanismo en nuestros propios scripts, tendremos que cargar las herramientas inotify [5] del repositorio adecuado. Para su uso permanente, querremos integrarlo en el fichero /etc/fstab para montar de forma automtica el sistema de ficheros virtual. Por ejemplo, se pueden aadir las lneas del Listado 1 para el ejemplo de la conversin a sepia. Para asegurarnos de que la entrada se monta de forma correcta, habr que reemplazar cualquier espacio en blanco de la lnea de comandos por \040.

directorio y el punto de montaje los pusimos en el mismo directorio por ejemplo, ~/Documents y ~/test. En este caso, cmdfs pareca entrar en un bucle infinito en algunas distribuciones cuando intentamos entrar en el punto de montaje con, por ejemplo, ls -l. Contactamos con el desarrollador, pero sus esfuerzos por resolver el problema no arreglaron el fallo antes de que publicsemos este artculo. Una posible causa podra ser que el directorio de la cach tuviese permisos incorrectos (syslog informa de esta clase de errores).

yen ficheros de imgenes, con tamaos que llegan hasta los 35GB, de sitios tales como Digital Corpora [6].

RECURSOS
[1] Cmdfs: http://sourceforge.net/projects/ cmdfs/ [2] FUSE, Sistema de ficheros en el espacio del usuario: http://fuse.sourceforge.net [3] Imagemagick: www.imagemagick.org/ [4] Inotify: http://linux.die.net/man/7/inotify [5] Herramientas Inotify: https://github.com/rvoicilas/inotifytools/wiki/ [6] Datos de pruebas de Digitalcorpora: http://digitalcorpora.org

Ficheros de Prueba
Si no queremos probar con nuestros propios ficheros o no queremos crear ficheros de prueba, podemos descargar ficheros de ejemplo desde la web. Podemos encontrar una gran coleccin de datos de prueba, entre los que se inclu-

Problemas Extraos
En nuestro laboratorio, el nico problema que hemos encontrado fue cuando el

HARDWARE Arduino: RFID

Oleg Zabielin - 123RF.com

Control de acceso con RFID

PUNTO DE CONTROL
Este tipo de dispositivos y tecnologa la utilizamos habitualmente. Cuando subimos en el autobs, vamos al gimnasio o incluso para fichar en el trabajo. POR LUIS MARTN
na vez ms trataremos, en este pequeo artculo, uno de los temas ms importantes del panorama mundial actual. Con la gran cantidad de datos y de bienes de los que actualmente disponemos, la seguridad y la proteccin ocupan un puesto privilegiado en nuestra lista de prioridades. A todo esto se le une la situacin de crisis en los que nos encontramos inmersos. Por ello vamos a investigar en general las posibilidades que Arduino nos ofrece para proteger nuestra casa o nuestras pertenencias, y en particular, lo que nos puede ofrecer la tecnologa RFID. Gracias a estos dos conceptos vamos a montar un pequeo sistema de control

de acceso, de bajo coste, que nos permita tanto vigilar quines entran en nuestro hogar, como bloquear el paso a individuos no identificados.

Qu es RFID?
Para explicar qu es el RFID recurriremos a una de las principales fuentes de informacin de la red: Wikipedia [1]. En ella podemos encontrar una descripcin bsica de esta tecnologa y de cmo funciona. RFID (siglas de Radio Frequency IDentification, en espaol identificacin por radiofrecuencia) es un sistema de almacenamiento y recuperacin de datos remoto que usa dispositivos denomina-

dos etiquetas, tarjetas, transpondedores o tags RFID. El propsito fundamental de la tecnologa RFID es transmitir la identidad de un objeto (similar a un nmero de serie nico) mediante ondas de radio. Las etiquetas RFID (RFID Tag, en ingls) son unos dispositivos pequeos, similares a una pegatina, que pueden ser adheridas o incorporadas a un producto, un animal o una persona. Contienen antenas para permitirles recibir y responder a peticiones por radiofrecuencia desde un emisor-receptor RFID. De una manera ms sencilla, podemos describir las tarjetas RFID como las tarjetas de autobs que acercas a un lector para pagar sin necesidad que sta entre

Figura 1: Mdulos y dispositivos RFID.

Figura 2: Mdulo RFID para Arduino y Raspberry Pi.

Figura 3: Montaje del mdulo RFID para el ejemplo de control de acceso.

58

Nmero 93

WWW.LINUX- MAGAZINE.ES

Arduino: RFID HARDWARE

en contacto con l. En la figura 1 podemos ver distintos dispositivos que integran esta tecnologa. Todos ellos se encuentran disponibles en la pgina web de Cooking Hacks [2]. Podremos tener varios tipos de etiquetas RFID, distinguiendo entre las activas y las pasivas. Las activas requieren de una fuente de alimentacin, pila, batera o como lo queramos llamar, para su funcionamiento, pero las etiquetas pasivas, esas que todos hemos usado, e incluso muchos de nuestros animales llevan bajo la piel para su identificacin, no requieren de fuente de energa alguna, lo que les permite ser integradas dentro de libros, o

aparentes tarjetas de plstico inertes, pero llenas de tecnologa en su interior. Una de las desventajas de usar estas etiquetas pasivas es su radio de accin limitado, que va desde un par de centmetros a no ms de un metro dependiendo de nuestros dispositivos, pero eso no tiene que ser un gran problema. Son perfectas para una integracin domtica en nuestra vivienda.

RFID para Arduino y Raspberry Pi.


Para poder usar RFID necesitamos trabajar con un dispositivo que cuente con esta tecnologa. Para ello nosotros utili-

Figura 4: Colocacin del dispositivo de control de acceso.

zaremos el mdulo de 125 Khz de la figura 2. Est a la venta en la pgina de Cooking-Hacks [3].

Listado 1: Sistema de control de acceso.


001 // Variables estticas 002 int led = 13; 003 004 // Variables dinmicas 005 byte data_1 = 0x00; //Donde almacenaremos el ID de la tarjeta leida 006 byte data_2 = 0x00; 007 byte data_3 = 0x00; 008 byte data_4 = 0x00; 009 byte data_5 = 0x00; 010 int val = 0; // Buffer para los datos leidos por el puerto serie 011 012 void setup(){ 013 // Iniciamos el puerto serie a 19200 bps 014 Serial.begin(19200); 015 016 pinMode(led, OUTPUT); 017 delay(500); 018 019 // Configuramos el modo lectura automatica - Modo de decodificacion EM4102 - Sin contrasea 020 // Comando segun Datasheet: FF 01 09 87 01 03 02 00 10 20 30 40 37 021 Serial.print(0xFF,BYTE); //Header 022 Serial.print(0x01,BYTE); //Reservado 023 Serial.print(0x09,BYTE); //Longitud = Comando(1) + Datos(8) 024 Serial.print(0x87,BYTE); //Comando a enviar (0x87 selecciona modo lectura automatica) 025 Serial.print(0x01,BYTE); //Dato 1: Activamos lectura automatica 026 Serial.print(0x03,BYTE); //Dato 2: Mode - Parity decoded - Manchester RF/64 027 Serial.print(0x02,BYTE); //Dato 3: Numero total de bloques a leer (2) 028 Serial.print(0x00,BYTE); //Dato 4: Sin contrasea especificada 029 Serial.print(0x10,BYTE); //Dato 5: contrasea byte 1 030 Serial.print(0x20,BYTE); //Dato 6: contrasea byte 2 031 Serial.print(0x30,BYTE); //Dato 7: contrasea byte 3 032 Serial.print(0x40,BYTE); //Dato 8: contrasea byte 4 033 Serial.print(0x37,BYTE); //Checksum (Suma de verificacion) 034 035 delay(500); 036 Serial.flush(); 037 Serial.println(); 038 Serial.println(El modulo RFID esta en modo de lectura automatica); 039 } 040 041 void loop(){ 042 //Capturamos lo que hay en el puerto serie en la variable val 043 val = Serial.read(); 044 //Si no es 0xFF, volvemos a leer, esto nos indica el inicio de los datos procedentes de la etiqueta 045 while (val != 0xff){ 046 Serial.println(Esperando tarjeta); 047 val = Serial.read(); 048 delay(1000); 049 } 050 051 //Desechamos los tres primeros byte recibidos para llegar al byte que nos interesa, la ID del TAG 052 Serial.read(); // Reservado 053 Serial.read(); // Longitud 054 Serial.read(); // Comando (indica los datos de la etiqueta) 055 data_1 = Serial.read(); // Leemos el dato 1 056 data_2 = Serial.read(); // Leemos el dato 2 057 data_3 = Serial.read(); // Leemos el dato 3 058 data_4 = Serial.read(); // Leemos el dato 4 059 data_5 = Serial.read(); // Leemos el dato 5 060 Serial.read(); // Leemos checksum 061 062 063 064 065 066 067 068 069 070 // Parpadeo del led 13 for(int i = 0;i<4;i++){ digitalWrite(led,HIGH); delay(500); digitalWrite(led,LOW); delay(500); }

// Identificamos la etiqueta RFID 071 Serial.println(); 072 Serial.print(Tarjeta detectada - Codigo: ); 073 writeByte(data_1); 074 writeByte(data_2); 075 writeByte(data_3); 076 writeByte(data_4); 077 writeByte(data_5); 078 Serial.println(); 79 Serial.println(); 080 081 } 082 083 //Funcion para escribir un byte (hex) en ASCII 084 void writeByte(byte data){ 085 int aux_1 = 0; 086 int aux_2 = 0; 087 088 aux_1=data/16; 089 aux_2=data%16; 090 if (aux_1<10){ 091 Serial.print(aux_1 + 48,BYTE); 092 } 093 else{ 094 Serial.print(aux_1+55,BYTE); 095 } 096 if (aux_2<10){ 097 Serial.print(aux_2 + 48,BYTE); 098 } 099 else{ 100 Serial.print(aux_2 + 55,BYTE); 101 } 102 Serial.print( ); 103 }

WWW.LINUX- MAGAZINE.ES

Nmero 93

59

HARDWARE Arduino: RFID

Figura 5: Fritzing del mdulo RFID.

vemos un poco perdidos podemos recurrir a dos tutoriales del mdulo uno en ingls [5] y otro en espaol realizado por Arduteka [6]. Como ya hemos comentado otras veces, Arduteka es un portal de habla hispana centrado en la electrnica y la impresin 3D, que os puede servir de gran ayuda. Tenemos disponibles tambin para nuestros diseos, el componente en Fritzing. Tanto el mdulo en la figura 5, como la antena en la figura 6.

Configuracin
Figura 6: Fritzing de la antena RFID.

Figura 8: Captura del monitor serie con tarjetas de slo lectura.

Figura 7: Proceso de lectura de tarjeta RFID.

Aunque existen otras frecuencias RFID, las principales frecuencias que vamos a poder trabajar con nuestros Arduinos son a 125 kHz (baja frecuencia) y a 13.56 mHz (alta frecuencia). Para trabajar con este mdulo lo nico que tenemos que hacer es conectar el dispositivo directamente en el mdulo de comunicaciones para Arduino, que ya utilizamos en el artculo de Centro de control [4]. El montaje se puede ver en la figura 3. Tambin podemos conectar en el Arduino un par de LEDs en pines digitales para indicar de manera visual si la tarjeta es correcta o incorrecta. En la figura 4 podemos ver esto, y como colocamos el dispositivo final en la pared o cerca de la puerta de una habitacin, para desempear su labor de control de accesos. El problema de estos mdulos es su programacin, pero con unos sencillos ejemplos vamos a conocer de manera sencilla su funcionamiento bsico. Si nos

Para cargar cualquier cdigo, es necesario hacerlo con el mdulo desconectado, para que as no exista ninguna interferencia en la comunicacin. Otra opcin es retirar los dos jumpers del mdulo de comunicaciones de Arduino. Existen numerosos tipos de tarjetas, pero para el ejemplo del listado 1, que es el que nosotros vamos a estudiar, slo presentaremos las tarjetas de slo lectura. Existen otros tipos que podemos personalizar con un cdigo propio, que se llaman de lectura y escritura. Las etiquetas RFID de slo lectura que vamos a utilizar, se comunican mediante el protocolo EM4100, que recibe su nombre por el fabricante del chip que llevan en su interior, EM Microelectronics. Estas etiquetas albergan una capacidad de 64 bit, con un ID nico de 32 bit que viene pre-programado de fbrica. Para nosotros ser como el nombre de cada tarjeta, un cdigo nico asociado a cada una de ellas. Nos centraremos en leer ese parmetro para saber cul es. Siguiendo el manual del mdulo podemos configurarlo para distintas lecturas o escrituras. En nuestro cdigo la parte primera sirve para configurar el mdulo en modo lectura. Es algo ms complicado explicar esta parte, por lo que tendremos que hacer una pequea prueba de fe. En la parte del loop nos dedicaremos nicamente a monitorizar si una tarjeta se acerca al dispositivo y una vez detectada, leeremos su ID y realizaremos una

Figura 9: Captura del monitor serie con tarjetas de lectura/escritura.

accin en funcin de si es una persona conocida o es un extrao. En el caso de la figura 7 esto se indica con una indicacin visual. Cuando acercamos la tarjeta y la retiramos el dispositivo comprueba si es correcta, y si est autorizada, acepta el acceso de esa persona. Podramos mejorar este sistema aadiendo un RTC a nuestro Arduino, para poder controlar la hora y la fecha de acceso de cada persona, o cuando hay una incursin no deseada. Con el cdigo del tutorial, mostraremos el ID de la tarjeta por el monitor serie. Los resultados de este ejemplo se pueden observar en la figura 8. Tambin podemos observar en la figura 9 una captura de pantalla del monitor en el caso de lectura/escritura. Con esto y un poquito de imaginacin, podis saber en todo momento quin est en vuestra casa, o impedir que entren personas no deseadas.

RECURSOS
[1] [2] [3] [4] [5] [6] Qu es RFID?: http://es.wikipedia.org/wiki/RFID Cooking Hacks: http://www.cooking-hacks.com/ RFID 125 kHz Module for Arduino / Raspberry Pi: http://www.cooking-hacks.com/index.php/arduino-rfid-module-1.html Artculo Centro de control, de Luis Martn, Linux Magazine nmero 86, pg. 58. Tutorial del mdulo RFID: http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-rfid Review del producto por Arduteka: http://www.arduteka.com/2012/10/review-modulos-rfid-para-arduino/

60

Nmero 93

WWW.LINUX- MAGAZINE.ES

Raspberry Pi: Eben Upton HARDWARE

Eben Upton de Raspberry Pi

Cultivador de Frambuesas
Despus de seis aos de desarrollo, su fundador Eben Upton y los dems miembros de la Fundacin Raspberry Pi estn viendo por fin los resultados de sus esfuerzos. POR BRUCE BYFIELD
para comunicarse con Bluetooth en OS X y Windows. Upton ha realizado la primera adaptacin del kernel de Linux para el Pi. Sin embargo, aade, ha pasado tiempo desde que hice todo lo que podramos llamar ingeniera. Ahora paso la mayor parte de mi tiempo en reuniones y al telfono. En estas circunstancias, Upton est agradecido a Broadcom, donde trabaja ahora, porque han sido generosos con l, liberndolo de sus obligaciones. De lo contrario, me pasara todas las tardes y fines de semana con esto y no tendra tiempo para mi familia, apunta. La idea del Pi vino del Laboratorio de Informtica de la Universidad de Cambridge. Upton y sus colegas de la Fundacin Raspberry Pi [3], Rob Mullins, Jack Lang y Alan Mycroft, estaban preocupados por la cada del 50% en los candidatos cualificados para estudiar ciencias de la computacin en los primeros cinco aos del milenio. Upton cuenta que fue precisamente este constante goteo, gota tras gota de decepcin lo que nos hizo mirar ms all de los nmeros. Pasado un tiempo, acabas por pensar: tenemos que intentar hacer algo. Upton y el resto del Laboratorio de Informtica atribuyeron finalmente la cada de los candidatos a la falta de ordenadores pequeos programables y la llegada de hardware ms cerrado y con una funcin fija. Poco a poco, establecieron un plan para construir algo que se ajustara a las vidas de los nios y despus nos proporcionara el torrente de estudiantes que debemos tener para conseguir una comunidad universitaria vibrante; algo que les anime a ponerse manos a la obra, que no sea solamente

una caja negra; algo que les permita llegar hasta el tutano sin interponer barreras artificiales entre ellos y el hardware. En la prctica, y hasta el momento, la popularidad del Pi ha sido mayor entre los aficionados adultos, aunque la Fundacin Raspberry Pi espera volver el prximo ao a su enfoque educativo inicial.

Trazando un curso de Software Libre


Ya que fundamentalmente tenamos un objetivo benfico, Upton y sus colegas encontraron la idea de una fundacin sin nimo de lucro como la opcin lgica. Adems, la mayora de ellos ya haban estado en empresas y es bueno para nosotros tener una tarea que no fuese obtener dinero. Adems, pronto descubrieron, que ser una ONG les ayud a persuadir a los fabricantes de chips para darles un precio con descuento. Inicialmente, slo estbamos comprando 10.000 chips, explica Upton, pero nos pedan que pagramos por ellos como si estuviramos comprando 100.000 es decir, recibamos un descuento por volumen. Y por supuesto, ahora estamos comprando 100.000, as que ha funcionado. Al principio, la Fundacin consider la construccin de un dispositivo similar al Arduino [4], pero la acogida del Arduino nos llev a creer que haba un gran mercado para ordenadores baratos. Upton y los dems se dieron cuenta de que la primera plataforma que ideamos no iba a encontrar un lugar en la imaginacin de los nios. Los nios estn acostumbrados a un cierto nivel de rendimiento grfico, un cierto nivel de facilidad de uso. El BeagleBoard [5] estaba ms cerca de lo que estbamos buscando. Sin embargo, la Fundacin tuvo que espe-

Jakub Kr

echowicz

, 123RF.com

anzado el 29 de febrero de 2012, el Raspberry Pi, un ordenador del tamao de una tarjeta de crdito (Figura 1), se ha convertido en uno de los xitos del software libre. A pesar de las dificultades de fabricacin (se lleg a poner un lmite de una unidad por cliente) del Pi, como se le llama popularmente, se han vendido cerca de 900.000 unidades y se alcanzar fcilmente el milln para su primer aniversario. Es completamente increble, dice el fundador Eben Upton, sobre lo sucedido. Upton [1], que tiene actualmente 34 aos, ha estado programando con los primeros ordenadores como el BBC Microcomputer, el Commodore y el Amiga, desde que tena 10. Como adulto, ha sido miembro del Laboratorio de Informtica de la Universidad de Cambridge, fundador de Ideaworks Game Studio y, ms recientemente, ingeniero de circuitos integrados. Durante gran parte de su vida ha sido usuario y entusiasta del software libre y antes de Raspberry Pi, su principal contribucin al software libre fue Bluecove [2], una implementacin JSR-82 J2SE

WWW.LINUX- MAGAZINE.ES

Nmero 93

61

HARDWARE Raspberry Pi: Eben Upton

Figura 1: Raspberry Pi modelo B con dos puertos USB, un puerto Ethernet 10/100, el puerto de sonido, el de HDMI y el de vdeo compuesto; diversos puertos de E/S hardware de libre asignacin y una tarjeta de memoria SDHC.

rar a que apareciese un SoC (System on a Chip) [6], con la potencia y precio necesarias. Hace dieciocho meses, lleg un chip as, el Broadcom BCM2835, que Upton ayud a disear. Una vez que estuvo disponible el chip adecuado, el desarrollo fue rpido, aunque la cantidad de memoria en la gama baja, el Modelo A, se elev de 128 MB de RAM a 256 MB, despus de que la fundacin se diera cuenta de que 128 habra sido suficiente para un poco de hacking embebido, pero nunca habra sido viable para el funcionamiento de un ordenador de escritorio o un navegador. Del mismo modo, durante la produccin, una bajada de precios de la memoria permiti que el modelo A se suministrase con 512 MB en lugar de los 256 previstos inicialmente. Desde el principio, la Fundacin se di cuenta de que la mayora de las decisiones de produccin estaban condicionadas por los objetivos de precios, 25$ para el modelo A y 35$ para el modelo B. Tambin se hizo evidente que, para cumplir con estos objetivos, el software libre tendra que participar tanto como fuese posible. Por muchas razones tanto prc-

ticas como filosficas , cuenta Upton, la construccin de una plataforma de cdigo abierto fue bastante inevitable. Ha sido realmente agradable la forma en que la comunidad de cdigo abierto ha llevado esto adelante. La comunidad del software libre respondi rpidamente a las necesidades del proyecto, portando al Pi todo un rango de distribuciones que van desde Android y Arch Linux hasta Slackware y FreeBSD. Incluyendo a Raspbian [7], la adaptacin de Debian que la Fundacin recomienda para los principiantes. Adems, el equipo de desarrollo tambin se basa en X Window System y Cairo y esperan donar a Wayland [8] en un futuro cercano. Python es el lenguaje oficial de programacin, dado que, a diferencia de lenguajes como Java, no implica que el principiante invierta mucho tiempo en una compleja sintaxis antes de poder hacer nada. Es til tener un lenguaje de aprendizaje que te permita poner el pie en la puerta fcilmente. El Pi incluy incluso una imagen de firmware de licencia gratuita para interactuar con la Unidad de Procesamiento

Grfica (GPU) propietaria [9]. Este acuerdo fue denunciado por algunos miembros de la comunidad por no ir lo suficientemente lejos como para proporcionar un sistema libre, un incidente que Upton describe como una de las experiencias ms desmoralizantes que he tenido. Segn Upton, su preferencia personal hubiera sido liberar las especificaciones de la GPU: Yo ayud a disear esa GPU. Me encantara, si pudiera, publicar una descripcin a nivel de registro de cmo funciona la GPU, porque estoy muy orgulloso de ello. Pero, en la prctica, all hay propiedad intelectual patentada que fue desarrollada por Broadcom y es una decisin de Broadcom. Veo que la gente quiere ver las interioridades; hay muchas buenas razones para ello, no slo razones educativas; pero lo que hicimos fue suficiente para permitir a la gente hacer cosas interesantes. Creo que todo esto fue muy valorado porque habamos hecho todo lo posible y dimos un paso adelante en nuestro camino. Espero que otros fabricantes de GPU tengan una actitud semejante, que sean capaces de

62

Nmero 93

WWW.LINUX- MAGAZINE.ES

Raspberry Pi: Eben Upton HARDWARE

dar un paso ms all del que pudimos dar nosotros. Y tal vez podamos volver y revisar la arquitectura al cabo de un ao o dos y ver si podemos liberar ms.

Cambiar el enfoque de Fabricar a Educar


Para la Fundacin Raspberry Pi, 2012 fue un ao de altibajos. Adems de la respuesta hostil a la imagen del firmware, Upton dice que el peor momento de todos fue trabajar da y noche para tener las placas listas. Eso fue difcil y recibimos algunas crticas por ello. Creo que no tuvimos el cuidado que tenemos ahora, para evitar pillarnos los dedos. Hoy puedes comprar uno y te lo envan al da siguiente. Sin embargo, escuchando a Upton, la impresin es que las satisfacciones son muy superiores a cualquiera de los problemas que ha encontrado. Me gusta ver lo que las personas han hecho con el Pi, sobre todo en la parte de hardware. Quiero decir, yo soy un tipo de software, por lo que estaba pensando en todo el software libre que la gente iba a escribir. Pero con tan slo ver lo que estn haciendo con el hardware, como enviar un globo a 40 kilmetros de altura y tomar fotografas desde all arriba, eso fue un hito, ya que soy un cadete del espacio. Pero la mayor satisfaccin de Upton viene de un cierto tipo de correos electrnicos que recibo de vez en cuando de padres que son ingenieros. Padres y madres que han luchado para encontrar una manera de hablar con sus hijos sobre lo que hacen; estos correos electrnicos cuentan: tengo un Pi, y he sido capaz de sentarme con mi hijo, o mi hija, y programar el ordenador juntos. Estos mensajes indican que, hasta cierto punto, el Pi est haciendo lo que tena que hacer, aunque obviamente, un ao no es suficiente tiempo para saber si va a tener algn efecto a largo plazo sobre el nmero o la calidad de las solicitudes para la universidad. Sin embargo, para Upton, esos son los tipos de mensajes de correo electrnico que realmente hacen que valga la pena. De hecho, si Upton lamenta profundamente algo de lo ocurrido el ao pasado, es el hecho de que hemos tenido problemas para concentrarnos en la misin educativa debido al rpido crecimiento de la parte operativa de la

organizacin. La misin educativa, por la que realmente nos pusimos a trabajar, ha tenido que sentarse atrs para conseguir que las placas estn en la puerta. Sin embargo, ahora la fabricacin ya mantiene el ritmo de la demanda y recientemente la Fundacin ha contratado un par de empleados para concentrarse en la educacin y, con los aficionados que han desarrollado una subcultura que parece auto-sostenible, Upton espera que sea la propia Fundacin quien pueda restaurar el nfasis educativo original. Me he beneficiado enormemente del software libre y de las plataformas de ordenadores con diferentes grados de apertura, dijo Upton. Es bueno tratar de ayudar a otra generacin a tener esa experiencia. Si no, existe el riesgo de que acabemos con todas las plataformas cerradas y el desarrollo de software cayendo por un precipicio. De hecho, la mayor parte de los socios de la Fundacin estn entre los 40 y 50 aos y todos ellos acumulan dcadas de experiencia en informtica. La Fundacin Raspberry Pi podra ser recordada por su esfuerzo colectivo para dejar un legado duradero en la industria. De hecho, el ao pasado estuvieron bien encaminados hacia su meta.

RECURSOS
[1] Eben Upton: http://en.wikipedia.org/wiki/Eben_ Upton [2] BlueCove: http://code.google.com/p/bluecove/ [3] Fundacin Raspberry Pi : http://www.raspberrypi.org/ [4] Arduino: http://es.wikipedia.org/wiki/Arduino [5] BeagleBoard: http://en.wikipedia.org/wiki/ Beagleboard [6] SoC: http://es.wikipedia.org/wiki/System_ on_a_chip [7] Raspbian: http://es.wikipedia.org/wiki/Raspbian [8] Wayland: http://wayland.freedesktop.org/ [9] Controlador para la GPU de Raspberry Pi: http://www.phoronix.com/scan. php?page=news_item&px=MTIx NDk

WWW.LINUX- MAGAZINE.ES

Nmero 93

63

LINUX USER MyPaint

nmero de pinceles y lpices especiales. Teniendo en cuenta que GIMP se utiliza principalmente para la edicin de fotos y grficos, MyPaint se utiliza para pintar cuadros. En la galera en lnea [2] se muestran ejemplos de lo que han creado con el programa varios artistas con talento. Aunque el programa no requiere necesariamente una tableta grfica, ser til en muchos escenarios. Las herramientas estn diseadas para estos dispositivos de entrada y, en particular, utilizan la informacin sobre la presin del estilete sobre la superficie de la tableta para modificar los trazos. El formato por defecto para MyPaint es ORA (vase el cuadro OpenRaster). GIMP tambin es compatible con este formato, tanto para cargar como para exportar archivos. Esto significa que las imgenes creadas con MyPaint pueden cargarse fcilmente en GIMP, donde, a continuacin, si es necesario, se pueden utilizar las funciones que MyPaint no proporciona para seguir editando ms adelante. Adems de ORA, MyPaint exporta a otros formatos como PNG y JPEG.

Dibujo a mano alzada con MyPaint

Preparado, Estable, Pinta


La versin actual de MyPaint es la 1.1 que an no se ha abierto paso en los repositorios de todas las distribuciones estndar. Sin embargo, en Ubuntu, encontrars la versin 1.0 directamente disponible va Synaptic o apt . En el wiki del proyecto hay enlaces a ms fuentes de paquetes disponibles [4]. Tras el arranque, aparece el espartano espacio de trabajo del programa: adems del clsico men, slo veras una barra de herramientas con algunos botones (Figura 1). Un gran botn marcado MyPaint abre un desplegable, con todo lo que se puede encontrar en la barra de men de la mayora de las aplicaciones, seguido de los botones para deshacer o rehacer. Otros botones permiten la edicin directa del color de dibujo, elegir el tipo de pincel y cambiar las propiedades del pincel. El botn con la rueda dentada despliega un cuadro de dilogo en el que, si es necesario, puedes ajustar los parmetros para la herramienta actual.

Brochazos Digitales
MyPaint es un programa de dibujo simple, intuitivo y verstil. Se trata de un programa que est diseado especficamente para su uso con tabletas grficas y que promete una experiencia similar a dibujar con un lpiz o un pincel. POR KARSTEN GNTHER

M
64

yPaint [1] pertenece a una categora de programas de dibujo que difiere del concepto de procesamiento de imagen que se utiliza en programas como GIMP. El software est especializado y, de la misma manera, tambin limitado a la

interaccin con un pincel electrnico. En este software faltan muchas de las caractersticas habituales en GIMP. Incluso no se incluyen acciones simples, como la rotacin libre o la posibilidad de recortar una imagen. Sin embargo, MyPaint ofrece un gran

Nmero 93

WWW.LINUX- MAGAZINE.ES

MyPaint LINUX USER

En MyPaint casi todas las acciones son controladas por el pincel y sus parmetros. Estas acciones dependen principalmente del sensor de presin en el estilete suministrado con la tableta. Los botones de la parte derecha de la barra de herramientas ofrecen funciones similares y con slo un clic se les invoca en una ventana separada. Estos cuadros de dilogo tienen un borde discontinuo de recorte por aqu. Si haces clic en el borde, el programa acopla el dilogo en el borde derecho de la ventana (Figura 2). Para empezar a dibujar, es necesario que selecciones un pincel, por lo que primero debes conocer las diferentes variedades de pincel. Estn disponibles treinta y cinco pinceles clsicos predefinidos, junto con ms de 20 pinceles experimentales y una serie de

OpenRaster
El formato ORA Open Raster (extensin de archivo: .ora) fue desarrollado como un formato de intercambio abierto para grficos de mapas de bits para ser un competidor del formato propietario PSD en Photoshop. OpenRaster ofrece algunas opciones que no encontrars en el formato propietario de Adobe. Por ejemplo, proporciona documentacin libre y completa del formato. ORA almacena metadatos por separado como XMP o IPTC, o como etiquetas Exif, si es necesario, para las capas individuales. Tambin soporta capas y grupos de capas y modos de capa (el resultado de los pxeles de dos capas), as como los efectos en las capas. La informacin de ruta, las paletas y las fuentes se pueden incrustar en el archivo, as como la informacin de deshacer. Los programas que deseen utilizar ORA no necesariamente tienen que poner en prctica todas sus funciones completas. Hasta el momento, son relativamente pocas las aplicaciones compatibles con el formato. Las ms conocidas, adems de MyPaint y GIMP, son el programa de KDE Krita, Pinta, y el visor XnView.

otros pinceles que se agrupan en colecciones en el editor de listas del pincel (Figura 3). Adems, puedes

Figura 1: Cuando se inicia, MyPaint surge como una hoja de papel en blanco.

crear nuevos [5] o descargarlos de Internet [6]. Casi todos los modos de pincel son sensibles a la presin. Generalmente la presin controla la opacidad del trazo y a veces, su anchura, forma o color. Repitiendo el brochazo, puedes aumentar la opacidad del trazo. Algunos de los pinceles experimentales, como el DNA brush o el particules_eraser , crean trazos que cambian en funcin de tu gesto con el estilete. Para conseguir que esto ocurra, el programa evala la direccin del movimiento, adems de la velocidad. Como era de esperar de un programa interactivo, MyPaint ofrece funciones de deshacer y rehacer. Al pulsar Z o Ctrl + Z deshars la ltimas acciones paso a paso. Por tanto, es una buena idea utilizar, al dibujar, movimientos cortos individuales. Al pulsar Y revocas la ltima operacin deshecha. Los colores se seleccionan bien a travs del dilogo correspondiente o mediante la aplicacin de la pipeta a la imagen. Este ltimo resulta ser particularmente interesante en la prctica, ya que funciona rpida y fcilmente. Al pulsar R permite la herramienta de seleccin de color.

Configuracin
Puedes configurar MyPaint en Editar | Preferencias. Aqu son particularmente interesantes los cuadros de dilogo que puedes utilizar para asignar funciones a las teclas de la tableta y al estilete. Los artistas experimentados apreciarn la manera en que se implementa la curva de respuesta a la presin del esti-

Figura 2: Si es necesario, puedes acoplar cuadros de dilogo en la parte derecha de la ventana o utilizarlas como ventanas independientes.

WWW.LINUX- MAGAZINE.ES

Nmero 93

65

LINUX USER MyPaint

Tabla 1: Atajos
Teclas Ctrl+N Ctrl+O F3 Ctrl+S Shift+Ctrl+S Ctrl+E Ctrl+Q Ctrl+Z Z Y F11 . , Ctrl+Left arrow Ctrl+Right arrow U I B F D S A G R L Ctrl+C Ctrl+V Funciones Nueva imagen Abrir imagen Abrir ltima imagen Guardar imagen como ORA Guardar imagen como Exportar imagen Parar MyPaint Deshacer Deshacer Rehacer Pantalla completa Acercar Alejar Rotar paso a paso Rotar paso a paso Espejo Espejo Seleccionar pincel Incrementar tamao del pincel Reducir tamao del pincel Incrementar opacidad Reducir opacidad Seleccionar colores Herramienta de captura de color Ver la ventana de capas Copiar capa Insertar portapapeles

parmetros, tan pronto como pases el ratn sobre un control MyPaint, mostrar un cuadro de ayuda. MyPaint tambin admite la asignacin de teclas. Esto significa que puedes invocar elementos del men a travs de atajos de teclado configurables. Para ello, coloca el cursor del ratn sobre la opcin del men correspondiente, sin hacer clic en l y pulsa la combinacin de teclas deseada. La Tabla 1 muestra algunas de las funciones predefinidas.

en el botn con el signo ms para crear una nueva capa en la ventana de capas (Figura 5).

Conclusiones
Por su ciertamente especial propsito, MyPaint demuestra ser una herramienta interesante y fcil de usar. Gracias al buen soporte para tabletas grficas, es divertido tontear con el programa. Sin embargo, con un ratn como nico dispositivo de entrada, MyPaint ofrece poca diversin. Cuando se trata de funciones de pintura, MyPaint ofrece un enfoque diferente y ms intuitivo que Krita o GIMP. Aunque puede resultar poco familiar, la curva de aprendizaje con MyPaint no debe ser demasiado difcil de franquear.

Manos arriba
Si en este momento no deseas probar tu talento artstico, el software te permite realizar un cuadro mediante la carga de un mapa de bits y aadiendo capas por encima. Para ello, haz clic

lete. La configuracin del pincel incluye casi todos los aspectos relevantes (Figura 4). Para cada uno de los

RECURSOS
[1] MyPaint: http://mypaint.intilinux.com/ [2] Galera MyPaint gallery: http://mypaint.intilinux.com/ ?page_id=519 [3] Y PPA Manager de Karsten Gnther, Ubuntu User, Nmero 12, pag.69 (hay que buscar el artculo en la revista espaola. [4] Repositorios MyPaint: http://wiki.mypaint.info/index. php?title=Packaging [5] Crear tus propios pinceles: http://mypaint.intilinux.com/ ?page_id=173 [6] Cargar pinceles: http://wiki.mypaint.info/ Documentation/Manual#Brush_ Packs Figura 3: El Editor de Brochas contiene un gran nmero de pinceles.

Figura 4: La configuracin avanzada para el pincel se encuentra en el Editor de Propiedades de Brocha.

Figura 5: El botn con el signo ms en la parte baja de la ventana de capas te permite crear un nuevo nivel, usado aqu para dibujar encima de una imagen.

66

Nmero 93

WWW.LINUX- MAGAZINE.ES

Workspace: EasyGUI LINUX USER

comunes sin tener que pasar por el embrollo de escribir el cdigo de la GUI a mano. Por ejemplo, una simple tarea como presentar un cuadro de mensaje usando la herramienta PyGTK requiere un trozo importante de cdigo (vase el Listado 1). Por contraste, slo necesitamos dos lneas para hacer lo mismo usando EasyGUI:
import easygui as eg eg.msgbox(Hello World)

A diferencia de otras libreras GUI, EasyGUI no se basa en eventos, lo que significa que podemos escribir scripts de modo lineal y aadir elementos grficos especficos al vuelo. Este mtodo simplifica dramticamente el proceso de desarrollo y hace a EasyGUI apto para programadores habituales y desarrolladores principiantes por igual.

Trabajo Preparatorio
Para hacer el proceso de dominar EasyGUI un poco ms interesante, podemos usar la librera python-wordpress-xmlprc [2] para escribir un script Python para trabajar con un blog WordPress. Tambin podemos usar EasyGUI para aadir elementos GUI especficos a los scripts. Sin embargo, antes de proceder necesitamos hacer algn trabajo preparatorio. Obviamente, lo primero es instalar EasyGUI. Para hacerlo en Debian Wheezy y Ubuntu ejecutamos como root
apt-get install U python-easygui python-tk

Aadiendo elementos GUI a scripts Python

Tratamiento GUI
Si necesitas aadir elementos grficos a un script Python, EasyGUI puede ayudar a los principiantes y expertos por igual. POR DMITRI POPOV

En otras distribuciones Linux, cogemos la ltima versin de EasyGUI del sitio web del proyecto y desempaquetamos el archivo descargado. En el terminal, cambiamos al directorio resultante y ejecutamos como root
python setup.py install

uando hay que dotar a un script Python con una interfaz grfica, tenemos distintas opciones, incluyendo Tkinter, wxPython, PySide y PyGTK, pero usar estas libreras es excesivo si simplemente queremos aadir unos cuantos elementos GUI a un script Python para hacerlo ms amigable. EasyGUI [1] es una herramienta mucho mejor para esta tarea porque nos permite aadir elementos grficos

A continuacin necesitamos instalar la librera python-wordpress-xmlrpc. En Debian y Ubuntu se puede hacer usando el siguiente comando como root:
apt-get install python-pip pip install python-U wordpress-xmlrpc

WWW.LINUX- MAGAZINE.ES

Nmero 93

67

LINUX USER Workspace: EasyGUI

Finalmente, necesitamos habilitar el protocolo XML-RPC en nuestro blog WordPress, de este modo podemos administrar y acceder al blog utilizando herramientas externas. En el panel de control del blog, cambiamos a Settings | Writing y seleccionamos el cuadro de verificacin XML-RPC (Figura 1).

Comenzamos con EasyGUI


El sencillo script Python mostrado en el Listado 2, que devuelve una lista de posts publicados en un blog WordPress, ser nuestro punto de comienzo. A algunos elementos del script le vendran bien una GUI. Primero, el script

requiere la URL correcta, nombre de usuario y contrasea para establecer una conexin al blog. Podramos meter esta informacin directamente en el cdigo del script, aunque una solucin un poco ms flexible sera especificar los datos requeridos al vuelo. Aqu es

Listado 1: Cuadro de Mensaje


01 import gtk 02 03 def create_window(): 04 window = gtk.Window() 05 window.set_default_size(200, 200) 06 window.connect(destroy, gtk.main_quit) 07 label = gtk.Label(Hola Mundo!) 08 window.add(label) 09 label.show() 10 window.show() 11 12 create_window() 13 gtk.main()

Listado 2: Obteniendo una Lista de Posts


01 #!/usr/bin/env python 02 from wordpress_xmlrpc import Client, WordPressPost 03 from wordpress_xmlrpc.methods.posts import GetPosts, NewPost 04 from wordpress_xmlrpc.methods.users import GetUserInfo 05 wp = Client(http://localhost/wordpress/xmlrpc.php, username, password) 06 print wp.call(GetPosts())

donde entra en escena EasyGUI. Con los elementos GUI enterbox y passwordbox podemos hacer que el script muestre cuadros grficos para introducir la informacin requerida (Listado 3). Como podemos ver, el uso de las funciones enterbox y passwordbox es ridculamente fcil. Primero importamos la librera EasyGUI y luego aadimos las llamadas a funciones donde las necesitamos. Ambas funciones aceptan un nmero de parmetros, incluyendo msg (especifica un mensaje mostrado en el cuadro de dilogo) y default (el texto por defecto en el campo de entrada). La nica diferencia entre las funciones enterbox y passwordbox es que la ltima oculta el texto introducido. Aunque no podemos cambiar toda la apariencia de los cuadros de dilogo, al menos podemos darle vida aadiendo imgenes con el parmetro image. Por ejemplo:
username = URL = eg.enterbox U (msg=U Nombre de usuario:, U title=Input, U default= image=image.gif)

Figura 1: Habilitando el protocolo XML-PRC.

Cabe notar que EasyGUI slo soporta ficheros grficos en formato GIF y que

Listado 3: Usando enterbox y passwordbox


01 import easygui as eg 02 url = eg.enterbox(msg=URL de WordPress:, title=Input, default=http://localhost/wordpress/xmlrpc.php) 03 username = eg.enterbox(msg=Nombre Usuario:, title=Input, default=) 04 password = eg.passwordbox(msg=Contrasea:, title=Input, default=) 05 wp = Client(url, username, password)

Figura 2: La funcin multpasswordbox muestra un cuadro de dilogo multi-campo, donde el ltimo campo es considerado una contrasea.

68

Nmero 93

WWW.LINUX- MAGAZINE.ES

Workspace: EasyGUI LINUX USER

podemos controlar la posicin de la imagen en el cuadro de dilogo. La funcin msgbox puede usarse en lugar de la funcin print integrada de Python para mostrar la salida de un mensaje en un cuadro grfico. Por ejemplo, para mostrar la lista de todos los posts publicados en un blog, podemos sustituir wp.call(GetPosts)) por
Figura 3: La funcin choicebox en accin.

eg.msgboxU (wp.call(GetPosts()))

Las funciones enterbox, passwordbox y msgbox hacen que el script sea ms amigable, aunque an queda margen para mejoras. Por ejemplo, tener tres cuadros de dilogo separados para reunir la informacin de conexin requerida no es muy prctico. Afortunadamente, EasyGUI viene con la funcin multenterbox , la cual muestra un cuadro de dilogo con mltiples campos de entrada. El ejemplo siguiente muestra un cuadro de dilogo con campos de entrada llamados URL y Nombre Usuario :
msg = Introduce la informacinU requerida title = Input fields = [URL, U Nombre Usuario] defaultvalues = U [http://localhost/U wordpress/xmlrpc.php,] fieldvalues = U eg.multenterboxU (msg, title, U fields, defaultvalues)

campo (Figura 2). As, para obtener leer la URL, nombre de usuario y contrasea, podemos usar la funcin multipasswordbox como sigue:
msg = Introduce la U informacin requerida title = Input fields = [URL, U Nombre Usuario, contrasea] defaultvalues = U

[http://localhost/U wordpress/xmlrpc.php,, ] fieldvalues = U eg.multpasswordbox U (msg, title, U fields, defaultvalues)

Introducir la URL del blog cada vez que ejecutamos el script puede llegar a ser una molestia, especialmente si mantenemos ms de un blog. En este caso,

Listado 4: Script Python con EasyGUI


01 #!/usr/bin/env python 02 03 import easygui as eg 04 05 from wordpress_xmlrpc import Client, WordPressPost 06 from wordpress_xmlrpc.methods.posts import GetPosts, NewPost 07 from wordpress_xmlrpc.methods.users import GetUserInfo 08 09 msg = Seleccionar URL 10 title = Input 11 choices = [http://localhost/blog1/xmlrpc.php, http://localhost/blog2/xmlrpc.php, http://localhost/blog3/xmlrpc.php] 12 url = eg.choicebox(msg, title, choices) 13 14 msg = Introduce la informacin requerida 15 title = Input 16 fields = [Nombre Usuario, Contrasea] 17 defaultvalues = [,] 18 fieldvalues = eg.multpasswordbox(msg, title, fields, defaultvalues) 19 20 wp = Client(url, fieldvalues[0], fieldvalues[1]) 21 eg.msgbox(wp.call(GetPosts()))

Los valores introducidos en los campos de entrada se almacenan como una lista, y podemos recuperarlos por sus nmeros de ndice. Por ejemplo, la declaracin eg.msgbox(fieldvalues[0]) se refiere al valor introducido en el campo URL, mientras que eg.msgbox (fieldvalues[1]) muestra los valores introducidos en el campo Nombre Usuario. Todo esto est muy bien, pero qu hay del campo password? Para ello EasyGUI tiene la funcin multpasswordbox. La funcin multpassword es similar a multenterbox, aunque trata el ltimo campo como una contrasea es decir, oculta el texto introducido en este

Figura 4: La funcin multchoicebox muestra una lista de seleccin mltiple.

WWW.LINUX- MAGAZINE.ES

Nmero 93

69

LINUX USER Workspace: EasyGUI

Listado 5: Usando fileopenbox y filesavebox


01 filename = eg.fileopenbox(msg=None, title=None, default=*, filetypes=None) 02 f = open(filename, r) 03 text = f.readlines() 04 f.close() 05 textbox = eg.textbox(Contenido de fichero + filename, Mostrar contenido de fichero, text) 06 07 savefile = eg.filesavebox(msg=None, title=None, default=, filetypes=None) 08 f = open(savefile, w) 09 f.write(textbox) 10 f.close()

(Contenido del fichero U + filename,U Mostrar contenido U del fichero, U text)

Esta funcionalidad puede ser til si hacemos borradores de artculos para el blog en un editor de textos y luego usamos un script Python para ponerlos en nuestro blog. El texto que se muestra en el cuadro de texto es editable, de modo que podemos hacer cambios de ltima hora antes de publicarlos. La funcin codebox es similar a textbox, pero muestra texto usando una fuente monoespaciada til para ver y editar cdigo. En el ejemplo anterior, la ruta al fichero draft.txt est especificada directamente en el script, lo que hace que ste sea menos flexible. Para mejorar esto, podemos usar la funcin fileopenbox, que muestra un cuadro de dilogo de bsqueda de ficheros (Figura 6):
filename = eg.fileopenboxU (msg=None, title=None, U default=*, filetypes=None) f = open(filename, r) text = f.readlines() f.close() textbox = eg.textboxU (Contenido del ficheroU + filename, U Mostrar contenido U del fichero, text)

Figura 5: La funcin textbox puede ser til para presentar textos grandes.

podemos usar la funcin choicebox para especificar una lista de URLs (Figura 3):
msg = Seleccionar URL title = Input choices = U [http://localhost/blog1/U xmlrpc.php, U http://localhost/blog2/U xmlrpc.php, U http://localhost/blog3/U xmlrpc.php] url = eg.choiceboxU (msg, title, choices)

msg = Selecciona etiquetas title = Eitquetas choices =U [cdigo abierto, U linux, fotografa] tags = eg.multchoiceboxU (msg, title, choices) post.terms_names = { post_tag: [tags[0], tags[1]] }

Usando todas las funciones EasyGUI descritas podemos modificar el script original a como se muestra en el Listado 4.

Otras Funciones de EasyGUI


Adems de los elementos grficos abordados ms arriba, EasyGUI ofrece otras tiles funciones. Por ejemplo, la funcin multchoicebox (Figura 4) permite al usuario seleccionar mltiples elementos en la lista. Usndola podremos recoger mltiples etiquetas para el post de un blog:

La funcin textbox (Figura 5) puede ser til para mostrar y editar fragmentos grandes de texto, como borradores de posts de blogs. Usada aisladamente y sin ningn argumento, la funcin muestra un cuadro de texto vaco para introducir texto desde cero. Sin embargo, tambin podemos usar la funcin textbox para leer el contenido de un fichero de texto existente:
filename = os.U path.normcase U (/home/user/U tmp/draft.txt) f = open(filename, r) text = f.readlines() f.close() textbox = U eg.textboxU

La funcin soporta varios parmetros, incluyendo default y filetypes. El primero se utiliza para especificar una ruta al fichero que puede contener comodi-

Listado 6: Configuraciones para Almacenamiento


01 class Settings(eg.EgStore): 02 def __init__(self, filename): 03 self.filename = filename 04 self.username = 05 self.server = 06 07 settings = Settings(settings.txt) 08 settings.username = monkey 09 settings.server = 127.0.0.1 10 settings.store()

70

Nmero 93

WWW.LINUX- MAGAZINE.ES

Workspace: EasyGUI LINUX USER

nes. Por ejemplo, si configuramos el parmetro predeterminado cp,p / home/user/drafts/*.txt, el cuadro de bsqueda de ficheros mostrar todos los ficheros .txt en el directorio /home/ user/drafts/. Estableciendo el parmetro default a /home/user/draft*.txt, el cuadro de bsqueda de ficheros mostrar todos los ficheros .txt. El parmetro filetypes puede usarse para limitar la lista de ficheros en el directorio a ciertos tipos. Por ejemplo, si queremos que el cuadro de bsqueda de ficheros muestre solamente ficheros grficos, podemos hacerlo especificando los formatos de fichero deseados, por ejemplo:
filetypes = U [*.png, *.jpg, *.tiff]

Figura 6: La funcin fileopenbox permite al usuario seleccionar un fichero especfico.

Mientras la funcin fileopenbox nos permite coger el fichero que queremos abrir, la funcin filesavebox nos permite especificar el nombre de un fichero a guardar. Podemos usar esta funcionalidad para modificar el cdigo de arriba de modo que guarde los contenidos modificados del cuadro de texto en un fichero separado (vase el Listado 5). Finalmente, EasyGUI contiene la clase egStore para almacenar y recuperar configuraciones de usuario. Esta funcionalidad es esencial para scripts Python que necesitan obtener valores para ciertos parmetros para funcionar correctamente. En este ejemplo, el script que recupera una lista de posts publicados necesita tres datos: la URL, el nombre

de usuario y la contrasea. En lugar de pedirle al usuario que escriba dichos valores cada vez, podemos usar EasyGUI para almacenarlos y recuperarlos luego desde un fichero. Para hacerlo, necesitamos definir una subclase de EgStore con una funcin que especifique las configuraciones a ser almacenadas. A continuacin necesitamos especificar el fichero en el que almacenar las configuraciones junto con las configuraciones que queremos guardar. El ejemplo que se muestra en el Listado 6 guarda un nombre de usuario y una direccin servidor en el fichero settings.txt. Debera ser trivial modificar este ejemplo pidiendo al usuario que introduzca la informacin requerida y

guarde los valores obtenidos en un fichero (Listado 7). Tampoco es particularmente complicado recuperar las configuraciones almacenadas:
settings = U Settings(config.txt) settings.restore() username = U settings.username url = settings.server

Para hacer el script completo ms amigable al usuario, puede que deseemos modificarlo de modo que le pida que introduzca la informacin requerida slo si el fichero de configuraciones no existe.

Conclusin
EasyGUI no es apto para compilar interfaces grficas complicadas. Sin embargo, si deseas hacer tus scripts Python ms amigables aadiendo elementos grficos, EasyGUI ofrece una manera muy rpida y fcil de hacerlo. No sustituye a los juegos de herramientas como PySide o PyGTK, pero puede usarse para hacer scripts grficos de Python en un santiamn.

Listado 7: Almacenamiento de Configuraciones


01 class Settings(eg.EgStore): 02 def __init__(self, filename): 03 self.filename = filename 04 self.username = 05 self.server = 0 06 07 username = eg.enterbox(msg=Nombre Usuario:, title=Input, default=) 08 url = eg.enterbox(msg=URL de WordPress:, title=Input, default=http://localhost/wordpress/xmlrpc.php) 09 10 settings = Settings(config.txt) 11 settings.username = username 12 settings.server = url 13 settings.store()

RECURSOS
[1] EasyGUI: http://easygui.sourceforge.net/ [2] Librera python-wordpress-xmlrpc: https://github.com/maxcutler/ python-wordpress-xmlrpc/

WWW.LINUX- MAGAZINE.ES

Nmero 93

71

LINUX USER Movgrab

Descarga de vdeos de YouTube o Vimeo

Archivado inteligente
Los portales de vdeo como YouTube o Vimeo ofrecen todo un abanico de pelculas cortas curiosas y entretenidas. Si deseamos disfrutarlas desconectados de la red, una pequea herramienta llamada Movgrab puede ayudarnos. POR TIM SCHRMANN

n vdeo en YouTube slo se iniciar si accedemos a l con nuestro navegador y tenemos el suficiente ancho de banda libre. Desafortunadamente, no puedes guardarte la pelcula para conservarla o procesarla, y slo podemos compartir el enlace. Para colmo de males, los portales a menudo nos obligan a ver algunos anuncios. La herramienta de la lnea de comandos Movgrab ofrece una solucin: descargar el vdeo completa-

mente y guardarlo como un fichero en el disco duro. El programa soporta un extenso rango de portales y formatos, y nos permite usar servidores proxy.

Fabricante de Herramientas
Es una molestia que la mayora de distros ignoran que Movgrab es una herramienta y no lo incluyen en su lista de paquetes. En otras palabras, vamos a tener que compilar el programa. Para hacerlo, necesitamos coger el archivo de cdigo fuente

72

Nmero 93

WWW.LINUX- MAGAZINE.ES

Movgrab LINUX USER

Figura 1: Si no queremos introducir un formato de vdeo, Movgrab simplemente carga el primer fichero en la cola.

actual desde el sitio web [1]. Aqu el sitio es un poco confuso. En la parte inferior encontraremos una lista con las versiones publicadas escritas en una fuente negrita de color turquesa. Necesitaremos el primer elemento de la lista, pero no pulsamos en la entrada en negrita. En lugar de ello, hemos de elegir el enlace, un tanto disimulado, Download Source in tar/ GZ situado a la derecha. El cuadro Instalacin explica algunos trucos de cmo configurar el software.

tico para nuestro enlace, podemos especificar un nombre usando el parmetro -o:
$ movgrab -o bigbuckbunny.webm U http://www.youtube.com/U watch?v=YE7VzlLtp-4

Si usamos un proxy para acceder a Internet, introducimos los detalles tras el parmetro -p:
$ movgrab -p U http://usuario:contraseaU @proxy URL ...

A Toda Velocidad
Tras configurar el programa, apuntamos nuestro navegador a la pgina con el vdeo en YouTube y pasamos su URL a la herramienta (Figura 1):
$ movgrab U http://www.youtube.com/U watch?v=YE7VzlLtp-4

Las comillas en torno a la URL evitan que la shell interprete caracteres especiales, tales como el signo &. Movgrab guarda el vdeo en un fichero, cuyo nombre se compone del ttulo del vdeo en la pgina pertinente y un nmero de identificacin nico. Si este nombre de fichero es demasiado crp-

Sustituimos usuario y contrasea por los valores correctos. Si no necesitamos credenciales para el proxy, podemos omitirlos e introducir el nombre de dominio y el nmero de puerto para el proxy (por ejemplo, http://myproxy. com:8080 ). Para obtener una lista de todos los portales de vdeo que Movgrab soporta, introducimos movgrab - -help.

Una Cuestin de Formato


Normalmente, YouTube nos ofrecer los vdeos en diferentes formatos. El parmetro de Movgrab -T nos dice cules son. La Figura 2 muestra los

Figura 2: YouTube ofrece la pelcula Big Buck Bunny en no menos de ocho formatos y resoluciones diferentes.

WWW.LINUX- MAGAZINE.ES

Nmero 93

73

LINUX USER Movgrab

resultados de la peticin. La nica informacin importante aqu se muestra en la parte superior derecha de Formats available for this movie: . Esto viene seguido de una lista de todos los formatos posibles y sus tamaos. En la parte superior de la lista en la Figura 2 existe un vdeo en el formato de fichero WebM [2] con una resolucin de 1280x720 pxels (Alta resolucin) que ocupar 407,8MB de espacio en disco. Para descargar el vdeo exactamente en este formato o con esta resolucin, podemos usar el siguiente comando:
$ movgrab -f webm:1280x720 U http://www.youtube.com/U watch?v=YE7VzlLtp-4

amos esquivarlo, usamos el parmetro -x como sigue:


$ movgrab -x U http://www.example.com/video

Instalacin
Tras la descarga, desempaquetamos el archivo en nuestro disco duro y luego instalamos Movgrab en el directorio recin creado como sigue: ./configure make make install Slo necesitamos el compilador C y Make instalados para hacer esto. Si ms tarde queremos que sea posible descargar vdeos a travs de conexiones cifradas usando HTTPS/SSL, necesitaremos instalar las libreras OpenSSL, junto con sus paquetes de desarrollo y configurar la compilacin como sigue: ./configure --enable-ssl Sin embargo, esto no es necesario para YouTube, Vimeo y MyVideo.

Redireccin
Movgrab tambin puede reeenviar el vdeo a otras aplicaciones. Para hacerlo al reproductor de medios MPlayer [3], podemos introducir lo siguiente:
$ movgrab -o -U http://www.youtube.com/watch?U v=YE7VzlLtp-4 | U mplayer -

El parmetro -f va seguido por exactamente los mismos detalles que nos ofrece la consulta con -T. Algunos servicios ofrecen varios ficheros en una pgina nica. En este caso, movgrab -T lista todos los vdeos existentes y los numera. Podemos usar el parmetro -n para seleccionar la pelcula que deseamos. Por ejemplo, para descargar el segundo vdeo de la lista, introducimos -n 2 . Para descargar todos los vdeos disponibles, -n all. Algunos servicios tienen proteccin contra nios (Family Filter). Si dese-

En lugar de un reproductor de medios podemos especificar un convertidor, por ejemplo. Tambin podemos dejar que la aplicacin inicie un reproductor de medios automticamnte tan pronto como Movgrab haya descargado el 25% de la pelcula. Esto nos permite comenzar a verla mientras Movgrab an la est descargando de Internet (Figura 3). Para hacerlo, introducimos el nombre del programa reproductor tras el parmetro -p. A diferencia de -o , en esta variante el vdeo se almacena en un fichero antes de que Movgrab lo transmita a

travs de una salida estndar al programa especificado. La opcin -o no crea una copia de respaldo. En las antiguas versiones de Movgrab, el parmetro -s haca exacatamente lo mismo que -p . Sin embargo, el creador del programa lo descart en la versin 1.1.1 en favor de -p , an cuando la documentacin todava dice lo contrario.

Conclusiones
Con Movgrab, descargar vdeos de YouTube, Vimeo o plataformas similares es un paseo. En general, pasamos la URL a la herramienta. Sin embargo, la descarga funcionar suavemente slo mientras los servicios no cambien las estructuras de su sitio web. Si ocurre esto, tenemos que esperar hasta que los creadores adapten el programa. En otras palabras, si usamos el software de manera habitual, tambin tendremos que visitar su sitio de vez en cuando.

RECURSOS
[1] Movgrab: https://sites.google.com/site/ columscode/home/movgrab [2] WebM: http://www.webmproject.org Figura 3: Si fuera necesario, podemos pasar el vdeo descargado directamente a un reproductor de medios durante el proceso de descarga. [3] MPlayer: http://www.mplayerhq.hu

74

Nmero 93

WWW.LINUX- MAGAZINE.ES

Lnea de Comandos: Xorg.conf LINUX USER

Una introduccin a la edicin de xorg.conf

Atentos a sus Pantallas


Entender xorg.conf nos hace ms fcil el ajuste de la configuracin de nuestra pantalla. POR BRUCE BYFIELD

Cuando aparecen este tipo de problemas, habitualmente se resuelven creando y editando un fichero xorg.conf en nuestro sistema. Tambin es posible que queramos usar un fichero xorg.conf para hacer configuraciones especficas por defecto. xorg.conf no es la nica manera de configurar nuestra interfaz grfica. Tambin podemos configurarla usando el comando Xorg o XRandR o mediante nuestro entorno. Pero, como xorg.conf es un fichero de texto bien organizado que podemos editar como usuario root, es de lejos la manera ms fcil de realizar ajustes. No obstante, hemos de aseguramos de guardar cualquier fichero xorg,conf pre-existente de modo que podamos recuperarlo fcilmente sin errores. Sin embargo, a menos que hayamos tenido problemas previos, nuestro sistema probablemente carecer del fichero xorg.conf. Para crear uno, necesitamos arrancar en modo monousuario o apagar el servidor X, bien usando Ctrl+Alt+Barra espaciadora o cambiando al nivel de ejecucin usando el comando init 1 en sistemas basados en Debian, o init 3 en Fedora o en openSUSE. En la lnea de comandos, introducimos
Xorg -configure

Ntese que el comando no se ejecutar mientras que lo est haciendo un servidor X. Este comando crea el fichero xorg.conf.new en el directorio /root. Lo movemos hasta la posicin adecuada, que en la mayora de las distribuciones es el directorio /etc/X11, y lo renombramos como xorg.conf con el comando siguiente:
mv /root/xorg.conf.new /etc/X11/xorg.conf

H
Bruce Byfield es periodista tecnolgico, escritor freelance y editor especializado en software de cdigo abierto. Aparte de escribir sus proyectos, tambin da cursos de live y e-learning. En su tiempo libre Bruce escribe sobre el arte de la costa Noroeste. Puedes leer ms sobre su trabajo en http:// brucebyfield.wordpress.com

ace slo unos aos, si uno deseaba una pantalla grfica en un sistema Linux, necesitaba un fichero xorg.conf , o su predecesor XFree86-Config. Hoy en da, las tecnologas hotplugin y la extensin XRandR [1] hacen la configuracin de la pantalla automtica en la mayora de los sistemas Linux. Sin embargo, de vez en cuando con la frecuencia justa para que uno se sienta ligeramente traicionado no se detectar un teclado o una tarjeta de vdeo, o no se utilizar la resolucin mxima de esta ltima.

Ahora estamos preparados para configurar nuestro fichero xorg.conf en el editor de textos que elijamos. Pero habremos de recordar que las opciones para el comando Xorg pueden ignorar la configuracin en xorg.conf y pueden especificar qu hardware usar si hay ms de uno listado en xorg.conf. Tambin puede que tengamos que consultar nuestras especificaciones de tarjetas grficas y establecer una resolucin

EL AUTOR

WWW.LINUX- MAGAZINE.ES

Nmero 93

75

LINUX USER Lnea de Comandos: Xorg.conf

cualquiera que detecte. Seccin Descripcin Xorg se ha desaServerLayout Resumen de configuracin rrollado de manera Files Ruta a las fuentes de pantalla rpida y recienteModules Mdulos Xorg a cargar mente, de modo que algunas de las InputDevice Dispositivos de entrada secciones mencioMonitor Descripcin del monitor nadas en la pgina Device Descripcin de dispositivos grficos man de xorg.conf Screen Resolucin de pantalla y profundiodad de color puede que estn funcionando, mientras que otras pudieran estar obsoletas. Cada seccin comienza con el campo Section , el Figura 1: La seccin ServerLayout de xorg.conf es un resumen de la cual especifica lo seccin del fichero a usar en la pantalla del sistema. que se est definiendo en l. Acaba de pantalla antes de confiar en con EndSection o una nica lnea. Una xorg.conf. SubSection , que puede contener posibles resoluciones de pantalla y profunEstructura de xorg.conf didad de color en la seccin Screen, Tpicamente, xorg.conf consta de siete tiene una estructura similar. secciones (Tabla 1). Tambin pueden Dentro de cada seccin existe un haber otras, dependiendo de nuestro campo por lnea que define el hardware sistema y de lo que se detecte. Sin y sus capacidades. Las secciones para embargo, algunas secciones que no se hardware comenzarn por el campo mencionan en la tabla, como Keyboard Identifier e incluyen distintos campos (teclado) y Pointer (puntero), slo requeridos. Las configuraciones varias estn soportadas para compatibilidad se encuentran listadas bajo campos con versiones antiguas del hardware identificados como simplemente del fichero. Otras, como la seccin VenOption. Se utilizan tabuladores para dor (proveedor), tienden a no ser utiliseparar los nombres de campos y sus zadas, mientras que DRI parece estar valores, y ambas se encuentran encepreparada en gran medida para expanrradas en dobles comillas, excepto los siones futuras. campos Viewport y Depth en las subGeneralmente tendremos al menos secciones de la seccin Screen. En un dos secciones InputDevice, una para el fichero xorg.conf generado automticateclado y la otra para el ratn. Tammente, el driver Device puede incluir bin podemos tener mltiples secciouna larga lista de opciones comentadas. nes Monitor , Device y Screen . Sin Edicin de xorg.conf embargo, ninguna de ellas es necesaria. Si la informacin no est especifiPara al menos la mitad de las secciones cada en el fichero, Xorg recurrir a de xorg.conf incluyendo aquellas que

Tabla 1: Secciones xorg.conf Comunes

ms probablemente se necesitan para ajustes se puede recurrir al sentido comn. Por ejemplo, la seccin ServerLayout especifica los dispositivos utilizados para arrancar el sistema (Figura 1). En general, slo necesitamos editarla si tenemos ms de un dispositivo de la misma categora general por ejemplo, ms de un ratn o teclado o si cambiamos un campo en otra seccin como el Identifier. As, puede que necesitemos aadir una lnea si tenemos habilitadas dos tarjetas de vdeo o comentada la segunda entrada Screen si slo tenemos un monitor, pero no mucho ms. La seccin Files es incluso ms facil (Figura 2). Como contiene rutas a directorios que incluyen mdulos Xorg y fuentes del sistema, podemos aadir fcilmente nuestras propias rutas copiando y editando un campo existente. Sin embargo, otras secciones no son tan obvias. Por ejemplo, para editar la seccin Module, necesitamos buscar el ModulePath definido en la seccin Files (habitualmente, /usr/lib.xorg/modules) y luego hacer una bsqueda web para encontrar exactamente lo que hacen (Figura 3). Luego tenemos la opcin de usar un campo Load o Disable para listarlos en xorg.conf. De manera similar, la subseccin Display de la seccin Screen contiene dos campos en un fichero xorg.conf. Mirando la documentacin del sitio Xorg, encontraremos que Viewport define la parte superior izquierda de la pantalla con las coordenadas 0, 0, y podemos ignorarlo. Generalmente estableceremos la profundidad de color a 24 en cualquier monitor moderno (porque, como los usuarios de software libre sealan acertada, pero pedantemente, aunque los monitores modernos y las tarjetas de vdeo se describen

Figura 2: La seccin Files configura la rutas a los mdulos Xorg y fuentes del sistema.

Figura 3: Modules lista los mdulos Xorg a cargar cuando arranca el monitor.

76

Nmero 93

WWW.LINUX- MAGAZINE.ES

Lnea de Comandos: Xorg.conf LINUX USER

ciones de Screen, bien manteniendo uno o dos Modes alternativos o borrando todos excepto el que queramos usar. Figura 7: Consulte la documentacin de los resmenes Para las otras sec- de lo que controla cada opcin. ciones, puede que encontremos til cambiar el completa de todos los campos soportaIdentifier generado automtidos. La dificultad principal de la edicin Figura 4: Podemos configurar la profundidad de color y camente, a uno ms memorable (Figura 5). En otras palala resolucin en la subseccin Display. de las secciones de hardware de bras, en lugar de intentar xorg.conf es que las descripciones de recordar cul de los dos monialgunos campos tienen poco sentido tores es Monitor0 o Monitor para los no expertos. Muchos usuarios 1, es probable que prefiramos no trendrn que preocuparse de este identificar cada uno por el problema, pero si somos uno de los nmero de modelo y nombre que desafortunadamente lo hacemos, Figura 5: En las secciones hardware de xorg.conf, puede de fabricante, o quizs por sus puede que tengamos que vernos expeque deseemos cambiar los Identifiers a algo ms des- posiciones en nuestro escritorimentando con distintos campos y rio. criptivo que los predeterminados. combinaciones de campos o descomenPara otras secciones, como tando las opciones dadas en el fichero generalmente como de 32 bits de color, InputDevice , Monitor , Device y Screen automticamente generado. slo se usan 24 para tener informacin lo primero que debemos conocer son Automatizacin y Manual de color). los campos requeridos (Figura 6). Por alguna razn, los xorg.conf geneTodas las secciones hardware necesitan En este artculo slo he hecho una rados no incluyen el campo Modes, el un Identifier, y la mayora tambin introduccin breve a xorg.conf. El hardcual contiene una lista separada por requieren un driver. ware disponible y las combinaciones de tabuladores de los modos de vdeo Para la seccin Screen necesitaremos hardware posibles son extensas y camsoportados para la tarjeta de vdeo que un campo Device para configurar qu bian rpidamente. En consecuencia, queremos usar. Deben introducirse las tarjeta de vdeo utilizar y un campo una descripcin completa de xorg.conf resoluciones por orden de preferencia, Monitor para el monitor a usar sera al menos 10 veces ms larga que porque Xorg usar la primera vlida incluso a pesar de que nuestro sistema este artculo. Dada esta complejidad, que encuentre. No necesitamos listar slo tenga uno de cada. La seccin podemos comprender porqu mucho cada resolucin, pues puede que queScreen tambin requiere la subseccin del trabajo de configuracin de nuestra ramos listar varias opciones, especialDisplay , con al menos una entrada en pantalla se ha automatizado. En el mente si nuestro ordenador depende de ella (vase ms abajo). pasado, la configuracin manual de varios monitores. Tambin es probable Una vez configuradas las cosas bsixorg.conf, o XFree86Conf era tan comque deseemos incluir un respaldo de cas, tendremos que consultar tanto la pleja como la configuracin del fichero baja resolucin, como 640x480 o documentacin de Xorg como cualconfig.sys en un viejo sistema DOS. 800x600 en caso de problemas con la quier otra informacin que se proporSin embargo, como xorg.conf es un pantalla (Figura 4). cion con nuestro hardware. Tanto la fichero de texto plano, aquellos que Tambin podemos situar nuestro pripgina man de Xorg [2] como el sitio necesiten editarlo o sean bastante mer modo preferido en las configuraweb de Xorg nos ofrecen una lista curiosos pueden realizar ajustes manualmente. A pesar de la longitud del fichero, la mayor parte de l es fcil de entender. Por tanto, cuando lleguen las emergencias, cosa que inevitablemente ocurre de vez en cuando, necesitamos muy poco para apaarnos.

RECURSOS
[1] XRandR: https://en.wikipedia.org/wiki/RandR Figura 6: En las secciones especificadas de hardware de xorg.conf, la seccin contiene una lista de opciones, todas comentadas. Conviene consultar la documentacin para resmenes de lo que controla cada opcin. [2] Pgina man de Xorg: http://www.x.org/releases/X11R7.7/ doc/man/man5/xorg.conf.5.xhtml

WWW.LINUX- MAGAZINE.ES

Nmero 93

77

COMUNIDAD Konsultorio

EL KONSULTORIO DE KLAUS
Klaus Knopper es el creador de Knoppix y co-fundador de la LinuxTag Expo. En la actualidad trabaja como profesor, programador y consultor. Si tienes algn problema de configuracin o simplemente quieres conocer mejor cmo funciona Linux, no dudes en escribir tus preguntas a:
pero el valor es siempre 0 y el archivo no VmSwap en algunos directorios de proexiste en algunas distribuciones, como por ceso. ejemplo SUSE. La orden ps no tiene opciones especiales Hay alguna manera de encontrar esta para mostrar partes de un proceso que informacin? Muchas gracias por la ayuda. actualmente reside en la memoria de interDavid cambio, pero se puede ver otra informaEs cierto que la mayor parte de la cin relativa a la memoria en la salida (Lisinformacin por proceso se tado 2). encuentra en los archivos dentro del direcDesafortunadamente, el VSZ (tamao torio /proc/processnumber/, que el ncleo virtual) menos el RSS (tamao residente en mantiene como un sistema de archivos memoria) de cada proceso no es el nmero virtual, por lo que programas como ps de kilobytes que se intercambia, porque la pueden obtener informacin sin tener que memoria compartida con otros procesos, pasar por ms operaciones complejas bibliotecas y bferes especficos de proceso como ioctl() o llamadas de zcalo para tambin estn presentes en la suma del consultar dispositivo o la informacin del tamao virtual. ncleo. Para una visualizacin en tiempo real de Dado que el ncleo ha estado sujeto a la informacin por proceso relacionada con frecuentes cambios en los ltimos dos swap, podemos utilizar top. La herraaos, algunas de las estructuras de directomienta no muestra esta informacin por rio virtual y de archivo en /proc han camdefecto. Despus de iniciar top en la conbiado, por lo que la informacin que sola, utilizamos f para cambiar el formato y encontramos en la web acerca de ncleo luego ir al final hasta la opcin SWAP con 2.6 puede no ser cierta para la serie del la flecha hacia abajo y seleccionar la ncleo 3.x. Tambin, si est o no est preopcin con la tecla de espacio. Dejando el sente cierta informacin por proceso, men de opciones con q, se obtiene el depende de los perfiles y de las opciones de resultado que vemos en la Figura 1, donde depuracin establecidas en el momento de se muestra el intercambio en uso por cada compilar el ncleo. Por lo tanto, la preproceso en tiempo real. gunta tiene una respuesta en el nivel de zRam informacin del ncleo y otra a nivel de aplicacin. Knoppix 7.0.4 usa una nueva caracLa cantidad de memoria de proceso que terstica del ncleo llamada zRam, reside en un rea swap, puede leerse, como la cual es especialmente til en mquinas sugiere la informacin que has encontrado, con cantidades pequeas de RAM. Podra en la lnea que contiene VmSwap en /proc/processListado 1: Informacin de VmSwap number/status (Listado 1). 01 $ cat /proc/1/status 09 VmSize: 2248 kB La informacin de la 02 Name: init 10 VmRSS: 572 kB 03 State: S (sleeping) 11 VmData: 160 kB memoria slo est pre04 Tgid: 1 12 VmStk: 136 kB sente para los programas 05 Pid: 1 13 VmExe: 32 kB reales, no para hilos del 06 PPid: 0 14 VmLib: 1868 kB 07 [...] 15 VmPTE: 12 kB ncleo. Tal vez por eso no 08 VmPeak: 2300 kB 16 VmSwap: 72 kB se encuentra la lnea

preguntas@linux-magazine.es

Swap
Hola, Klaus: Mi pregunta es acerca de los procesos que ocupan la memoria de intercambio. Cuando un sistema Linux tiene ocupada la swap, no he encontrado ninguna manera de descubrir qu proceso lo est causando. He estado buscando pero no he encontrado ninguna solucin que funcione correctamente. Algunas personas dicen que el valor del proceso que ocupa la memoria de intercambio se puede encontrar en /proc/<num_proc>/status (lnea VmSwap), pero no existe la lnea VmSwap en este archivo. Otros dicen que se puede buscar en /proc/<num_proc>/smaps (lnea Swap),

78

Nmero 93

WWW.LINUX-MAGAZINE.ES

Konsultorio COMUNIDAD

Listado 2: Salida de ps
01 $ ps auxw 02 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 03 04 root 1 0.0 0.0 2248 572 ? Ss Sep27 0:01 init [5] 05 ...

explicar cmo activar esta caracterstica en Knoppix y cul es la mejor configuracin? zRam es un dispositivo de bloque del ncleo optimizado para su uso como espacio de intercambio en ram, el cual comprime los datos escritos en l y los descomprime para su lectura. Tan pronto como los programas se ejecutan sin RAM, trozos de datos en memoria se comprimen en el rea zRam y liberan la ubicacin original. Cuando se accede de nuevo a los datos que residen en zRam, estos se descomprimen y en caso de escasez de RAM, otros datos (no usados) se comprimen en zRam en su lugar. Hay que prestar atencin al script de arranque especfico de Knoppix /etc/init.d/ knoppix-autoconfig (Listado 3) para ver como se configura esta opcin. El listado muestra que se ha definido el 75% de la RAM real como espacio potencial para zRam, el cual se asigna segn la necesidad, pero se ha limitado el tamao de zRam a un mximo de 4GB. La idea detrs de esta eleccin es: no s la cantidad de RAM que se necesitar, tal vez queramos trabajar con grandes fotos en GIMP, por ejemplo, que pueden necesitar mucha ms RAM que la que tenemos para mantener la imagen descomprimida en la memoria. Por otro lado, si tenemos ms de 4GB de RAM disponibles reales (lo que significa que se inici con el ncleo de 64 bits), entonces es probable que no necesitemos ms de 4 GB adicional, por lo tanto el punto de corte es a 4 GB.

Esta frmula es, como muchas cosas en Knoppix, simplemente mi mejor estimacin personal y es el resultado de pruebas en distintos ordenadores. Figura 1: Orden top mostrando el uso de swap en la penlDado que tenemos que hacer tima columna. algunas configuraciones antes de la orden swapon real (definir el determinada 192.168.1.1 y no puedo camtamao y crear la firma de swap), tener biar la configuracin. Nada. simplemente una entrada /etc/fstab podra Cmo puedo acceder al router que se ha no ser suficiente. Por lo tanto, mantengo el configurado como puente? A qu direccdigo para zRam enteramente en /etc/ cin debo acceder? Antes de este proinit.d/knoppix-autoconfig. La activacin se blema, acceda a esta direccin con el hace all con: navegador o por SSH. Gracias por la informacin. Luiz /sbin/mkswap /dev/zram0 U En modo puente no se puede acce>/dev/null 2>&1 der al router a travs de una direc/sbin/swapon -p 0 /dev/zram0 U cin IP, de manera que ests bloqueado, >/dev/null 2>&1 al menos en lo concerniente a los puertos de red usuales. Sin embargo an hay Con Priority 0, zRam tiene menos prioriopciones para conseguir acceder al router dad que la RAM real, lo que significa que mientras el firmware siga operativo. Linux no intentar poner inmediatamente 1. Arrancamos el equipo en modo a cualquier cosa en zRam hasta que se agote prueba de fallos. Esto se realiza mantela RAM. Pero an tiene una mayor prioriniendo pulsado el botn dispositivo dad que la predeterminada -1 para un durante el arranque (es decir, justo despus espacio de swap en el disco. Esta de conectar la corriente). Un parpadeo configuracin es diferente de otros scripts rpido del LED es una indicacin de arranque se sugieren en Internet. que correcto en el modo a prueba de fallos. Haciendo cat /proc/swaps se muestra el Seremos capaces de alcanzar el disposiuso real de zRam (Listado 4). En este ejemtivo bajo la direccin predeterminada plo, hay presente otro espacio de intercam192.168.1.1 de nuevo, pero dado que no bio en la particin /dev/sda2, que est sin hay un servidor DHCP ejecutndose en uso en favor de zRam. este modo, tendremos que configurar el ordenador con una direccin IP, por ejemDireccin del plo, 192.168.1.2 [1]. Router 2. Usando un adaptador serie para acceListado 3: /etc/init.d/knoppix-autoconfig Estimado Klaus: der al dispositivo con un software de termi01 local zrsize=$(awk /MemTotal/{print int($2 * 75 / he comprado nal serie, como Minicom. Esto requiere 100); exit} /proc/meminfo) 02 let zrsize*=1024 un router TP-Link abrir la carcasa del router y hacer algunas 03 if [ $zrsize -gt 0 ] 2>/dev/null; then WR841nd y he instasoldaduras o comprar un cable adaptador 04 # Do we need > 4GB zRam if we already have > 4GB lado el software serie (teniendo en cuenta la geometra real RAM? Probably not. OpenWrt. Lo he conficorrecta de los pines y el voltaje) [2]. 05 [ $zrsize -gt 4294967296 ] && zrsize=4294967296 gurado como un 06 echo $zrsize > /sys/block/zram0/disksize puente y todo funcioRECURSOS 07 ... naba perfectamente [1] OpenWrt failsafe: desde que aad el PC http://wiki.openwrt.org/doc/howto/ generic.failsafe Listado 4: Resultado de cat /proc/swaps como conexin cable[2] Consola serie OpenWrt: ada. Pero ahora, no 01 Filename Type Size Used Priority http://wiki.openwrt.org/doc/hardware/ 02 /dev/zRam0 partition 1455152 21108 0 puedo acceder al rouport.serial 03 /dev/sda2 partition 4016244 0 -1 ter en la direccin pre-

WWW.LINUX-MAGAZINE.ES

Nmero 93

79

COMUNIDAD La Perrera: Software Preinstalado

ORDENADORES PEQUEINES
Una seleccin de tarjetas ultra pequeas permite que los futuros desarrolladores aprendan cmo crear y programar ordenadores. POR JON MADDOG HALL

omo algunos saben, empec en la universidad estudiando ingeniera electrnica despus de tres aos de electrnica en el instituto. En las clases, pasbamos casi la mitad del tiempo desmontando viejos televisores y radios para conseguir las piezas que necesitbamos para disear y construir otras nuevas. Estudibamos los fundamentos de las vlvulas (tubos para los americanos) y aprendamos cmo construir puertas lgicas con rels, vlvulas y unas cosas relativamente nuevas llamadas transistores; los circuitos integrados eran del futuro lejano. Los ingenieros tambin practicbamos la soldadura y el wire wrapping [1], adems de diseo. Recuerdo haber pagado 1,50$ por un nico transistor; y todava ms si se trataba de uno especial, como poda ser un transistor de potencia. Avanc rpido hasta 1975. Trabaj como ingeniero de software en una gran compaa de seguros y los microordenadores estaban empezando a llegar. Muchos de ellos se presentaban en forma de kit y eran bastante caros. Pas un montn de tiempo uniendo componentes con el soldador (y haciendo wire wrapping). A menudo, las instrucciones no coincidan con el esquema del circuito, que tampoco lo haca con el circuito impreso. Entonces, mi experiencia en ingeniera electrnica comenz a dar sus frutos. Poda ver el esquema de conexiones, comprobar si era correcto y averiguar qu parte de las instrucciones estaban mal. Mi experiencia tambin me ayud cuando el hardware (despus de mucho soldar) no funcionaba. Poda rastrear los problemas armados con tan slo un voltmetro a vlvulas [2] (por desgracia, he puesto otra vez en evidencia mi edad, ya que todas estas cosas ahora estn transistorizadas o son de estado slido).

Unos aos ms tarde, estaba enseando en una pequea universidad tcnica un curso de dos aos y constru un equipo llamado COSMAC ELF [3]. Los esquemas se publicaron en la antigua revista Popular Electronics. La creacin a partir de esquemas como estos en la actualidad se llamara Open Hardware. El ELF utiliza casetes de audio para almacenar los datos y una televisin analgica como monitor. Por aquellos tiempos, me interes en los circuitos integrados TTL (lgica transistortransistor) y en las placas de prototipos [4] que comenzaron a aparecer y que permitan conectar componentes con tan slo empujar los terminales en los orificios de la tarjeta (sin las patillas de una resistencia, un condensador, un circuito integrado o un simple puente de cable). Estos proyectos eran bastante caros y tena que pagar por los componentes electrnicos y las tarjetas de prototipos, as como por el equipo para probarlos e inyectar las seales en ellos. Sin embargo, segua siendo divertido construir circuitos electrnicos. Hace un tiempo, escrib acerca de la plataforma de hardware para prototipos Arduino [5] que te puedes construir t mismo a partir de esquemas o comprarla ya montada [6]. Hoy en da, sistemas como el BeagleBoard [7], el ms nuevo, ms pequeo y barato BEAGLEBONE [8] y el Raspberry Pi [9] facilitan an ms la construccin de tus propios proyectos. El BeagleBoard, introducido en 2008, actualmente cuenta a su alrededor con una gran comunidad de desarrolladores, con un desarrollo de software que funciona en

todos los sistemas operativos de escritorio y la capacidad de alojar varios sistemas operativos. Las modificaciones posteriores a la tarjeta base le han dado una mayor capacidad y, en el caso de la BEAGLEBONE, se ha vuelto ms pequea (como para caber en la sempiterna latita de Altoids) y ms barata (unos 84 dlares en comparacin con el precio superior del BeagleBoard a 149$). Por supuesto, el BeagleBoard tiene ms dispositivos hardware para jugar que el BEAGLEBONE pero el Bone queda muy, muy bien dentro de la lata de Altoids! El Bone tambin tiene capes, que son placas hijas de expansin similares a los shields de Arduino. El Raspberry Pi es el ms nuevo y menos costoso de los sistemas de desarrollo, que cuestan alrededor de 34$ (25$ para el modelo ms pequeo y sin Ethernet). En cierto modo, es menos potente que los sistemas de Beagle, pero en otros aspectos lo es ms (por ejemplo, el motor GPU ). Para cada uno de estos sistemas la apertura del proyecto permite que las personas experimenten y construyan cosas nuevas, a la vez que aumenten su conocimiento de electrnica y su interaccin con el software. El reducido coste de la Raspberry Pi permite a los patrocinadores educativos comprar unas cuantas unidades para las escuelas primarias y estimular as el inters por la ingeniera y la informtica. Las fuentes de alimentacin que se utilizan suelen ser inofensivas y los escolares tienen la oportunidad de aprender cmo controlar dispositivos mecnicos reales en vez de usar los ordenadores slo para jugar.

RECURSOS
[1] Wire wrapping: http://es.wikipedia.org/wiki/Wire- wrap [2] Voltmetro a vlvulas: http://www.ohio.edu/people/postr/bapix/vtvms.htm [3] Cosmac ELF: http://en.wikipedia.org/wiki/COSMAC_ELF [4] Placas de prototipos: http://es.wikipedia.org/wiki/Placa_de_pruebas [5] Despega! por Jon Maddog Hall, Linux Magazine 72: http://www.linux-magazine.es/issue/72/080-080_MaddogLM72.pdf [6] Arduino: http://www.arduino.cc/ [7] BeagleBoard: http://beagleboard.org/ [8] BeagleBone: http://beagleboard.org/bone/ [9] Raspberry Pi: http://www.raspberrypi.org/

80

Nmero 93

WWW.LINUX-MAGAZINE.ES

EVENTOS

Akademy 2013
Fecha: 13 - 19 Jul. Lugar: Bilbao, Espaa Web: akademy2013.kde.org

Debconf13
Fecha: 11 - 18 Agosto Lugar: Vaumarcus, Suiza Web: debconf13.debconf.org

Maker Faire Europe


Fecha: 03 - 06 Octubre Lugar: Roma, Italia Web: www.makerfairerome.eu

Calendario de Eventos Espaa e Hispanoamrica Evento FirefoxOS AppDay Akademy-es 2013 Akademy 2013 Resto del Mundo Evento International PHP Conference Berlin Buzzwords Secure Linux Administration Conference Internat. Supercomputing Conference Europython 2013 openSUSE Conference Guadec 2013 Debconf13 USENIX Security Maker Faire Europe LinuxCon Europe Linux Kernel Summit DebConf13

Fecha 01 Jun 11 - 12 Jul 13 - 19 Jul Fecha 02 - 05 Jun 03 - 04 Jun 06 - 07 Jun 16 - 20 Jun 01 - 07 Jul 18 - 22 Jul 01 - 08 Ago 11 - 18 Ago 14 - 16 Ago 03 - 06 Oct 21 - 23 Oct 23 - 25 Oct 27 - 28 Oct

Ciudad / Regin Valencia, Espaa Bilbao, Espaa Bilbao, Espaa Ciudad / Regin Berln, Alemania Berln, Alemania Berln, Alemania Berln, Alemania Florencia, Italia Salnica, Grecia Brno, Rep. Checa Vaumarcus, Suiza Washington, EE.UU. Roma, Italia Edimburgo, R.U. Edimburgo, R.U. Vaumarcus, Suiza

Sitio Web www.mozilla-hispano.org www.kde-espana.es/akademy-es2013 akademy2013.kde.org Sitio Web phpconference.com berlinbuzzwords.de www.heinlein-support.de/node/528 www.isc-events.com/ct.php?id=51 ep2013.europython.eu conference.opensuse.org guadec.org debconf13.debconf.org usenix.org/conference/usenixsecurity13 www.makerfairerome.eu events.linuxfoundation.org events.linuxfoundation.org wiki.debconf.org

Informacin de Contacto
Director Paul C. Brown Coolaboradores Jos Mara Ruz, Oliver Frommel, Klaus Knopper, Jose Mara Lancho, Paul C. Brown, Kristian Kissling, Martin Streicher, Joe Brockheimer Editores Alina Caravaca Chaves, Paul C. Brown Traductores Paqui Martn Vergara, Vctor Tienda, Francisco Molinero, Guillermo Cerezo Maquetacin Miguel Gmez Molina, Alina Caravaca Chaves Diseo de Portada Pinball info@pinball-werbeagentur.de Publicidad www.linux-magazine.es/pub/ Para Espaa Marketing y Comunicaciones anuncios@linux-magazine.es Tel.: (+ 34) 952 020 242 Fax.: (+ 34) 951 235 905 Para el Resto del Mundo Petra Jaser ads@linux-magazine.com Tel.: (+49) 8999 34 11 23 Fax.: (+49) 8999 34 11 99 Director Editorial Paul C. Brown Jefe de Produccin Miguel Gmez Molina Subscripciones: www.linux-magazine.es/magazine/subs Precios Subscripcin Espaa: 54,90 Europa: 64,90 Resto del Mundo - Euros: 84,90 subs@linux-magazine.es Tel.: (+34) 952 020 242 Fax.: (+34) 951 235 905 Linux Magazine Linux New Media Spain, S.L. Edfco. Hevimar, Planta 2, Ofic. 16 C/Graham Bell n 6 29590 - Mlaga ESPAA info@linux-magazine.es Tel.: (+34) 952 020 242 (+34) 951 235 904 Fax.: (+34) 951 235 905 www.linux-magazine.es - Espaa www.linux-magazine.com - Mundo www.linux-magazine.co.uk - Reino Unido www.linux-magazine.com.br - Brasil www.linux-magazine.pl - Polonia Si bien se toman todas las medidas posibles para garantizar la precisin del contenido de los artculos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores en sus artculos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupulosamente para confirmar que est libre de virus y errores. Copyright y Marcas Registradas 2013 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohbe la reproduccin total o parcial de los contenidos de Linux Magazine sin su permiso previo y por escrito. Linux es una Marca Registrada de Linus Torvalds. Impreso en Polonia Impresin: ArtDruck DVDs: Fermata Distribucin: SGEL Depsito Legal: MA-116-2005 ISSN edicin impresa: 1576-4079 ISSN edicin online: 1699-2237

WWW.LINUX- MAGAZINE.ES

Nmero 93

81

PRXIMO NMERO

Seguridad
La dependencia de las redes corporativas es, a estas alturas de siglo, total, y un administrador de sistemas ha de estar al tanto de todos los posibles agujeros de seguridad que puedan poner en peligro la integridad de los datos. El mes que viene examinamos la seguridad a varios niveles, desde el kernel para arriba, y examinamos casos de estudio de cmo los expertos tratan vulnerabilidades en sus sistemas.

Sguenos en nuestras redes sociales: Facebook: facebook.com/linuxmagazine.es Twitter: twitter.com/linux_spain Google+: plus.google.com/b/101673494113753130304/ Identi.ca: identi.ca/linuxspain/

YOICHI SHIMIZU, 123RF

A LA VENTA: JUNIO 2013


82
Nmero 93
WWW.LINUX- MAGAZINE.ES

Você também pode gostar