Está en la página 1de 84

NMERO 93 P.V.

P 6,95
CANARIAS P.V.P 7,05
LENGUAJE NATURAL
DVD de
Instalacin
Ms info
en pg. 3.
WWW. L I N U X - MA G A Z I N E . E S
LENGUAJE
NATURAL
Un vistazo al precursor
de KDE 5
8
4
1
3
0
4
2
5
9
4
5
0
5
0
0
0
9
3
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
GRATIS
KDE 4.10
Utiliza Maluuba para implementar la
comunicacin con lenguaje humano
en tus apps
MOVGRAB
Descarga vdeos de YouTube
y Vimeo desde la shell
MYPAINT
Diseo para
tabletas grficas
ARDUINO Y RFID
Crea dispositivos que detecten
tu presencia a distancia
Comunicacin humana
con tus apps
DVD
DEBIAN 7

D
V
D
D
E
F
E
C
T
U
O
S
O
?
Si crees que tu D
VD
est en m
al estado, escrbenos a
dvd@
linux-m
agazine.es para diagnosticarlo o para que
te enviem
os uno nuevo.
[1] Sitio de Debian:
http:// debian. org/
[2] Novedades de Debian 7:
http:// www. debian. org/ News/ 2013/
20130504
RECURSOS
Este DVD contiene Debian 7, un sis-
tema operativo Linux de corte profe-
sional completo y con aplicaciones lis-
tas para ser utilizadas. Debian viene en
versin de instalacin de 64 bits y est
listo para ser instalado en tu ordena-
dor.
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 arran-
que 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. Pos-
teriormente se guardan los cambios y
se sale de la herramienta de
configuracin para que se reinicie el
arranque. Como cada BIOS es dife-
rente, recomendamos consultar la
documentacin del fabricante para
realizar esta operacin.
Arranque
D
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, inclu-
yendo 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 infraes-
tructura de la administracin pblica de Extremadura e incluso para la red de usua-
rios 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.
3
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
EDITORIAL
4
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
E
s difcil imaginar un Concurso Uni-
versitario de Software Privativo
(Bases: 1.- Todo programa ir acom-
paado 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 abso-
luto, 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 pre-
sentaron 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 even-
tos 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 asocia-
cionismo 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 indi-
viduos 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 desarro-
llarse 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 desinteresa-
dos, 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 apa-
ta de los chavales son constantes en la
ecuacin y, por lo tanto, los podemos des-
cartar.
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 con-
curso se pueda achacar en parte al cansan-
cio del formato. ste no se ha modificado de
manera apreciable desde su creacin. Admi-
tido: a primera vista puede que haya poco
margen de maniobra en la fase de desarrollo
(aunque con lo que sabemos sobre gamifi-
cacin, 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 clara-
mente mejorable. Las presentaciones de dia-
positivas 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 fun-
cionamiento 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 proyec-
tos 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 con-
curso aragons? Una tableta de Samsung. En
el concurso de Sevilla ni siquiera se especi-
fica 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 apar-
tado. 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
Y EL GANADOR ES
10 Todo Natural
Aade procesamiento de lenguaje
natural a tus propias aplicaciones con
la API de Lenguaje Natural Maluuba
(nAPI).
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.
24 Justo Antes de las 5
KDE SC 4.10 se lanz seis meses des-
pus 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.
28 Enlaces Perdidos
LinkChecker nos ayuda a mantener
nuestro sitio web libre de enlaces
rotos.
31 Corredor Silencioso
Las tabletas y los smartphones alber-
gan memorias flash que ahorran espa-
cio y energa. Vamos a explicar las
caractersticas de los chips flash y
sugeriremos algunos sistemas de
ficheros apropiados para Linux.
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 defec-
tuosos.
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.
Schlagwort sollte hier stehen COVER STORY
47 Copias Personalizadas
Clonezilla consigue restaurar y reali-
zar 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.
52 Interfaz de Precisin
ifdata es una herramienta adecuada
para usarse en scripts y nos propor-
ciona una precisin absoluta a la hora
de obtener informacin del estado de
las interfaces de red, sin la necesidad
de extraer valores individuales.
53 Hecho para Servir
Cmo crear sitios web seguros con sus
propios privilegios bajo un mismo ser-
vidor.
EVALUACIN
DESARROLLO
DESARROLLO PRCTICO
ADMINISTRACIN
LI NUX MAGAZI NE
03 DVD Linux Magazine
04 Editorial
81 Eventos
81 Informacin de Contacto
82 Prximo Nmero
CONTENIDOS Linux Magazine n 93
6
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
PORTADA
55 Un Filtro Amistoso
Cmdfs crea sistemas de ficheros vir-
tuales filtrados basndose en una
estructura de directorios. Se puede
incluso integrar con otros programas
para convertir datos al vuelo.
58 Punto de Control
Los RFDIs son un tipo de dispositivo y
tecnologa qu utilizamos habitual-
mente cuando subimos en el auto-
bs,vamos al gimnasio o incluso para
fichar en el trabajo.
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.
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.
67 Tratamiento GUI
Si necesitas aadir elementos grficos
a un script Python, EasyGUI puede
ayudar a los principiantes y expertos
por igual.
72 Archivado Inteligente
Los portales de vdeo como YouTube o
Vimeo ofrecen todo un abanico de
pelculas cortas curiosas y entreteni-
das. Si deseamos disfrutarlas desco-
nectados de la red, una pequea
herramienta llamada Movgrab puede
ayudarnos.
75 Atentos a sus Pantallas
Entender xorg.conf nos hace ms fcil
el ajuste de la configuracin de nues-
tra pantalla.
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 Rou-
ter.
80 Ordenadores Pequeines
Una seleccin de tarjetas ultra peque-
as permiten que los futuros desarro-
lladores aprendan cmo crear y pro-
gramar ordenadores.
7
ADMINISTRACIN
HARDWARE
LINUX USER
LINUX USER
7
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
COMUNIDAD
V
e
r
p
0
3
p
a
r
a
m

s
d
e
t
a
lle
s
El Legado de Aaron Swartz
Aparte de escribir el manifesto en pro de
la documentacin acadmica libre, ayu-
dar 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 sensi-
ble, 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 iden-
tidad 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 progra-
madores de The New Yorker los que siguen desarrollando el proyecto, poniendo todo
el cdigo a disposicin del mundo bajo una licencia Aferro GPL.
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 uni-
versidades 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 Gra-
nada, la peor: La Univ. Online) y por
comunidad autnoma (la mejor: Islas Canarias, la peor: Comunida Foral de Nava-
rra).
8
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 con-
tratada por NASA para el mantenimiento
de los ordenadores de abordo de la Esta-
cin Espacial Internacional, el sistema a
migrar es la red OpsLAN
[] una red de porttiles que sumi-
nistra a la tripulacin de la ISS de capaci-
dades 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.
La distro elegida es Debian 6, con lige-
ras 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 enco-
mendado la formacin de los tcnicos a
cargo de la migracin.
NOTICIAS
8
WWW. L I NUX- MAGAZI NE. ES
NOTICIAS
[1] DeadDrop: http:// deaddrop. github. io/
[2] Implementacin de DeadDrop de The New Yorker:
http:// www. newyorker. com/ strongbox/
RECURSOS
[1] Ranking de Universidades de Software Libre:
http:// www. portalprogramas. com/ software-libre/ ranking-universidades/
[2] Resultados del Estudio: http:// www. portalprogramas. com/ software-libre/
ranking-universidades/ clasificacion
RECURSOS
[1] Nota de la Linux Foundation sobre la
migracin de la ISS:
http:// training. linuxfoundation. org/
why-our- linux-training/ training-
reviews/ linux-foundation- training-
prepares-the-international-space-sta
tion-for-linux-migration
RECURSOS
PORTADA Maluuba nAPI
10
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 herra-
mienta 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 respues-
tas JSON) o podemos utilizarla con una
de las libreras de cliente disponibles.
Actualmente, las implementaciones
nAPI estn disponibles en Python [2],
L
a tecnologa del procesamiento
de lenguaje natural ha visto una
mejora significativa en los lti-
mos 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 demos-
trando 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 tra-
ducir consultas en lenguaje natural en
solicitudes de descubrimiento local y
control sobre el telfono. Maluuba ha
surgido en este espacio con su aplica-
cin buque insignia de asistente perso-
nal para la plataforma Android, que
pronto se lanzar como aplicacin de
Windows 8.
Pero no necesitamos un telfono inte-
ligente 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 pro-
cesamiento de lenguaje natural en sus
propias aplicaciones. El API de len-
guaje 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 inter-
pretacin 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 recono-
cimiento de voz. Es importante enten-
Ruby [3] y Java [4]
en GitHub.
Cmo funciona?
Cuando nAPI de
Maluuba interpreta una
frase, responde con tres
piezas clave de informa-
cin. La primera pieza es una
identificacin de alto nivel lla-
mada category. La categora
devuelta ser una de las 22 catego-
ras diferentes que Napi distingue
[5]. Este conjunto de categoras abarca
una amplia gama de casos de uso habi-
tual, y la lista de categoras va cre-
ciendo con cada actualizacin nAPI. La
Tabla 1 muestra la lista de las catego-
ras que estn disponibles actualmente.
La lista de la Tabla 1 nos dar una idea
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
Tabla 1: Categoras nAPI
Categora Descripcin
BUSINESS Buscar comida o productos
CALL Realizar llamadas de telfono, responder y verificar llamadas perdidas
CONTACT Buscar y organizar la lista de contactos
KNOWLEDGE Preguntar una pregunta dentro de una gran variedad de temas
ENTERTAINMENT Verificar la disponibilidad de tickets y comprarlos para el cine o eventos
EMAIL Componer y buscar correo electrnico
HELP Pedir ayuda o soporte
TRAVEL Viajar a un destino por avin
MUSIC Controlar un reproductor de msica
CALENDAR Crear y administrar eventos en un calendario
WEATHER Preguntar acerca del tiempo atmosfrico
REMINDER Crear y buscar recordatorios
ALARM Configurar una alarma
TIMER Controlar un temporizador
STOPWATCH Controlar un cronmetro
NAVIGATION Buscar direcciones
TRANSIT Preguntar informacin relativa al trfico local
SEARCH Bsqueda web en los principales motores de bsqueda
TEXT Componer mensajes de texto
SOCIAL Acceder a las herramientas sociales
SPORTS Preguntas relativas a deportes
APPLICATION Abrir una aplicacin
mee-
ting
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 con-
tacts, 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
calendario estndar para
hacer los cambios necesarios
en nuestro calendario perso-
nal.
El Listado 2 muestra la res-
puesta de nAPI al comando
de lenguaje natural Cancel
my meeting with Joe. (can-
celar mi encuentro con Joe).
En este caso, la accin
CALENDAR_REMOVE_EVENT
especifica que se debera reti-
rar un evento del calendario.
La categora CALENDAR es
una caracterstica popular y
es una herramienta muy
poderosa para aadir coman-
dos de lenguaje natural a
aplicaciones de calendario
nuevas o existentes. Las
tablas 2 y 3 muestran las acciones y
entidades disponibles dentro de la
categora CALENDAR. Como se
puede ver, la combinacin
de entidades y accio-
nes abarcan una amplia
gama de posibles escena-
rios para crear, modificar y
eliminar los eventos del calen-
dario. Para ms informacin
sobre las opciones de calenda-
rio de nAPI de Maluuba, podemos
consultar la pgina de la categora
calendario [6].
Arrancando
Para empezar a consultar nAPI, pri-
mero 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 pro-
yectos de software libre o de uso pri-
vado, debemos mencionarlo en la soli-
citud. 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].
Maluuba nAPI PORTADA
11
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
rpida de los tipos de tareas que se pre-
tenden abordar con nAPI.
La segunda pieza clave de informa-
cin que se devuelve en la respuesta es
action. Una accin indica una intencin
particular dentro de la categora aso-
ciada con la frase. Podemos pensar en
la accin como una categora secunda-
ria. La ltima pieza de informacin que
se devuelve en el resultado es un con-
junto 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 enti-
dades.
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 cate-
gora pueden ser CALENDAR_
CREATE_EVENT y CALENDAR_
REMOVE_ EVENT para la creacin y
eliminacin de eventos en un calenda-
rio.
El Listado 1 muestra una respuesta
JSON de Maluuba a la orden Set up a
01 Ejemplo de resupuesta json:
02 {
03 entities: {
04 dateRange: [{
05 start: 2013-01-04,
06 end: 2013-01-05
07 }],
08 title: [meeting],
09 timeRange: [{
10 start: 12:00:00PM,
11 end: 12:00:00PM
12 }],
13 contacts: [{
14 name: joe
15 }]
16 },
17 action: CALENDAR_CREATE_EVENT,
18 category: CALENDAR
19 }
Listado 1: Configurar una Reunin
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 coman-
dos 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 pre-
paradas para responder preguntas.
Podramos utilizar nAPI para construir
un asistente de lnea de comandos per-
sonalizado que proporcione respuestas
sobre el tiempo atmosfrico actual de
cualquier ciudad del mundo. Utilizando
las mismas tcnicas, tambin podra-
mos ampliar el asistente para gestionar
las peticiones de las restantes 21 cate-
goras 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 capa-
ces. 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
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
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 lla-
mar a nAPI desde otro lenguaje de pro-
gramacin, deberamos ser capaces de
armar nuestro propio cliente utilizando
los mtodos de acceso directo HTTP.
Python es un buen lenguaje para pro-
bar nAPI una vez que consigamos
nuestra clave de API. La librera est
PORTADA Maluuba nAPI
12
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
01 Ejemplo de respuesta json:
02 {
03 entities: {
04 title: [meeting],
05 contacts: [{
06 name: joe
07 }]
08 },
09 action: CALENDAR_REMOVE_EVENT,
10 category: CALENDAR
11 }
Listado 2: Cancelar una Reunin
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]}
Listado 3: Ejemplo en Lnea de Comandos
Python
Tabla 3: Entidades de Calendario
Tabla 2: Acciones de Calendario
Entidad Descripcin
originalTitle El nombre del evento de calendario que queremos modificar
replacementTitle El nuevo nombre de un evento de calendario modificado
originalDate La fecha del evento de calendario que queremos modificar
replacementDate La nueva fecha del evento de calendario modificado
originalLocation La ubicacin del evento de calendario que queremos modificar
replacementLocation La nueva ubicacin del evento de calendario modificado
originalTime La hora del evento de calendario que queremos modificar
replacementTime La nueva hora del evento de calendario que queremos modificar
contactName El nombre de un contacto al que queremos invitar a una reunin
deleteContactName El nombre de un contacto a eliminar de una reunin existente
duration La duracin de la reunin
dateRange La fecha o rango de fechas para una reunin. dateRange incluye el da de
comienzo y excluye el da final
timeRange La hora de la reunin que queremos crear
repeatDaysLength El nmero de ocurrencias de una reunin como evento recurrente
lengthOfTime La duracin de una reunin
repeatDays Los das en que una reunin recurrente debera repetirse
meetingTitle El nombre de una reunin
location La ubicacin de una reunin
date La fecha de una reunin
Accin Descripcin
CALENDAR_CREATE_EVENT Configurar elementos de un calendario
CALENDAR_SEARCH Buscar algo en el calendario
CALENDAR_REMOVE_EVENT Eliminar eventos del calendario
CALENDAR_MODIFY_EVENT Modificacin directa de informacin de evento
CALENDAR_AVAILABILITY Verificar una hora sin reuniones
solicita la informacin del tiempo. El
sistema que ejecuta este software
podra tener una localizacin predeter-
minada, que podra servir como una
opcin por defecto de las solicitudes
sobre el tiempo. Esta informacin sobre
el posicionamiento podra obtenerse a
travs de una antena, o trazando una
direccin IP.
Cuando se trata de APIs, que necesi-
tan una ubicacin, a veces puede ser
difcil proporcionar la ubicacin en el
formato necesario. Wunderground
requiere una cadena de ubicacin pre-
definida o coordenadas GPS. En este
ejemplo se utilizar el mtodo de coor-
denadas GPS. Para obtener las coorde-
nadas GPS de la entidad de ubicacin,
vamos a utilizar una API geocodifica-
dora. (La geocodificacin es el proceso
de obtencin de las coordenadas GPS a
partir de una direccin escrita, formal o
ambigua).
El Listado 6 utiliza el geocodificador
Nominatim para buscar las coordena-
das GPS del lugar determinado. Nomi-
natim utiliza la coleccin de datos geo-
grficos libres que
gestiona el pro-
yecto OpenStreetMap. La versin ms
actualizada est disponible en la pgina
web de Nominatim [9]. Nominatim
Geocoder est disponible de forma gra-
tuita para uso no comercial y el servi-
dor 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 magnfi-
cas implementaciones para todas las
categoras y acciones soportadas por
nAPI para crear una aplicacin capaz
de manejar una amplia variedad de fra-
ses sobre diferentes temas. Este ejem-
plo 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 len-
guaje 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 tene-
mos menos interfaces disponibles.
el tiempo. La ventaja de nAPI es que
tambin podramos hacer esta misma
pregunta de diferentes maneras, por
ejemplo:
do i need an umbrella
will it be hot out
is it going to rain
nAPI por s mismo no sabe cmo est el
tiempo, pero muchas otras fuentes de
datos y APIs proporcionan informacin
meteorolgica. El Listado 5 muestra
cmo conectar la API de Weather
Underground para obtener informacin
sobre el tiempo. La API Wunderground
tambin requiere una clave de API para
la autenticacin. Las claves de uso gra-
tuito para desarrolladores estn dispo-
nibles en la pgina web de Weather
Underground [7], junto con detallada
documentacin.
Despus de conseguir una respuesta
JSON desde Wunderground, analiza-
mos las condiciones actuales de la ciu-
dad. En este ejemplo se supone que la
frase menciona la ciudad para la cual se
PORTADA Maluuba nAPI
14
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
01 from maluuba_napi import client
02 import optparse
03 import apis
04
05 def main():
06 p = optparse.OptionParser()
07 options, arguments = p.parse_args()
08 c = client.NAPIClient(NAPI-KEY-HERE)
09
10 phrase = .join(arguments)
11
12 r = c.interpret(phrase)
13
14 if r.category == WEATHER :
15 if r.action == WEATHER_STATUS :
16 if location in r.entities :
17 w = apis.WeatherClient()
18 location = r.entities[location][0]
19 temperature = w.query(location)
20 print The temperature in %(location)s is
%(temperature)s degrees celsius % vars()
21 else :
22 print Please specify a location
23 else :
24 print %s action is not supported in this demo
% (r.action)
25
26 if __name__ == __main__:
27 main()
Listado 4: maluuba.py
01 class WeatherClient(object):
02 BASE_URL = http://api.wunderground.com/api
03 API_KEY = /WUNDERGROUND-KEY-HERE
04 GEO_LOOKUP = /conditions/geolookup/q/
05
06 def query(self, location):
07 #Consulta a Nominatim para obtener GPS
08 l = LocationClient()
09 gps = l.query(location)
10 url = %s%s%s%s%s%s%s %
(WeatherClient.BASE_URL,
11 WeatherClient.API_KEY,
12 WeatherClient.GEO_LOOKUP,
13 gps.lat, ,, gps.lon,
14 .json)
15
16 #Llamada a Weather Underground
17 r = requests.get(url)
18 logging.debug(Called %s % r.url)
19 if r.status_code == 200:
20 #Analiza json y obtiene condiciones actuales
21 current =
json.loads(r.content)[current_observation]
22 temperature = current[temp_c]
23 return temperature
24 else:
25 logging.warn(Failure: %s % r.status_code)
Listado 5: WeatherClient de apis.py
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.
Maluuba es
capaz de dar
mejores respues-
tas cuando hay contexto sobre el usua-
rio que hace la pregunta. Este contexto
podra incluir la ubicacin geogrfica,
las listas de contactos y ms. La apli-
cacin Maluuba hace uso de esta
informacin de contexto, pero en la
actualidad nAPI no soporta estas
Los algoritmos de procesamiento de
lenguaje natural de Maluuba son alta-
mente escalables a muchas categoras.
Esto significa que, cuantas ms peti-
ciones se hacen, ms categoras se
aaden. La nAPI tendr al final cientos
de nuevas categoras y acciones, as
como entidades y acciones ms deta-
lladas adicionales a las categoras exis-
tentes.
Maluuba nAPI PORTADA
[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
RECURSOS
01 class LocationClient(object):
02 BASE_URL = http://nominatim.openstreetmap. org/
search.php?format=json&q=
03
04 def query(self, location):
05 url = %s%s % (LocationClient.BASE_URL,
location.encode(utf8))
06 r = requests.get(url)
07 if r.status_code == 200:
08 firstresult = json.loads(r.content)[0]
09 return GPS(firstresult[lat],
firstresult[lon])
10 else:
11 logging.warn(Failure: %s % r.status_code)
Listado 6: LocationClient de apis.py
PORTADA Simon
18
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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-
E
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 desarro-
llada para dar acceso al uso del PC sin
barreras a gente con necesidades espe-
ciales, 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 comunica-
cin por parte de los mayores o permite
a las personas controlar robots, sillas de
ruedas y ascensores. Sin embargo si lo
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-
Controlando Linux con la voz
rdenes claras
Simon es una sofisticada herramienta de reconocimiento de voz con un acceso sencillo a dos potentes moto-
res de reconocimiento de voz, Julius y CMU Sphinx. POR FALKO BENTHIN
Los usuarios de la versin de desarrollo
de openSUSE tienen el trabajo ms fcil
para instalar Simon: se pueden descar-
gar los paquetes binarios del OpenSuse
Build Service [7] y completar la instala-
cin 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 desempaque-
tarlo, cambiar al recin creado directorio
y ejecutar el script build.sh o
build_ubuntu.sh. Para completar la ins-
talacin sin errores puede que necesite-
mos resolver algunas dependencias con
antelacin [9].
Para descubrir completamente las
caractersticas de la interfaz de reconoci-
miento 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, Qaccessibility-
Client y Libkdepimlibs4). En la versin
0.4, Simon usa la mquina de reconoci-
miento de voz CMU Sphinx como su
motor predeterminado pero sigue per-
mitiendo Julius y el propietario HTK
Instalando Simon
O
l
g
a

Y
a
s
t
r
e
m
s
k
a
,

1
2
3
R
F
.
c
o
m
Facelift
Para reconocer
palabras , Simon
las dibuja en modelos acsticos
(modelos base) disponibles en tres
categoras: esttico, adaptado o gene-
rado completamente por el usuario. Los
modelos estticos predefinidos no pue-
den adaptarse a usuarios individuales:
para que funcionen correctamente el
usuario tiene que hablar como el autor
del modelo deseado.
Los modelos adaptados predefinidos
estn tambin disponibles, pero los
usuarios pueden entrenarlos para que
entiendan su voz y la manera de hablar
para aumentar la precisin. Aunque
debemos crear modelos generados com-
pletamente por el usuario, nos ofrece
los ms usados
pues son idea-
les para perso-
nas con proble-
mas de habla o
para fuertes
dialectos.
El uso de los
modelos adap-
tados o genera-
dos por el
usuario
requiere una
mquina de
reconocimiento
de habla como
CMU Sphinx y
Julius. Precau-
cin: los dos no
usan modelos compatibles, lo que
explica por qu no es recomendable
cambiar la mquina si tenemos un
modelo bien entrenado.
La versin actual de Simon reconoce
el modelo que usamos y automtica-
mente selecciona el motor correcto. Un
buen lugar para buscar modelos adapta-
bles es la funcin de descarga de Simon
Configuracin | Configurar Simon |
Modelos de lenguaje | Abrir modelos |
Descargar, o el proyecto Voxforge [10].
Despus de descargar el modelo
desde Voxforge primero necesitamos
importarlo. Por ejemplo, para usar el
modelo alemn CMU Sphinx debera-
Simon PORTADA
19
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
den Markov Model (HTK) [5] y el dic-
cionario 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 mues-
tras Simon Simon Sample Collector SSC.
Iniciando Simon
Despus de la instalacin (ver Insta-
lando Simon), Simon aparece en el
men de inicio del entorno de escritorio
debajo de Accesibilidad. Alternativa-
mente se puede iniciar la aplicacin con
la orden simon en la lnea de rdenes.
En el primer lanzamiento, se des-
pliega un asistente para guiarnos a tra-
vs 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 ini-
ciarse automticamente. Simon se ase-
gura 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 sepa-
rado 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 pos-
teriormente nos remite a la ventana
principal de la aplicacin (Figura 3).
Figura 1: Un asistente de configuracin ayuda a la configuracin de
Simon en un suspiro.
Figura 2: Mltiples tarjetas de sonido y micrfonos en webcams USB
no son un problema para Simon.
Figura 3: Escenarios disponibles, palabras reconocidas, estado de la
conexin: Simon presenta una vista limpia y una visin global en la ven-
tana principal. Se puede acceder a muchas funciones con un clic.
tente, que ten-
dremos que
completar en la
mayora de los
casos (Figura 4)
Al contrario
que muchos
sistemas
comerciales de
reconocimiento
de voz con
modelos de len-
guaje prefabri-
cados, los pro-
blemas de
idioma no son
un gran pro-
blema para
Simon. Adems de los modelos lings-
ticos y acsticos previamente construi-
dos los usuarios pueden tambin crear
sus propias versiones personalizadas
enseando a Simon las palabras que
necesita.
Ensearle es bastante sencillo. La
dificultad es que las palabras tienen que
ser asignadas a terminales (verbos,
pronombres, etc, tambin llamados
categoras en Simon) y romperlas en
fonemas. Dado que los no lingistas
pueden tener problemas, Simon ofrece
la importacin de diccionarios en la
sombra. Adems de tener muchas pala-
bras, los diccionarios en la sombra
incluyen la informacin necesaria sobre
pronunciacin basada en fonemas ter-
minales. Las palabras disponibles aqu
se aaden fcilmente al vocabulario de
Simon. Si falta una palabra, se pueden
usar otras existentes como ejemplos.
Simon permite los diccionarios en la
sombra en los formatos Hadifix, HTK,
PLS, CMU
Sphinx y Julius,
los cuales se
pueden cargar
presionando el
botn Importar
Diccionario.
Suele esperar
una ruta para
un archivo
localizado en el
ordenador, pero
en caso del dic-
cionario ale-
mn Hadifix,
un acuerdo con
la Universidad
de Bonn permite a los usuarios descar-
gar el diccionario Hadifix Bomp directa-
mente. Para hacer esto necesitamos
especificar el nombre y la direccin de
correo y aceptar la licencia de Bomp
que no es libre pero s gratis.
Entrenamiento
Para aadir una nueva palabra a un
escenario (Figura 5) necesitamos entre-
nar al menos dos veces es decir, decir
la palabra ante el micrfono para
acostumbrar a Simon a nuestra voz y
pronunciacin. Si el escenario slo
necesita unas pocas palabras la tasa de
reconocimiento es bastante aceptable
tras dos rondas de entrenamiento. Sin
embargo el entrenamiento adicional
incrementa la tasa de aciertos y vale la
pena especialmente cuando el vocabu-
lario aumenta o cuando tenemos pala-
bras que suenan parecido.
Se pueden entrenar palabras de forma
dirigida presionando Entrenar Palabras
individuales para aadirlas a una sesin
de entrenamiento (Figura 6). Si despus
queremos exportar el escenario y as
ponerlo a disponibilidad de la comuni-
dad Simon, definitivamente es preferi-
ble crear textos especialmente entrena-
dos. Simplemente cambiamos a la sec-
cin Entrenamiento y pulsamos en el
botn Aadir Texto. Podemos o impor-
tar o introducir el texto manualmente
para entrenar el vocabulario completo
para el escenario.
Una vez que tenemos el texto de
entrenamiento podemos empezar a
entrenar en la ventana principal o en el
escenario abierto apretando el botn
apropiado. De manera predeterminada
Simon graba las respectivas lineas del
mos descargar el modelo desde Vox-
forge y desempaquetarlo. Despus en la
configuracin del modelo de lenguaje
en vez de seleccionar descarga, selec-
cionamos Crear desde los archivos del
modelo e introducimos la ruta de los
archivos requeridos. El proceso fun-
ciona de la misma manera para todos
los lenguajes disponibles, o para los
modelos Julius.
Escenarios
Dentro de Simon hay aplicaciones espe-
ciales para el reconocimiento de voz
definidas como escenarios. Los escena-
rios tpicos pueden estar controlando el
puntero del ratn o el navegador con la
entrada de voz. El equipo de Simon ya
ha coleccionado algunos escenarios
comunes que podemos cargar en Gestio-
nar escenarios | Abrir | Descargar. Si
estamos usando un modelo adaptado o
esttico bsico, debemos asegurarnos
que el lenguaje objetivo y el modelo
acstico coinciden. Es importante usar
el mismo set de fonemas para el escena-
rio y el modelo bsico.
Probablemente queramos crear nues-
tros propios escenarios por ejemplo, si
no podemos encontrar lo que necesita-
mos en la seccin de descargas o los
escenarios existentes usan mal el
modelo bsico. Alternativamente pode-
mos aadir nuevas palabras en escena-
rios existentes como Estndar.
Podemos aadir escenarios seleccio-
nando Gestionar escenarios. Para relle-
narlos con nuestras propias palabras,
simplemente pulsamos en Abrir <nom-
bre_de_escenario>. Entones Simon
muestra la lista de vocabulario exis-
PORTADA Simon
20
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 4: Primero necesitamos poblar nuestros propios escenarios con el
vocabulario preciso.
Figura 5: Despus del entrenamiento individual, las palabras se recono-
cen de forma fiable.
diferentes acti-
vidades con
rdenes de voz.
Entonces el
ordenador pon-
dr en funcio-
namiento pro-
gramas (Pro-
grama), emu-
lar pulsacio-
nes de teclado
o abrir carpe-
tas y sitios web.
Adicionalmente
podemos mover
el cursor del
ratn sobre el
escritorio,
seleccionar ele-
mentos de una
lista o insertar
bloques de texto con la ayuda de los
complementos, as como dictar letras y
nmeros, usar una calculadora o practi-
car pronunciacin y comprobar la con-
formidad con un modelo bsico.
Las rdenes compuestas ejecutan
acciones mltiples una detrs de otra.
Describir todos los complementos de
rdenes en detalle va ms all del
alcance de este artculo, as que es
mejor leer el detallado manual de
Simon para tener ms informacin
Seleccionando Gestionar Complemen-
tos (Figura 7) podemos cargar comple-
mentos y luego usar Orden Nueva para
vincular determinadas acciones a una o
ms palabras. Cuando Simon reconoce
una palabra funciona en el sentido de
los complementos de orden hasta que
encuentra una que puede procesar la
entrada y luego realiza la accin apro-
piada.
En la seccin opcional
Contexto se pueden defi-
nir las condiciones bajo
las cuales Simon habi-
lita un escenario. Por
ejemplo podemos esti-
pular que el escenario
Firefox slo se habilita
si el navegador Mozilla
est funcionando. As se
pueden usar rdenes
idnticas en diferentes
escenarios para empe-
zar diferentes acciones.
Entre las posibles
condiciones se incluye,
por ejemplo, si una ventana en particu-
lar est en primer plano en el escritorio
(Condicin de Ventana Activa), si una
webcam reconoce una cara en frente del
ordenador (requiere OpenCV), si ciertos
procesos estn funcionando o de qu
estatus de programas informa a D-Bus.
Adems podemos comprobar archivos
para un contenido especfico. Cuando
cambiamos algo del escenario o pala-
bras entrenadas, Simon actualiza el
modelo acstico construido y las nue-
vas palabras estn disponibles inmedia-
tamente. La ventana principal siempre
muestra las ltimas palabras reconoci-
das estn o no vinculadas a una orden
(Figura 8)
Mientras Simon escucha est dis-
puesto a reconocer palabras. Por lo
tanto una respiracin profunda puede
interpretarse como una orden de voz o
una conversacin con otra persona
puede hacer que el ordenador juegue
malas pasadas. Para evitar estos falsos
positivos tiene sentido iniciar todas las
ordenes de voz con una palabra dispa-
radora como ordenador o abracada-
bra. Para que el ordenador sea capaz
de interpretar esto, es necesario modifi-
car la gramtica.
Adems los desarrolladores estn
actualmente trabajando en consultar el
movimiento de los labios para minimi-
zar las rdenes de falsos positivos: si
Simon no ve una cara o el movimiento
de los labios durante la entrada de voz,
la idea es que la palabra probablemente
sea ruido de fondo que se debe ignorar.
CMU Sphinx y Julius
Como se ha mencionado Simon puede
trabajar con mquinas de reconoci-
texto de entrenamiento, una o varias
palabras de manera separada. Si parece
muy complicado presionar el botn Gra-
bar para cada palabra (empezar y parar
de grabar), podemos seleccionar Entre-
namiento con Energa. Ahora simple-
mente tendremos que presionar el
botn Siguiente para recorrer el texto de
entrenamiento sin demasiados clics.
La gramtica de un escenario hace
exactamente lo que sugiere el nombre:
define las reglas que determinan la
forma en la que el vocabulario puede
aparecer. As Simon puede interpretarlo
significativamente. No necesitamos
adherirnos a las estructuras de lenguaje
hablado, sino que podemos crear nues-
tra propia gramtica como Nombre de
Verbo o Nombre de Enumerador. Sim-
plemente debemos asegurarnos de vin-
cular a las categoras que realmente
aparecen en el vocabulario existente.
Las categoras no estn grabadas en
piedra sino que se pueden aadir y
cambiar de forma que, adems de los
sustantivos, verbos, etc, se pueden usar
disparadores, rdenes y otras golosinas.
Se pueden fundir categoras existentes
para simplificar la estructura gramatical
del vocabulario en el diccionario.
rdenes
La ltima seccin en el escenario la
comprenden las rdenes. Aqu se deter-
mina lo que hace Simon con las pala-
bras reconocidas. Varios complementos
de rdenes permiten controlar el orde-
nador y se pueden fcilmente vincular
PORTADA Simon
22
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 7: Los complementos de rdenes verstiles habilitan un
gran nivel de control sobre varias funciones del ordenador.
Simon comprueba secuencialmente qu complemento puede
manejar una palabra reconocida.
Figura 6: Entrenar sesiones especficamente diseadas para un escenario
ayuda a Simon a aprender rpidamente todo el vocabulario necesario.
miento de voz como Julius y CMU
Sphinx. Cuando se configura Sphinx-
base, Pocketsphinx y Sphinxtraining
debemos cambiar los prefijos de /usr/
local a /usr, o al menos aadir enlaces
simblicos apropiados.
Los ayudantes como los enlaces sim-
blicos son tambin obligatorios si ins-
talamos 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 nues-
tro laboratorio. Fui incapaz de solucio-
nar 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 genera-
dos 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 tr-
minos de facilidad de uso. La versin
actual 0.4 ofrece una experiencia de
usuario muy mejorada, el motor adicio-
nal de reconocimiento de voz CMU
Sphinx y el reconocimiento de contexto
en la forma de Afaras y Simonoid. Afa-
ras 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 tec-
nologa Peter Grasch tiene planes ambi-
ciosos: se est tratando de completar lo
que antes eran caractersticas experi-
mentales, como la deteccin de labios.
Adems, el equipo est colaborando con
diversos asociados, como las universi-
dades de Bonn y Graz. El Instituto para
el alemn de Austria (Institut fr ste-
rreichisches Deutsch) ha permitido que
el proyecto acceda a la base de datos
Adaba [8], lo que podra dar lugar a un
modelo alemn
bsico disponi-
ble gratuita-
mente. Como
otro hito impor-
tante en el
camino a la ver-
sin 0.5, los
desarrolladores
estn tratando
de integrar el
AT SPI2
(entorno de tra-
bajo Assistive
Technology Ser-
vice Provider
Interface 2
[12]) con Simon.
En este artculo slo hemos echado
un vistazo a la interfaz de Simon. Otras
partes interesantes del proyecto Simon
Listens son Sam y SSC. Sam es una
herramienta que permite a los usuarios
crear y probar modelos acsticos.
Simon posteriormente pude importar
estos modelos. Simon Sample Collector,
SSC, se usa para coleccionar ejemplos
de diferentes hablantes y entornos de
usuario para desarrollar nuevos mode-
los bsicos. Adems con la aplicacin
MeeGo, Simon, permite a los usuarios
controlar el ordenador va smartphone.
Meego es el sistema operativo mvil
de cdigo abierto basado en Linux que
se cre en 2010 siguiendo una fusin de
sus antecesores Maemo (Nokia) y
Moblin (Intel). Ahora est bajo los aus-
picios de la Linux Foundation, pero se
fusionar a medio plazo con el SO Tizen
smartphone.
El motivado equipo de desarrollo de
Simon se ha mantenido bastante mane-
jable con los aos y da la bienvenida a
nuevos miembros. Adems de los pro-
gramadores (C + +, Qt) pueden parti-
cipar las personas que deseen crear
escenarios, ampliar la documentacin,
o localizar Simon en su lengua materna.
Conclusiones
Simon es una herramienta de reconoci-
miento 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 completa-
mente estable, la aplicacin no fall ni
siquiera una vez.
Como guinda del pastel Simon da
fcil acceso a las sofisticadas mquinas
de reconocimiento de voz Julius y CMU
Sphinx, que han sido desarrolladas
durante varios aos. Aunque an no es
capaz de escribir cartas o informes
mdicos, cuando se trata de controles,
Simon ya tiene al ordenador siguindolo
al pie de la letra.
Simon PORTADA
23
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[1] Asociacin Simon Listens:
http:// www. simon-listens. org/
[2] Simon:
https:// projects. kde. org/ projects/
extragear/ accessibility/ simon
[3] CMU Sphinx:
http:// cmusphinx. sourceforge. net/
[4] Julius:
http:// julius. sourceforge. jp/ en_index.
php
[5] HTK:
http:// htk. eng. cam. ac. uk/
[6] Hadifix Bomp:
http:// www. sk. uni-bonn. de/
forschung/ phonetik/ sprachsynthese/
bomp
[7] Voxforge:
http:// www. voxforge. org/ home
[8] Adaba:
http:// www-oedt. kfunigraz. ac. at/
ADABA/ index. html
[9] AT SPI2:
http:// www. linuxfoundation. org/
collaborate/ workgroups/
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 dependen-
cias:
http:// userbase. kde. org/ Simon/
Development_Environment#Compil
ing
RECURSOS
Figura 8: Simon muestra coincidencias en la ventaja principal indepen-
dientemente de si han sido vinculadas a una orden.
E
l nuevo KDE Software Compilation
(KDE SC), al igual que su predece-
sor, comprende la interfaz Plasma
para varias plataformas (escritorio, net-
book, Plasma Active) [1], las aplicaciones
[ 2] y la arquitectura base [3]. La arquitec-
tura a su vez consiste en el gestor de ven-
tanas 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 ver-
sin en unir los componentes anterior-
mente separados de la plataforma de
desarrollo [4] en la forma de la herra-
mienta Plasmate [5]. El proyecto ha
venido desarrollando la herramienta
desde comienzos de 2010 como una espe-
cie de mini-SDK para la programacin de
plasmoides, motores de datos y plugins de
bsqueda para programas de plasma, aun-
que fue pensado principalmente para
Plasma Active [6]. Debido a que los de sa -
rrolladores 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 ven-
tanas KWin. Una innovacin ms superfi-
cial 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 Cha-
kra 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 intro-
duccin del lenguaje de scripting declara-
tivo QML en la librera de clases de C++.
Desde entonces, se han podido crear inter-
faces basadas en Qt con el nuevo UI Cre-
acin Kit de Qt (Qt Quick). Hasta el
momento, ha sido utilizado principal-
mente 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 panta-
lla animados. La migracin a cdigo QML
que est ocurriendo tras el escenario se
debe principalmente a razones estratgi-
cas y tecnolgicas. Por ejemplo, debido a
que los widgets ahora se crean con la con-
tencin 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 excep-
ciones, una de las cuales es el nuevo blo-
queador 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 ven-
tana es ahora ligeramente transparente y
moderadamente animada al introducir
una contrasea incorrecta. El nuevo blo-
queo de la pantalla tambin es mucho
ms seguro, ya que ya no se esquiva el
servidor X.
Kdevelop
Un efecto secundario positivo de la intro-
duccin de Qt Quick es que un nmero
creciente de desarrolladores de Qt contri-
buyen directamente a KDE, como pone de
ejemplo el entrenador de mecanografa
KTouch [9]. El programa no se haba man-
tenido desde 2007 y fue creado original-
mente con QT Designer. El desarrollador
de Qt Sebastian Gottfried [10] revis com-
pletamente 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 esta-
dstica de nuestras habilidades despus de
cada leccin. El grfico mostrado en este
proceso fue escrito en QML. De inters pri-
mario para los desarrolladores de KDeve-
EVALUACIN KDE 4.10
24
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 com-
pletamente en Qt5 y QML. POR THOMAS DRILLING
Johann Helgason - 123RF.com
lop es que ahora cuenta con una unidad de
pruebas unitarias. Adems, la nueva ver-
sin tiene un plugin QML. Los programa-
dores ya no tienen que recurrir a Qt Crea-
tor para escribir cdigo QML. Sin embargo,
el plugin QML se encuentra todava en una
etapa temprana de desarrollo. Por otra
parte, la versin actual de KDevelop final-
mente porta todas las clases de Qt3 a Qt4,
por su propia cuenta, que es en lo que el
equipo de KDevelop estuvo trabajando
principalmente durante el ao pasado.
KWin
El gestor de ventanas KWin tambin viene
con un buen nmero de innovaciones y
una extirpacin: los desarrolladores han
eliminado la capacidad de organizar las
ventanas en mosaico, porque la funcin
caus diversos problemas en el pasado.
Aunque se podra implementar una fun-
cin idntica como un plugin que haga
uso de la API JavaScript de KWin. Es slo
una cuestin de encontrar a alguien que lo
desarrolle. Uno de los cambios ms evi-
dentes es la animacin al maximizar o
minimizar ventanas. Bajo ciertas condicio-
nes, KWin ahora tambin detecta cuando
se est ejecutando en una mquina virtual
y cambia a composicin OpenGL, en caso
de ser posible. En combinacin con el con-
trolador de grficos propietario de AMD,
KWin incluso soporta OpenGL 2. Adicio-
nalmente, integra el proyecto GHNS (Get
Hot New Stuff) [11], lo que permite a los
usuarios descargar y activar los efectos y
scripts adicionales (vase la Figura 1).
Con el uso de los scripts, podemos
incluso controlar o cambiar el aspecto y el
comportamiento de las ventanas en el
mdulo responsable de KWin. En la
configuracin del sistema, buscamos bajo
la seccin Apariencia y comportamiento
del entorno de trabajo y pulsamos en Com-
un parche Qt [13] hace ms de un ao
para que esta funcin estuviese disponible
en l. En KDE 4.10, el nuevo men de la
aplicacin ya est disponible para todos
los usuarios, a condicin de que se instale
la librera Appmenu-Qt. El nuevo men de
aplicacin implica que varias aplicaciones
utilizan un men global comn con un
estilo similar a la Unity o Mac OS, donde
slo el men de la aplicacin activa es
visible en cualquier momento. En el modo
Men en la parte superior de la pantalla,
KWin muestra el men en una barra de
men en la parte superior de la pantalla
(vase la Figura 4). KDE muestra este
men al mover el ratn por el borde supe-
rior de la pantalla. El comportamiento es
similar al comportamiento por defecto en
Unity y tambin funciona en el modo de
mltiples pantallas, pero por ahora slo
con el tema Oxygen por defecto.
Nepomuk
Los desarrolladores de KDE han eliminado
numerosos errores del motor de metada-
portamiento de venta-
nas | KWin Scripts
(vase la Figura 2).
Una de las nuevas
funcionalidades ms
importantes en KWin
es el uso de los enlaces
X-C para toda una serie
de operaciones, con la
intencin de cambiar
desde la librera gen-
rica X11 Xlib a la nueva
capa de abstraccin
XBC en un futuro pr-
ximo. Este movimiento
es un requisito previo para el cambio a Qt
5 que introduce el entorno de trabajo KDE
5. A cambio, requiere el nuevo servidor de
pantallas Wayland o XCB. El mantenedor
de KWin Martin Graesslin analiza el
estado de la migracin desde xlib a XCB
en su blog en [12] y tambin habl en el
FOSDEM de este ao sobre XCB y Way-
land. En opinin del Graesslin, la novedad
ms interesante de KWin para los usuarios
es, sin embargo, la
barra de mens oculta,
que se puede activar en
el mdulo Apariencia
de aplicaciones de la
configuracin del sis-
tema, pulsando la pes-
taa Ajuste fino bajo
Estilo. Por ejemplo,
podemos establecer el
Estilo de la barra de
mens a Botn de la
barra de ttulo o Men
en la parte superior de
la pantalla (vase la
Figura 3).
Barra de Mens
Oculta
Los desarrolladores de
KWin han desarrollado
esta funcin basndose
en Unity y MacOS. Los
usuarios de Unity en
Ubuntu han tenido la
capacidad desde hace
algn tiempo para deci-
dir si mostrar la barra
de men de una aplica-
cin en la barra supe-
rior y no en la ventana
de la aplicacin. El
equipo de Kubuntu de -
sarrollo por separado
KDE 4.10 EVALUACIN
25
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 1: Scripts KWin para descargas ampliadas.
Figura 3: El nuevo men de aplicaciones soporta diferentes apa-
riencias.
Figura 2: Los scripts amplan el comportamiento del gestor de
ventanas KWin.
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 informa-
cin ms amplia de los archivos, pero slo
si los recursos necesa-
rios estn disponibles.
La reescritura ha de -
sechado algunos forma-
tos de archivo compati-
bles anteriormente,
pero se reintroducirn
en la prxima versin
de KDE 4.11. El nuevo
indexador tambin pro-
porciona filtros que nos
permiten restringir la
indexacin de ciertos
tipos de archivos, y los
desarrolladores de KDE
han reescrito por com-
pleto la aplicacin de
copia de seguridad de
Nepomuk. Tambin se
incluye una nueva
herramienta para lim-
piar los datos corrup-
tos, el Nepomuk Clea-
ner. Adems, un nuevo
kioslave con el nombre
tags nos permite bus-
car etiquetas en cual-
quier aplicacin KDE.
Nuevas
Aplicaciones
Nucleares de
KDE
KDE SC 4.10 tambin
introduce un buen
nmero de innovacio-
nes en el campo de las
aplicaciones fundamen-
tales de KDE. Por ejem-
plo, se incluye un
nuevo Administrador
de Impresin para la
configuracin de impre-
soras y la administra-
cin de trabajos de
impresin. Adems, el
gestor de archivos Dol-
phin ahora puede ges-
tionar dispositivos
MTP, lo que simplifica
la transmisin de datos
a los dispositivos mvi-
les. El editor de texto Kate soporta ahora
plugins Python, esquemas de colores pre-
definidos 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). Tam-
bin 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 dis-
ruptiva. 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 pode-
mos cambiar el espaciado de lnea en la
consola.
Otras Aplicaciones de KDE
El cliente de correo electrnico y de group-
ware Kontact ahora indexa y busca correo
electrnico ms rpido en la nueva ver-
sin. KMail incluye ahora un corrector
ortogrfico automtico configurable, cam-
bio de tamao de imagen automtico, y
un asistente de importacin mejorado, y
ahora tambin puede buscar en las libre-
tas 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 rpida-
mente 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 disposi-
tivo 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 Agen-
cia Espacial Europea, ESA [15], ha reali-
zado mejoras al globo terrqueo de escri-
torio 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
tos Nepomuk, el escritorio social semn-
tico. 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
EVALUACIN KDE 4.10
26
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 4: KDE ahora tambin soporta una barra de mens oculta
al estilo de Unity y MacOS.
Figura 5: El entorno de indexacin y bsqueda Nepomuk se ha
reescrito completamente.
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.
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 pue-
den asociar varios archivos a una activi-
dad. 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 Con-
nect [17] de momento est slo disponible
en Plasma Active, no en KDE SC 4.10.
El Futuro
Adems del mantenimiento de los cam-
bios, el principal estandarte de la versin
de KDE 4.10 era portar toda la interfaz de
C++ a QML, que entre otras cosas, mejo-
rar la apariencia de los espacios de tra-
bajo 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 bina-
rio mediante la re-implementacin en Qt5
y QML, facilitando as la transicin entre
los diferentes factores de forma. El desa -
rrollador 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
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 com-
ponentes integrales de
KDE, como la barra del
sistema, el bloqueador
de pantalla, etc. La
migracin de los escri-
torios Plasma a QML los acomoda con un
nuevo aspecto, aunque no todos los usua-
rios se darn cuenta de inmediato. En la
mayora de las migraciones a QML, los
desarrolladores
de KDE estn
buscando pre-
servar la fun-
cionalidad y el
aspecto de las
aplicaciones
siempre que
sea posible,
sobre todo para
los widgets de
escritorio. KDE
SC 4.10 todava
no implementa
contenciones
(es decir, dise-
os para el
escritorio
Plasma) en
QML, a pesar
de que ya
existe una versin preliminar del diseo
de escritorio [20]. KDE SC 4.10 es un exi-
toso paso intermedio en la ruta hasta KDE
Framework 5.
KDE 4.10 EVALUACIN
27
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 7: El visor de PDF tiene una nueva y eficiente funcin de
zoom.
Figura 8: Se han incorporado un buen nmero de innovaciones al
globo terrqueo Marble 3D.
[1] Espacios de trabajo KDE:http:// www. kde. org/ workspaces/
[2] Aplicaciones KDE 4.10:http:// www. kde. org/ applications/
[3] Plataforma KDE 4.10:
http:// kde. org/ announcements/ 4. 10/ platform. php
[4] Plataforma de desarrollo KDE:
http:// kde. org/ announcements/ 4. 10/ platform. php
[5] Plasmate Userbase:http:// userbase. kde. org/ Plasmate/ de
[6] Plasmate Techbase:
http:// techbase. kde. org/ Projects/ Plasma/ PlasMate
[7] KDE SC 4.10:
http:// kde. org/ announcements/ 4. 10/ applications. php
[8] QT-Quick:http:// qt-project. org/ wiki/ Qt_Quick
[9] Entrenador de mecanografa Ktouch:
http:// ktouch. sourceforge. net/
[10] Blog de Sebastian Gottfried:
http:// blog. sebasgo. net/ blog/ 2012/ 10/ 24/ new-version-of-
ktouch-finally-merged/
[11] GHNS:http:// ghns. freedesktop. org/
[12] Blog del mantenedor de Kwin Martin Graesslin:
http:// blog. martin-graesslin. com/ blog/ 2013/ 02/ porting-
kwin- 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/ the -
roadthe-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-containment-
moving-to-plasma-quick/
RECURSOS
A
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, espe-
cialmente 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 nece-
sario, tambin hay versiones para Win-
dows 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
instala la interfaz grfica de usuario, el
programa correspondiente de la lnea de
comandos y otras libreras necesarias
para su funcionamiento.
PRCTICO Linkchecker
28
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 senci-
lla 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 desee-
mos 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 espe-
cificar tecleando su ruta, como /var/
www/shop/index.html.
Encontrando enlaces rotos con LinkChecker
Enlaces Perdidos
LinkChecker nos ayuda a mantener nuestro sitio web libre de enlaces rotos. POR FLORIAN EFFENBERGER
Luca De Polo, 123RF.com
Figura 1: LinkChecker muestra una lista con los resultados tras realizar el chequeo.
29
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Tras hacer clic en Start, LinkChecker
tardar un poco en finalizar la compro-
bacin, dependiendo del tamao del
sitio, a pesar del procesamiento en para-
lelo. En el ejemplo propuesto aqu con la
revista Linux Magazine, tras ms de una
hora, a pesar de disponer de una cone-
xin rpida, paramos la comprobacin y
probablemente hubiera tardado varias
horas. El programa abre cada pgina
individual, sigue cada uno de sus enla-
ces 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 avi-
sos, mientras que las rojas indican erro-
res 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 pro-
grama 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 legi-
bilidad, 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 pro-
grama. Adems de los detalles del resu-
men, se puede ver cunto tiempo ha tar-
dado la descarga y ver cunto han tar-
dado los enlaces individuales, cmo son
de grande los elementos individuales y,
sobre todo, ver qu error ha ocurrido pre-
cisamente por ejemplo, mensajes rela-
cionados con la apertura de la conexin o
el cdigo HTTP correspondiente. Detalles
adicionales, tales como el nmero de avi-
sos, las direcciones vlidas e invlidas e
informacin sobre el nmero de elemen-
tos y la longitud de las direcciones son
menos interesantes a la hora de resolver
los problemas, pero resultan relevantes
como datos estadsticos.
Atencin a los Detalles
Se pueden organizar los eventos en ml-
tiples 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 compro-
bada, su nombre en el sitio web o simple-
mente haciendo clic sobre la cabecera de
la columna que deseemos. Para investi-
gar la situacin con ms detalle, se puede
hacer clic en una direccin de la ventana
del programa para abrirla en el navega-
dor que tengamos por defecto. Por otro
lado, se puede hacer clic con el botn
derecho del ratn en la direccin para
copiarla al portapapeles.
Si tenemos que procesar los resultados
de la prueba, LinkChecker permite guar-
darlos seleccionando File | Save events
como un documento HTML (Figura 2),
un fichero de texto, en formato XML o en
un fichero CSV. En nuestras pruebas, el
programa generaba un mensaje de error
para el fichero CSV indicando un pro-
blema con un mdulo de Python y gene-
raba un fichero incompleto. La llamada
al mecanismo de actualizacin integrado
generaba el mismo error. Por otro lado, si
se usan los paquetes de la dis-
tribucin, no ser necesario
actualizarlo por medio de este
mecanismo.
La comprobacin de algunos
sitios web parecen tardar una
eternidad debido a la profundi-
dad de la recursin, es decir, el
nmero de niveles que Link-
Checker tiene que investigar. Si
el sitio posee un gran nmero
de pginas y enlaces externos,
la duracin de la prueba puede
realmente crecer exponencial-
mente.
Para evitar este problema, se
puede cambiar este nmero
Edit | Options | GUI options
para que se adece a nuestras
necesidades. El valor por defecto es -1 lo
que significa que no se aplican lmites,
mientras que un valor de 3 slo compro-
bara hasta una profundidad de tres nive-
les. En el ejemplo de Linux, el programa
todava se quedaba funcionando ms de
una hora tras establecer un lmite de 3,
pero finalizaba casi inmediatamente tras
poner un nivel de 1. Por otro lado, los
errores de recursin slo se generan para
nuestro dominio LinkChecker slo
comprueba el primer nivel de enlaces
externos para evitar lo que podra ser una
tarea sin fin.
En el mismo cuadro de dilogo, se
puede escoger la lista de direcciones a
cubrir por el test, en vez de slo los enla-
ces que presenten problemas pero los
resultados pueden rpidamente satu-
rarse, incluso si slo se est chequeando
un sitio web pequeo, razn por la que
esta opcin viene desactivada por
defecto. Desde el cuadro de dilogo de
Linkchecker PRCTICO
Figura 3: LinkChecker tambin incluye un pequeo editor
para acceder al fichero de configuracin.
Figura 2: Los resultados quedan bastante claros al exportarse como HTML.
linkchecker U
-osql U
http://www.linux-magazine.es
muestra el resultado en formato SQL para
que pueda transferirse directamente a
una base de datos (Figura 4). La
opcin --scan-virus permite analizar los
ficheros descargados con el antivirus Cla-
mAV (clamav-daemon) y --check-html
valida los ficheros llamando a Tidy [2],
suponiendo que se tenga instalado el
paquete python-utidylib. De forma simi-
lar, --check-css valida los elementos CSS,
suponiendo que se tenga instalado el
paquete python-cssutils.
Si nos encontramos tras un cortafuegos
restrictivo, LinkChecker puede tambin
acceder al proxy global del sistema, por
ejemplo, por medio de la variable de
entorno http_proxy. Tambin soporta
conexiones basadas en nombres de usua-
rio y contrasea (-u user -p), as como el
uso de cookies (-C).
Se pueden excluir direcciones y pgi-
nas individuales del test por medio de
expresiones regulares junto con el par-
metro --ignore-url. Si el acceso directo al
puerto 25 se encuentra bloqueado en la
red, cada enlace mailto individual provo-
car un aviso, ya que LinkChecker inten-
tar 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, especificare-
mos el parmetro -W miem-
presa.tld.
Se pueden identificar fiche-
ros con un tamao mayor de
10KB, suponiendo que el ser-
vidor web soporte la peticin,
especificando --warning- size- bytes=
10240. Si la salida est demasiado satu-
rada como para encontrar el mensaje que
andamos buscando, --no-warnings-- no-
status restringe la salida slo a la infor-
macin crtica.
Conclusiones
LinkChecker nos pareci bastante impre-
sionante en nuestro laboratorio. Aunque
la interfaz grfica de usuario slo ofrezca
un subconjunto de las funciones del pro-
grama, 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 exper-
tos o para usuarios que busquen la inte-
gracin del programa con sus propios
scripts. La pgina del manual cuenta con
una explicacin detallada de cada par-
metro y sera muy buena idea leerla antes
de comenzar a programar un script.
PRCTICO Linkchecker
30
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[1] LinkChecker: http:// linkchecker.
sourceforge. net
[2] Tidy: http:// tidy. sourceforge. net/
docs/ tidy_man. html
RECURSOS
las opciones, tambin
se puede acceder al
fichero de
configuracin com-
pleto, que reside
en el directorio
home del usuario
en .linkchecker/
linkcheckerrc.
En el propio fichero podemos encon-
trar 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.
Devuelta a la Raz
La multitud de opciones del programa
nos hace sospechar que LinkChecker
puede hacer mucho ms de lo que la
interfaz grfica de usuario muestra. Des-
pus de todo, slo es una interfaz para
un programa de la lnea de comandos
(linkchecker).
LinkChecker hace referencia al fichero
de configuracin mencionado anterior-
mente, o se pueden aadir parmetros
directamente desde la lnea de coman-
dos. man linkchecker proporciona una
explicacin para cada parmetro.
Por ejemplo,
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 market-
ing. 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 frecuen-
cia en diversas revistas profesiona -
les internacionales artculos sobre
software libre, estndares abiertos
y temas legales.
E
L

A
U
T
O
R
Adems de la GUI y la lnea de comandos,
LinkChecker tambin soporta su propia
interfaz web. Para ms informacin sobre
cmo activar esta opcin en sistemas
basados en Debian, lase el fichero
README.Debian que se encuentra en el
directorio /usr/share/doc/linkchecker/.
En la Web!
Figura 4: LinkChecker muestra el resultado en un formato
listo para usarse con una base de datos.
Sistemas de Ficheros Flash PRCTICO
31
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Un dispositivo sin discos tambin pro-
duce 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 disposi-
tivos de almacenamiento flash que
soporta Linux.
Almacenamiento Flash
El almacenamiento flash, tambin lla-
mado de estado slido, posee mltiples
ventajas con respecto a los discos. Pri-
mero, 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
P
rogresivamente van desapare-
ciendo 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 velocida-
des 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 hard-
ware y el software tienen que esparcir las
operaciones de escritura en un proceso
denominado nivelacin del desgaste.
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 directa-
mente en una secuencia aleatoria. De esta
forma, la CPU puede ejecutar cdigo
directamente desde la flash NOR, permi-
tiendo 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 eje-
cutar 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 fun-
cionamiento.
Hoy en da contamos con dos tipos de
almacenamiento flash NAND. El primer
tipo emula una interfaz de bloques estn-
dar y contiene el hardware que se encarga
del borrado de los bloques capa de tra-
duccin flash, implementando el nive-
lado del desgaste y gestionando los blo-
ques 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
C
a
r
o
l
a

G
.

f
o
t
o
l
i
a
.
c
o
m
Corredor
Silencioso
Las mquinas ruidosas con pilas rotatorias de discos ya estn desfasa-
das. 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 sis-
temas de ficheros apropiados para Linux.
POR MICHAEL OPDENACKER
Sistema de ficheros Flash para Linux
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/erase-
size. Los tamaos de las particiones nue-
vas 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 pri-
mer dispositivo flash o la primera parti-
cin 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 pue-
den 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].
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 sis-
tema de ficheros frente a errores e intentos
de modificaciones no autorizadas. Tam-
bin hay que tener en cuenta que las parti-
ciones no pueden saltarse accediendo al
dispositivo completo dando un desplaza-
miento, ya que Linux no posee ficheros de
dispositivo para esta clase de accesos.
La Figura 3 muestra un esquema de par-
ticin 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 potencia-
les. Por el contrario, las particiones vienen
definidas por una estructura de datos en el
kernel de Linux.
El Listado 1 muestra un fragmento rele-
vante del fichero arch/arm/mach-
OMAP2/ 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 ker-
nel 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)
En este fragmento se definen seis particio-
nes:
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 almacena-
miento)
que los sectores flash son gestionados ya
que slo ve un dispositivo de bloques
emulado.
Aunque esta solucin reduce la comple-
jidad software por parte del sistema opera-
tivo, los fabricantes de hardware normal-
mente mantienen en secreto sus algorit-
mos de la capa de traduccin flash, lo que
impide que los desarrolladores de siste-
mas puedan verificar y afinar estos algorit-
mos o corregir implementaciones pobres.
El segundo tipo de memoria NAND con-
siste en una flash simple. El sistema ope-
rativo posee acceso a la controladora flash
y puede gestionar los bloques flash direc-
tamente. 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 dis-
positivos flash con una interfaz comn
(Figura 2).
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-
PRCTICO Sistemas de Ficheros Flash
32
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 3: El almacenamiento MTD normal-
mente se divide en particiones de slo lec-
tura y de escritura.
Figura 1: El bloque grande en medio de la
BeagleBoard de este ordenador basado en
una nica placa es una OMAP de Texas Ins-
truments, en donde se encuentra montada
una flash NAND.
Figura 2: La aquitectura MTD del kernel de
Linux permite la gestin independiente del
hardware del almacenamiento flash.
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 parti-
cular, este dispositivo de caracteres pro-
porciona comandos ioctl tpicamente utili-
zados por mtd-utils para manipular y
borrar bloques en un dispositivo MTD. La
segunda interfaz proporciona el disposi-
tivo de bloques /dev/mtd-blockN y el con-
trolador mtdblock. Este dispositivo es utili-
zado principalmente para montar los siste-
mas de ficheros MTD, tales como JFFS2 y
YAFFS2, ya que el comando mount slo
funciona con dispositivos de bloques.
Aunque podramos estar tentados a uti-
lizar este dispositivo para escribir en el
dispositivo MTD, el controlador corres-
pondiente no es lo suficientemente sofisti-
cado 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 mtd-
utils [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 siste-
mas de ficheros flash.
Estos comandos se encuentran disponi-
bles en el paquete mtd-utils de las distri-
buciones GNU/ Linux y pueden compi-
larse de forma cruzada desde las fuentes
que se encuentran en los sistemas Linux
empotrados tales como BuildRoot [3] y
OpenEmbedded [4]. En BusyBox [5] pode-
mos 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 popu-
lar para almacenamiento flash. Imple-
menta 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 esque-
mas 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 limitacio-
nes. Para poder modificar un fichero exis-
tente, 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 irrecupera-
ble. Segundo, podran desgastarse rpida-
mente ciertos bloques haciendo mltiples
actualizaciones en el mismo fichero.
Una alternativa consistira en escribir los
datos nuevos en un bloque nuevo y actua-
lizar 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 cam-
bios 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 com-
plican 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
Sistemas de Ficheros Flash PRCTICO
33
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
tiempo de montaje de JFFS2 es proporcio-
nal 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_SUM-
MARY le indica a Linux que almacene el
mapa entre las acciones de montaje del
dispositivo flash, reduciendo dramtica-
mente 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 vli-
dos 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 blo-
ques 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.
como flash_eraseall no deben encon-
trarse en el sistema de ficheros raz de
Linux, que es otra razn por la que las
imgenes del sistema de ficheros son ti-
les.
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 escri-
biendo bytes aleatorios al final de la ima-
gen, lo que corromper al sistema de
ficheros.
YAFFS2
Una alternativa a JFFS2 es YAFFS2 [8] (Yet
Another Flash Filesystem), que podemos
encontrar en smartphones con las prime-
ras versiones de Android. YAFFS2 no uti-
liza compresin, pero posee tiempos de
montajes mucho ms rpidos, as como
mejores tasas de rendimiento tanto en lec-
turas como en escrituras. El cdigo posee
una licencia dual bajo GPL y propietaria
(por ejemplo, GPL para su uso con el ker-
nel 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
como un parche con una serie de scripts
de ayuda. Hace un ao se hizo un
esfuerzo por incorporarlo a la lnea de pro-
duccin 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 auto-
mticamente a la hora de montarlo por
primera vez:
mount -t yaffs2U
/dev/mtdblock2 U
/mnt/flash
Otra opcin consiste en utilizar la herra-
mienta mkyaffs, de las utilidades de
YAFFS2 [9].
UBI y UBIFS
JFFS2 y YAFFS2 poseen un problema
comn: implementan el nivelado del des-
gaste, por ello quedan restringidos a parti-
ciones individuales. Sin embargo, los
niveles de uso pueden ser bastante dife-
rentes. Las particiones a menudo se mon-
tan 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 partici-
par todas las reas de la memoria flash en
el nivelado del desgaste. Esto es exacta-
mente lo que el proyecto UBI (Unsorted
Block Images) ofrece.
UBI forma una capa por encima de
MTD que se encarga de gestionar los blo-
ques de borrado y los bloques malos
implementando el nivelado del desgaste,
de este modo se libera al sistema de fiche-
ros 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 dispositi-
vos de bloques.
UBI implementa LEB (Logical Erase
Blocks), que se encarga de la correspon-
dencia 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
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 debe-
ra utilizar en flash NAND. Para forma-
tear la particin de destino y escribir la
imagen en ella, hay que teclear:
flash_eraseall /dev/mtd2
nandwrite -p /dev/mtd2 U
rootfs.jffs2
Si la imagen es ms pequea que la parti-
cin, JFFS2 podr utilizar posteriormente
el espacio, siempre y cuando la particin
haya sido previamente borrada completa-
mente.
Para preparar dispositivos para produc-
cin, 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
PRCTICO Sistemas de Ficheros Flash
34
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 */
14 },
15 {
16 .name = U-Boot Env,
17 .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 };
Listado 1: Particiones Definidas en el Kernel
puede intercambiar los punteros, reempla-
zando 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 dispositi-
vos 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 usua-
rio root tiene que montar el directorio del
dispositivo como un pseudofichero
devtmpfs. El comando
ubiformat /dev/mtd1
borra la particin flash sin reiniciar el con-
tador 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 dispo-
sitivo,
ubimkvol /dev/ubi0 U
-N test -s U
116MiB
ubimkvol /dev/U
ubi0 -N test -m
donde -m es el tamao mximo disponi-
ble. Para montar un sistema de ficheros
UBIFS vaco en el nuevo volumen test,
tecleamos
mount -t U
ubifs ubi0:test U
/mnt/flash
y ya se puede pro-
ceder a llenar el
sistema de ficheros con archivos. Una
forma alternativa consiste en crear pri-
mero 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 gra-
bado 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 Lis-
tado 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
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 ubiat-
tach).
Si queremos que UBIFS maneje la parti-
cin raz, tendremos que aadir
rootfstype=ubifs U
root=ubi0:rootfs
al comando de arranque.
LogFS
LogFS [10] es otro sis-
tema de ficheros estruc-
turado en registros para
memorias flash que
posee un diseo inno-
vador y lleva formando
parte de la lnea de
desarrollo principal del
kernel desde la versin
2.6.34. Este innovador sistema de fiche-
ros 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 ofi-
cial, hay bastantes posibilidades de que
un desarrollador resuelva estos proble-
mas.
SquashFS
Las particiones de slo lectura pueden uti-
lizar el sistema de ficheros de bloques
SquashFS en dispositivos MTD. Copiar
una imagen SquashFS directamente al dis-
positivo /dev/mtdblockN correspondiente
funcionar bien despus de todo, no hay
que preocuparse por el nivelado del des-
gaste hasta que se encuentren bloques
malos en un dispositivo. De nuevo, el con-
trolador mtdblock no puede manejar los
bloques malos, de modo que hay que utili-
zar otra solucin.
Una posibilidad consiste en utilizar el
controlador gluebi, que emula un disposi-
tivo MTD por encima de un volumen UBI.
Como UBI descarta los bloques malos,
mtdblock podr entonces utilizarse de
forma segura.
Sistemas de Ficheros Flash PRCTICO
35
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 4: UBI maneja los volmenes lgicos de la misma forma
que LVM, asegurndose de realizar el nivelado del desgaste entre
los bloques fsicos.
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
Listiado 2: Mensajes de Arranque
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
Listado 3: /proc/ mtd
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
Listado 4: ubi.ini
UBIFS es ahora la mejor solucin en tr-
minos de rendimiento y espacio. El espa-
cio adicional requerido es slo un pro-
blema cuando se trata de particiones muy
pequeas. Su despliegue tambin requiere
algo ms de trabajo que con los otros can-
didatos.
En el momento de escribir este artculo,
LogFS era todava demasiado experimen-
tal como para usarse en sistemas en pro-
duccin, aunque podemos esperar que
sus errores se resuelvan poco a poco.
SquashFS muestra una buena compre-
sin, buenos tiempos de montaje y un
buen rendimiento sobre flash MTD en sis-
temas 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 aplica-
ciones no notarn la diferencia. Como
muestra en el banco de pruebas, se pue-
den 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 ren-
dimiento para cada sistema particular.
Bastante Barato
Las memorias flash simples ofrecen a los
desarrolladores de sistemas empotrados
muchas oportunidades de optimizacin.
La tendencia entre los fabricantes de hard-
ware, sin embargo, se aleja de las memo-
rias flexibles flash NAND e incorporan
MMC. Estas tarjetas de memoria monta-
das en superficie usan una interfaz ms
parecida a las tarjetas de memoria exter-
nas.
Ocultan al sistema operativo los deta-
lles de los bloques malos y del nivelado
del desgaste. Como son muy baratas, pro-
bablemente desbanquen a las flash sim-
ples mucho ms caras. Afortunadamente,
eMMC no es totalmente opaca. El desa -
rrollador del kernel Arnd Bergmann ha
programado una herramienta denomi-
nada Flashbench [13] que permite que
podamos determinar experimentalmente
las caractersticas del medio de almace-
namiento, tales como el tamao de los
bloques de borrado. Con la ayuda de esta
informacin, podemos entonces optimi-
zar los parmetros del sistema de fiche-
ros que estemos usando. Bergmann des-
cribe 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.
Otra posibilidad consiste en utilizar el
controlador ubiblk, que implementa un
dispositivo de bloques de slo lectura
directamente encima de UBI. Free Elec-
trons ha enviado ubiblk a la Lista de
Correo del Kernel de Linux [11], pero an
no ha sido incorporado a la lnea princi-
pal. 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 dife-
rentes versiones del kernel. Los resultados
(Figura 5) se encuentran descritos en
Internet [12].
En resumen, JFFS2 posee el peor rendi-
miento y debe ser compilado con CON-
FIG_SUMMARY para que tenga un tiempo
de arranque aceptable. Sin embargo, JFFS2
es todava la mejor opcin para dispositi-
vos 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 empo-
trados 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 pro-
blema de rendimiento a la hora de mane-
jar directorios.
PRCTICO Sistemas de Ficheros Flash
36
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[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/
RECURSOS
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.
Clonacin de Discos Duros PRCTICO
37
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Clonezilla
El primer candidato de la prueba se dis-
tribuye 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, aun-
que 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 usua-
rio paso a paso a travs de las funciones
ms importantes. Tras el escenario, encon-
tramos herramientas de probada eficacia,
como Partclone [7], Partimage [8], dd, y
ntfsclone del paquete Ntfsprogs que hacen
el trabajo duro. Clonezilla soporta los sis-
temas de archivos ext2, ext3, ext4, Rei-
serFS, Reiser 4, XFS y JFS, as como FAT,
NTFS, HFS+ (Mac OS X) y UFS (Free/
Net/ Open BSD). Si la herramienta de clo-
nacin encuentra un sistema de archivos
desconocido, hace la copia en bloques con
dd. El programa puede manejar LVM ni-
Y
a sea un usuario tpico que tiene
la intencin de juguetear con el
hardware en casa o un adminis-
trador 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 des-
cuido 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 Bac-
kup Administrator [4]. Las comparativas
en este artculo cubren la facilidad de uso
y los sistemas de archivos soportados.
Tambin se pidi a los candidatos demos-
trar 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.
camente a partir de la versin 2 en ade-
lante y no puede gestionar falsos RAID (es
decir, los RAID que se basan en la poten-
cia de clculo de la CPU principal en lugar
de un controlador).
Despus de arrancar el Live CD, pode-
mos seleccionar el idioma y la disposi-
cin de teclado, si fuera necesario. Para
la siguiente decisin a tomar tenemos
dos opciones: device-image y device-
device (Vase la Figura 1). Si estamos clo-
nando 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 tra-
baja con almacenes de datos, que se pue-
den 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.
sandrobrezger, photocase
Guerras de Clones
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
de Linux a mover los datos y crear rplicas bit a bit. POR MELA ECKENFELS.
Cuatro herramientas para clonar discos duros
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 Nor-
ton Ghost [9], de la que quiere distin-
guirse. Sin embargo, los usuarios podran
experimentar un momento extrao por-
que 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 Parti-
mage: 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 tam-
bin 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, cam-
biar 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
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 dife-
rentes 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 seguri-
dad. 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 sis-
tema en la tarjeta de referencia mencio-
nada anteriormente. Aunque, a primera
vista, todo parece haber ido bien, eso no
significa que la imagen tambin sea utili-
zable. Incluso si necesitamos resultados
rpidos, es mejor mantener habilitadas
diversas opciones para testear los siste-
mas de archivos y los clones finalizados.
Ping
El segundo candidato de la prueba tam-
bin 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 Edi-
tion libre (GPL) y como
una versin empresa-
rial por 30 euros, inclu-
yendo soporte telef-
nico y por email. La
ISO estndar es de 35
MB, una variante avan-
zada con ClamAV pesa
unos 70 MB. En nuestro
Una configuracin de red es slo reco-
mendable si no tenemos otra opcin. Clo-
nar 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 tarda-
ra 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 parti-
ciones individuales, realizando una com-
probacin de sistema de archivos previa-
mente 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 sis-
tema 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 eli-
mina una unidad que est montada. Un
inicio limpio slo puede garantizarse con
la opcin Start over.
Imagen Clavada?
Para restaurar una imagen, arrancamos el
Live CD en el equipo de destino y elegi-
mos restoredisk o restoreparts en el modo
experto. Despus de eso, es el momento
de algunos ajustes. Entre otras cosas, Clo-
nezilla ofrece restaurar el MBR y el nom-
bre de host Windows automticamente.
PRCTICO Clonacin de Discos Duros
38
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 2: Ping no tiene opciones avanzadas de clonacin directa
a otras particiones, conversin de tipo de sistema de archivos, y
similares.
Figura 1: Clonezilla ofrece dos modos: device-image y device-device.
seda: fueron necesarios algunos retoques
con el gestor de arranque a travs de la
shell de GRUB para iniciar los dos siste-
mas operativos limpiamente.
Mondo Rescue
A diferencia de los dos primeros candida-
tos de la prueba, no podemos simple-
mente insertar, arrancar y listo. Publi-
cado bajo GPL, Mondo Rescue necesita
instalarse en el PC cuyos discos desea-
mos replicar. En la mayora de las distri-
buciones, la herramienta requiere los
paquetes afio, mkisofs, mindi-busybox y
mindi. Las instrucciones para la instala-
cin en diferentes sistemas Linux estn
disponibles en la pgina de descargas.
Los usuarios de Ubuntu tienen su propio
conjunto de instrucciones [10] para evitar
tener que hacer un arreglo frustrante.
Hemos utilizado la versin 3.0.1 en nues-
tro laboratorio.
Debido a su naturaleza, Mondo Rescue
slo es compatible con los sistemas de
ficheros disponibles bajo Linux, aunque
tambin tiene en consideracin las parti-
ciones de Windows en los equipos de
arranque dual. Los usuarios tienen que
iniciar la herramienta con permisos de
administrador en lnea de comandos, o
mejor an, en runlevel 1. En runlevel 1,
no es necesario cerrar las bases de datos
o similares de forma manual para evitar
terminar con una clon inservible ms
tarde. La opcin mondoarchive refleja los
discos locales y mondorestore los res-
taura.
La interfaz de usuario
es sencilla y fcil de con-
trolar. Mondo Rescue
gua al usuario paso a
paso a travs de la
configuracin para hacer
una copia de seguridad
correcta. El primer men
ya muestra una pequea
ventaja para los usuarios
en comparacin con los
dos primeros candida-
tos. Adems de las
opciones que ofrecen los
sistemas Live, Mondo
Rescue soporta CDs,
DVDs y unidades de
cinta como unidad de
destino (vase la Figura
3).
Una vez definido el
objetivo, seleccionamos
el mtodo de compresin y decidimos
qu contenidos a respaldar y qu reas
excluir. Por tanto, Mondo Rescue clona
sistemas de produccin sin cargas inne-
cesarias, como los archivos de registro
voluminosos.
Rodeos Menores
Se aplican reglas diferentes para los siste-
mas de arranque mltiple en compara-
cin con los Live CDs. A diferencia de
Clonezilla y Ping, Mondo Rescue trabaja
con particiones montadas. Si deseamos
clonar un equipo con un sistema Linux y
un sistema operativo Windows, primero
debemos montar la particin de Win-
dows y agregar una entrada para ella en
/etc/ fstab. Si es NTFS, Mondo Rescue
pregunta si deseamos incluir la particin
en la copia de seguridad. Si es as, la
herramienta trata toda la particin NTFS
como un nico archivo de gran tamao
(biggiefile).
Despus de definir
el destino y el conte-
nido, Mondo Rescue
se pone a su tarea.
No importa qu
medio de almacena-
miento vaya a
usarse, la herra-
mienta siempre crea
una imagen de
arranque usando
Mindi Linux, lo que
ayuda al usuario a
iniciar la restaura-
Clonacin de Discos Duros PRCTICO
39
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 3: Adems de los CDs y DVDs, Mondo puede controlar
unidades de cinta, otros discos duros, memorias USB y recur-
sos compartidos de red (Samba y NFS).
cin ms adelante (vase la Figura 4),
con o sin interaccin. La imagen incluye
el kernel, los mdulos, herramientas y
libreras, as como un conjunto completo
de informacin sobre el medio de copia
de seguridad utilizado en cada caso. Se
recomienda precaucin cuando el usua-
rio replica a un directorio de red local y
trata de restaurar en un equipo de una
red diferente. El proyecto fallar porque
la configuracin de la red almacenada en
la ISO ya no es vlida.
Una vez mondoarchive ha terminado
su trabajo, el usuario puede comprobar
su integridad y la integridad de las copias
de seguridad arrancando desde el soporte
de rescate y tecleando
Lilo: compare
en la lnea de comandos. El proceso de
restauracin comienza tambin con el
soporte de rescate. La herramienta ofrece
tres modos a elegir: interactive (gua al
usuario a travs de los pasos), nuke (res-
tauracin del sistema sin intervencin del
usuario) y expert (con opciones y herra-
mientas adicionales).
El modo experto proporciona las herra-
mientas que los usuarios necesitan para
cambiar las particiones de disco o la geo-
metra, la migracin a un sistema RAID o
la conversin a un nuevo sistema de
archivos. Mondo Rescue modifica auto-
mticamente las entradas de /etc/ fstab,
aunque se requiere algo de atencin
manual para los RAID [11]. Mondo Res-
cue no tiene problemas en cuanto a la
creacin de discos de mquinas virtuales.
Para ello, iniciamos el medio de arranque
generado con Mondo y restauraramos el
sistema en la mquina virtual.
El uso de Lilo no es el nico aspecto
anticuado de Mondo. Este candidato
Figura 4: Mindi Linux crea una imagen de arranque, requerida por
Mondo.
Despus de iniciar el proceso de insta-
lacin 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 archi-
vos 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 arran-
can 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 modifi-
car los sistemas de archivos restaurados
o cambiar el tipo o tamao de las parti-
ciones. El producto Storix tambin es
compatible con los sistemas EFI y las
tablas de particin GUID. Storix System
Backup Administrator tiene un argu-
mento de venta principal y deja claro que
se dirige principalmente a empresas: gra-
cias a la gestin
de usuarios inte-
grada, los admi-
nistradores pue-
den asignar la
tarea de monitori-
zar copias de
seguridad peridi-
cas a usuarios sin
permisos.
Gemelos
Idnticos
Los cuatro candi-
datos han demos-
trado ser tiles
herramientas que
clonan de manera
fiable el disco de
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 com-
plejo 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, eviden-
temente, alineados con el uso empresa-
rial, e incluso all, la aplicacin slo tiene
sentido si se necesitan las distintas opcio-
nes 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 mon-
tados con archivos abiertos.
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 usua-
rios 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 desarrolla-
dor ofrece una edicin de red, y la edi-
cin TSM est diseado para el adminis-
trador 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 gra-
cias 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.
PRCTICO Clonacin de Discos Duros
40
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 5: La interfaz grfica de Storix parece un poco rancia. Todos los
mens que figuran aqu estn tambin disponibles a travs de la inter-
faz web.
[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: http:// www.
norton. com/ ghost
[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
RECURSOS
Kotlin DESARROLLO
de lenguajes funcionales, como funcio-
nes de ordenacin. La derivacin de
tipos automticos y mezclas ayudan a
mantener la sintaxis corta y elegante. El
cdigo fuente es convertido por un com-
pilador 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 desa -
rrolladores 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 implementa-
cin 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)
}
puede parecer no muy
familiar a programa-
dores de Java. La
lnea fun define una
nueva funcin lla-
mada main en este
caso. Como en otros
muchos lenguajes,
ste es el punto de
L
os programadores que conozcan
el IDE de Java IntelliJ [1] saben el
tipo de trabajo que su creador, Jet-
Brains, produce. Sin embargo, en el
curso de su trabajo, los desarrolladores
de IntelliJ tenan una lucha con algunas
de las caractersticas de Java ms moles-
tas. En su opinin, hubiera sido muy
difcil mejorar a Java, as que simple-
mente 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 pun-
teros 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
entrada del programa y por lo tanto, es
obligatorio en cualquier programa
Kotlin. En contraste a Java, la funcin
main no est explcitamente encapsu-
lada 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, necesitare-
mos instalar el Kit de Desarrollo Java
(JDK) mediante el gestor de paquetes y a
continuacin, obtener el compilador
Kotlin desde GitHub [4]. Slo necesitare-
mos 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 descom-
primir el archivo (p.ej., en nuestro direc-
Kotlin, una pequea isla en el Golfo de Finlandia, es tambin el nombre de un nuevo lenguaje de programa-
cin, con el objetivo de ser una alternativa moderna a Java. POR TIM SCHRMANN
Kotlin mezcla Java con Groovy y Scala
Dialecto de la Isla
k
r
i
s
c
k
a
m
1
2
3
R
F
.
c
o
m
41
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
El Nombre
Una rama del software Checo de la com-
paa JetBrains est ubicado en la ciu-
dad 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.
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 }
DESARROLLO Kotlin
42
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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
Desafortunadamente, en las pruebas de
este artculo, la agrupacin no se pudo
realizar. Slo conseguimos lanzar el pro-
grama apuntando al entorno de ejecu-
cin local:
java -cp U
./kotlinc/lib/U
kotlin-runtime.jar:
./hm.jar namespace
Para descubrir otros parmetros del com-
pilador, 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).
Bucles de Variables
Las declaraciones de variables en Kotlin
pueden coger a los programadores des-
torio personal), necesitaremos hacer eje-
cutable el script kotlinc-jvm:
chmod +x U
./kotlinc/bin/kotlinc-jvm
Para construir el cdigo fuente de hola-
mundo.kt hay que introducir:
./kotlinc/bin/kotlinc-jvm U
-output holamundo
-src holamundo.kt
El compilador crea un subdirectorio lla-
mado 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
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-
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;
Un tipo de especificacin slo es necesa-
rio 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
adems de los valores de tipo String,
Kotlin soporta todos los habituales,
incluyendo Float (nmeros de punto flo-
tante), 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)
En este ejemplo, Kotlin prueba el conte-
nido 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 com-
paracin 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:
fun sum(x : Int, y : Int) U
: Int {
Figura 1: Kotlin crea bytecode de Java que puede ejecutarse por una JVM.
Figura 2: En la web de Kotlin, podemos ejecutar programas en Kotlin directamente en el nave-
gador web.
return x+y
}
Hasta el momento, ha sido posible
devolver varios valores de una vez en
una tupla. (En Kotlin M3, los desarrolla-
dores han anunciado mltiples declara-
ciones 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
Adems permite pasar funciones a otras
funciones o devolverlas como resultado
de una funcin, as que soporta funcio-
nes 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 fun-
cin. 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 llama-
das 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-
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 cons-
tructor (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 desarrolla-
dor puede simplemente llamar al cons-
tructor:
43
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Kotlin DESARROLLO
Entorno Desarrollo: IntelliJ + Kotlin Plugin
JetBrains proporciona un plugin apro-
piado de Kotlin para su propio entorno
de desarrollo, IntelliJ (Figura 3), asu-
miendo 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 Plu-
gins en la columna izquierda y a conti-
nuacin Browse repositories. La lista
contiene una entrada de Kotlin.
Haciendo doble clic en el nombre se
lanzar la instalacin. Despus de espe-
rar 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., hola-
mundo), 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 confi-
gurar manualmente la localizacin del
JDK. Un clic en Finish completa la
accin y despus de unos momentos,
los ficheros para el nuevo proyecto apa-
recern 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 explo-
rador del proyecto y seleccionar Run
namespace.
Figura 3: La salida del programa Kotlin aparece en la seccin inferior en el IDE IntelliJ.
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. Eti-
quetar las clases como final por defecto
es una de las decisiones ms controverti-
das de los desarrolladores de Kotlin.
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 imple-
mentado por Urraca. La clase Urraca
necesita implementar el mtodo definido
por Pajaro. Una excepcin a esto es el
mtodo cantar(). Pajaro ya implementa
esto para la clase Urraca. Cualquiera es
la clase base desde donde el resto de cla-
ses son derivadas. Por lo tanto, comer
espera un objeto arbitrario como par-
metro.
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 fun-
cionalidad da el trait Coche debera ser
delegado a un objeto pasado como par-
metro o como contenido. Esto tiene la
ventaja de que el programador no nece-
sita 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 }
}
Este paso crea inmediatamente el objeto
Solo:
val paul = U
Direccion(Paul, Schmidt)
La tpica palabra clave new, que es utili-
zada 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 utili-
zar 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 dibu-
jar() 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
DESARROLLO Kotlin
44
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
DESARROL
Figura 4: El mtodo get() en el Listado 1 fuerza al programa a mostrar siempre Meyer como
el apellido.
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 }
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(veloci-
dad: Int) {
12 //...
13 }
14 override fun comer(comida:
Any) {
15 //...
16 }
17 }
println(Solo.color)
Solo.coloreando(verde)
No podemos asignar una variable al
objeto, tenemos que trabajar directa-
mente 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 pri-
mer elemento:
var a = Array<Int> U
(3, {i -> i + 1})
println(a[0])
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 caractersti-
cas 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:
fun List<String>.U
hazalgo() { ... }
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 crpti-
cos, donde Kotlin simplemente utiliza una
palabra clave: out. El Listado 9 muestra un
ejemplo. La funcin contar espera a un
Contenedor <String>, que a continua-
cin almacena en la variable chucherias
aunque actualmente es ms del tipo Con-
tenedor<Any>. Esto slo funciona en
esta direccin, objetos que sueltan fuera
del Contenedor que slo pueden ser envia-
dos a otro objeto. Para el camino contra-
rio, 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 desarrolla-
dores de Kotlin se refieren a este concepto
como declaracin variante de sitios.
Kotlin DESARROLLO
45
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 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 }
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 )
car la llamada con un signo de interroga-
cin aunque se corre el riesgo de un
error de tiempo de ejecucin (Figura 5):
b?.length()
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 para los bucles de trabajo en las
colecciones de Java.
Construccin del Sitio
Kotlin se libra de varias de las propieda-
des 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 cons-
truccin de un sitio muy grande. No hay
sintaxis estable a la vista y los invento-
res de Kotlin no son contrarios a elimi-
nar 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 desa -
rrolladores de muchos aos con expe-
riencia prctica en Java, hay altas proba-
bilidades de que Kotlin no sea un fiasco.
Este nuevo lenguaje puede ser una inte-
resante alternativa para aquellos que
encuentren a Java algo anticuado y a
Scala demasiado complicado.
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 exclama-
cin en el tipo, como esto:
var b : String? = U
hola
b = null
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-
DESARROLLO Kotlin
46
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[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
[8] Kotlin como lenguaje de scripts:
https:// github. com/ andrewoma/
kotlin-script
RECURSOS
Figura 5: El compilador es muy estricto sobre asignaciones null.
Figura 6: Precaucin, sitio en construccin. Las anotaciones, entre otras, son unas de las
caractersticas de Kotlin que todava estn bajo desarrollo.
Perl: Clonezilla DESARROLLO
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
Clonezilla y scripts Perl para copias de seguridad
Copias de Seguridad
Personalizadas
47
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
T
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 utili-
zando 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 herra-
mienta rechaz restaurar la copia de
datos, con un montn de mensajes de
errores crpticos y no permitiendo solu-
cionarlo 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 res-
taurar 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 segu-
ridad es el montono trabajo manual.
Afortunadamente, Clonezilla nos per-
mite 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 selec-
cionar algunas de la extensa coleccin
en la caja de herramientas de Clonezi-
lla.
En los Estudios Perlmeister, mi CD de
copias de seguridad hecho a mano uti-
liza ssh para contactar con el servidor de
copias en la red local, antes de transferir
el contenido comprimido de las particio-
nes en el primer disco que encuentre en
el PC.
Clonezilla es tan inteligente que no
slo guarda los datos del respectivo sis-
tema 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 seguri-
dad en bloques, comprimidos opcional-
mente si es necesario (Figura 3).
Para evitar tener que investigar todos
los parmetros en los scripts destacados
de Clonezilla (Figura 4), podemos utili-
zar un men para la configuracin,
que en su momento ejecutar
llamadas a funciones
internas parametriza-
das. Una vez que
conozcamos
los di-
DESARROLLO Perl: Clonezilla
48
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 segu-
ridad pueden llevar horas y
suelen bloquear el PC mien-
tras se realizan. Si el disco a
ser copiado tiene varias parti-
ciones, el administrador puede inte-
rrumpir el proceso. Cuando volvamos a
ejecutar el script, no queremos empe-
zar desde el principio otra vez, sino
continuar con la particin en la que se
decidi parar.
logos para crear copias de seguridad,
bastar con grabar el comando mostrado
en un CD y evitarnos el problema de
tener que volver a enfrentarnos a la jun-
gla de dilogos en otra ocasin.
Comandos Interesantes
Antes de que el comando ocs-sr (Figura
4) se ejecute directamente despus del
arranque, necesitamos configurar algu-
nas 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 ser-
vidor 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 prefe-
rencias del usuario.
En vez de utilizar ese script, utilizare-
mos el comando
sudo dhclient eth0
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 especifi-
cado 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
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 nor-
malmente 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 relativa-
mente 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.
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.
Figura 1: Despus de insertar el CD Clonezilla aparece el
men de arranque.
Figura 2: Uno de los dilogos de usuario para configurar copias con Clonezilla.
Perl Esttico
Si un script Perl utiliza mdulos CPAN,
no se ejecutarn en un primer intento
en un entorno extrao como la distribu-
cin 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 sorprenden-
temente bien los ejecutables Perl estti-
cos compactos que son relativamente
Perl: Clonezilla DESARROLLO
49
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
independientes del entorno de ejecu-
cin 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 des-
arrollador extraerlos y especificar
manualmente las opciones con el par-
metro -M.
Lo mismo ocurre con los mdulos car-
gados 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 est-
ticos, por lo tanto, requiere soporte
manual. Staticperl tambin requiere que
el usuario instale cualquier mdulo utili-
Listado 1: run-me
001 # ! /usr/ local/ bin/ perl -w
002 use strict;
003 use File::Temp
004 qw( tempfile );
005 use File::Basename;
006 use Log::Log4perl qw(:easy);
007 use Sysadm::Install
008 qw( :all );
009
010 Log::Log4perl->easy_init(
011 $DEBUG);
012
013 my $ip = 192.168.0.111;
014 my $user = mschilli;
015 my $mnt_dir =
016 / home/ partimag;
017
018 if( ! -d $mnt_dir ) {
019 mkdir $mnt_dir;
020 }
021
022 network();
023 mount();
024 backup_all();
025 unmount();
026
027 1;
028
029 #############################
030 sub network {
031 #############################
032 sysrun sudo, dhclient,
033 eth0;
034 }
035
036 #############################
037 sub unmount {
038 #############################
039 sysrun fusermount, -u,
040 $mnt_dir;
041 }
042
043 #############################
044 sub mount {
045 #############################
046 DEBUG Writing private key;
047 my $privkey_file =
048 (tempfile())[1];
049 blurt privkey(),
050 $privkey_file;
051
052 DEBUG Writing known hosts;
053 my $kh_file =
054 (tempfile())[1];
055 blurt known_hosts(),
056 $kh_file;
057
058 my $rc = sysrun(
059 sudo,
060 sshfs,
061 $user\@$ip:.
062 / backup/ clonezilla,
063 $mnt_dir,
064 -o,
065 ssh_command=ssh -i
066 . $privkey_file
067 . -o BatchMode=yes
068 . -o GlobalKnownHosts
069 . File=$kh_file
070 )
071
072 if( $rc ) {
073 die sshfs failed,
074 (backup host down?);
075 }
076 }
077
078 #############################
079 sub backup_all {
080 #############################
081 my $last_backup_path = (
082 reverse
083 sort <$mnt_dir/ [0-9]*>)
084 [0];
085
086 my $continue_with
087
088 my @drives =
089 < /dev/ sda[0-9]* >;
090
091 if(
092 defined $last_backup_path
093 and
094 ! -f $last_backup_path/ DONE
095 )
096 {
097 $continue_with =
098 ( sort { -M $a <=> -M $b }
099 < $last_backup_path/ *gz* >
100 )[0];
101 $continue_with =
102 basename $continue_with;
103 $continue_with =~ s/ \..*// ;
104 DEBUG Continue:
105 $continue_with;
106 }
107
108 my $not_yet;
109
110 if( defined $continue_with )
111 {
112 $not_yet = 1;
113 }
114
115 my (
116 $sec, $min, $hour,
117 $mday, $mon, $year
118 ) = localtime( time );
119
120 my $date =
121 sprintf
122 %04d-%02d-%02d-.
123 %02d-%02d-%02d,
124 $year + 1900, $mon+1,
125 $mday, $hour,
126 $min, $sec;
127
128 my @parts = ();
129
130 for my $part ( sort @drives )
131 {
132
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 necesi-
dad de confirmar la conexin automtica
posteriormente en el proceso.
Lanzar en Perl
La Lnea 13 establece la direccin IP del
servidor de copias. Puede que sea nece-
sario modificar esto para el entorno en
local donde pruebes el script, adems del
ID de usuario de la lnea 14. La funcin
network() inicia el arranque del ordena-
dor con el CD hecho en casa en la red.
La funcin mount() definida en las
lneas 44 a 76 llama a sshfs para conectar
el directorio local /home/partimag con el
directorio /backup/clonezilla en el servi-
dor.
La utilidad sysrun() usada para este
propsito viene del mdulo CPAN
Sysadm::Install y ejecuta el comando de
consola pasado en la llamada system()
despus de enviar un mensaje al frame-
work Log4perl, activado en el script. El
programa sshfs con la opcin ssh_com-
mand permite especificar parmetros
adicionales de SSH. La opcin -i define la
localizacin de la clave privada, almace-
nada en la lnea 49 en
un fichero temporal.
La opcin Batch-
Mode=yes no hace
preguntas al usuario,
pero cancela si algo
no funciona autom-
ticamente. La opcin
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 necesa-
rio, 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.
Finalizando
Para cocer el script de Perl compilado
estticamente en una imagen de Clonezi-
lla como script de arranque, el usuario
tiene que arrancar con la imagen ISO
descargada en una mquina virtual, ini-
cializar 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-
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
ssh-keygen -t rsa
lo gener en un fichero llamado id_rsa.
Las lneas de la 178 a la 182 contienen
un documento con todas las lneas de la
clave privada (quitadas del Listado 1 por
razones de seguridad).
La clave pblica asociada (en
id_rsa.pub) es copiada al fichero
~/.ssh/authorized_keys en el servidor
de copias de seguridad con el UID de
usuario. Cualquiera que tenga un CD
fsico (o la imagen ISO) posee por lo
tanto la clave para el servidor, con lo que
no necesita una contrasea.
Cuando nos conectamos por primera
vez al servidor desde la lnea de coman-
DESARROLLO Perl: Clonezilla
50
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
DESARROL
Listado 1: run-me ( Cont.)
133 my $base = basename $part;
134
135 if(
136 $base eq $continue_with )
137 {
138 $not_yet = 0;
139 }
140
141 next if $not_yet;
142
143 push @parts,
144 basename $part;
145 }
146
147 backup( $date, @parts );
148 }
149
150 #############################
151 sub backup {
152 #############################
153 my( $date, @parts ) = @_;
154
155 DEBUG Backing up @parts;
156 sysrun qw( sudo
157 /opt/ drbl/ sbin/ ocs-sr
158 -b -q2 -c -j2 -z1 -i 2000
159 -sc -p true
160 savedisk ), $date-img,
161 @parts;
162
163 blurt ,
164 $mnt_dir/ $date-img/ DONE;
165 }
166
167 #############################
168 sub known_hosts {
169 #############################
170 return <<EOT
171 XXX
172 EOT
173 }
174
175 #############################
176 sub privkey {
177 #############################
178 return <<EOT
179 ----BEGIN RSA PRIVATE KEY----
180 YYY
181 ----END RSA PRIVATE KEY----
182 EOT
183 }
Listado 2: build.sh
1 staticperl mkapp run-me-clonezilla boot \
2 run-me -MFile::Basename -MFile::Temp \
3 -MFile::Glob -MSysadm::Install \
4 -MLog::Log4perl \
5 -MLog::Log4perl::Appender::Screen
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
Este procedimiento inicialmente no fun-
ciona 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
hace esto en el CD introducido en la uni-
dad lectora. La figura 6 muestra el CD de
copia de seguridad en accin. Justo des-
pus de arrancar el sistema, el script
obtiene las particiones que necesita
copiar y las guarda mediante ssh en el
anfitrin configurado.
Perl: Clonezilla DESARROLLO
51
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[1] Listados para este artculo:
http://www.linux-magazine.com/
Resources/Article-Code
[2] Clonezilla:
http:// clonezilla. org
[3] Clonezilla live:
http:// clonezilla. org/ customized-
clonezilla-live. php
[4] Partimage:
http:// www. partimage. org/ Main_
Page
[5] PAR Perl Archive Toolkit:
http:// search. cpan. org/ ~rschupp/
PAR-1. 005/
RECURSOS
Figura 5: La imagen ISO con el script de copias de seguridad preparado.
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.
Preparando Mquinas Virtuales
Al llamar ocs-iso en una mquina virtual
para pruebas, se excedieron los lmites
del sistema de ficheros que estaba utili-
zando 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 (Lis-
tado 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 arran-
que (Figura 5). Utilizando una mquina
virtual para probar la imagen ISO com-
pleta reducir los CD en blanco desper-
diciados durante las pruebas. Si el
entorno virtual no contiene todava par-
ticiones de disco para crear copias, pue-
den crearse rpidamente con fdisk y
mkfs.ext como configuracin de prueba.
Listado 3: prepare.sh
01 sudo fdisk /dev/ sda <<EOT
02 n
03 p
04 1
05
06 +500MB
07 n
08 p
09 2
10
11 +500MB
12 w
13 EOT
14
15 sudo mkfs.ext3 /dev/ sda1
16 sudo mkfs.ext3 /dev/ sda2
17
18 sudo umount /tmp
19 sudo mount /dev/ sda2 /tmp
20 sudo mount /dev/ sda1 /home/
partimag
ADMINISTRACIN La Columna de Charly: ifdata
WWW. L I NUX- MAGAZI NE. ES
Para obtener una salida ms adecuada
para las personas podemos utilizar el par-
metro -pe, que le indica a ifdata que mues-
tre 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
En este ejemplo, la mquina de pruebas
posea cuatro interfaces de red pero slo
estaba usando tres.
Trabajo de Campo
Ifdata muestra una lista separada
por espacios de los datos que ms
frecuentemente se utilizan direc-
cin 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 infor-
macin de forma individual especi-
ficando los siguientes parme-
tros: -pa, -pn, -pb y -pm. Si quisiera
saber si la interfaz se encuentra en
modo promiscuo, podra teclear
$ ifdata -pf eth0
C
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 expresio-
nes 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 aparez-
can 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
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 per-
fecto:
if $(ifdata -e eth0); then
echo Interface found;
[...]
else
echo Interface not found;
[...]
fi
Interfaz de Precisin
El da a da del administrador de sistemas: ifdata
ifdata, del paquete Moreutils, es una herramienta adecuada para usarse en scripts y nos proporciona una pre-
cisin absoluta a la hora de obtener informacin del estado de las interfaces de red, sin la necesidad de
extraer valores individuales. POR CHARLY KHNAST
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 aprendi-
endo japons respectivamente.
para componer una lista de opciones
(Figura 1), aunque no se pueden obtener
los resultados en forma de lista por sepa-
rado 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 condicio-
nes 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.
Figura 1: Ifdata obteniendo las opciones establecidas
en la interfaz de red.
52
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[1] Moreutils: http:// joeyh. name/ code/
moreutils/
RECURSOS
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.ejem-
plo.org). Si el servidor tiene este tipo de
certificado (o quiz un certificado como-
dn 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 normal-
mente y conseguir el sitio especfico que
quiere. SNI fue estupendo porque permi-
ta 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 rpi-
damente con nombres arbitrarios bajo
nuestro dominio, reduciendo la cantidad
de tiempo y dinero que se necesita gastar
tratando con las autoridades de certifica-
cin.
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 pro-
blema (est bien implementado desde
2009-2010). La configuracin es sencilla:
simplemente se aaden las directivas
NameVirtualHost y SSLStrictSNIVHos-
tCheck y luego se especifican uno o ms
anfitriones virtuales:
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
<VirtualHost _default_:443>
ServerName
Inseguridades: Hosts Virtuales ADMINISTRACIN
53
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Si tomamos medidas antes de confir-
mar 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 comparti-
mos 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 protoco-
los 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 alo-
jamiento 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 pri-
mero, pero hasta que la conexin
no est establecida no se puede
especificar con qu anfi-
trin se quiere conec-
tar. La solucin a
corto plazo fue
enlazar una direc-
cin IP para cada
sitio en el servidor
y servir a cada sitio
fuera de una nica
direccin IP (que es
L
a mayora de las virtualizaciones
ahora se centran en el servidor.
Este enfoque tiene mucho sentido
porque se puede usar cualquier aplica-
cin que queramos y prcticamente cual-
quier sistema operativo (Linux, BSD,
Windows, etc.), y no hay que preocuparte
por si las aplicaciones van a comportarse
apropiadamente. El problema para la vir-
tualizacin 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 servi-
dores 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?
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
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].
suPHP
En algunos casos crear un servidor sepa-
rado para cada usuario, especialmente
para sitios de poco trfico, ser un
recurso intensivo. Otra opcin para divi-
dir sitios basados en PHP para que pue-
dan funcionar como usuarios separados
es suPHP[4]. suPHP es muy sencillo de
instalar y configurar (simplemente se ins-
tala el paquete). Una caracterstica real-
mente agradable es que se puede activar
o desactivar suPHP con un anfitrin vir-
tual, as que si queremos una mezcla de
sitios normales y sitios para usuario
se puede hacer. Para conseguir que
suPHP funcione correctamente probable-
mente 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 ejecu-
tar 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 configu-
rado. 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
archivos no son ejecutados con demasia-
dos 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 direc-
triz Directory o Location.
Con la tercera opcin, llamada para-
noid (que est predeterminada), suPHP
usa el usuario y el grupo al que pertenece
el archivo PHP para ejecutar el archivo
PHP y adems comprueba la
configuracin Apache: si suPHP_User-
Group 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 espec-
fico 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 archi-
vos 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 ser-
vidores, pero si se quieren evitar gastos
adicionales, la sugerencia es usar suPHP.
default.ejemplo.org:443
... las directivas van aqu
</VirtualHost>
<VirtualHost *:443>
ServerName
www.ejemplo.org:443
... las directivas van aqu
</VirtualHost>
Adems, queremos especificar SSLStrictS-
NIVHostCheck como off. Si se configura
como on, cualquier cliente que no per-
mita SNI ser incapaz de conectar bien.
En general, esto no suele ser un pro-
blema porque cualquier navegador web
suficientemente antiguo como para care-
cer de soporte para SNI est casi obsoleto
en este sentido. Sin embargo, me he dado
cuenta de que algunos dispositivos y ser-
vicios de balance de carga y comproba-
dores 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.
Separar sitios web
Despus de un despliegue de SNI feliz-
mente conseguido y volviendo atrs
para tener todos los sitios web servidos
en un nico servidor web, nos damos
cuenta que tenemos un problema. Apa-
che HTTPD funciona con un usuario
apache predeterminado. Esto significa
que tenemos mltiples sitios (la mayora
sitios WordPress y MediaWiki) funcio-
nando 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 Apa-
che2-MPM-ITK [2], que es una bifurca-
cin del estndar MPM (mdulo de mul-
ADMINISTRACIN Inseguridades: Hosts Virtuales
54
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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/
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 funciona-
miento, 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 que-
rer 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 inte-
resados es .jpg, tendramos que teclear:
cmdfs ~/Data ~/test U
-o extension=jpg,U
hide-empty-dirs
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
cmdfs ADMINISTRACIN
55
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Instalacin
A menos que el repositorio de nuestra dis-
tribucin 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 reposito-
rios 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
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 des-
carga, descompresin, ./configure, make y
make install se encargar de compilar e
instalar cmdfs. Si se quiere ver qu progra-
mas 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
E
s una tarea habitual: slo queremos
que los usuarios vean ciertos archi-
vos 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 plan-
tilla de la oficina pueda ver slo los docu-
mentos propios de la oficina y los disea-
dores grficos slo los ficheros grficos.
Cmdfs es una herramienta til que crea
sistemas de ficheros virtuales filtrando el
contenido de un rbol de directorios exis-
tente. Con cmdfs, se puede crear un sis-
tema de ficheros virtual que contenga slo
las partes del sistema de ficheros original
que queramos que se encuentren disponi-
bles para los usuarios. Sin embargo, cmdfs
puede hacer mucho ms, como la inclu-
sin de filtros para transformar los ficheros
segn nuestras especificaciones. Por ejem-
plo, podramos utilizar la opcin de fil-
trado de cmdfs para reducir la resolucin
de grandes imgenes digitales o para con-
vertir ficheros a un formato alternativo.
El sistema de ficheros cmdfs [1] basado
en FUSE [2] nos permite crear estos siste-
mas 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 enla-
ces compleja. Aunque la ltima versin de
cmdfs data de 2010, el software funciona
bien con tan slo unos pequeos incon-
venientes.
w
im
i, 1
2
3
r
f
.c
o
m
Creando sistemas de ficheros virtuales con cmdfs
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.
POR DENNIS SCHREIBER Y MARKUS FEILNER
estndar y pueden
escribir en la salida
estndar, se pueden
integrar sin problemas
con cmdfs, por ejemplo,
para convertir autom-
ticamente todos los
ficheros JPG en PNG.
(Un problema potencial
con esta tcnica es que
todos los ficheros PNG
tendran como exten-
sin .jpg, lo que confun-
dir a muchas aplica-
ciones).
Como convert puede
realizar escalados sim-
ples, as como muchas otras operaciones,
es un compaero ideal para cmdfs. La
siguiente lnea de comandos obtiene todos
los ficheros de imgenes en el punto de
montaje con un alto y un ancho mximo
de 800 pxeles:
cmdfs ~/Data ~/test U
-omime-re=image/*,U
hide-empty-dirs,command=U
convert --resize 800x800\^> -
Los ficheros pequeos conservan su
tamao original, como se define por la
opcin convert >, que tenemos que
enmascarar en la entrada de cmdfs. Si todo
esto funciona como se pretende, la conver-
sin a sepia sera tan fcil como:
cmdfs ~/Data ~/test U
-omime-re=image/*,U
hide-empty-dirs,command=U
convert - -sepia -tone 90% -
La integracin de programas de esta forma
requiere que tengamos cuidado y que pres-
temos atencin.
Cach y Opciones
Cmdfs usa una cach para acelerar algu-
nos procesos. En sistemas Debian la cach
se almacena en /usr/local/var/cache/
cmdfs/ 0username. Sin embargo, se puede
cambiar este comportamiento con el par-
metro -o cache-dir. Haciendo pruebas, es
buena idea borrar con regularidad el conte-
nido del directorio de la cach. El borrado
de los ficheros de la cach es importante,
ya que cmdfs slo crea los ficheros en su
directorio de cach si ha cambiado su
fecha y tiempo de modificacin.
Aunque se puede especificar una fecha
de expiracin en el momento del montaje
usando -o cache-expiry, se ocasionarn
picos de carga en el sistema. Cuando
cmdfs accede al punto de montaje, recrea
todos los ficheros en la cach una vez que
haya pasado el tiempo de expiracin.
El parmetro -o ofrece otro par de opcio-
nes tiles aparte de la gestin de la cach.
La Tabla 1 muestra algunos de los ms
importantes.
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 dis-
pararn ciertas acciones automatizadas.
Por ejemplo, se puede informar a los usua-
condiciones de filtrado. El filtrado basado
slo en extensiones de ficheros tiene des-
ventajas. 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 fil-
trado por tipo MIME ser una mejor
opcin (Figura 1):
cmdfs ~/Data ~/test U
-o mime-re=image/*,U
hide-empty-dirs
Para identificar el tipo MIME correcto para
un fichero especfico, se puede ejecutar el
comando file con la opcin --mime-type:
file --mime-type text.odt
text.odt: application U
vnd.oasis.opendocument.text
Editando Ficheros al Vuelo
Cmdfs puede hacer mucho ms que sim-
plemente filtrar los datos. Podemos utilizar
programas externos para modificar los
ficheros. Por ejemplo, podemos utilizar el
kit de herramientas ImageMagick para
transformar imgenes digitales. ImageMa-
gick [3] es una coleccin bastante grande
de herramientas para la manipulacin de
ficheros grficos. Con la herramienta con-
vert que forma parte de la coleccin Image-
Magick, podemos reducir las imgenes a
una anchura mxima de 800 pxeles o con-
vertirla a sepia.
Como las herramientas de ImageMa-
gick aceptan entradas desde la entrada
ADMINISTRACIN cmdfs
56
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 1: El directorio de origen se encuentra a la izquierda y el
directorio montado por cmdfs a la derecha. El usuario slo ve los
directorios con los ficheros que coincidan con el tipo MIME ima-
gen.
Tabla 1: Parmetros de Cmdfs
Parmetro Significado
-o command= shell command Comando de la shell para conversiones al vuelo
-o extension=extension_1;extension_2 Extensin(es) por las que cmdfs debe filtrar
-o path-re=regular_expression Expresin regular para filtrar por directorios
-o mime-re=regular_expression Expresin regular para filtrar por tipo MIME
-o [no]link-thru Los ficheros que no coinciden con los filtros se mues-
tran como enlaces simblicos en el directorio de des-
tino.
-o [no]hide-empty-dirs Oculta [no oculta] los directorios correspondientes
-o [no]monitor Monitoriza [no monitoriza] los cambios
-o cache-dir=directory Directorio para la cach
-o cache-size=MByte Restringe el tamao de la cach (tamao en Mbytes)
-o cache-entries=count Nmero mximo de entradas en el directorio de la
cach
-o cache-expiry=seconds Periodo de validez de la cach
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 que-
remos 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 ejem-
plo de la conversin a sepia. Para asegurar-
nos de que la entrada se monta de forma
correcta, habr que reemplazar cualquier
espacio en blanco de la lnea de comandos
por \040.
Problemas Extraos
En nuestro laboratorio, el nico problema
que hemos encontrado fue cuando el
directorio y el punto de montaje los pusi-
mos en el mismo directorio por ejemplo,
~/Documents y ~/test. En este caso,
cmdfs pareca entrar en un bucle infinito
en algunas distribuciones cuando intenta-
mos 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 publicse-
mos este artculo. Una posible causa
podra ser que el directorio de la cach
tuviese permisos incorrectos (syslog
informa de esta clase de errores).
Ficheros de Prueba
Si no queremos probar con nuestros pro-
pios 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-
yen ficheros de imgenes, con tamaos
que llegan hasta los 35GB, de sitios tales
como Digital Corpora [6].
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
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/ inotify-
tools/ wiki/
[6] Datos de pruebas de Digitalcorpora:
http:// digitalcorpora. org
de acceso, de bajo coste, que nos per-
mita 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 infor-
macin de la red: Wikipedia [1]. En ella
podemos encontrar una descripcin
bsica de esta tecnologa y de cmo fun-
ciona.
RFID (siglas de Radio Frequency IDen-
tification, en espaol identificacin por
radiofrecuencia) es un sistema de alma-
cenamiento 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 identi-
dad 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, simila-
res a una pegatina, que pueden ser adhe-
ridas o incorporadas a un producto, un
animal o una persona. Contienen ante-
nas 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 tarje-
tas de autobs que acercas a un lector
para pagar sin necesidad que sta entre
U
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 privile-
giado 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
58
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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
HARDWARE Arduino: RFID
Oleg Zabielin - 123RF.com
Figura 1: Mdulos y dispositivos RFID.
Figura 2: Mdulo RFID para Arduino y Rasp-
berry Pi.
Figura 3: Montaje del mdulo RFID para el
ejemplo de control de acceso.
en contacto con l. En la figura 1 pode-
mos ver distintos dispositivos que inte-
gran esta tecnologa. Todos ellos se
encuentran disponibles en la pgina web
de Cooking Hacks [2].
Podremos tener varios tipos de etique-
tas 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 funcio-
namiento, 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 cent-
metros a no ms de un metro depen-
diendo 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 traba-
jar con un dispositivo que cuente con
esta tecnologa. Para ello nosotros utili-
Arduino: RFID HARDWARE
59
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 // Parpadeo del led 13
063 for(int i = 0;i<4;i++){
064 digitalWrite(led,HIGH);
065 delay(500);
066 digitalWrite(led,LOW);
067 delay(500);
068 }
069
070 // 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 }
Figura 4: Colocacin del dispositivo de con-
trol de acceso.
vemos un poco perdidos podemos recu-
rrir a dos tutoriales del mdulo uno en
ingls [5] y otro en espaol realizado por
Arduteka [6]. Como ya hemos comen-
tado otras veces, Arduteka es un portal
de habla hispana centrado en la electr-
nica y la impresin 3D, que os puede ser-
vir de gran ayuda.
Tenemos disponibles tambin para
nuestros diseos, el componente en Frit-
zing. Tanto el mdulo en la figura 5,
como la antena en la figura 6.
Configuracin
Para cargar cualquier cdigo, es necesa-
rio hacerlo con el mdulo desconectado,
para que as no exista ninguna interfe-
rencia 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 lec-
tura. 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 nom-
bre 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 configu-
rarlo para distintas lecturas o escrituras.
En nuestro cdigo la parte primera sirve
para configurar el mdulo en modo lec-
tura. 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 nica-
mente a monitorizar si una tarjeta se
acerca al dispositivo y una vez detec-
tada, leeremos su ID y realizaremos una
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 indica-
cin visual. Cuando acercamos la tarjeta
y la retiramos el dispositivo comprueba
si es correcta, y si est autorizada,
acepta el acceso de esa persona. Podra-
mos mejorar este sistema aadiendo un
RTC a nuestro Arduino, para poder con-
trolar la hora y la fecha de acceso de
cada persona, o cuando hay una incur-
sin no deseada. Con el cdigo del tuto-
rial, 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.
Aunque existen otras frecuencias
RFID, las principales frecuencias que
vamos a poder trabajar con nuestros
Arduinos son a 125 kHz (baja frecuen-
cia) 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 digita-
les para indicar de manera visual si la
tarjeta es correcta o incorrecta. En la
figura 4 podemos ver esto, y como colo-
camos 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
HARDWARE Arduino: RFID
60
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
RECURSOS
[1] Qu es RFID?: http:// es. wikipedia. org/ wiki/ RFID
[2] Cooking Hacks: http:// www. cooking-hacks. com/
[3] RFID 125 kHz Module for Arduino / Raspberry Pi: http:// www. cooking-hacks. com/ index. php/ arduino-rfid-module-1. html
[4] Artculo Centro de control, de Luis Martn, Linux Magazine nmero 86, pg. 58.
[5] Tutorial del mdulo RFID: http:// www. cooking-hacks. com/ index. php/ documentation/ tutorials/ arduino-rfid
[6] Review del producto por Arduteka: http:// www. arduteka. com/ 2012/ 10/ review-modulos-rfid-para-arduino/
Figura 9: Captura del monitor serie con tar-
jetas de lectura/ escritura.
Figura 8: Captura del monitor serie con tar-
jetas de slo lectura.
Figura 7: Proceso de lectura de tarjeta RFID.
Figura 5: Fritzing del mdulo RFID.
Figura 6: Fritzing de la antena RFID.
Raspberry Pi: Eben Upton HARDWARE
61
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
para comunicarse con Blue-
tooth 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 podra-
mos llamar ingeniera.
Ahora paso la mayor
parte de mi tiempo en
reuniones y al tel-
fono. En estas cir-
cunstancias, 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 Cam-
bridge. Upton y sus colegas de la Funda-
cin Raspberry Pi [3], Rob Mullins, Jack
Lang y Alan Mycroft, estaban preocupa-
dos por la cada del 50% en los candida-
tos 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, esta-
blecieron 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 lle-
gar hasta el tutano sin interponer
barreras artificiales entre ellos y el hard-
ware.
En la prctica, y hasta el momento, la
popularidad del Pi ha sido mayor entre
los aficionados adultos, aunque la Fun-
dacin Raspberry Pi espera volver el
prximo ao a su enfoque educativo ini-
cial.
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 pre-
cio con descuento. Inicialmente, slo
estbamos comprando 10.000 chips,
explica Upton, pero nos pedan que
pagramos por ellos como si estuvira-
mos comprando 100.000 es decir,
recibamos un descuento por volumen.
Y por supuesto, ahora estamos com-
prando 100.000, as que ha funcio-
nado.
Al principio, la Fundacin consider
la construccin de un dispositivo simi-
lar al Arduino [4], pero la acogida del
Arduino nos llev a creer que haba un
gran mercado para ordenadores bara-
tos. 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-
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 Rasp -
berry Pi estn viendo por fin los resultados de sus esfuerzos. POR BRUCE BYFIELD
Jakub Krechowicz, 123RF.com
L
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 popu-
larmente, se han vendido cerca de
900.000 unidades y se alcanzar fcil-
mente el milln para su primer aniver-
sario. 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 con-
tribucin al software libre fue Bluecove
[2], una implementacin JSR-82 J2SE
HARDWARE Raspberry Pi: Eben Upton
62
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 res-
pondi 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. Ade-
ms, 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 per-
mita poner el pie en la puerta fcil-
mente.
El Pi incluy incluso una imagen de
firmware de licencia gratuita para inter-
actuar con la Unidad de Procesamiento
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, aun-
que 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 navega-
dor. Del mismo modo, durante la pro-
duccin, 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 decisio-
nes de produccin estaban condiciona-
das por los objetivos de precios, 25$ para
el modelo A y 35$ para el modelo B.
Tambin se hizo evidente que, para cum-
plir con estos objetivos, el software libre
tendra que participar tanto como fuese
posible. Por muchas razones tanto prc-
Grfica (GPU) propietaria [9]. Este
acuerdo fue denunciado por algunos
miembros de la comunidad por no ir lo
suficientemente lejos como para propor-
cionar 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 des-
cripcin a nivel de registro de cmo fun-
ciona la GPU, porque estoy muy orgu-
lloso 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 hici-
mos fue suficiente para permitir a la
gente hacer cosas interesantes. Creo que
todo esto fue muy valorado porque hab-
amos 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
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.
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 firm-
ware, 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 pro-
blemas 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 elec-
trnicos 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 elec-
trnicos 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 soli-
citudes 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 profunda-
mente 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
Raspberry Pi: Eben Upton HARDWARE
63
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
organizacin. La misin educativa, por
la que realmente nos pusimos a trabajar,
ha tenido que sentarse atrs para conse-
guir que las placas estn en la puerta.
Sin embargo, ahora la fabricacin ya
mantiene el ritmo de la demanda y
recientemente la Fundacin ha contra-
tado un par de empleados para concen-
trarse en la educacin y, con los aficio-
nados que han desarrollado una subcul-
tura que parece auto-sostenible, Upton
espera que sea la propia Fundacin
quien pueda restaurar el nfasis educa-
tivo 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 Funda-
cin 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 Ras-
pberry Pi:
http:// www. phoronix. com/ scan.
php?page=news_item&px=MTIx
NDk
M
yPaint [1] pertenece a una
categora de programas de
dibujo que difiere del con-
cepto 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 sim-
ples, como la rotacin libre o la posibi-
lidad de recortar una imagen. Sin
embargo, MyPaint ofrece un gran
nmero de pinceles y lpices especia-
les.
Teniendo en cuenta que GIMP se uti-
liza 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 pro-
grama 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 OpenRas-
ter). GIMP tambin es compatible
con este formato, tanto para cargar
como para exportar archivos. Esto sig-
nifica que las imgenes creadas con
MyPaint pueden cargarse fcilmente
en GIMP, donde, a continuacin, si es
necesario, se pueden utilizar las fun-
ciones que MyPaint no proporciona
para seguir editando ms adelante.
Adems de ORA, MyPaint exporta a
otros formatos como PNG y JPEG.
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 directa-
mente disponible va Synaptic o apt.
En el wiki del proyecto hay enlaces a
ms fuentes de paquetes disponibles
[4].
Tras el arranque, aparece el espar-
tano espacio de trabajo del programa:
adems del clsico men, slo veras
una barra de herramientas con algu-
nos 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 des-
pliega un cuadro de dilogo en el que,
si es necesario, puedes ajustar los
parmetros para la herramienta actual.
LINUX USER MyPaint
64
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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
Dibujo a mano alzada con MyPaint
Brochazos
Digitales
En MyPaint casi todas las acciones son
controladas por el pincel y sus par-
metros. Estas acciones dependen prin-
cipalmente del sensor de presin en el
estilete suministrado con la tableta.
Los botones de la parte derecha de
la barra de herramientas ofrecen fun-
ciones 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 pro-
grama 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 disponi-
bles treinta y cinco pinceles clsicos
predefinidos, junto con ms de 20 pin-
celes experimentales y una serie de
otros pinceles que se agrupan en
colecciones en el editor de listas del
pincel (Figura 3). Adems, puedes
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. Algu-
nos de los pinceles experimentales,
como el DNA brush o el particules_era-
ser, crean trazos que cambian en fun-
cin 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 revo-
cas 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 parti-
cularmente 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-
MyPaint LINUX USER
65
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 1: Cuando se inicia, MyPaint surge como una hoja de papel en blanco.
Figura 2: Si es necesario, puedes acoplar cuadros de dilogo en la parte derecha de la ventana
o utilizarlas como ventanas independientes.
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 sepa-
rado como XMP o IPTC, o como etique-
tas 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 com-
pletas. Hasta el momento, son relativa-
mente pocas las aplicaciones compati-
bles con el formato. Las ms conoci-
das, adems de MyPaint y GIMP, son el
programa de KDE Krita, Pinta, y el visor
XnView.
OpenRaster
parmetros, tan pronto como pases el
ratn sobre un control MyPaint, mos-
trar un cuadro de ayuda.
MyPaint tambin admite la asigna-
cin de teclas. Esto significa que pue-
des invocar elementos del men a tra-
vs de atajos de teclado configurables.
Para ello, coloca el cursor del ratn
sobre la opcin del men correspon-
diente, sin hacer clic en l y pulsa la
combinacin de teclas deseada. La
Tabla 1 muestra algunas de las funcio-
nes predefinidas.
Manos arriba
Si en este momento no deseas probar
tu talento artstico, el software te per-
mite realizar un cuadro mediante la
carga de un mapa de bits y aadiendo
capas por encima. Para ello, haz clic
en el botn con el signo ms para
crear una nueva capa en la ventana de
capas (Figura 5).
Conclusiones
Por su ciertamente especial prop-
sito, MyPaint demuestra ser una herra-
mienta interesante y fcil de usar. Gra-
cias al buen soporte para tabletas gr-
ficas, es divertido tontear con el pro-
grama. Sin embargo, con un ratn
como nico dispositivo de entrada,
MyPaint ofrece poca diversin.
Cuando se trata de funciones de pin-
tura, MyPaint ofrece un enfoque dife-
rente y ms intuitivo que Krita o GIMP.
Aunque puede resultar poco familiar,
la curva de aprendizaje con MyPaint
no debe ser demasiado difcil de fran-
quear.
lete. La configuracin del pincel
incluye casi todos los aspectos relevan-
tes (Figura 4). Para cada uno de los
LINUX USER MyPaint
66
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[1] MyPaint:
http:// mypaint. intilinux. com/
[2] Galera MyPaint gallery:
http:// mypaint. intilinux. com/
?page_id=519
[3] Y PPA Manager de Karsten Gn-
ther, 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
RECURSOS
Tabla 1: Atajos
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 Propieda-
des 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.
Teclas Funciones
Ctrl+N Nueva imagen
Ctrl+O Abrir imagen
F3 Abrir ltima imagen
Ctrl+S Guardar imagen como
ORA
Shift+Ctrl+S Guardar imagen como
Ctrl+E Exportar imagen
Ctrl+Q Parar MyPaint
Ctrl+Z Deshacer
Z Deshacer
Y Rehacer
F11 Pantalla completa
. Acercar
, Alejar
Ctrl+Left arrow Rotar paso a paso
Ctrl+Right arrow Rotar paso a paso
U Espejo
I Espejo
B Seleccionar pincel
F Incrementar tamao
del pincel
D Reducir tamao del
pincel
S Incrementar opacidad
A Reducir opacidad
G Seleccionar colores
R Herramienta de captura
de color
L Ver la ventana de capas
Ctrl+C Copiar capa
Ctrl+V Insertar portapapeles
C
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 exce-
sivo 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
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 Eas-
yGUI:
import easygui as eg
eg.msgbox(Hello World)
A diferencia de otras libreras GUI, Eas-
yGUI no se basa en eventos, lo que sig-
nifica que podemos escribir scripts de
modo lineal y aadir elementos grficos
especficos al vuelo. Este mtodo sim-
plifica dramticamente el proceso de
desarrollo y hace a EasyGUI apto para
programadores habituales y desarrolla-
dores principiantes por igual.
Trabajo Preparatorio
Para hacer el proceso de dominar Eas-
yGUI un poco ms interesante, podemos
usar la librera python-wordpress-xmlprc
[2] para escribir un script Python para
trabajar con un blog WordPress. Tam-
bin podemos usar EasyGUI para aadir
elementos GUI especficos a los scripts.
Sin embargo, antes de proceder necesita-
mos hacer algn trabajo preparatorio.
Obviamente, lo primero es instalar
EasyGUI. Para hacerlo en Debian Whe-
ezy y Ubuntu ejecutamos como root
apt-get install U
python-easygui python-tk
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
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. L I NUX- MAGAZI NE. ES Nmero 93
67
Workspace: EasyGUI LINUX USER
Aadiendo elementos GUI a scripts Python
Tratamiento GUI
Si necesitas aadir elementos gr-
ficos a un script Python, EasyGUI
puede ayudar a los principiantes y
expertos por igual.
POR DMITRI POPOV
requiere la URL
correcta, nombre
de usuario y con-
trasea para esta-
blecer una cone-
xin al blog. Podr-
amos meter esta
informacin direc-
tamente en el
cdigo del script,
aunque una solu-
cin un poco ms
flexible sera espe-
cificar los datos
requeridos al
vuelo. Aqu es
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 importa-
mos la librera EasyGUI y luego aadi-
mos 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 funcio-
nes enterbox y passwordbox es que la
ltima oculta el texto introducido. Aun-
que no podemos cambiar toda la apa-
riencia 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)
Cabe notar que EasyGUI slo soporta
ficheros grficos en formato GIF y que
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
LINUX USER Workspace: EasyGUI
68
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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)
Listado 3: Usando enterbox y passwordbox
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())
Listado 2: Obteniendo una Lista de Posts
Figura 2: La funcin multpasswordbox
muestra un cuadro de dilogo multi-campo,
donde el ltimo campo es considerado una
contrasea.
Figura 1: Habilitando el protocolo XML-PRC.
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 1: Cuadro de Mensaje
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 ejem-
plo, para mostrar la lista de todos los
posts publicados en un blog, podemos
sustituir wp.call(GetPosts)) por
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 multen-
terbox, 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)
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 multpass-
wordbox.
La funcin multpassword es similar a
multenterbox, aunque trata el ltimo
campo como una contrasea es decir,
oculta el texto introducido en este
campo (Figura 2). As, para obtener leer
la URL, nombre de usuario y contra-
sea, podemos usar la funcin multi-
passwordbox 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 mante-
nemos ms de un blog. En este caso,
Workspace: EasyGUI LINUX USER
69
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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()))
Listado 4: Script Python con EasyGUI
Figura 4: La funcin multchoicebox muestra una lista de seleccin mltiple.
Figura 3: La funcin choicebox en accin.
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]]
}
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 mues-
tra un cuadro de texto vaco para intro-
ducir texto desde cero. Sin embargo,
tambin podemos usar la funcin text-
box 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
(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 usa-
mos 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 direc-
tamente en el script, lo que hace que
ste sea menos flexible. Para mejorar
esto, podemos usar la funcin fileopen-
box, 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)
La funcin soporta varios parmetros,
incluyendo default y filetypes. El pri-
mero se utiliza para especificar una ruta
al fichero que puede contener comodi-
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)
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 abor-
dados ms arriba, EasyGUI ofrece otras
tiles funciones. Por ejemplo, la fun-
cin multchoicebox (Figura 4) permite
al usuario seleccionar mltiples elemen-
tos en la lista. Usndola podremos reco-
ger mltiples etiquetas para el post de
un blog:
LINUX USER Workspace: EasyGUI
70
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 5: La funcin textbox puede ser til para presentar textos grandes.
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()
Listado 5: Usando fileopenbox y filesavebox
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()
Listado 6: Configuraciones
para Almacenamiento
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 mos-
trar 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 especifi-
cando los formatos de fichero deseados,
por ejemplo:
filetypes = U
[*.png, *.jpg, *.tiff]
Mientras la funcin fileopenbox nos
permite coger el fichero que queremos
abrir, la funcin filesavebox nos per-
mite especificar el nombre de un
fichero a guardar. Podemos usar esta
funcionalidad para modificar el cdigo
de arriba de modo que guarde los con-
tenidos modificados del cuadro de texto
en un fichero separado (vase el Lis-
tado 5).
Finalmente, EasyGUI contiene la clase
egStore para almacenar y recuperar con-
figuraciones de usuario. Esta funcionali-
dad es esencial para scripts Python que
necesitan obtener valores para ciertos
parmetros para funcionar correcta-
mente.
En este ejemplo, el script que recu-
pera 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 Eas-
yGUI para almacenarlos y recuperarlos
luego desde un fichero. Para hacerlo,
necesitamos definir una subclase de
EgStore con una funcin que especifi-
que las configuraciones a ser almace-
nadas. A continuacin necesitamos
especificar el fichero en el que almace-
nar las configuraciones junto con las
configuraciones que queremos guar-
dar.
El ejemplo que se muestra en el Lis-
tado 6 guarda un nombre de usuario y
una direccin servidor en el fichero set-
tings.txt.
Debera ser trivial modificar este
ejemplo pidiendo al usuario que intro-
duzca la informacin requerida y
guarde los valores obtenidos en un
fichero (Listado 7).
Tampoco es particularmente compli-
cado recuperar las configuraciones
almacenadas:
settings = U
Settings(config.txt)
settings.restore()
username = U
settings.username
url = settings.server
Para hacer el script completo ms amiga-
ble 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 inter-
faces grficas complicadas. Sin
embargo, si deseas hacer tus scripts
Python ms amigables aadiendo ele-
mentos grficos, EasyGUI ofrece una
manera muy rpida y fcil de hacerlo.
No sustituye a los juegos de herramien-
tas como PySide o PyGTK, pero puede
usarse para hacer scripts grficos de
Python en un santiamn.
Workspace: EasyGUI LINUX USER
71
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 6: La funcin fileopenbox permite al usuario seleccionar un fichero especfico.
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()
Listado 7: Almacenamiento de Configuraciones
[1] EasyGUI:
http:// easygui. sourceforge. net/
[2] Librera python-wordpress-xmlrpc:
https:// github. com/ maxcutler/
python-wordpress-xmlrpc/
RECURSOS
U
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 guar-
darte 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 solu-
cin: 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 dis-
tros ignoran que Movgrab es una
herramienta y no lo incluyen en su
lista de paquetes. En otras palabras,
vamos a tener que compilar el pro-
grama. Para hacerlo, necesitamos
coger el archivo de cdigo fuente
LINUX USER Movgrab
72
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Los portales de vdeo como You-
Tube o Vimeo ofrecen todo un
abanico de pelculas cortas curio-
sas y entretenidas. Si deseamos
disfrutarlas desconectados de la
red, una pequea herramienta lla-
mada Movgrab puede ayudarnos.
POR TIM SCHRMANN
Descarga de vdeos de YouTube o Vimeo
Archivado inteligente
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.
A Toda Velocidad
Tras configurar el programa, apunta-
mos 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 espe-
ciales, 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-
tico para nuestro enlace, podemos
especificar un nombre usando el par-
metro -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 ...
Sustituimos usuario y contrasea por
los valores correctos. Si no necesita-
mos credenciales para el proxy, pode-
mos 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 Mov-
grab soporta, introducimos mov-
grab - -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
Movgrab LINUX USER
73
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 2: YouTube ofrece la pelcula Big Buck Bunny en no menos de ocho formatos y reso-
luciones diferentes.
Figura 1: Si no queremos introducir un formato de vdeo, Movgrab simplemente carga el primer
fichero en la cola.
amos esquivarlo, usamos el parme-
tro -x como sigue:
$ movgrab -x U
http://www.example.com/video
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 -
En lugar de un reproductor de medios
podemos especificar un convertidor,
por ejemplo.
Tambin podemos dejar que la apli-
cacin 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 par-
metro -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 pro-
grama especificado. La opcin -o no
crea una copia de respaldo.
En las antiguas versiones de Mov-
grab, el parmetro -s haca exacata-
mente 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 simila-
res 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 ocu-
rre esto, tenemos que esperar hasta
que los creadores adapten el pro-
grama. En otras palabras, si usamos el
software de manera habitual, tambin
tendremos que visitar su sitio de vez
en cuando.
resultados de la peticin. La nica
informacin importante aqu se mues-
tra en la parte superior derecha de For-
mats 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 resolu-
cin de 1280x720 pxels (Alta resolu-
cin) que ocupar 407,8MB de espacio
en disco. Para descargar el vdeo exac-
tamente 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
El parmetro -f va seguido por exacta-
mente 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. Pode-
mos usar el parmetro -n para selec-
cionar la pelcula que deseamos. Por
ejemplo, para descargar el segundo
vdeo de la lista, introducimos -n 2.
Para descargar todos los vdeos dispo-
nibles, -n all.
Algunos servicios tienen proteccin
contra nios (Family Filter). Si dese-
LINUX USER Movgrab
74
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
[1] Movgrab:
https:// sites. google. com/ site/
columscode/ home/ movgrab
[2] WebM:
http:// www. webmproject. org
[3] MPlayer:
http:// www. mplayerhq. hu
RECURSOS
Figura 3: Si fuera necesario, podemos pasar el vdeo descargado directamente a un reproduc-
tor de medios durante el proceso de descarga.
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 conexio-
nes cifradas usando HTTPS/ SSL,
necesitaremos instalar las libreras
OpenSSL, junto con sus paquetes de
desarrollo y configurar la compila-
cin como sigue:
./configure --enable-ssl
Sin embargo, esto no es necesario
para YouTube, Vimeo y MyVideo.
Instalacin
H
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 tecnolo-
gas hotplugin y la extensin XRandR
[1] hacen la configuracin de la panta-
lla automtica en la mayora de los sis-
temas Linux. Sin embargo, de vez en
cuando con la frecuencia justa para
que uno se sienta ligeramente traicio-
nado no se detectar un teclado o una
tarjeta de vdeo, o no se utilizar la
resolucin mxima de esta ltima.
Cuando aparecen este tipo de proble-
mas, habitualmente se resuelven cre-
ando 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 reali-
zar ajustes. No obstante, hemos de ase-
guramos 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 sis-
tema probablemente carecer del
fichero xorg.conf. Para crear uno, nece-
sitamos arrancar en modo monousua-
rio o apagar el servidor X, bien usando
Ctrl+Alt+Barra espaciadora o cam-
biando al nivel de ejecucin usando el
comando init 1 en sistemas basados en
Debian, o init 3 en Fedora o en open-
SUSE. En la lnea de comandos, intro-
ducimos
Xorg -configure
Ntese que el comando no se ejecutar
mientras que lo est haciendo un servi-
dor 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 renombra-
mos como xorg.conf con el comando
siguiente:
mv /root/xorg.conf.new
/etc/X11/xorg.conf
Ahora estamos preparados para confi-
gurar 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. Tam-
bin puede que tengamos que consul-
tar nuestras especificaciones de tarje-
tas grficas y establecer una resolucin
WWW. L I NUX- MAGAZI NE. ES Nmero 93
75
Lnea de Comandos: Xorg.conf LINUX USER
Entender xorg.conf nos hace ms fcil el ajuste de la configuracin
de nuestra pantalla. POR BRUCE BYFIELD
Una introduccin a la edicin de xorg.conf
Atentos a sus
Pantallas
Bruce Byfield es periodista tec-
nolgico, escritor freelance y edi-
tor 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
E
L

A
U
T
O
R


cualquiera que
detecte.
Xorg se ha desa -
rrollado de manera
rpida y reciente-
mente, de modo
que algunas de las
secciones mencio-
nadas en la pgina
man de xorg.conf
puede que estn
funcionando, mien-
tras que otras
pudieran estar
obsoletas.
Cada seccin
comienza con el
campo Section, el
cual especifica lo
que se est defi-
niendo en l. Acaba
con EndSection o una nica lnea. Una
SubSection, que puede contener posi-
bles resoluciones de pantalla y profun-
didad de color en la seccin Screen,
tiene una estructura similar.
Dentro de cada seccin existe un
campo por lnea que define el hardware
y sus capacidades. Las secciones para
hardware comenzarn por el campo
Identifier e incluyen distintos campos
requeridos. Las configuraciones varias
se encuentran listadas bajo campos
identificados como simplemente
Option. Se utilizan tabuladores para
separar los nombres de campos y sus
valores, y ambas se encuentran ence-
rradas en dobles comillas, excepto los
campos Viewport y Depth en las sub-
secciones de la seccin Screen. En un
fichero xorg.conf generado automtica-
mente, el driver Device puede incluir
una larga lista de opciones comentadas.
Edicin de xorg.conf
Para al menos la mitad de las secciones
de xorg.conf incluyendo aquellas que
ms probablemente se necesitan para
ajustes se puede recurrir al sentido
comn. Por ejemplo, la seccin Server-
Layout especifica los dispositivos utili-
zados para arrancar el sistema (Figura
1). En general, slo necesitamos edi-
tarla 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 sec-
cin como el Identifier. As, puede que
necesitemos aadir una lnea si tene-
mos 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 exis-
tente.
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 lis-
tarlos en xorg.conf.
De manera similar, la subseccin Dis-
play 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 esta-
bleceremos la profundidad de color a
24 en cualquier monitor moderno (por-
que, como los usuarios de software
libre sealan acertada, pero pedante-
mente, aunque los monitores modernos
y las tarjetas de vdeo se describen
de pantalla antes de confiar en
xorg.conf.
Estructura de xorg.conf
Tpicamente, xorg.conf consta de siete
secciones (Tabla 1). Tambin pueden
haber otras, dependiendo de nuestro
sistema y de lo que se detecte. Sin
embargo, algunas secciones que no se
mencionan en la tabla, como Keyboard
(teclado) y Pointer (puntero), slo
estn soportadas para compatibilidad
con versiones antiguas del hardware
del fichero. Otras, como la seccin Ven-
dor (proveedor), tienden a no ser utili-
zadas, mientras que DRI parece estar
preparada en gran medida para expan-
siones futuras.
Generalmente tendremos al menos
dos secciones InputDevice, una para el
teclado y la otra para el ratn. Tam-
bin podemos tener mltiples seccio-
nes Monitor, Device y Screen. Sin
embargo, ninguna de ellas es necesa-
ria. Si la informacin no est especifi-
cada en el fichero, Xorg recurrir a
LINUX USER Lnea de Comandos: Xorg.conf
76
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Tabla 1: Secciones xorg.conf Comunes
Figura 1: La seccin ServerLayout de xorg.conf es un resumen de la
seccin del fichero a usar en la pantalla del sistema.
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.
Seccin Descripcin
ServerLayout Resumen de configuracin
Files Ruta a las fuentes de pantalla
Modules Mdulos Xorg a cargar
InputDevice Dispositivos de entrada
Monitor Descripcin del monitor
Device Descripcin de dispositivos grficos
Screen Resolucin de pantalla y profundiodad de color
generalmente como de 32 bits de color,
slo se usan 24 para tener informacin
de color).
Por alguna razn, los xorg.conf gene-
rados no incluyen el campo Modes, el
cual contiene una lista separada por
tabuladores de los modos de vdeo
soportados para la tarjeta de vdeo que
queremos usar. Deben introducirse las
resoluciones por orden de preferencia,
porque Xorg usar la primera vlida
que encuentre. No necesitamos listar
cada resolucin, pues puede que que-
ramos listar varias opciones, especial-
mente si nuestro ordenador depende de
varios monitores. Tambin es probable
que deseemos incluir un respaldo de
baja resolucin, como 640x480 o
800x600 en caso de problemas con la
pantalla (Figura 4).
Tambin podemos situar nuestro pri-
mer modo preferido en las configura-
ciones de Screen,
bien manteniendo
uno o dos Modes
alternativos o
borrando todos
excepto el que quera-
mos usar.
Para las otras sec-
ciones, puede que
encontremos til cambiar el
Identifier generado automti-
camente, a uno ms memora-
ble (Figura 5). En otras pala-
bras, en lugar de intentar
recordar cul de los dos moni-
tores es Monitor0 o Monitor
1, es probable que prefiramos
identificar cada uno por el
nmero de modelo y nombre
de fabricante, o quizs por sus
posiciones en nuestro escrito-
rio.
Para otras secciones, como
InputDevice, Monitor, Device y Screen
lo primero que debemos conocer son
los campos requeridos (Figura 6).
Todas las secciones hardware necesitan
un Identifier, y la mayora tambin
requieren un driver.
Para la seccin Screen necesitaremos
un campo Device para configurar qu
tarjeta de vdeo utilizar y un campo
Monitor para el monitor a usar
incluso a pesar de que nuestro sistema
slo tenga uno de cada. La seccin
Screen tambin requiere la subseccin
Display, con al menos una entrada en
ella (vase ms abajo).
Una vez configuradas las cosas bsi-
cas, tendremos que consultar tanto la
documentacin de Xorg como cual-
quier otra informacin que se propor-
cion con nuestro hardware. Tanto la
pgina man de Xorg [2] como el sitio
web de Xorg nos ofrecen una lista
completa de todos los campos soporta-
dos.
La dificultad principal de la edicin
de las secciones de hardware de
xorg.conf es que las descripciones de
algunos campos tienen poco sentido
para los no expertos. Muchos usuarios
no trendrn que preocuparse de este
problema, pero si somos uno de los
que desafortunadamente lo hacemos,
puede que tengamos que vernos expe-
rimentando con distintos campos y
combinaciones de campos o descomen-
tando las opciones dadas en el fichero
automticamente generado.
Automatizacin y Manual
En este artculo slo he hecho una
introduccin breve a xorg.conf. El hard-
ware disponible y las combinaciones de
hardware posibles son extensas y cam-
bian rpidamente. En consecuencia,
una descripcin completa de xorg.conf
sera al menos 10 veces ms larga que
este artculo. Dada esta complejidad,
podemos comprender porqu mucho
del trabajo de configuracin de nuestra
pantalla se ha automatizado. En el
pasado, la configuracin manual de
xorg.conf, o XFree86Conf era tan com-
pleja como la configuracin del fichero
config.sys en un viejo sistema DOS.
Sin embargo, como xorg.conf es un
fichero de texto plano, aquellos que
necesiten editarlo o sean bastante
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 inevitable-
mente ocurre de vez en cuando, necesi-
tamos muy poco para apaarnos.
Lnea de Comandos: Xorg.conf LINUX USER
77
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
Figura 7: Consulte la documentacin de los resmenes
de lo que controla cada opcin.
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.
Figura 5: En las secciones hardware de xorg.conf, puede
que deseemos cambiar los Identifiers a algo ms des-
criptivo que los predeterminados.
[1] XRandR:
https:// en. wikipedia. org/ wiki/ RandR
[2] Pgina man de Xorg:
http:// www. x. org/ releases/ X11R7. 7/
doc/ man/ man5/ xorg. conf. 5. xhtml
RECURSOS
Figura 4: Podemos configurar la profundidad de color y
la resolucin en la subseccin Display.
COMUNIDAD Konsultorio
78
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
VmSwap en algunos directorios de pro-
ceso.
La orden ps no tiene opciones especiales
para mostrar partes de un proceso que
actualmente reside en la memoria de inter-
cambio, pero se puede ver otra informa-
cin relativa a la memoria en la salida (Lis-
tado 2).
Desafortunadamente, el VSZ (tamao
virtual) menos el RSS (tamao residente en
memoria) de cada proceso no es el nmero
de kilobytes que se intercambia, porque la
memoria compartida con otros procesos,
bibliotecas y bferes especficos de proceso
tambin estn presentes en la suma del
tamao virtual.
Para una visualizacin en tiempo real de
la informacin por proceso relacionada con
swap, podemos utilizar top. La herra-
mienta no muestra esta informacin por
defecto. Despus de iniciar top en la con-
sola, utilizamos f para cambiar el formato y
luego ir al final hasta la opcin SWAP con
la flecha hacia abajo y seleccionar la
opcin con la tecla de espacio. Dejando el
men de opciones con q, se obtiene el
resultado que vemos en la Figura 1, donde
se muestra el intercambio en uso por cada
proceso en tiempo real.
zRam
Knoppix 7.0.4 usa una nueva carac-
terstica del ncleo llamada zRam,
la cual es especialmente til en mquinas
con cantidades pequeas de RAM. Podra
pero el valor es siempre 0 y el archivo no
existe en algunas distribuciones, como por
ejemplo SUSE.
Hay alguna manera de encontrar esta
informacin? Muchas gracias por la ayuda.
David
Es cierto que la mayor parte de la
informacin por proceso se
encuentra en los archivos dentro del direc-
torio /proc/ processnumber/ , que el ncleo
mantiene como un sistema de archivos
virtual, por lo que programas como ps
pueden obtener informacin sin tener que
pasar por ms operaciones complejas
como ioctl() o llamadas de zcalo para
consultar dispositivo o la informacin del
ncleo.
Dado que el ncleo ha estado sujeto a
frecuentes cambios en los ltimos dos
aos, algunas de las estructuras de directo-
rio virtual y de archivo en /proc han cam-
biado, por lo que la informacin que
encontramos en la web acerca de ncleo
2.6 puede no ser cierta para la serie del
ncleo 3.x. Tambin, si est o no est pre-
sente cierta informacin por proceso,
depende de los perfiles y de las opciones de
depuracin establecidas en el momento de
compilar el ncleo. Por lo tanto, la pre-
gunta tiene una respuesta en el nivel de
informacin del ncleo y otra a nivel de
aplicacin.
La cantidad de memoria de proceso que
reside en un rea swap, puede leerse, como
sugiere la informacin que has encontrado,
en la lnea que contiene
VmSwap en /proc/ process-
number/ status (Listado 1).
La informacin de la
memoria slo est pre-
sente para los programas
reales, no para hilos del
ncleo. Tal vez por eso no
se encuentra la lnea
EL
KONSULTORIO
DE KLAUS
Klaus Knopper es el creador de
Knoppix y co-fundador de la
LinuxTag Expo. En la actuali-
dad 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:
preguntas@linux-magazine.es
Swap
Hola, Klaus: Mi pregunta es acerca
de los procesos que ocupan la
memoria de intercambio. Cuando un sis-
tema Linux tiene ocupada la swap, no he
encontrado ninguna manera de descubrir
qu proceso lo est causando.
He estado buscando pero no he encon-
trado ninguna solucin que funcione
correctamente. Algunas personas dicen
que el valor del proceso que ocupa la
memoria de intercambio se puede encon-
trar 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),
01 $ cat /proc/1/status
02 Name: init
03 State: S (sleeping)
04 Tgid: 1
05 Pid: 1
06 PPid: 0
07 [...]
08 VmPeak: 2300 kB
09 VmSize: 2248 kB
10 VmRSS: 572 kB
11 VmData: 160 kB
12 VmStk: 136 kB
13 VmExe: 32 kB
14 VmLib: 1868 kB
15 VmPTE: 12 kB
16 VmSwap: 72 kB
Listado 1: Informacin de VmSwap
Konsultorio COMUNIDAD
79
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
determinada 192.168.1.1 y no puedo cam-
biar la configuracin. Nada.
Cmo puedo acceder al router que se ha
configurado como puente? A qu direc-
cin debo acceder? Antes de este pro-
blema, acceda a esta direccin con el
navegador o por SSH.
Gracias por la informacin. Luiz
En modo puente no se puede acce-
der al router a travs de una direc-
cin IP, de manera que ests bloqueado,
al menos en lo concerniente a los puertos
de red usuales. Sin embargo an hay
opciones para conseguir acceder al router
mientras el firmware siga operativo.
1. Arrancamos el equipo en modo a
prueba de fallos. Esto se realiza mante-
niendo pulsado el botn dispositivo
durante el arranque (es decir, justo despus
de conectar la corriente). Un parpadeo
rpido del LED es una indicacin de arran-
que correcto en el modo a prueba de fallos.
Seremos capaces de alcanzar el disposi-
tivo bajo la direccin predeterminada
192.168.1.1 de nuevo, pero dado que no
hay un servidor DHCP ejecutndose en
este modo, tendremos que configurar el
ordenador con una direccin IP, por ejem-
plo, 192.168.1.2 [1].
2. Usando un adaptador serie para acce-
der al dispositivo con un software de termi-
nal serie, como Minicom. Esto requiere
abrir la carcasa del router y hacer algunas
soldaduras o comprar un cable adaptador
serie (teniendo en cuenta la geometra
correcta de los pines y el voltaje) [2].
Esta frmula es, como
muchas cosas en Knoppix, sim-
plemente mi mejor estima-
cin personal y es el resultado
de pruebas en distintos ordena-
dores.
Dado que tenemos que hacer
algunas configuraciones antes
de la orden swapon real (definir el
tamao y crear la firma de swap), tener
simplemente una entrada /etc/ fstab podra
no ser suficiente. Por lo tanto, mantengo el
cdigo para zRam enteramente en /etc/
init.d/ knoppix-autoconfig. La activacin se
hace all con:
/sbin/mkswap /dev/zram0 U
>/dev/null 2>&1
/sbin/swapon -p 0 /dev/zram0 U
>/dev/null 2>&1
Con Priority 0, zRam tiene menos priori-
dad que la RAM real, lo que significa que
Linux no intentar poner inmediatamente
cualquier cosa en zRam hasta que se agote
la RAM. Pero an tiene una mayor priori-
dad que la predeterminada -1 para un
espacio de swap en el disco. Esta
configuracin es diferente de otros scripts
que se sugieren en Internet.
Haciendo cat /proc/ swaps se muestra el
uso real de zRam (Listado 4). En este ejem-
plo, hay presente otro espacio de intercam-
bio en la particin /dev/ sda2, que est sin
uso en favor de zRam.
Direccin del
Router
Estimado Klaus:
he comprado
un router TP-Link
WR841nd y he insta-
lado el software
OpenWrt. Lo he confi-
gurado como un
puente y todo funcio-
naba perfectamente
desde que aad el PC
como conexin cable-
ada. Pero ahora, no
puedo acceder al rou-
ter en la direccin pre-
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 ori-
ginal. Cuando se accede de nuevo a los
datos que residen en zRam, estos se des-
comprimen 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 necesi-
tar 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 nece-
sitemos ms de 4 GB adicional, por lo tanto
el punto de corte es a 4 GB.
01 Filename Type Size Used Priority
02 /dev/zRam0 partition 1455152 21108 0
03 /dev/sda2 partition 4016244 0 -1
Listado 4: Resultado de cat /proc/ swaps
01 local zrsize=$(awk /MemTotal/{print int($2 * 75 /
100); exit} /proc/meminfo)
02 let zrsize*=1024
03 if [ $zrsize -gt 0 ] 2>/dev/null; then
04 # Do we need > 4GB zRam if we already have > 4GB
real RAM? Probably not.
05 [ $zrsize -gt 4294967296 ] &&
zrsize=4294967296
06 echo $zrsize > /sys/block/zram0/disksize
07 ...
Listado 3: /etc/ init.d/ knoppix-autoconfig
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 ...
Listado 2: Salida de ps
[1] OpenWrt failsafe:
http:// wiki. openwrt. org/ doc/ howto/
generic. failsafe
[2] Consola serie OpenWrt:
http:// wiki. openwrt. org/ doc/ hardware/
port. serial
RECURSOS
Figura 1: Orden top mostrando el uso de swap en la penl-
tima columna.
COMUNIDAD La Perrera: Software Preinstalado
C
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 des-
montando viejos televisores y radios para
conseguir las piezas que necesitbamos para
disear y construir otras nuevas.
Estudibamos los fundamentos de las vl-
vulas (tubos para los americanos) y
aprendamos cmo construir puertas lgicas
con rels, vlvulas y unas cosas relativa-
mente 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 tra-
taba 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 pre-
sentaban 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 instruccio-
nes no coincidan con el esquema del cir-
cuito, que tampoco lo haca con el circuito
impreso. Entonces, mi experiencia en inge-
niera electrnica comenz a dar sus frutos.
Poda ver el esquema de conexiones, com-
probar si era correcto y averiguar qu parte
de las instrucciones estaban mal. Mi expe-
riencia tambin me ayud cuando el hard-
ware (despus de mucho soldar) no funcio-
naba. Poda rastrear los pro-
blemas armados con
tan slo un volt-
metro a vlvulas
[2] (por desgra-
cia, he puesto
otra vez en evi-
dencia mi
edad, ya que
todas estas cosas
ahora estn tran-
sistorizadas 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 lla-
mado COSMAC ELF [3]. Los esquemas se
publicaron en la antigua revista Popular Elec-
tronics. 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 televi-
sin analgica como monitor.
Por aquellos tiempos, me interes en los
circuitos integrados TTL (lgica transistor-
transistor) 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 con-
densador, 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 pro-
barlos e inyectar las seales en ellos. Sin
embargo, segua siendo divertido construir
circuitos electrnicos.
Hace un tiempo, escrib acerca de la plata-
forma 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] faci-
litan 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 opera-
tivos. Las modificaciones posteriores a la tar-
jeta 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 pre-
cio superior del BeagleBoard a 149$). Por
supuesto, el BeagleBoard tiene ms disposi-
tivos hardware para jugar que el BEAGLE-
BONE 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 siste-
mas de Beagle, pero en otros aspectos lo es
ms (por ejemplo, el motor GPU ). Para cada
uno de estos sistemas la apertura del pro-
yecto permite que las personas experimen-
ten 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 per-
mite a los patrocinadores educativos com-
prar unas cuantas unidades para las escue-
las 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 oportu-
nidad de aprender cmo controlar dispositi-
vos mecnicos reales en vez de usar los
ordenadores slo para jugar.
ORDENADORES PEQUEINES
Una seleccin de tarjetas ultra pequeas permite que los futuros desarrolladores aprendan cmo crear y pro-
gramar ordenadores. POR JON MADDOG HALL
[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/
RECURSOS
80
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
EVENTOS
81
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
EVENTOS
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 publi-
cados 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 escrupu -
losamente 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
Calendario de Eventos
Espaa e Hispanoamrica
Evento Fecha Ciudad / Regin Sitio Web
FirefoxOS AppDay 01 Jun Valencia, Espaa www.mozilla-hispano.org
Akademy-es 2013 11 - 12 Jul Bilbao, Espaa www.kde-espana.es/akademy-es2013
Akademy 2013 13 - 19 Jul Bilbao, Espaa akademy2013.kde.org
Resto del Mundo
Evento Fecha Ciudad / Regin Sitio Web
International PHP Conference 02 - 05 Jun Berln, Alemania phpconference.com
Berlin Buzzwords 03 - 04 Jun Berln, Alemania berlinbuzzwords.de
Secure Linux Administration Conference 06 - 07 Jun Berln, Alemania www.heinlein-support.de/node/528
Internat. Supercomputing Conference 16 - 20 Jun Berln, Alemania www.isc-events.com/ct.php?id=51
Europython 2013 01 - 07 Jul Florencia, Italia ep2013.europython.eu
openSUSE Conference 18 - 22 Jul Salnica, Grecia conference.opensuse.org
Guadec 2013 01 - 08 Ago Brno, Rep. Checa guadec.org
Debconf13 11 - 18 Ago Vaumarcus, Suiza debconf13.debconf.org
USENIX Security 14 - 16 Ago Washington, EE.UU. usenix.org/conference/usenixsecurity13
Maker Faire Europe 03 - 06 Oct Roma, Italia www.makerfairerome.eu
LinuxCon Europe 21 - 23 Oct Edimburgo, R.U. events.linuxfoundation.org
Linux Kernel Summit 23 - 25 Oct Edimburgo, R.U. events.linuxfoundation.org
DebConf13 27 - 28 Oct Vaumarcus, Suiza wiki.debconf.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
Akademy
2013
Fecha: 13 - 19 Jul.
Lugar: Bilbao, Espaa
Web: akademy2013.kde.org
PRXIMO NMERO PRXIMO NMERO
Y
O
I
C
H
I

S
H
I
M
I
Z
U
,

1
2
3
R
F
Seguridad
A LA VENTA: JUNIO 2013
82
Nmero 93 WWW. L I NUX- MAGAZI NE. ES
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 pue-
dan poner en peligro la integridad de los datos. El mes que
viene examinamos la seguridad a varios niveles, desde el ker-
nel 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/

También podría gustarte